Files
buzz/.gitignore
Matt Toohey a4e592ed3a feat(desktop): redirect auth probes to bundled CLIs and retire the cli_missing gate
Since the ACP bundles vendor full native CLIs (Claude Code inside
@anthropic-ai/claude-agent-sdk-*, codex inside @openai/codex-*), agent
sessions never touch a user-installed claude/codex. Yet the auth probes
still resolved those CLIs from the user's PATH, and a missing user CLI
put the runtime behind a CliMissing availability gate — blocking agents
that would have run fine on the bundle. Point the probes at the vendored
CLIs and delete the gate plus everything downstream of it (curl-pipe CLI
install commands, Doctor's user-CLI path row, the cli_missing nudge card).

The vendored CLIs are deliberately NOT staged into resources/acp/bin:
that dir is the highest-priority segment of the agent-spawn PATH, and
CLIs there would shadow the user's (possibly newer) claude/codex inside
every session. Instead a probe-only manifest maps CLI names to paths
inside the staged node trees.

- prepare-acp-tools-resource.sh reads nativePackage/nativeExecutable
  from acp-tools.lock.json, verifies the vendored binary exists in the
  staged tree (chmod +x), and writes harness-clis.json next to
  node-runtime.json: {"clis":[{id,cli,path}]} with resource-root-relative
  paths. The manifest is gitignored like its sibling.
- acp_tools::bundled_harness_cli() resolves a CLI name through the
  manifest — bare names only, relative non-escaping paths only, must be
  an executable file. Absent manifest/entry degrades to None.
- discovery::resolve_probe_binary() tries the bundled CLI first, then
  the user's PATH — auth probes in the discovery sweep and
  readiness::cli_login_requirements both go through it. Auth state now
  reflects the CLI the sessions actually use, while dev builds without
  a staged bundle keep working via the PATH fallback.
- classify_runtime: a resolving adapter is Available unconditionally;
  underlying_cli now only disambiguates AdapterMissing vs NotInstalled.
  CliMissing is removed from the desktop enum (runtime-only, never
  persisted) and from the TS union; buzz-acp's wire mirror keeps the
  variant so payloads from older desktops still parse (AdapterOutdated
  precedent), while the FE nudge validator rejects the retired literal
  so stale JSON can't render a card the UI has no branch for.
- claude/codex catalog entries drop underlying_cli and the curl-pipe
  cli_install_commands; login provisioning copy stays as-is.
- UI: cli_missing branches removed from Doctor (StatusIcon, RuntimeRow,
  user-CLI path row), SetupStep, persona pickers ("(CLI missing)"
  suffix + sort rank), AgentDefinitionDialog warning, and the nudge
  card; retired the cli_missing nudge screenshot spec.

Verification:
- cargo test --lib (desktop/src-tauri): 1436 passed, 0 failed (new
  bundled_harness_cli manifest/escape/absent tests, probe-runs-without-
  underlying-CLI readiness test, adapter-implies-Available discovery test)
- cargo test -p buzz-acp --lib: 497 passed (cli_missing round-trip kept)
- cargo clippy --lib --tests -D warnings (both crates): clean;
  cargo fmt --check (both crates): clean
- tsc --noEmit: clean; biome check + file-size/px-text/pubkey guards: pass
- pnpm test (desktop): 2792 passed, 0 failed (new validator-rejects-
  cli_missing test)
- playwright doctor-states.spec.ts + doctor-cta-screenshots.spec.ts:
  12 passed (Doctor shows no CLI path row; nudge cards unaffected)
- prepare-acp-tools-resource.sh: manifest written; vendored
  claude --version → 2.1.205 (Claude Code); vendored
  codex login status → exit 0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
2026-07-15 13:48:46 +10:00

77 lines
1.4 KiB
Plaintext

# Build artifacts
/target/
/dist/
# lefthook-generated hook scripts (machine-specific)
.hooks/
# Environment files (may contain secrets)
.env
.env.local
.env.*.local
# Editor / IDE
.idea/
.vscode/*
!.vscode/settings.json
*.swp
*.swo
*~
.*.sw?
# OS artifacts
.DS_Store
Thumbs.db
# Scratch / working files (AI reviews, notes, drafts)
.scratch/
# Playwright artifacts
playwright-report/
test-results/
blob-report/
.playwright-mcp/
# Node modules (pnpm workspace hoists to root)
node_modules/
# Root npm lockfiles are accidental; desktop uses pnpm in /desktop.
/package-lock.json
# Bundled ACP bridge tools (regenerated by desktop/scripts/prepare-acp-tools-resource.sh)
desktop/src-tauri/resources/acp/bin/*
!desktop/src-tauri/resources/acp/bin/.gitkeep
desktop/src-tauri/resources/acp/node/
desktop/src-tauri/resources/acp/node-runtime.json
desktop/src-tauri/resources/acp/harness-clis.json
# sqlx offline query data (generated, not portable)
.sqlx/
# SQLite database (created by relay in CWD)
buzz.db
buzz.db-wal
buzz.db-shm
# Docker volumes (if mounted locally)
mysql-data/
typesense-data/
# Hermit (toolchain manager cache)
.hermit/
doc/
/repos/
# Local identity files
identity.key
**/identity.key
# Claude Code worktrees
.claude/worktrees/
# mesh-llm build cache
.cache/
# Helm dependency tarballs — regenerable from Chart.lock via `helm dependency build`
deploy/charts/*/charts/*.tgz