Files
buzz/crates/buzz-acp/TESTING.md
Salman Mohammed 813bbd1412 fix(acp): integrate the Buzz Pi adapter fork (#7552)
## Summary

PR #7335 worked around missing Pi adapter support by generating a
private Pi launcher and injecting Buzz's standing prompt and skills at
process launch. The Buzz Pi fork now carries the required adapter
extensions, so this removes that launcher and returns prompt
construction to the normal ACP session path while retaining the
base-prompt composition introduced by #7335.

The Pi preset now installs `salman1993/pi-acp` and launches its renamed
`buzz-pi-acp` binary. Buzz adds `-- --skill
<harness-cwd>/.agents/skills` only when launching that binary, sends the
complete composed prompt as the `_meta.systemPrompt` replacement string
on `session/new` only when `initialize.agentInfo.name` is `buzz-pi-acp`,
and sends the scoped title alongside it as `_meta.sessionTitle`. The
fork identity is treated as system-prompt capable regardless of its
reported ACP protocol version, which prevents duplicate legacy
user-message framing. Upstream `pi-acp` does not receive either
fork-specific behavior. Observer transcript projection accepts the
string, `{ replace }`, and `{ append }` metadata forms.

The fork now stores restore metadata in one atomic file per session
under `~/.pi/buzz-pi-acp/sessions/`. This prevents concurrent Buzz
workers from overwriting another session's prompt or title. The fix
landed in
[salman1993/pi-acp#9](https://github.com/salman1993/pi-acp/pull/9).

This supersedes the closed #7508. No agent-configuration rules changed;
this changes the Buzz Pi adapter contract and launch arguments.

### Related issue

#7329

### Testing

Installed fork commit `09cf07e436b8f18e52401558f988f31a15702313` through
the documented Git URL. The installed bundle matched the committed
`dist/index.js` byte for byte and contained the `~/.pi/buzz-pi-acp`
metadata path. The fork's 106 non-skipped tests, typecheck, and lint
pass.

Ran the ignored real-Pi integration test through Buzz's production
session composer. The test exercised the renamed package,
`agentInfo.name`, and the new per-session metadata store. Base, persona,
team, core-memory, huddle, canvas, and skill markers each appeared once
after switching sessions and again after restarting the adapter, while
the other session and Pi's native default prompt were absent.

Added regression coverage proving `buzz-pi-acp` receives fork-specific
system-prompt metadata and managed skills while upstream `pi-acp` does
not. `just ci` passes.

Generated with Codex

---------

Signed-off-by: Salman Mohammed <smohammed@squareup.com>
2026-09-10 21:38:42 -04:00

2.5 KiB

Pi adapter integration

Buzz's Pi preset uses salman1993/pi-acp. Requires Node.js 22 or newer. Install Pi and configure its model provider, then install the adapter directly from the fork:

npm install -g @earendil-works/pi-coding-agent
pi
npm install -g --install-links=true git+https://github.com/salman1993/pi-acp.git#main

Restart Buzz, then select Pi as the agent harness. Buzz starts buzz-pi-acp automatically. Run the same adapter install command again to update it. The unscoped npm install -g pi-acp command installs the upstream package, without these extensions. Use fresh sessions to replace old user-framed standing instructions.

Buzz adds -- --skill <harness-cwd>/.agents/skills when launching buzz-pi-acp. An existing separator and explicit Pi options are preserved. Managed agents run from the Buzz nest (normally ~/.buzz): Desktop sets the buzz-acp child CWD through default_agent_workdir(), and adapters inherit it. The default skill directory is that launch workspace's .agents/skills. Standalone CLI launches use the caller's working directory. The path is fixed at adapter launch and applies to every Pi subprocess.

The full composed session prompt is sent as a replacement string through the provisional session/new.params._meta.systemPrompt field. Buzz recognizes buzz-pi-acp by the agent name returned during initialization, regardless of protocol version. Upstream pi-acp does not receive this fork-specific metadata. No custom capability negotiation or legacy Pi prompt fallback is used. Session titles continue to use _meta.sessionTitle.

Validation

Activate Hermit from the Buzz repository root, then run the package tests:

. ./bin/activate-hermit
cargo test -p buzz-acp

To exercise the real adapter through Buzz's production session composer:

BUZZ_TEST_PI_ACP=/absolute/pi-acp/dist/index.js \
  cargo test -p buzz-acp real_pi_preserves -- --ignored

This test requires Node and Pi on PATH. It isolates HOME and Pi settings, disables extensions and context files, and uses a synthetic transcript without model calls. It inspects Pi's effective prompt through RPC HTML export after switching sessions and restarting the adapter. Base, persona, team, core memory, huddle, canvas, and the extra skill must each appear once, without another session's instructions or Pi's default coding preamble.

HTML export reports the exporting process's current system prompt. It cannot recover a historical prompt from an old transcript alone.