mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
Buzz desktop spawned the claude-agent-acp and codex-acp bridges from whatever the user had installed globally — an unpinned `npm install -g` surface with no integrity checking, which produced stale-bridge drift (the deprecated @zed-industries/codex-acp 0.16.x gate) and missing-tool failures. Bundle both bridges as app resources instead, pinned per target: - desktop/acp-tools.lock.json pins @agentclientprotocol/claude-agent-acp 0.58.1 and @agentclientprotocol/codex-acp 1.1.2 (npm `latest` at time of commit) for the four supported targets, with integrity hashes and Block Artifactory tarballs for the package, its claude-agent-sdk / @openai/codex dependency, and the per-target native package. - desktop/scripts/update-acp-tools-lock.mjs regenerates the lock from the registry's `latest` dist-tags, failing loudly on any unresolvable package — never silently pinning an older version. Ranged dependencies (codex-acp's ^0.144.0) resolve to the highest matching version when `npm view` returns an array. - desktop/scripts/ensure-acp-tools.sh installs the locked tools into a shared dev cache (~/Library/Caches/buzz-dev/acp-tools), validates versions + integrity against the lock, and stamps staged binaries next to the shared bin dir so any lock change — including a revert — forces a re-stage; binaries no longer in the lock are pruned. - desktop/scripts/prepare-acp-tools-resource.sh stages the vendored npm trees + node wrapper shims into desktop/src-tauri/resources/acp, writes the node-runtime.json manifest for the app's Node.js doctor check, and ad-hoc signs every nested Mach-O (file(1) scan — the codex package vendors rg, zsh, and codex-code-mode-host beyond the main CLIs) so Gatekeeper doesn't kill them in local builds. - desktop/scripts/lib/acp-node-wrapper.sh is the single wrapper-shim generator shared by both scripts, so the dev-cache and bundled wrappers (and the Node major they enforce) cannot drift. - Wiring: `just dev` / `just staging` stage the resources and export BUZZ_ACP_TOOLS_DIR; `just desktop-release-build` stages per target before `tauri build`; `just bump-acp-tools` reruns the lock updater; tauri.conf.json bundles resources/acp; staged artifacts are gitignored with a .gitkeep placeholder. Runtime resolution of the staged dir follows in the next commit. The sprout-releases internal pipeline will need the same staging step before its `tauri build`; that lives in a separate repo. Ports the build-time half of the Staged implementation in block/builderbot#876 (branch commits 16b115a7 bundle feature, f5c6bba9 re-stage after lock revert, 288fa7eb shared node wrapper lib, adea4017 node-runtime manifest, 5124302a sign all nested Mach-Os, de6a9782 ranged-dependency updater fix), itself ported from squareup/berd f07df1d2 + 1db993fb + 24d7518b + 07087303 + 737e33a5. Verified: update-acp-tools-lock.mjs regenerated the lock against the Block registry (byte-identical pins to the donor lock; both packages confirmed at npm `latest`); fresh stage installs both tools and the staged wrappers report 0.58.1 / 1.1.2; no-op re-run performs zero npm installs; a stamp/lock mismatch forces a re-stage and stray binaries are pruned; all five staged Mach-Os pass `codesign --verify`; cargo check on desktop/src-tauri passes with the new resources entry. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Matt Toohey <contact@matttoohey.com>
91 lines
1.9 KiB
JSON
91 lines
1.9 KiB
JSON
{
|
|
"$schema": "https://schema.tauri.app/config/2",
|
|
"productName": "Buzz",
|
|
"version": "0.4.5",
|
|
"identifier": "xyz.block.buzz.app",
|
|
"build": {
|
|
"beforeDevCommand": {
|
|
"script": "exec ./node_modules/.bin/vite",
|
|
"cwd": "..",
|
|
"wait": false
|
|
},
|
|
"devUrl": "http://localhost:1420",
|
|
"beforeBuildCommand": "pnpm build",
|
|
"frontendDist": "../dist"
|
|
},
|
|
"app": {
|
|
"windows": [
|
|
{
|
|
"title": "",
|
|
"width": 800,
|
|
"height": 600,
|
|
"maximized": true,
|
|
"visible": false,
|
|
"transparent": true,
|
|
"titleBarStyle": "Overlay",
|
|
"hiddenTitle": true,
|
|
"dragDropEnabled": false,
|
|
"trafficLightPosition": {
|
|
"x": 16,
|
|
"y": 24
|
|
},
|
|
"backgroundThrottling": "disabled",
|
|
"minWidth": 800,
|
|
"minHeight": 500
|
|
}
|
|
],
|
|
"macOSPrivateApi": true,
|
|
"security": {
|
|
"csp": null
|
|
}
|
|
},
|
|
"plugins": {
|
|
"updater": {
|
|
"endpoints": []
|
|
},
|
|
"deep-link": {
|
|
"desktop": {
|
|
"schemes": ["buzz"]
|
|
}
|
|
}
|
|
},
|
|
"bundle": {
|
|
"active": true,
|
|
"targets": "all",
|
|
"externalBin": [
|
|
"binaries/buzz-acp",
|
|
"binaries/buzz-agent",
|
|
"binaries/buzz-dev-mcp",
|
|
"binaries/git-credential-nostr",
|
|
"binaries/buzz"
|
|
],
|
|
"resources": ["resources/acp"],
|
|
"icon": [
|
|
"icons/32x32.png",
|
|
"icons/128x128.png",
|
|
"icons/128x128@2x.png",
|
|
"icons/icon.icns",
|
|
"icons/icon.ico"
|
|
],
|
|
"macOS": {
|
|
"infoPlist": "Info.plist",
|
|
"entitlements": "Entitlements.plist",
|
|
"dmg": {
|
|
"background": "icons/dmg-background.png",
|
|
"windowSize": {
|
|
"width": 660,
|
|
"height": 532
|
|
},
|
|
"appPosition": {
|
|
"x": 191,
|
|
"y": 330
|
|
},
|
|
"applicationFolderPosition": {
|
|
"x": 469,
|
|
"y": 330
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|