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>
This commit is contained in:
2026-06-06 12:05:41 +02:00
co-authored by Claude Opus 4.8
parent 02a19d10f5
commit 562c17c06d
10 changed files with 696 additions and 4 deletions
+9
View File
@@ -18,6 +18,15 @@ heading, and (b) bumping `pubspec.yaml` `version:` in the same commit.
### Added
- "Install 'clide' command in PATH": a command-palette / `clide` CLI verb
(`clide.installCli`) that 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 now
detects when `clide` is missing from PATH, or resolves to a stale symlink
into the Flutter GUI bundle (which would launch a second app instead of
querying the socket), and notifies with a pointer to the command. `make
build` ships the C client inside the app bundle so the affordance can
self-install from it. (T-212)
- `clide ui open diff <path>` reveals the diff in a split above the Claude
conversation, scrolls to that file and highlights its header — the
diff-panel arm of `ui open`. Workspace tabs other than Claude/editor now