@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 +59 -12
- package/dist/__tests__/runner-cli.integration.test.js +142 -0
- package/dist/__tests__/runner-cli.integration.test.js.map +1 -1
- package/dist/acp.d.ts +12 -0
- package/dist/acp.d.ts.map +1 -0
- package/dist/acp.js +15 -0
- package/dist/acp.js.map +1 -0
- package/dist/bundle.mjs +17559 -17104
- package/dist/cli.js +73 -4
- package/dist/cli.js.map +1 -1
- package/package.json +7 -6
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
|
|
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
|
|
18
|
-
|
|
19
|
-
|
|
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-
|
|
25
|
-
✅ @bunny-agent/
|
|
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
|
package/dist/acp.js.map
ADDED
|
@@ -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"}
|