@bunny-agent/runner-cli 0.9.28

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/dist/cli.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * BunnyAgent Runner CLI
4
+ *
5
+ * Subcommands:
6
+ * bunny-agent run [options] -- "<user input>" Run an agent locally
7
+ * bunny-agent image build [options] Build (and optionally push) a Docker image
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG"}
package/dist/cli.js ADDED
@@ -0,0 +1,289 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * BunnyAgent Runner CLI
4
+ *
5
+ * Subcommands:
6
+ * bunny-agent run [options] -- "<user input>" Run an agent locally
7
+ * bunny-agent image build [options] Build (and optionally push) a Docker image
8
+ */
9
+ import { resolve } from "node:path";
10
+ // Load environment variables from .env file
11
+ import { config } from "dotenv";
12
+ // Try loading .env from current directory and project root
13
+ config({ path: resolve(process.cwd(), ".env") });
14
+ config({ path: resolve(process.cwd(), "../.env") });
15
+ config({ path: resolve(process.cwd(), "../../.env") });
16
+ import { parseArgs } from "node:util";
17
+ import { buildImage } from "./build-image.js";
18
+ import { runAgent } from "./runner.js";
19
+ // ---------------------------------------------------------------------------
20
+ // Shared helpers
21
+ // ---------------------------------------------------------------------------
22
+ /** Get the first positional arg (top-level subcommand). */
23
+ function getSubcommand() {
24
+ for (let i = 2; i < process.argv.length; i++) {
25
+ const a = process.argv[i];
26
+ if (a === "--")
27
+ break;
28
+ if (!a.startsWith("-"))
29
+ return a;
30
+ }
31
+ return undefined;
32
+ }
33
+ /** Get the second positional arg (sub-subcommand, e.g. "build" in "image build"). */
34
+ function getSubSubcommand() {
35
+ let found = 0;
36
+ for (let i = 2; i < process.argv.length; i++) {
37
+ const a = process.argv[i];
38
+ if (a === "--")
39
+ break;
40
+ if (!a.startsWith("-")) {
41
+ found++;
42
+ if (found === 2)
43
+ return a;
44
+ }
45
+ }
46
+ return undefined;
47
+ }
48
+ /** Slice process.argv to args after N positionals. */
49
+ function argsAfterPositionals(n) {
50
+ let found = 0;
51
+ for (let i = 2; i < process.argv.length; i++) {
52
+ if (!process.argv[i].startsWith("-") && process.argv[i] !== "--") {
53
+ found++;
54
+ if (found === n)
55
+ return process.argv.slice(i + 1);
56
+ }
57
+ }
58
+ return [];
59
+ }
60
+ function parseRunArgs() {
61
+ const { values, positionals } = parseArgs({
62
+ args: argsAfterPositionals(1),
63
+ options: {
64
+ runner: { type: "string", short: "r", default: "claude" },
65
+ model: {
66
+ type: "string",
67
+ short: "m",
68
+ default: "claude-sonnet-4-20250514",
69
+ },
70
+ cwd: {
71
+ type: "string",
72
+ short: "c",
73
+ default: process.env.BUNNY_AGENT_WORKSPACE ?? process.cwd(),
74
+ },
75
+ "system-prompt": { type: "string", short: "s" },
76
+ "max-turns": { type: "string", short: "t" },
77
+ "allowed-tools": { type: "string", short: "a" },
78
+ "skill-path": { type: "string", multiple: true },
79
+ resume: { type: "string" },
80
+ yolo: { type: "boolean" },
81
+ help: { type: "boolean", short: "h" },
82
+ },
83
+ allowPositionals: true,
84
+ strict: true,
85
+ });
86
+ if (values.help) {
87
+ printRunHelp();
88
+ process.exit(0);
89
+ }
90
+ const dashIndex = process.argv.indexOf("--");
91
+ let userInput = "";
92
+ if (dashIndex !== -1 && dashIndex < process.argv.length - 1) {
93
+ userInput = process.argv.slice(dashIndex + 1).join(" ");
94
+ }
95
+ else if (positionals.length > 0) {
96
+ userInput = positionals.join(" ");
97
+ }
98
+ if (!userInput) {
99
+ console.error("Error: User input is required");
100
+ console.error('Usage: bunny-agent run [options] -- "<user input>"');
101
+ process.exit(1);
102
+ }
103
+ const runner = values.runner;
104
+ if (!["claude", "codex", "gemini", "opencode", "copilot", "pi"].includes(runner)) {
105
+ console.error('Error: --runner must be one of: "claude", "codex", "gemini", "opencode", "copilot", "pi"');
106
+ process.exit(1);
107
+ }
108
+ return {
109
+ runner,
110
+ model: values.model,
111
+ cwd: values.cwd,
112
+ systemPrompt: values["system-prompt"],
113
+ maxTurns: values["max-turns"]
114
+ ? Number.parseInt(values["max-turns"], 10)
115
+ : undefined,
116
+ allowedTools: values["allowed-tools"]?.split(",").map((t) => t.trim()),
117
+ skillPaths: values["skill-path"],
118
+ resume: values.resume,
119
+ yolo: values["yolo"],
120
+ userInput,
121
+ };
122
+ }
123
+ function parseImageBuildArgs() {
124
+ const { values } = parseArgs({
125
+ args: argsAfterPositionals(2),
126
+ options: {
127
+ name: { type: "string", default: "bunny-agent" },
128
+ tag: { type: "string", default: "latest" },
129
+ image: { type: "string" },
130
+ platform: { type: "string", default: "linux/amd64" },
131
+ template: { type: "string" },
132
+ push: { type: "boolean", default: false },
133
+ help: { type: "boolean", short: "h" },
134
+ },
135
+ allowPositionals: false,
136
+ strict: true,
137
+ });
138
+ if (values.help) {
139
+ printImageBuildHelp();
140
+ process.exit(0);
141
+ }
142
+ return {
143
+ name: values.name,
144
+ tag: values.tag,
145
+ image: values.image,
146
+ platform: values.platform,
147
+ template: values.template,
148
+ push: values.push ?? false,
149
+ };
150
+ }
151
+ // ---------------------------------------------------------------------------
152
+ // Help text
153
+ // ---------------------------------------------------------------------------
154
+ function printRunHelp() {
155
+ console.log(`
156
+ 🤖 BunnyAgent Runner CLI — run
157
+
158
+ Runs an agent locally in your terminal, streaming AI SDK UI messages to stdout.
159
+
160
+ Usage:
161
+ bunny-agent run [options] -- "<user input>"
162
+
163
+ Options:
164
+ -r, --runner <runner> Runner: claude, codex, gemini, opencode, copilot, pi (default: claude)
165
+ -m, --model <model> Model (default: claude-sonnet-4-20250514)
166
+ -c, --cwd <path> Working directory (default: cwd)
167
+ -s, --system-prompt <prompt> Custom system prompt
168
+ -t, --max-turns <n> Max conversation turns
169
+ -a, --allowed-tools <tools> Comma-separated allowed tools
170
+ --skill-path <path> Additional skill path (can be repeated, for pi runner)
171
+ --resume <session-id> Resume a previous session
172
+ -h, --help Show this help
173
+
174
+ Environment:
175
+ ANTHROPIC_API_KEY Anthropic API key (for claude runner)
176
+ OPENAI_API_KEY OpenAI API key (for codex runner)
177
+ CODEX_API_KEY OpenAI API key alias (for codex runner)
178
+ GEMINI_API_KEY Gemini API key (for gemini runner)
179
+ BUNNY_AGENT_WORKSPACE Default workspace path
180
+ `);
181
+ }
182
+ function printImageBuildHelp() {
183
+ console.log(`
184
+ 🐳 BunnyAgent Runner CLI — image build
185
+
186
+ Build (and optionally push) a BunnyAgent Docker image.
187
+ The image includes Claude Agent SDK + runner-cli pre-installed.
188
+
189
+ Usage:
190
+ bunny-agent image build [options]
191
+
192
+ Options:
193
+ --name <name> Image name, e.g. vikadata/bunny-agent-seo (default: bunny-agent)
194
+ --tag <tag> Image tag (default: latest)
195
+ --image <full> Full image name override (e.g. myorg/myimage:v1)
196
+ --platform <plat> Build platform (default: linux/amd64)
197
+ --template <path> Path to agent template directory to bake into the image
198
+ --push Push image to registry after build
199
+ -h, --help Show this help
200
+
201
+ Examples:
202
+ bunny-agent image build --name vikadata/bunny-agent-seo --tag 0.1.0
203
+ bunny-agent image build --name vikadata/bunny-agent-seo --tag 0.1.0 --template ./templates/seo-agent
204
+ bunny-agent image build --name vikadata/bunny-agent-seo --tag 0.1.0 --template ./templates/seo-agent --push
205
+ `);
206
+ }
207
+ function printImageHelp() {
208
+ console.log(`
209
+ 🐳 BunnyAgent Runner CLI — image
210
+
211
+ Manage BunnyAgent Docker images.
212
+
213
+ Usage:
214
+ bunny-agent image <subcommand> [options]
215
+
216
+ Subcommands:
217
+ build Build (and optionally push) a Docker image
218
+
219
+ Run "bunny-agent image build --help" for build options.
220
+ `);
221
+ }
222
+ function printGlobalHelp() {
223
+ console.log(`
224
+ 🤖 BunnyAgent Runner CLI
225
+
226
+ Usage:
227
+ bunny-agent <command> [options]
228
+
229
+ Commands:
230
+ run Run an agent locally (streams AI SDK UI messages to stdout)
231
+ image build Build a BunnyAgent Docker image (with optional --push)
232
+
233
+ Run "bunny-agent <command> --help" for command-specific options.
234
+ `);
235
+ }
236
+ // ---------------------------------------------------------------------------
237
+ // Main
238
+ // ---------------------------------------------------------------------------
239
+ async function main() {
240
+ const sub = getSubcommand();
241
+ if (!sub || sub === "--help" || sub === "-h") {
242
+ printGlobalHelp();
243
+ process.exit(0);
244
+ }
245
+ switch (sub) {
246
+ case "run": {
247
+ const args = parseRunArgs();
248
+ process.chdir(args.cwd);
249
+ await runAgent({
250
+ runner: args.runner,
251
+ model: args.model,
252
+ userInput: args.userInput,
253
+ systemPrompt: args.systemPrompt,
254
+ maxTurns: args.maxTurns,
255
+ allowedTools: args.allowedTools,
256
+ skillPaths: args.skillPaths,
257
+ resume: args.resume,
258
+ yolo: args.yolo,
259
+ });
260
+ break;
261
+ }
262
+ case "image": {
263
+ const subSub = getSubSubcommand();
264
+ if (!subSub || subSub === "--help" || subSub === "-h") {
265
+ printImageHelp();
266
+ process.exit(0);
267
+ }
268
+ if (subSub === "build") {
269
+ const args = parseImageBuildArgs();
270
+ await buildImage(args);
271
+ }
272
+ else {
273
+ console.error(`Unknown image subcommand: ${subSub}`);
274
+ printImageHelp();
275
+ process.exit(1);
276
+ }
277
+ break;
278
+ }
279
+ default:
280
+ console.error(`Unknown command: ${sub}`);
281
+ printGlobalHelp();
282
+ process.exit(1);
283
+ }
284
+ }
285
+ main().catch((error) => {
286
+ console.error("Fatal error:", error.message);
287
+ process.exit(1);
288
+ });
289
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { type BuildImageOptions, buildImage } from "./build-image.js";
2
+ export { type RunAgentOptions, runAgent } from "./runner.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,KAAK,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { buildImage } from "./build-image.js";
2
+ export { runAgent } from "./runner.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAwB,QAAQ,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type RunnerCoreOptions } from "@bunny-agent/runner-harness";
2
+ export type RunAgentOptions = RunnerCoreOptions;
3
+ /**
4
+ * Run the agent, stream AI SDK UI messages to stdout.
5
+ * Handles SIGTERM/SIGINT signals.
6
+ */
7
+ export declare function runAgent(options: RunAgentOptions): Promise<void>;
8
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CActE"}
package/dist/runner.js ADDED
@@ -0,0 +1,21 @@
1
+ import { createRunner, } from "@bunny-agent/runner-harness";
2
+ /**
3
+ * Run the agent, stream AI SDK UI messages to stdout.
4
+ * Handles SIGTERM/SIGINT signals.
5
+ */
6
+ export async function runAgent(options) {
7
+ const abortController = new AbortController();
8
+ const signalHandler = () => abortController.abort();
9
+ process.on("SIGTERM", signalHandler);
10
+ process.on("SIGINT", signalHandler);
11
+ try {
12
+ for await (const chunk of createRunner({ ...options, abortController })) {
13
+ process.stdout.write(chunk);
14
+ }
15
+ }
16
+ finally {
17
+ process.off("SIGTERM", signalHandler);
18
+ process.off("SIGINT", signalHandler);
19
+ }
20
+ }
21
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAEb,MAAM,6BAA6B,CAAC;AAIrC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB;IACrD,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAEpC,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,YAAY,CAAC,EAAE,GAAG,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;YACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACvC,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@bunny-agent/runner-cli",
3
+ "version": "0.9.28",
4
+ "description": "BunnyAgent Runner CLI - Like gemini-cli or claude-code, runs in your local terminal with AI SDK UI streaming",
5
+ "type": "module",
6
+ "bin": {
7
+ "bunny-agent-runner": "./dist/bundle.mjs"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "module": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "Dockerfile"
21
+ ],
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/vikadata/bunny-agent.git",
25
+ "directory": "apps/runner-cli"
26
+ },
27
+ "license": "Apache-2.0",
28
+ "publishConfig": {
29
+ "access": "public"
30
+ },
31
+ "engines": {
32
+ "node": ">=20.0.0"
33
+ },
34
+ "keywords": [
35
+ "cli",
36
+ "agent",
37
+ "bunny-agent",
38
+ "runner",
39
+ "claude",
40
+ "anthropic"
41
+ ],
42
+ "dependencies": {
43
+ "@anthropic-ai/claude-agent-sdk": "0.2.70",
44
+ "@mariozechner/pi-agent-core": "0.64.0",
45
+ "@mariozechner/pi-ai": "0.64.0",
46
+ "@mariozechner/pi-coding-agent": "0.64.0",
47
+ "@openai/codex-sdk": "^0.110.0",
48
+ "dotenv": "^17.3.1",
49
+ "zod": "^4.0.0"
50
+ },
51
+ "devDependencies": {
52
+ "@types/node": "^20.10.0",
53
+ "esbuild": "^0.27.2",
54
+ "typescript": "^5.3.0",
55
+ "vitest": "^1.6.1",
56
+ "@bunny-agent/runner-harness": "0.1.1-beta.0",
57
+ "@bunny-agent/runner-claude": "0.6.2",
58
+ "@bunny-agent/runner-codex": "0.6.2",
59
+ "@bunny-agent/runner-gemini": "0.6.2",
60
+ "@bunny-agent/runner-opencode": "0.6.2",
61
+ "@bunny-agent/runner-pi": "0.6.4-beta.0"
62
+ },
63
+ "scripts": {
64
+ "build": "tsc && pnpm bundle",
65
+ "build:bundle": "tsc && pnpm bundle",
66
+ "bundle": "esbuild src/cli.ts --bundle --platform=node --format=esm --external:dotenv --external:@anthropic-ai/claude-agent-sdk --external:@openai/codex-sdk --external:@mariozechner/pi-agent-core --external:@mariozechner/pi-ai --external:@mariozechner/pi-coding-agent --outfile=dist/bundle.mjs",
67
+ "dev": "tsc --watch",
68
+ "clean": "rm -rf dist",
69
+ "typecheck": "tsc --noEmit",
70
+ "lint": "echo 'no lint configured'",
71
+ "test": "vitest run --passWithNoTests"
72
+ }
73
+ }