mirror of
https://github.com/block/buzz.git
synced 2026-11-13 04:41:12 +00:00
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>
77 lines
1.4 KiB
Plaintext
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
|