Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
7585e4f
feat(desktop): pin and stage bundled ACP bridge tools
matt2e Jul 13, 2026
26ac076
feat(desktop): resolve bundled ACP bridge tools ahead of user installs
matt2e Jul 13, 2026
d59db7f
feat(desktop): surface bundled-bridge Node.js requirement in Doctor
matt2e Jul 13, 2026
21dabae
refactor(desktop): retire codex version gate and bridge npm-install flow
matt2e Jul 13, 2026
8d89b51
feat(desktop): verify the ACP adapter resolves after runtime install
matt2e Jul 13, 2026
e4140cb
chore(desktop): repair pre-existing clippy and file-size gate breakage
matt2e Jul 13, 2026
f2c43e5
feat(desktop): say the ACP bridge is bundled in Doctor instead of its…
matt2e Jul 13, 2026
3f9fc4a
refactor(desktop): retire the claude-code-acp catalog resolution fall…
matt2e Jul 13, 2026
d0505b2
refactor(desktop): de-jargon the Doctor panel's page-level framing copy
matt2e Jul 14, 2026
55a80e5
feat(desktop): redirect auth probes to bundled CLIs and retire the cl…
matt2e Jul 14, 2026
2b94ce2
refactor(desktop): shorten bundled-adapter Doctor copy to "Bundled wi…
matt2e Jul 14, 2026
b52a665
refactor(desktop): retire dead install-gate, npm-preflight, and codex…
matt2e Jul 14, 2026
5d3b612
fix(desktop): preserve unselected targets in partial ACP lock bumps
matt2e Jul 14, 2026
f619669
fix(desktop): surface empty-target ACP staging notice in --print-bin-…
matt2e Jul 14, 2026
1b044de
fix(desktop): warn instead of swallowing ad-hoc codesign failures in …
matt2e Jul 14, 2026
e81f1c2
fix(desktop): normalize ACP lock tarball URLs to the public npm registry
matt2e Jul 14, 2026
7b52a41
fix(desktop): stage bundled ACP tools in OSS release builds
matt2e Jul 14, 2026
4fd4d1d
feat(desktop): bundle the ACP bridge tools on Windows
matt2e Jul 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -856,6 +856,12 @@ jobs:
# Serial: windows_resolver_tests mutate process-global env
# (BUZZ_SHELL/GIT_BASH/SystemRoot) that SharedState::new reads.
run: cargo test -p buzz-dev-mcp --target $env:TARGET -- --test-threads=1
- name: Test (buzz-acp-node-launcher)
# The compiled launcher shim staged as the bundled ACP bridges'
# <binary>.exe on Windows; its spawn path (Job Object, exit-code
# proxying) only gates if tested ON Windows. The end-to-end tests use
# the node preinstalled on windows-latest runners.
run: cargo test -p buzz-acp-node-launcher --target $env:TARGET
# Smoke-test the new host-prereq contract: Git for Windows (which provides
# bash) is available on the runner, a shell command round-trips, and bash
# does NOT resolve from System32 (so WSL's launcher is never picked up).
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,12 @@ jobs:
cargo build --release -p buzz-acp -p buzz-agent -p buzz-dev-mcp -p git-credential-nostr -p buzz-cli
./scripts/bundle-sidecars.sh

# Stage the pinned ACP bridge tools into src-tauri/resources/acp before
# `tauri build` bundles resources — without this the app ships an empty
# resources/acp and silently falls back to unpinned user installs.
- name: Stage bundled ACP tools
run: ./desktop/scripts/prepare-acp-tools-resource.sh aarch64-apple-darwin

# Mesh rev derived from Cargo.lock (no lockstep edit on dep bump); cache key tracks it.
- name: Resolve mesh-llm rev
id: mesh_rev
Expand Down Expand Up @@ -341,6 +347,9 @@ jobs:
cargo build --release --target "$TARGET" -p buzz-acp -p buzz-agent -p buzz-dev-mcp -p git-credential-nostr -p buzz-cli
./scripts/bundle-sidecars.sh "$TARGET"

- name: Stage bundled ACP tools
run: ./desktop/scripts/prepare-acp-tools-resource.sh "$TARGET"

- name: Build unsigned Tauri app
run: cd desktop && pnpm tauri build --verbose --no-sign --target "$TARGET" --config src-tauri/tauri.release.conf.json
env:
Expand Down Expand Up @@ -588,6 +597,9 @@ jobs:
cargo build --release -p buzz-acp -p buzz-agent -p buzz-dev-mcp -p git-credential-nostr -p buzz-cli
./scripts/bundle-sidecars.sh

- name: Stage bundled ACP tools
run: ./desktop/scripts/prepare-acp-tools-resource.sh x86_64-unknown-linux-gnu

- name: Generate release config
run: cd desktop && node scripts/build-release-config.mjs
env:
Expand Down Expand Up @@ -745,6 +757,13 @@ jobs:
cargo build --release --target "$TARGET" -p buzz-acp -p buzz-agent -p buzz-dev-mcp -p git-credential-nostr -p buzz-cli
./scripts/bundle-sidecars.sh "$TARGET"

# Also builds the buzz-acp-node-launcher shim for the target with the
# toolchain installed above (Windows targets stage it as the bridges'
# <binary>.exe).
- name: Stage bundled ACP tools
shell: bash
run: ./desktop/scripts/prepare-acp-tools-resource.sh "$TARGET"

- name: Build Windows NSIS installer (unsigned)
shell: bash
run: cd desktop && pnpm tauri build --verbose --target "$TARGET" --bundles nsis --config src-tauri/tauri.release.conf.json
Expand Down
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,13 @@ 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/

Expand Down
10 changes: 10 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ members = [
"crates/buzz-search",
"crates/buzz-audit",
"crates/buzz-acp",
"crates/buzz-acp-node-launcher",
"crates/buzz-agent",
"crates/sprig",
"crates/buzz-test-client",
Expand Down
15 changes: 15 additions & 0 deletions Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,10 @@ desktop-test:
desktop-typecheck:
cd {{desktop_dir}} && pnpm typecheck

# Query the latest npm releases of the bundled ACP bridge tools and update desktop/acp-tools.lock.json
bump-acp-tools *ARGS:
node desktop/scripts/update-acp-tools-lock.mjs {{ARGS}}

# Build desktop frontend assets
desktop-build:
cd {{desktop_dir}} && pnpm build
Expand Down Expand Up @@ -206,6 +210,7 @@ desktop-release-build target="aarch64-apple-darwin":
touch "desktop/src-tauri/binaries/buzz-dev-mcp-$TARGET"
touch "desktop/src-tauri/binaries/git-credential-nostr-$TARGET"
touch "desktop/src-tauri/binaries/buzz-$TARGET"
./desktop/scripts/prepare-acp-tools-resource.sh "$TARGET"
pnpm install
cd {{desktop_dir}} && pnpm tauri build --features mesh-llm --target {{target}}

Expand Down Expand Up @@ -327,6 +332,11 @@ dev *ARGS: bootstrap _ensure-sidecar-stubs _ensure-migrations
done
fi
cargo build -p buzz-acp -p buzz-agent -p buzz-dev-mcp -p buzz-cli -p git-credential-nostr -p buzz-relay
# Stage the pinned ACP bridge tools and point the app at the staged dir so
# dev builds resolve the same bundled bridges as packaged builds.
./desktop/scripts/prepare-acp-tools-resource.sh
export BUZZ_ACP_TOOLS_DIR="{{justfile_directory()}}/desktop/src-tauri/resources/acp/bin"
echo "Using ACP tools dir: ${BUZZ_ACP_TOOLS_DIR}"
./target/debug/buzz-relay &
RELAY_PID=$!
sleep 1
Expand Down Expand Up @@ -355,6 +365,11 @@ staging *ARGS: bootstrap _ensure-sidecar-stubs
export PATH="{{justfile_directory()}}/bin:$PATH"
pnpm install # unconditional: staging must always start with a clean dep tree
cargo build --release -p buzz-acp -p buzz-agent -p buzz-dev-mcp -p buzz-cli -p git-credential-nostr
# Stage the pinned ACP bridge tools and point the app at the staged dir so
# staging builds resolve the same bundled bridges as packaged builds.
./desktop/scripts/prepare-acp-tools-resource.sh
export BUZZ_ACP_TOOLS_DIR="{{justfile_directory()}}/desktop/src-tauri/resources/acp/bin"
echo "Using ACP tools dir: ${BUZZ_ACP_TOOLS_DIR}"
FEATURES=()
if [[ -n "{{mesh}}" ]]; then
FEATURES=(--features mesh-llm)
Expand Down
21 changes: 21 additions & 0 deletions crates/buzz-acp-node-launcher/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[package]
name = "buzz-acp-node-launcher"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
description = "Compiled launcher shim for the bundled ACP bridge tools on Windows"

[[bin]]
name = "buzz-acp-node-launcher"
path = "src/main.rs"

[dependencies]
serde = { workspace = true }
serde_json = { workspace = true }

[target.'cfg(windows)'.dependencies]
windows-sys = { version = "0.61", features = ["Win32_Foundation", "Win32_System_JobObjects"] }

[dev-dependencies]
tempfile = "3"
Loading
Loading