Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
a29a3da
feat(desktop): pin and stage bundled ACP bridge tools
matt2e Jul 13, 2026
f32d436
feat(desktop): resolve bundled ACP bridge tools ahead of user installs
matt2e Jul 13, 2026
f88d903
feat(desktop): surface bundled-bridge Node.js requirement in Doctor
matt2e Jul 13, 2026
4b9b063
refactor(desktop): retire codex version gate and bridge npm-install flow
matt2e Jul 13, 2026
751284a
feat(desktop): verify the ACP adapter resolves after runtime install
matt2e Jul 13, 2026
7cb1969
chore(desktop): repair pre-existing clippy and file-size gate breakage
matt2e Jul 13, 2026
67546ce
feat(desktop): say the ACP bridge is bundled in Doctor instead of its…
matt2e Jul 13, 2026
70ee9a0
refactor(desktop): retire the claude-code-acp catalog resolution fall…
matt2e Jul 13, 2026
f6c2339
refactor(desktop): de-jargon the Doctor panel's page-level framing copy
matt2e Jul 14, 2026
a4e592e
feat(desktop): redirect auth probes to bundled CLIs and retire the cl…
matt2e Jul 14, 2026
b3aed32
refactor(desktop): shorten bundled-adapter Doctor copy to "Bundled wi…
matt2e Jul 14, 2026
f601384
refactor(desktop): retire dead install-gate, npm-preflight, and codex…
matt2e Jul 14, 2026
8d962a4
fix(desktop): preserve unselected targets in partial ACP lock bumps
matt2e Jul 14, 2026
ff2d3c2
fix(desktop): surface empty-target ACP staging notice in --print-bin-…
matt2e Jul 14, 2026
fbb9f1b
fix(desktop): warn instead of swallowing ad-hoc codesign failures in …
matt2e Jul 14, 2026
b991b35
fix(desktop): normalize ACP lock tarball URLs to the public npm registry
matt2e Jul 14, 2026
0567880
fix(desktop): stage bundled ACP tools in OSS release builds
matt2e Jul 14, 2026
64eae44
feat(desktop): bundle the ACP bridge tools on Windows
matt2e Jul 14, 2026
b2ce7a4
feat(desktop): bundle only the ACP bridges, not the harness CLIs
matt2e Jul 15, 2026
5aee0f4
fix(desktop): enable the windows-sys features the ACP node launcher n…
matt2e Jul 15, 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 @@ -859,6 +859,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
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ 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

# 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 @@ -10,6 +10,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 @@ -330,6 +335,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 @@ -358,6 +368,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
25 changes: 25 additions & 0 deletions crates/buzz-acp-node-launcher/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
[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]
# Win32_System_JobObjects alone is not enough: CreateJobObjectW is gated on
# Win32_Security (its SECURITY_ATTRIBUTES parameter) and the JOBOBJECT_*
# limit structs on Win32_System_Threading. Same set as buzz-dev-mcp's
# KillGroup, minus its registry lookup.
windows-sys = { version = "0.61", features = ["Win32_Foundation", "Win32_Security", "Win32_System_JobObjects", "Win32_System_Threading"] }

[dev-dependencies]
tempfile = "3"
Loading