@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/LICENSE +201 -0
- package/README.md +173 -0
- package/dist/__tests__/build-image.test.d.ts +2 -0
- package/dist/__tests__/build-image.test.d.ts.map +1 -0
- package/dist/__tests__/build-image.test.js +145 -0
- package/dist/__tests__/build-image.test.js.map +1 -0
- package/dist/__tests__/runner-cli.integration.test.d.ts +6 -0
- package/dist/__tests__/runner-cli.integration.test.d.ts.map +1 -0
- package/dist/__tests__/runner-cli.integration.test.js +102 -0
- package/dist/__tests__/runner-cli.integration.test.js.map +1 -0
- package/dist/__tests__/runner.test.d.ts +2 -0
- package/dist/__tests__/runner.test.d.ts.map +1 -0
- package/dist/__tests__/runner.test.js +120 -0
- package/dist/__tests__/runner.test.js.map +1 -0
- package/dist/build-image.d.ts +16 -0
- package/dist/build-image.d.ts.map +1 -0
- package/dist/build-image.js +122 -0
- package/dist/build-image.js.map +1 -0
- package/dist/bundle.mjs +2710 -0
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +289 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/runner.d.ts +8 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +21 -0
- package/dist/runner.js.map +1 -0
- package/package.json +73 -0
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
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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"}
|
package/dist/runner.d.ts
ADDED
|
@@ -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
|
+
}
|