Commit Graph
72 Commits
Author SHA1 Message Date
David KayaandCopilot 4b7409368f feat: add tool auto-approval UX in pattern editor and activity panel
- PatternEditor: tool auto-approval defaults section with toggles per tool
- ActivityPanel: per-session override section with inherited/custom state and reset action
- ChatPane: surface toolName in approval banner and queued approval list
- Disable controls while running; scratchpad non-interactive explanation
- Use listApprovalToolDefinitions() exclusively for tool identity

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 20:14:14 +01:00
David KayaandCopilot d5c538eed9 feat: add tool-specific approval overrides
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 20:02:29 +01:00
David KayaandCopilot f896fa6442 feat: add approval queue UX with position labels, queue preview, and count badges
- ChatPane: show 'Approval 1 of N' label, queued-approvals accordion preview,
  queue count badge in header, and hint text for queue advancement
- Sidebar: show '+N queued' count next to 'Awaiting approval' badge
- ActivityPanel: show total approval count in header badge

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 19:56:47 +01:00
David KayaandCopilot c6e20da8db fix: queue session approvals
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 19:56:21 +01:00
David KayaandCopilot f54cbdb6b1 feat: add approval checkpoint UX across renderer
- ChatPane: approval banner with approve/reject, final-response preview, error handling
- PatternEditor: approval checkpoints section with toggles and agent scope selector
- Sidebar: amber awaiting-approval badge replaces running indicator when pending
- ActivityPanel: shield icon approval badge in header
- RunTimeline: approval kind badge, detail text, status-aware colors

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 19:52:23 +01:00
David KayaandCopilot 2aa8d73b2d feat: add approval checkpoints backend
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 19:48:58 +01:00
David KayaandCopilot 75934a161a fix: sync title bar overlay colors with app theme
The Windows title bar overlay (minimize/maximize/close buttons) was
hardcoded to dark colors and did not update when switching themes.

- Add titleBarTheme helper that maps AppearanceTheme to overlay and
  background colors, using nativeTheme for the system preference
- Call applyTitleBarTheme from the setTheme IPC handler so the overlay
  updates immediately on theme change
- Apply persisted theme on startup so the overlay matches from launch

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 19:31:49 +01:00
David KayaandCopilot 973e5eb25c feat: implement light mode with settings toggle
Add appearance theme support (dark/light/system) using CSS custom
property overrides. In light mode the Tailwind zinc scale is inverted
and semantic surface/border tokens are swapped, so all existing
utility classes pick up the new palette automatically.

- Add AppearanceTheme type and theme field to WorkspaceSettings
- Add setTheme IPC channel wiring (contracts, preload, handler, service)
- Add [data-theme='light'] CSS overrides for zinc scale, surface tokens,
  scrollbar, and markdown prose colours
- Add Appearance section to SettingsPanel with radio-button theme picker
- Apply data-theme attribute on document root via useEffect in App.tsx,
  with matchMedia listener for the system option

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 19:28:48 +01:00
David KayaandCopilot 33c4cee0b4 fix: normalize oversized font sizes across the UI
Tighten font sizes to match the app's compact design language:

- WelcomePane: heading from text-xl (20px) to text-base (16px),
  buttons and descriptions from text-sm (14px) to text-[13px]
- SettingsPanel: all section headings from text-sm to text-[13px]
- NewSessionModal: title from text-sm to text-[13px]
- PatternEditor: title from text-sm to text-[13px]
- ChatPane: empty-state prompt from text-sm to text-[13px]
- Markdown prose: h1 from 1.25rem to 1.125rem, h2 from 1.125rem
  to 1rem, h3 from 1rem to 0.9375rem

Keeps text-sm only for the app brand name, loading state, and error
headings where larger text is intentional.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 19:24:08 +01:00
David KayaandCopilot ff5fcb3a65 fix: exclude scratchpad from the new-session modal
The modal is now only used for project sessions, so filter out the
scratchpad project from the dropdown and remove scratchpad-specific
hints and pattern restrictions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 19:14:35 +01:00
David KayaandCopilot 72e028c617 fix: let the new-session button replace the empty state text
When no sessions exist and a creation button is available, show only
the button — it already communicates emptiness and provides the CTA.
The old 'No sessions yet' text is kept as fallback only when no button
is present.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 19:07:02 +01:00
David KayaandCopilot 30733ae59a feat: replace top-level New Session button with contextual buttons
Remove the single New Session button from the sidebar top and replace it
with contextual creation buttons scoped to each section:

- Scratchpad section: 'New Scratchpad' button that auto-creates a
  scratchpad session with the first available single-agent pattern
- Project groups: 'New Session' button that opens the pattern picker
  modal pre-scoped to that project
- WelcomePane: primary action updated to 'New Scratchpad'

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 19:05:50 +01:00
David KayaandCopilot a79787735a feat: use app icon as sidebar logo
Replace the Sparkles icon gradient placeholder with the actual app
icon from assets/icons/icon.png. Import it as a Vite asset so it
works in both dev and production builds.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 00:58:04 +01:00
David KayaandCopilot ebf5923530 fix: center header content with symmetric padding
Use pt-3 pb-3 (12px each) for symmetric vertical padding so content
is visually centered in every header bar.

To keep headers draggable, each header container gets the drag-region
class and all interactive elements (buttons) get the no-drag class.
The global fallback drag strip is reduced to h-3.
Title bar overlay reduced from 40px to 32px (standard Windows size).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 00:54:11 +01:00
David KayaandCopilot 9964a7fd1a fix: move useCallback before early return to fix hooks ordering
The jumpToMessage useCallback was placed after a conditional return,
violating React's Rules of Hooks and crashing the app on render.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 00:23:30 +01:00
David KayaandCopilot 0d3f1cbd50 feat: add rich run timeline UI with collapsible cards and jump-to-message
- Add RunTimeline component with vertical event timeline, collapsible run
  cards, per-kind icons, status animations, and agent lane badges
- Add runTimelineFormatting helpers for timestamps, durations, labels,
  content truncation, and consecutive thinking-event collapsing
- Integrate Timeline section into ActivityPanel between Agents and Tools
- Wire jump-to-message in App.tsx using DOM data-message-id attributes
  on ChatPane messages with smooth scroll and temporary highlight ring
- Add comprehensive unit tests for all formatting helpers
- Update HANDOVER.md to document completed frontend implementation

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 00:17:14 +01:00
David KayaandCopilot b742941559 feat: add rich run timeline backend
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-24 00:04:47 +01:00
David KayaandCopilot 082af36255 fix: stabilize streamed message rendering
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 23:49:12 +01:00
David KayaandCopilot 8caa2d2eb4 refactor: group agents and tools into distinct sections in ActivityPanel
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 23:37:32 +01:00
David KayaandCopilot b88299f962 fix: improve streaming message merging
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 23:31:06 +01:00
David KayaandCopilot 794722673b fix: strengthen group chat collaboration guidance
Audit confirmed that single, sequential, concurrent, and handoff are mapped to distinct workflow builders as intended. Group-chat was also using the correct round-robin manager, but the agents only had one-shot role prompts, so the reviewer could behave like a fresh assistant instead of refining the draft in progress. Add explicit runtime guidance for group-chat participants plus clearer built-in Writer/Reviewer instructions and regression coverage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 23:22:09 +01:00
David KayaandCopilot cf699b2442 fix: stabilize TypeScript LSP startup
Seed new TypeScript LSP profiles with --stdio, validate that shared profiles keep the required flag, auto-add it for existing profiles in the sidecar runtime, and include recent stderr when a language server dies before completing a request. Add shared and sidecar regression coverage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 23:16:48 +01:00
David KayaandCopilot 9180ba8917 refactor: align tooling editor styling with PatternEditor conventions
- Match input border/bg to PatternEditor standard (border-zinc-700 bg-zinc-900)
- Tone down form labels from zinc-300 to zinc-400
- Use borderless icon+text Delete button matching PatternEditor
- Group editor fields into named sections with uppercase headers
- Show live entity name in editor title bar instead of generic label
- Shorten header subtitle to a brief role description
- Use AlertCircle icon in validation banners matching PatternEditor style
- Reduce textarea rows from 4 to 3 for tighter layout
- Match body spacing to PatternEditor (space-y-8, px-6 py-5)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 23:08:15 +01:00
David KayaandCopilot 9c22ac1475 refactor: polish MCP/LSP settings and activity panel UI
- Use indigo accent consistently instead of blue for toggle states
- Replace bulky toggle cards with compact toggle switches in Activity panel
- Fix input focus states to use app-standard indigo glow
- Use semantic nav icons: Server for MCP, Code for LSP
- Style Save button with indigo primary, Delete with subtle destructive hover
- Add Info icon to callout hints
- Center empty states, clean up list item detail text
- Fix indentation in App.tsx settings overlay wiring

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 23:03:42 +01:00
David KayaandCopilot efa5c44e07 feat: add MCP and LSP tooling support
Add global MCP/LSP settings, per-session Activity toggles, sidecar runtime integration, tests, and documentation updates.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 22:51:03 +01:00
David KayaandCopilot 50a8e5dfbe refactor: rename Kopaya to Eryx
Rename the product, runtime surfaces, sidecar projects, docs, tests, and packaging outputs from Kopaya to Eryx across the repository.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 22:01:23 +01:00
David KayaandCopilot 4719ebb9d5 chore: refresh app icons
Update the Electron icon wiring to use the new assets/icons layout, remove the old app-icon files, and keep Windows packaging pointed at the new platform-specific ico.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 21:40:08 +01:00
David KayaandCopilot da72e49f2c feat: add Electron app icon
Move the root logo into app assets, wire the Electron main window to use the branded icon, and stamp the packaged Windows executable icon with rcedit.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 21:15:40 +01:00
David KayaandCopilot c888c9fb9b feat: surface git context in sidebar and chat header
- Add GitContextBadge to sidebar ProjectGroup showing branch name,
  dirty indicator, and ahead/behind counts for real projects
- Show git-missing and error states with subtle warning badges
- Add hover-reveal refresh button per project to re-scan git status
- Show branch/dirty/ahead/behind inline in ChatPane header subtitle
- Wire refreshProjectGitContext callback from App through Sidebar

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 20:16:22 +01:00
David KayaandCopilot ab4e9bcea9 feat: add git-aware project context
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 20:11:46 +01:00
David KayaandCopilot 32a6ecfb9a refactor: remove sidebar filter chips for now
Filters will be redesigned later. Search remains functional.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 22:11:14 +01:00
David KayaandCopilot 3966ddbb0d refactor: restyle filter chips as minimal dot toggles
Replace rounded-full pill buttons with subtle text toggles that use
a small colored dot indicator when active. Blends better with the
sidebar aesthetic.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 21:01:03 +01:00
David KayaandCopilot 1d649da5d4 feat: add session library UX with search, filters, actions, and favorites
- Sidebar: search input with live results via querySessions
- Sidebar: filter chips for Running, Error, Pinned, Archived
- Sidebar: per-session context menu with Rename, Duplicate, Pin, Archive
- Sidebar: inline rename editing with Enter/Escape/blur handling
- Sidebar: pinned sessions sort first, archived sessions hidden by default
- NewSessionModal: favorite patterns with star toggle, favorites sort first

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 19:50:49 +01:00
David KayaandCopilot 4a229a1f88 feat: add session library backend APIs
Add persisted session and pattern metadata for pinning, archiving, manual titles, and favorite patterns. Expose backend query and mutation APIs for session library features, and cover the shared helpers with tests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 19:33:20 +01:00
David KayaandCopilot 585f2740a5 fix: align chat and activity panel header borders
Reduce chat header padding and tighten the title/subtitle line height so the border-bottom lines up with the activity side panel header.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 18:51:43 +01:00
David KayaandCopilot 91984e9dca refactor: remove unneeded sidecar refresh restart logic
Drop the refresh-time sidecar restart workaround and its helper/tests now that the verified fix is in the sidecar subprocess launcher itself. This keeps the runtime simpler and leaves only the changes required for correct Copilot version detection.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 18:09:35 +01:00
David KayaandCopilot 312ca0bf17 fix: scope sidecar exit handling to the active process
Wait for an intentional sidecar dispose to exit before refreshing capabilities, and ignore exit events from stale sidecar processes. This prevents a refresh from killing the old process and then having that old exit reject the new capabilities request with an unexpected sidecar exit error.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 16:44:40 +01:00
David KayaandCopilot 9cded003b5 fix: restart idle sidecar on capability refresh
Force-refreshing sidecar capabilities now disposes the idle sidecar process before re-querying capabilities, so Kopaya can pick up backend sidecar changes and refreshed Copilot connection state without a full app restart.

Add a small helper and regression tests for the refresh decision.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 15:29:59 +01:00
David KayaandCopilot b73f5dfb41 feat: show account identity, version badge, and org pills in settings
Extend CopilotStatusCard to surface the new backend diagnostics:
- Account identity row (login + host) when authenticated
- Organization pills with +N overflow
- CLI version freshness badge (latest/outdated/unknown)
- Latest-version hint in expandable details when outdated
- Mark version/account roadmap items as complete

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 15:19:24 +01:00
David KayaandCopilot bf5aa7ce57 feat: add Copilot version and account diagnostics
- report Copilot CLI version freshness as latest, outdated, or unknown
- expose active Copilot account metadata from the SDK auth status
- add best-effort GitHub organization context when gh is available
- document the frontend follow-up in HANDOVER.md

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 15:10:10 +01:00
David KayaandCopilot e97d00e362 refactor: group settings nav into AI Provider and Orchestration sections
Adds section headers to the left sidebar navigation so future
settings items slot naturally under the right category.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 14:00:46 +01:00
David KayaandCopilot cc882d2f09 refactor: redesign settings page with sidebar navigation
- Replace single-scroll settings with two-column layout:
  left sidebar nav (Connection, Patterns) + content area
- Consistent back arrow (←) on the left for all navigation levels:
  settings → app, pattern editor → settings list
- Fix CopilotStatusCard path overflow: use break-all for long
  Windows paths, structured detail sections with proper wrapping
- Simplify status card: cleaner status dot indicator, separated
  detail sections with labeled fields and proper text overflow

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 13:56:34 +01:00
David KayaandCopilot c237b9e82d feat: add Copilot connection status card in settings
- New CopilotStatusCard component with status-specific visuals for
  ready, cli-missing, auth-required, and error states
- Expandable technical details section with CLI path and timestamps
- Refresh button wired to refreshSidecarCapabilities IPC
- Integrated into SettingsPanel above orchestration patterns

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 13:44:10 +01:00
David KayaandCopilot d68b1b99f3 feat: add Copilot connection diagnostics
Add backend support for Copilot connection and account-status UX without introducing raw provider credential management.

This change extends sidecar capabilities with explicit connection diagnostics, adds a refreshable capabilities IPC path, classifies common Copilot CLI failure modes, and includes a frontend handover document describing the new payload and expected UI states.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 12:58:40 +01:00
David KayaandCopilot be9a8f6d7f feat: restore compact inline pills for scratchpad model picker
Re-apply the inline pill-button design for the scratchpad model and
thinking effort selectors that was overwritten by a concurrent agent.

- InlineModelPill: compact pill with provider icon, upward-opening
  grouped dropdown with provider headers and tier badges; respects
  the new availableModels prop for live model availability
- InlineThinkingPill: compact Sparkles pill with upward-opening
  effort selector; shows N/A when model has no reasoning support
  (respects supportedEfforts from per-model capabilities)
- Removes the large bordered card wrapper, replaces with subtle
  inline row of pills sitting just above the composer textarea
- Preserves all new logic from the model-availability agent:
  availableModels prop, resolveReasoningEffort, getSupportedEfforts

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 11:46:41 +01:00
David KayaandCopilot 6e623b7bd6 fix: use live copilot model availability
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 11:07:43 +01:00
David KayaandCopilot 4e4f6ebedb feat: redesign scratchpad config as compact inline pills
Replace the large bordered card with model/thinking dropdowns with
subtle inline pill-buttons that sit just above the composer textarea.

- Create InlineModelPill: compact pill showing provider icon + model
  name with upward-opening grouped dropdown (same model catalog)
- Create InlineThinkingPill: compact pill with Sparkles icon and
  effort label with upward-opening dropdown
- Both pills use minimal border styling that highlights on open/hover
- Dropdowns open upward (bottom-full) so they don't get clipped
- Add loading spinner next to pills while config is saving
- Remove the large 'Applies to future replies' card wrapper

Also fixes 'onUpdateScratchpadConfig is not a function' error:
- Make onUpdateScratchpadConfig optional in ChatPaneProps (only
  relevant for scratchpad sessions, not regular project sessions)
- Guard the call with !onUpdateScratchpadConfig early return

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 10:21:44 +01:00
David KayaandCopilot fd0256d62f feat: add scratchpad chat model controls
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 10:20:17 +01:00
David KayaandCopilot 1b41cbd1e0 feat: add scratchpad chat sessions
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 10:11:42 +01:00
David KayaandCopilot 2f90a19736 feat: label pending and final agent messages
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 09:46:13 +01:00