Commit Graph
71 Commits
Author SHA1 Message Date
jpmschweitzerandClaude Opus 4.8 da61af810d decide D-87 (output/log dock) + resolve Q-28; file T-258 (terminal home)
D-87 — T-54's "output and log panel" is a bottom output dock: read-only,
two tabs (Output = the Logger stream, filterable + auto-scroll; Problems =
diagnostics moved out of the sidebar). Toggled by a single status-bar widget
that replaces the app-status indicator (merged health+log: green check when
clean, warn/error counts otherwise) via click or Cmd/Ctrl+J. Needs a bounded
ring sink on the Logger (no history today). Amends D-47: the dock is the one
surface allowed to push Claude up, capped so Claude stays >=50%.

Resolves Q-28 by splitting on interaction: read-only output (logs/problems)
goes in the dock; the terminal does NOT — it stays a first-class editor-pane
surface, tracked by new T-258 (swap-vs-split, with Q-27). Refines T-54.

Wireframe under docs/design/wireframes/output-dock/.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 22:57:18 +02:00
jpmschweitzerandClaude Opus 4.8 d67c2c38d8 frame0 skill: add a "show it inline" workflow step
After exporting a wireframe PNG, Read it back so it renders in the
conversation — the user is designing with you and should see the result
without opening Frame0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 22:16:05 +02:00
jpmschweitzerandClaude Opus 4.8 cba41a7e3b close T-256 and the T-208 "give Claude hands" initiative
All epics done: CLI on PATH (T-209), bootstrap (T-214), workspace
observability (T-218), pull-based events (T-222), plus the MCP surface
(T-225) and dogfood governance (T-224, D-83).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 21:53:16 +02:00
jpmschweitzerandClaude Opus 4.8 51cfa15c78 distinguish a dev-tree clide from a packaged install (T-256)
CliInstaller.inspect() gains a devTree state: when `clide` on PATH resolves
to a dev-tree build artifact (native/<plat>/clide, the Makefile's
CLIDE_CLI_BIN output) it's classified separately from a packaged install
rather than silently treated as "installed". needsInstall stays false for a
dev build (it's intentional on a checkout, not a reinstall prompt), and the
launch-time check surfaces it as an info note. install() flags fromDevTree +
notes it in the result message when the copied source is a dev build.

Closes the last open child of the T-208 "give Claude hands" initiative.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 21:53:01 +02:00
jpmschweitzerandClaude Opus 4.8 23898c758e close T-225 (clide command surface over MCP)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 21:37:53 +02:00
jpmschweitzerandClaude Opus 4.8 0b72e65eca close T-223 + epic T-222 (pull-based event observation)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 21:24:52 +02:00
jpmschweitzerandClaude Opus 4.8 1fefd26ef0 activate T-223 + T-225; close stale T-23
T-223 (clide events --since) and T-225 (MCP surface) picked up — both
refined and unblocked by D-85/D-86. T-23 (command palette keybinding) was
ready but already complete per its body; marked done.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 21:06:38 +02:00
jpmschweitzerandClaude Opus 4.8 a4b385e3d0 close T-257 (Esc returns to Vim normal mode)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 20:58:29 +02:00
jpmschweitzerandClaude Opus 4.8 635ae04dae fix Esc closing the editor instead of returning to Vim normal mode
panel.focusMode.exit is bound to Escape in the contributions layer, which
outranks the active preset. In Vim insert/visual mode that shadowed the
vim preset's `escape → vim.mode.normal` binding, so Esc closed the editor
instead of returning to normal mode.

Add an optional when-clause to a CommandContribution's defaultBinding
(plumbed through to KeymapService.registerCommandBinding, which already
accepts one) and guard focusMode.exit's escape with
`!vim.insert && !vim.visual` — symmetric with vim.yaml's vim.mode.normal.
Esc still exits focus / closes the editor in normal and non-Vim modes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 20:58:14 +02:00
dehlakandClaude 79162818e4 add bug ticket T-257 for Esc closing pane in Vim mode
Pressing Esc to leave insert/visual mode closes the active file/pane
instead of returning to Vim normal mode. The unconditional
escape->dismiss binding in default.yaml shadows the when-scoped
escape->vim.mode.normal binding, contradicting T-207's contract.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-06 16:06:29 +02:00
jpmschweitzerandClaude Opus 4.8 b7f3731394 decide D-85 (event bus delivery) + D-86 (MCP tool surface); resolve Q-2/3/32/33
D-85 — event bus delivery semantics, resolving Q-2 + Q-3: bounded
per-subscriber ring buffer with drop-oldest back-pressure (producer never
blocks, subscribers never killed) and a gap marker so a pull reader detects
loss; in-memory cursor retention serves `clide events --since`; if
persistence is ever needed it is bus-owned, not a subscriber-subsystem —
reversing ADR 0006's unreasoned open-questions footer.

D-86 — MCP tool surface, resolving Q-32: expose the full mcp__clide__*
namespace but generate tools/list from the co-registered command registry
(D-74) that already feeds CLI + palette, so breadth costs no second
maintained surface; per-command MCP opt-out for poor-fit verbs.

Q-33 drift-fixed: was already closed by D-73 (SSE only) but the index still
listed it open; re-confirmed SSE-only, stdio/WS not added.

Refines T-223 (cursor pull events) and T-225 (MCP reachable) — both now
unblocked and scoped. Index regenerated by pql decisions sync.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 12:25:24 +02:00
jpmschweitzerandClaude Opus 4.8 0c248b0eab file T-256: flag dev-tree vs production clide path for the install affordance
Captured during T-212. The install affordance and `make run` resolve the
dev-tree C client; on a dev machine `clide` on PATH should prefer the
properly-installed production build. Low priority, no user-facing breakage.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 12:07:43 +02:00
jpmschweitzerandClaude Opus 4.8 562c17c06d add in-app "Install clide command in PATH" affordance (T-212)
A command-palette / `clide` CLI verb (`clide.installCli`) copies the
bundled C client into ~/.local/bin, VS Code "Install code command" style,
so a user who runs the app without `make install` can still reach the CLI
from a shell. On launch the app detects when `clide` is missing from PATH
or resolves to a stale symlink into the Flutter GUI bundle (the dogfood
footgun: a bare `clide` launched a second app instead of querying the
socket) and notifies with a pointer to the command. `make build` now ships
the C client inside the app bundle so the affordance can self-install from
it; `make run` points it at the dev-tree client via CLIDE_CLI_BIN.

Detection and the copy live in the Flutter-free CliInstaller
(kernel/src/cli_install.dart) so they run under unit tests without a real
install.

Closes epic T-209 (ship the clide CLI on PATH).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 12:05:41 +02:00
jpmschweitzerandClaude Opus 4.8 02a19d10f5 file T-255: animate the running… turn indicator
Persist the pql changelog: T-255 (animate the in-flight "running…"
indicator with rotating Claude-CLI-style status verbs), alongside the
other board edits already pending in the changelog (T-253, T-254, and
T-212/T-233 status changes).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 11:59:32 +02:00
jpmschweitzerandClaude Opus 4.8 b64028ecf9 reveal non-Claude workspace tabs in a split above Claude
A live test of ui open diff surfaced that the workspace slot hardcoded
the Claude pane (primary = claude ?? active), so activating diff.view
flipped the registry but never rendered. Generalise _WorkspaceSlot: when
a non-Claude, non-editor workspace tab is the active one, reveal it in
the split region above Claude with a close affordance back to full-Claude
— so clide ui open diff actually shows the diff alongside the
conversation. Fixes the reveal for terminal/team-chat tabs too.

Closes T-233.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 11:20:02 +02:00
jpmschweitzerandClaude Opus 4.8 870b773381 open a file in the diff panel via clide ui open diff
Adds diff as a fourth ui.open target. The diff extension now retains an
app-scoped DiffController and subscribes to its builtin.diff/selection
channel: a selection reveals the diff tab and focuses the file, which
the view scrolls into view and highlights. Retaining the controller in
the extension (not the view) lets a focus survive the tab being
revealed/remounted, mirroring the ReaderNav viewers.

Closes T-233.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 10:50:12 +02:00
jpmschweitzerandClaude Opus 4.8 ba230d4139 revert CLAUDE.md changelog note — now lives in the pql skill
The pql skill (installed by pql, shared across all repos) is the right
home for guidance about the .pql/changelog auto-commit, not this repo's
CLAUDE.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 10:44:42 +02:00
jpmschweitzerandClaude Opus 4.8 b05f6617d3 file T-252 (lightbox) and close T-248 review
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 10:31:29 +02:00
jpmschweitzerandClaude Opus 4.8 b446bd024d add image-viewer card + clide image show verb
Drives an image inline into the Claude conversation log over the same
bus-publish path as ui.toast/ui.open, keeping the dispatcher handler
Flutter-free. The card is display-only per D-78; the verb registers a
CommandSchema so it surfaces in clide capabilities for T-248 discovery.

Closes T-249.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 10:22:38 +02:00
jpmschweitzerandClaude 3cf77f40ed make the clide command surface self-describing
Parity guarantees a verb exists for every UI action, but a verb is
unreachable if nothing advertises it. Add `clide capabilities` — it
reflects the live dispatcher registry to JSON (subsystem, verb, arg
schema) so the surface is discoverable and can't drift from what
dispatches. A thin /clide skill points Claude at it rather than
hard-coding a verb list, so new panels become reachable the moment
they register.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-06 09:57:16 +02:00
jpmschweitzerandClaude 13187d3994 reflect permission-mode changes in the status line
setPermissionMode only wrote the control_request; the mode was never
folded back into the session status, so the badge and Ctrl/Cmd+M looked
dead. Optimistically merge + emit the new mode immediately; the next
system/init still reconciles.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-06 09:49:08 +02:00
jpmschweitzerandClaude 0e85f7f5e7 fuzzy-match + recency-rank the command palette
Completes the command-palette acceptance: the filter is now a
subsequence fuzzy match (was substring), and recently-invoked commands
float to the top and break score ties. The subsequence matcher is
extracted to a shared fuzzy helper so the palette and quick-open file
finder use one implementation instead of a private copy each.

Pinned commands and cross-session recency persistence are left as a
follow-up (they need a pin affordance + settings storage).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-06 09:40:56 +02:00
jpmschweitzerandClaude 968c3dbfa8 promote the Ctrl+K theme picker into a Settings modal
The status-bar popover already handles quick theme switching, so a
separate theme-only modal was redundant. Repurpose it as a general
Settings surface whose first (currently only) section is Appearance:
base themes, sorted, with a High-contrast toggle for -hc siblings,
reusing the theme_families helpers shared with the popover.

Command id stays theme.pick (the welcome theme-link and tests
reference it); only the title and the view it opens change.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-06 09:32:20 +02:00
jpmschweitzerandClaude ffd22069a7 mark T-239 done in plan changelog
Ticket was fixed and pushed earlier but left in_progress; persist the
done transition that only lived in the local pql.db.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-06 08:48:22 +02:00
jpmschweitzerandClaude Opus 4.8 cbea0b4fcd file tickets: compaction-progress UI + pane-list subject + socket hygiene
Persist three new tickets to the planning changelog:
- T-244: Claude pane shows no UI/status-bar progress while compacting (D-77)
- T-246: pane list omits the loaded subject; CLI can't tell which
  ticket/decision/file a detail pane shows (D-6)
- T-247: clide CLI ignores CLIDE_SOCK and auto-discovers; stale sockets
  orphaned in the runtime dir (D-6)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:31:19 +02:00
jpmschweitzer 55ed3013e1 index D-84 in governance README 2026-06-05 23:13:30 +02:00
jpmschweitzer c2dc22be78 decide diff view placement: editor-mode above Claude (D-84, closes T-42; impl tracked in T-243) 2026-06-05 17:17:53 +02:00
jpmschweitzer 51ae7c61f1 quiet test reporter to failures-only + front-load coverage in push-check (T-242) 2026-06-05 15:24:11 +02:00
jpmschweitzer 59808179a1 note ultrawide layout + testing in ui-design skill (T-239/T-241) 2026-06-05 12:03:29 +02:00
jpmschweitzer eda304f544 lay out status bar as explicit left/right groups (T-239) 2026-06-05 11:56:38 +02:00
jpmschweitzer 5dc5ec744f plan: refine T-240 with CLI first-char digit pattern 2026-06-05 11:41:16 +02:00
jpmschweitzer a712c26126 plan: file T-240 (number-key shortcuts for prompt buttons) 2026-06-05 11:39:01 +02:00
Jeroen SchweitzerandClaude eecb95f464 close T-65, T-182, T-189, T-190, T-191 as done
These five were stuck in_progress locally while the source machine had
already closed them, but that machine's close never reached the
git-tracked changelog (no done-transition in .pql/changelog/, all remotes
in sync) — likely a write-through/hook gap in its pql bookkeeping.

Closed here after confirming the work is genuinely complete: each
ticket's acceptance criteria were verified against the code and the
backing tests run green (130 passing across the vim preset, Claude
sidebar sub-tabs, and the reader back/forward, pin, and edit-pencil
suites).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-05 10:52:17 +02:00
jpmschweitzer fcca2b48d9 plan: file T-239 (status-bar right-alignment bug) 2026-06-03 23:42:17 +02:00
jpmschweitzerandClaude Opus 4.8 d4a295b38d plan: close T-237 (theme-picker polish)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 23:31:15 +02:00
jpmschweitzerandClaude Opus 4.8 5fcc42bd8c tidy the theme switcher popover (T-237)
Per demo feedback on the T-234 status-bar popover: collapse the -hc
theme rows into a single 'High contrast' toggle at the top (applies the
chosen base theme's -hc sibling live, falling back to the base when none
exists); list base themes only, sorted by display name; widen 240->280
and ellipsize rows so 'Catppuccin Mocha' no longer wraps; swap the swatch
dot for the Phosphor palette icon; lowercase the bar label to match the
all-lowercase status bar (proper case kept in the a11y label).

New pure theme_families helpers (base/sibling/resolve), unit-tested.
Modal picker_view consistency + the status-bar right-alignment remain on
T-237.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 22:46:17 +02:00
jpmschweitzerandClaude Opus 4.8 fb29254851 fold Claude tool activity into a collapsible card (T-230)
A heavy agent turn buried user/Claude prose under a wall of tool-call/
result rows. A pure grouping pass (activity_cluster.dart) folds runs of
consecutive meta items into clusters; the conversation view renders each
cluster as one collapsible activity card — collapsed by default with a
live one-line ticker of the latest step + a step count, click/Enter to
expand the steps in order. Sticky items (user messages, Claude prose,
and FAILED results) render first-class and seal the cluster.

Fold level is switchable (FoldLevel none/tools/thinking/everything);
default L1 folds tool calls+results while keeping diffs and thinking
first-class. The grouping logic is fully unit-tested; the card is
keyboard + screen-reader accessible. Persisting the level via a user
setting + control is the tracked follow-up T-235.

Closes T-230 (under T-132).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 17:19:10 +02:00
jpmschweitzerandClaude Opus 4.8 b4bbbc8a62 add a status-bar theme switcher with live popover (T-234)
A far-right status-bar control shows the current theme and opens an
anchored popover (not the full-screen modal) to switch live: click or
keyboard (arrow/Enter to pick, Esc/tap-away to dismiss without change).
Reuses ThemeController.available/select; the theme.pick palette command
is unchanged (D-6 parity). Registered at priority 110 so it sits in the
status bar's right group.

Closes T-234 (under no parent; demo polish).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 17:04:39 +02:00
jpmschweitzerandClaude Opus 4.8 884207c59e add Catppuccin Mocha theme (+ high-contrast sibling)
Ships catppuccin-mocha (faithful to the official Catppuccin Mocha
palette) and catppuccin-mocha-hc (high-contrast sibling per D-69 — the
faithful palette is never retuned to pass the gate). Both bundled and
gated: mocha clears baseline AA, mocha-hc clears the strict extended
set. Catppuccin MIT palette recorded in licenses.yaml.

Closes T-82 (Mocha + hc meets every acceptance bullet; faithful Latte
deferred — it can't clear baseline AA without retuning, a separate call).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:51:06 +02:00
jpmschweitzerandClaude Opus 4.8 80fbdbc073 plan: back up ticket T-234 (theme-switcher status-bar popout)
Export the pql db so the newly-created T-234 lands in the committed
changelog -- the gitignored pql.db rebuilds from this on branch switch
(D-67), so an un-exported ticket would vanish.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:15:04 +02:00
jpmschweitzerandClaude Opus 4.8 a08f75ae1c make CLI argv args reach typed command handlers (T-232)
Parameterized subsystem commands were unreachable from the CLI: the
argv translator emits {positional, flags} but the handlers read named
top-level keys (args['path'], args['id'], ...), and nothing mapped
between them -- so 'clide editor open <path>' returned 'path is
required'. The fix needed no new mechanism: D-74's CommandSchema.normalize
already folds the argv shape into named args by a declared positional
ordering; these commands just never registered a schema.

Adopts it for the navigation/drive surface -- editor.open/activate/read/
save/close, files.read/ls, pane.close/focus/resize/write -- with
non-required positional schemas, so the only effect is positional->named
mapping plus numeric coercion of line/cols/rows. Handlers unchanged;
missing-arg errors unchanged. Edit-mutation verbs, pane.spawn, and git
arg verbs are deferred (noted on the ticket).

Takes effect on app restart (the dispatcher is built once at boot).

Closes T-232 (under T-208 'Give Claude hands').

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:47:34 +02:00
jpmschweitzerandClaude Opus 4.8 4e5d7b1347 plan: refine T-212 with proactive install-prompt-on-launch scope
Live dogfooding hit a stale clide symlink (GUI runner, not the C
client), so T-212 should proactively detect a missing/stale clide on
launch and offer to install -- not just expose a palette command.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:34:12 +02:00
jpmschweitzerandClaude Opus 4.8 09d1a6370a add clide ui open to drive GUI readers from the CLI (T-231)
The drive-half complement to clide status (observe): an agent can now
open a doc in a GUI reader from the CLI so it can show the user what
it's looking at. 'clide ui open tickets T-48' (decisions by id,
markdown by path) publishes a 'selection' to the kernel MessageBus that
the reader's ReaderNav picks up.

The verb (ui_command.dart) is decoupled from the kernel via a publish
callback, wired in main.dart to the post-boot-captured MessageBus, so it
stays Flutter-free under dart test. Reads CLI positionals or named args.

Also files T-232 (CLI argv args don't reach typed handlers -- the gating
drive-the-IDE bug) and T-233 (diff-panel ui.open follow-up).

Closes T-231 (under T-208).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:30:36 +02:00
jpmschweitzerandClaude Opus 4.8 0d1eb0e0a9 plan: ticket CLI-driven reader open (T-231)
Dogfooding showed Epic C gave the CLI the observe half of D-6 parity
but not the drive half: no verb opens a doc in a UI reader because
nothing bridges the IPC layer to the kernel MessageBus. Files T-231
to add a ui.open/view.open verb under T-208.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:19:52 +02:00
jpmschweitzerandClaude Opus 4.8 8682564903 add clide status orientation snapshot; close Epic C (T-221)
clide status returns a one-shot snapshot for an orienting agent: the
workspace root, a git summary (branch/ahead/behind/clean/counts), the
active editor buffer + selection, the read-only readers' viewed docs
(new ReaderNavRegistry.currentByReader, the T-220 fold), focusedFile,
the live view-pane list (T-219), and the layout (slots + visibility +
focus mode). Previously 'status' was an unknown command (exit 3).

The verb handler (status_command.dart) is a thin Flutter-free wrapper;
the snapshot is assembled in main.dart where the live kernel + subsystem
state is in scope, with readerNav captured post-boot. Composite shape is
verified live; the pieces are unit-tested.

Closes T-221 and T-218 (Epic C) under T-208 'Give Claude hands' --
the observe half of D-6 parity is now in place.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:51:15 +02:00
jpmschweitzerandClaude Opus 4.8 6c4c48bfc2 add a permission-mode cycler to the primary Claude pane
T-226. The primary pane showed the permission mode but had no way to
change it (only the cockpit roster did, T-181). Add three affordances,
all cycling the safe trio default -> acceptEdits -> plan over the
stream-json control channel:

- Ctrl/Cmd+M while the composer is focused, intercepted at the composer
  so it targets that pane's session. Shift+Tab (the CLI chord) is
  deliberately NOT used — Tab/Shift+Tab are real a11y focus-traversal
  intents since T-204.
- The status-line mode label is now an interactive badge (ClideTappable):
  click, or focus + Enter/Space, cycles it.
- A "Claude: Cycle permission mode" palette command targeting the primary
  session.

bypassPermissions stays out of every cycle path here — it's reachable
only via the cockpit's explicit confirm (T-181). Shared helpers
(nextSafePermissionMode, statusSegmentsAroundMode) live in claude_status;
the cockpit's existing copy is left untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:45:52 +02:00
jpmschweitzerandClaude Opus 4.8 0e71d98b81 record composer-epic and meta-clustering tickets in the plan backup
Planning-backup sync for the tickets filed/closed this session: the
T-229 composer-ergonomics epic and its children (T-227/T-228/T-163,
now done) and the new T-230 meta-message clustering story under T-132.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:18:01 +02:00
jpmschweitzerandClaude Opus 4.8 7725aaf916 plan: close T-220 as done-by-prior-work; refocus T-221
The editor already reflects UI opens/active/selection into EditorRegistry
via the editor.open / editor.activate / editor.set-content IPC flow, so
T-220's acceptance already holds for code files. Closes it with that
rationale and folds the only real remainder -- the read-only reader's
viewed file -- into T-221's clide status scope (focused file = active
editor buffer OR active reader doc).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:01:34 +02:00
jpmschweitzerandClaude Opus 4.8 be06b94754 register live GUI panes into clide pane list (T-219)
Per D-6 parity / D-83, make the kernel tabs the user sees (Claude,
Files, Editor, viewers) visible to the CLI. The PTY-backed PaneRegistry
can't model widget panes, so rather than mirror state (and risk drift),
pane.list snapshots the kernel PanelRegistry + LayoutArrangement at
request time via an injected view-pane source.

New Flutter-free ViewPane value type + snapshotViewPanes kernel bridge;
the daemonClientFactory now passes the PanelRegistry through so the
dispatcher can read it. pane.list merges PTY panes (source absent) with
UI tabs (source: ui, with slot/title/active/visible).

Acceptance (GUI-open: pane list enumerates live panes) needs a running
app to confirm end-to-end; unit-tested at the snapshot + dispatch level.

Closes T-219 (under T-218 / T-208 'Give Claude hands').

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 12:49:57 +02:00
jpmschweitzerandClaude Opus 4.8 4508be76ac focus the Claude composer on a background tap
T-227. A tap on empty conversation area now lands the cursor in the
composer. The conversation area is wrapped in a translucent
GestureDetector whose onTap focuses a pane-owned composer FocusNode, so
message links, copy buttons, and the SelectableRegion's selection drags
keep winning their own gestures — only an unclaimed tap reaches us. It's
a no-op while a prompt holds the interaction zone (D-78), so a tap never
pulls focus over an open prompt.

The composer learned to accept an external focus node (the pane owns it,
so it survives composer remounts) and attaches its key handling to
whichever node it's given.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 12:09:17 +02:00