@bunny-agent/runner-cli 0.9.60-beta.1 → 0.9.60-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,29 +2,25 @@
2
2
 
3
3
  Bunny Agent Runner CLI - A **lightweight, local** command-line interface for running AI agents in your terminal.
4
4
 
5
- Like gemini-cli, claude-code, or codex-cli, this tool runs **directly on your local filesystem** and streams AI SDK UI messages to stdout.
5
+ Like gemini-cli, claude-code, or codex-cli, this tool runs **directly on your local filesystem**. It has two subcommands, one per output protocol: `run` streams AI SDK UI messages to stdout for a single task, and `acp` serves as a long-lived [Agent Client Protocol](https://agentclientprotocol.com) agent over stdio for editors like Zed and JetBrains.
6
6
 
7
7
  ## 🎯 Key Features
8
8
 
9
9
  - 🔌 **Choose Different Runners**: Switch between Claude, Codex, Gemini, Copilot with `--runner` flag
10
10
  - 🚀 **Local Execution**: Runs directly on your filesystem, no sandbox required
11
11
  - 💨 **Lightweight**: No manager dependency, minimal overhead
12
- - 📡 **Streaming**: Real-time AI SDK UI streaming
12
+ - 📡 **Streaming**: Real-time AI SDK UI streaming (`run`) or ACP JSON-RPC over stdio (`acp`)
13
13
 
14
14
  ## 📐 Architecture
15
15
 
16
16
  ```
17
- runner-cli → runner-* (direct, NO dependencies on manager or sandbox)
18
- ├─ runner-claude ✅
19
- ├─ runner-codex ✅
20
- ├─ runner-gemini ✅
21
- └─ runner-copilot ✅
17
+ runner-cli
18
+ ├─ run → @bunny-agent/runner-harness → runner-claude / runner-codex / ...
19
+ └─ acp → @bunny-agent/server-acp → runner-harness → same runners
22
20
 
23
21
  Dependencies:
24
- ✅ @bunny-agent/runner-claude (runtime)
25
- ✅ @bunny-agent/runner-codex (runtime)
26
- ✅ @bunny-agent/runner-gemini (runtime)
27
- ✅ @bunny-agent/runner-copilot (runtime)
22
+ ✅ @bunny-agent/runner-harness (dispatches to every runner)
23
+ ✅ @bunny-agent/server-acp (the `acp` subcommand's ACP agent + stdio transport)
28
24
  ❌ NO @bunny-agent/manager
29
25
  ❌ NO @bunny-agent/sandbox-*
30
26
  ```
@@ -97,7 +93,8 @@ through the SDK `streamText({ tools })` API, not directly through runner-cli.
97
93
 
98
94
  ## Output Format
99
95
 
100
- `bunny-agent run` always outputs AI SDK data stream (SSE) format.
96
+ `bunny-agent run` always outputs AI SDK data stream (SSE) format, one-shot —
97
+ it runs the task and exits.
101
98
 
102
99
  ```bash
103
100
  bunny-agent run -- "Calculate 2+2"
@@ -110,6 +107,54 @@ data: {"type":"text-delta","id":"text_1","delta":"The answer is 4."}
110
107
  data: [DONE]
111
108
  ```
112
109
 
110
+ For the ACP protocol instead, use `bunny-agent acp` — see below. The two are
111
+ separate subcommands, not a flag on `run`: ACP is a long-lived session
112
+ (`initialize` → `session/new` → possibly many `session/prompt` calls from the
113
+ connected editor), not a single request/response.
114
+
115
+ ## `bunny-agent acp`
116
+
117
+ Serves BunnyAgent as an [Agent Client Protocol](https://agentclientprotocol.com)
118
+ **agent** over stdio — the transport editors use when they spawn an agent
119
+ binary directly, e.g. Zed's "custom agent" setup or JetBrains' AI Assistant
120
+ agent integration. The process stays alive handling JSON-RPC over
121
+ stdin/stdout until the connecting client disconnects; it does not take a
122
+ task argument like `run` does.
123
+
124
+ ```bash
125
+ bunny-agent acp --runner claude
126
+ bunny-agent acp --runner pi --model gemini-2.0-flash --cwd ./my-project
127
+ ```
128
+
129
+ | Option | Short | Description | Default |
130
+ |--------|-------|--------------|---------|
131
+ | `--runner <runner>` | `-r` | Runner to use: `claude`, `codex`, `gemini`, `opencode`, `copilot`, `pi` | `claude` |
132
+ | `--model <model>` | `-m` | Model to use | `claude-sonnet-4-20250514` |
133
+ | `--cwd <path>` | `-c` | Working directory | Current directory |
134
+ | `--yolo` | - | Automatically approve tool permission requests | `false` |
135
+ | `--help` | `-h` | Show help message | - |
136
+
137
+ These flags set the **session default**. ACP's `session/new` has no native
138
+ runner/model field, so a connecting client can still override per-session
139
+ through the protocol's `_meta` extension, namespaced under `"bunny-agent"`:
140
+
141
+ ```json
142
+ { "cwd": "/workspace", "mcpServers": [],
143
+ "_meta": { "bunny-agent": { "runner": "pi", "model": "gemini-2.0-flash" } } }
144
+ ```
145
+
146
+ Point an ACP client at the CLI itself as the agent command (exact
147
+ configuration is client-specific — see each editor's ACP docs):
148
+
149
+ ```json
150
+ { "command": "bunny-agent", "args": ["acp", "--runner", "claude"] }
151
+ ```
152
+
153
+ For the HTTP equivalent (`POST /api/coding/acp`, used by the daemon instead
154
+ of a spawned subprocess), see
155
+ [`apps/daemon/README.md`](../daemon/README.md#post-apicodingacp). Both are
156
+ backed by `@bunny-agent/server-acp` and support every runner this CLI does.
157
+
113
158
  ## Environment Variables
114
159
 
115
160
  | Variable | Description | Required |
@@ -178,3 +223,5 @@ bunny-agent image build --name vikadata/bunny-agent --tag 0.1.0
178
223
  - [Skills](docs/SKILLS.md) — Where skills live and how they are loaded (local and Docker)
179
224
  - [Claude Agent SDK](https://platform.claude.com/docs/agent-sdk/typescript)
180
225
  - [AI SDK UI Stream Protocol](https://ai-sdk.dev/docs/ai-sdk-ui/stream-protocol)
226
+ - [Agent Client Protocol](https://agentclientprotocol.com) — the protocol `bunny-agent acp` speaks
227
+ - [Runner maturity / output protocols](../../docs/runner-maturity.md#output-protocols) — how `run` and `acp` compare
@@ -67,6 +67,81 @@ describe("runner-cli Integration Tests", () => {
67
67
  expect(output.exitCode).toBe(0);
68
68
  expect(output.stdout).toContain("data:");
69
69
  }, TIMEOUT);
70
+ it("should list acp alongside run in top-level help", async () => {
71
+ const output = await runCLI(["--help"]);
72
+ expect(output.stdout).toContain("acp");
73
+ expect(output.exitCode).toBe(0);
74
+ }, TIMEOUT);
75
+ it("should display acp command options in acp --help", async () => {
76
+ const output = await runCLI(["acp", "--help"]);
77
+ expect(output.stdout).toContain("--runner");
78
+ expect(output.stdout).toContain("--model");
79
+ expect(output.stdout).toContain("stdio");
80
+ expect(output.exitCode).toBe(0);
81
+ }, TIMEOUT);
82
+ it("should reject an invalid runner for acp the same way run does", async () => {
83
+ const output = await runCLI(["acp", "--runner", "invalid"]);
84
+ expect(output.stderr).toContain("must be one of");
85
+ expect(output.exitCode).toBe(1);
86
+ }, TIMEOUT);
87
+ it("should serve a real ACP initialize + session/new handshake over stdio", async () => {
88
+ // initialize/session/new never touch the runner SDKs, so this needs no
89
+ // API credentials — only session/prompt would invoke createRunner().
90
+ const result = await runAcpHandshake([
91
+ {
92
+ jsonrpc: "2.0",
93
+ id: 1,
94
+ method: "initialize",
95
+ params: { protocolVersion: 1, clientCapabilities: {} },
96
+ },
97
+ {
98
+ jsonrpc: "2.0",
99
+ id: 2,
100
+ method: "session/new",
101
+ params: { cwd: process.cwd(), mcpServers: [] },
102
+ },
103
+ ]);
104
+ expect(result.responses).toHaveLength(2);
105
+ expect(result.responses[0].result.agentInfo?.name).toBe("bunny-agent");
106
+ expect(typeof result.responses[1].result.sessionId).toBe("string");
107
+ expect(result.exitCode).toBe(0);
108
+ }, TIMEOUT);
109
+ it("reports an unknown runner from _meta as invalid params, not an internal error", async () => {
110
+ // Fully unmocked, and credential-free: dispatch rejects the runner name
111
+ // before any agent SDK is constructed.
112
+ const result = await runAcpHandshake([
113
+ {
114
+ jsonrpc: "2.0",
115
+ id: 1,
116
+ method: "initialize",
117
+ params: { protocolVersion: 1, clientCapabilities: {} },
118
+ },
119
+ {
120
+ jsonrpc: "2.0",
121
+ id: 2,
122
+ method: "session/new",
123
+ params: {
124
+ cwd: process.cwd(),
125
+ mcpServers: [],
126
+ _meta: { "bunny-agent": { runner: "claude-code" } },
127
+ },
128
+ },
129
+ (prior) => ({
130
+ jsonrpc: "2.0",
131
+ id: 3,
132
+ method: "session/prompt",
133
+ params: {
134
+ sessionId: prior[1].result.sessionId,
135
+ prompt: [{ type: "text", text: "hi" }],
136
+ },
137
+ }),
138
+ ]);
139
+ const promptResponse = result.responses[2];
140
+ expect(promptResponse.error).toBeDefined();
141
+ // -32602 invalid params, not -32603 internal error.
142
+ expect(promptResponse.error?.code).toBe(-32602);
143
+ expect(promptResponse.error?.message).toMatch(/Unknown runner: claude-code/);
144
+ }, TIMEOUT);
70
145
  });
71
146
  /**
72
147
  * Helper to run CLI and capture output
@@ -100,4 +175,71 @@ function runCLI(args, options = {}) {
100
175
  }, 15000);
101
176
  });
102
177
  }
178
+ /**
179
+ * Drives `bunny-agent acp` as a real subprocess over its actual stdin/stdout:
180
+ * sends each step, waits for the matching response before sending the next
181
+ * (so a step can depend on an earlier `sessionId`), then closes stdin — how a
182
+ * disconnecting editor looks on the wire — and waits for a clean exit.
183
+ */
184
+ function runAcpHandshake(steps) {
185
+ return new Promise((resolve, reject) => {
186
+ const proc = spawn("node", [CLI_PATH, "acp", "--runner", "claude"], {
187
+ env: process.env,
188
+ stdio: "pipe",
189
+ });
190
+ const responses = [];
191
+ let buffer = "";
192
+ let stderr = "";
193
+ let stepIndex = 0;
194
+ let awaitingId = null;
195
+ const sendNext = () => {
196
+ if (stepIndex >= steps.length) {
197
+ proc.stdin?.end();
198
+ return;
199
+ }
200
+ const step = steps[stepIndex++];
201
+ const req = typeof step === "function" ? step(responses) : step;
202
+ awaitingId = req.id;
203
+ proc.stdin?.write(`${JSON.stringify(req)}\n`);
204
+ };
205
+ proc.stdout?.on("data", (chunk) => {
206
+ buffer += chunk.toString();
207
+ const lines = buffer.split("\n");
208
+ buffer = lines.pop() ?? "";
209
+ for (const line of lines) {
210
+ if (!line.trim())
211
+ continue;
212
+ let msg;
213
+ try {
214
+ msg = JSON.parse(line);
215
+ }
216
+ catch {
217
+ reject(new Error(`acp stdout emitted a non-JSON line, which would corrupt real ACP framing: ${line}`));
218
+ return;
219
+ }
220
+ if (msg.id === awaitingId) {
221
+ responses.push(msg);
222
+ awaitingId = null;
223
+ sendNext();
224
+ }
225
+ }
226
+ });
227
+ proc.stderr?.on("data", (chunk) => {
228
+ stderr += chunk.toString();
229
+ });
230
+ proc.on("close", (code) => {
231
+ if (responses.length < steps.length) {
232
+ reject(new Error(`acp process exited after ${responses.length}/${steps.length} responses. stderr: ${stderr}`));
233
+ return;
234
+ }
235
+ resolve({ responses, exitCode: code ?? 0 });
236
+ });
237
+ proc.on("error", reject);
238
+ sendNext();
239
+ setTimeout(() => {
240
+ proc.kill();
241
+ reject(new Error("acp handshake timed out"));
242
+ }, 15000);
243
+ });
244
+ }
103
245
  //# sourceMappingURL=runner-cli.integration.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner-cli.integration.test.js","sourceRoot":"","sources":["../../src/__tests__/runner-cli.integration.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner-cli.integration.test.js","sourceRoot":"","sources":["../../src/__tests__/runner-cli.integration.test.ts"],"names":[],"mappings":"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"}
package/dist/acp.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ export interface RunAcpOptions {
2
+ runner: string;
3
+ model: string;
4
+ cwd: string;
5
+ yolo?: boolean;
6
+ }
7
+ /**
8
+ * Serves BunnyAgent as an ACP agent over stdio, so ACP clients (Zed,
9
+ * JetBrains, ...) can spawn this CLI as their agent subprocess.
10
+ */
11
+ export declare function runAcpAgent(options: RunAcpOptions): Promise<void>;
12
+ //# sourceMappingURL=acp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvE"}
package/dist/acp.js ADDED
@@ -0,0 +1,15 @@
1
+ import { runAcpOverStdio } from "@bunny-agent/server-acp";
2
+ /**
3
+ * Serves BunnyAgent as an ACP agent over stdio, so ACP clients (Zed,
4
+ * JetBrains, ...) can spawn this CLI as their agent subprocess.
5
+ */
6
+ export async function runAcpAgent(options) {
7
+ await runAcpOverStdio({
8
+ defaultRunner: options.runner,
9
+ defaultModel: options.model,
10
+ defaultCwd: options.cwd,
11
+ yolo: options.yolo,
12
+ env: process.env,
13
+ });
14
+ }
15
+ //# sourceMappingURL=acp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp.js","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAS1D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAsB;IACtD,MAAM,eAAe,CAAC;QACpB,aAAa,EAAE,OAAO,CAAC,MAAM;QAC7B,YAAY,EAAE,OAAO,CAAC,KAAK;QAC3B,UAAU,EAAE,OAAO,CAAC,GAAG;QACvB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAA6B;KAC3C,CAAC,CAAC;AACL,CAAC"}