@bunny-agent/runner-cli 0.9.45-beta.2 → 0.9.45
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/__tests__/env-payload.test.d.ts +2 -0
- package/dist/__tests__/env-payload.test.d.ts.map +1 -0
- package/dist/__tests__/env-payload.test.js +54 -0
- package/dist/__tests__/env-payload.test.js.map +1 -0
- package/dist/bundle.mjs +24 -55
- package/dist/cli.js +1 -66
- package/dist/cli.js.map +1 -1
- package/dist/env-payload.d.ts +26 -0
- package/dist/env-payload.d.ts.map +1 -0
- package/dist/env-payload.js +38 -0
- package/dist/env-payload.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-payload.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/env-payload.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { takeToolRefsFromEnv } from "../env-payload.js";
|
|
3
|
+
describe("takeToolRefsFromEnv", () => {
|
|
4
|
+
beforeEach(() => {
|
|
5
|
+
vi.spyOn(console, "error").mockImplementation(() => { });
|
|
6
|
+
});
|
|
7
|
+
afterEach(() => {
|
|
8
|
+
vi.restoreAllMocks();
|
|
9
|
+
});
|
|
10
|
+
it("returns null and leaves env untouched when var is absent", () => {
|
|
11
|
+
const env = {};
|
|
12
|
+
expect(takeToolRefsFromEnv(env)).toBeNull();
|
|
13
|
+
expect(env.BUNNY_AGENT_TOOL_REFS_JSON).toBeUndefined();
|
|
14
|
+
});
|
|
15
|
+
it("parses payload and unsets the var atomically (read+delete)", () => {
|
|
16
|
+
const env = {
|
|
17
|
+
BUNNY_AGENT_TOOL_REFS_JSON: JSON.stringify({
|
|
18
|
+
tools: [
|
|
19
|
+
{
|
|
20
|
+
name: "x",
|
|
21
|
+
description: "",
|
|
22
|
+
inputSchema: {},
|
|
23
|
+
runtime: { type: "http", url: "http://x" },
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
const result = takeToolRefsFromEnv(env);
|
|
29
|
+
expect(result?.tools).toHaveLength(1);
|
|
30
|
+
expect(env.BUNNY_AGENT_TOOL_REFS_JSON).toBeUndefined();
|
|
31
|
+
});
|
|
32
|
+
it("unsets the var even when JSON is invalid (no leak via env inheritance)", () => {
|
|
33
|
+
const env = {
|
|
34
|
+
BUNNY_AGENT_TOOL_REFS_JSON: "not-json{",
|
|
35
|
+
};
|
|
36
|
+
expect(takeToolRefsFromEnv(env)).toBeNull();
|
|
37
|
+
expect(env.BUNNY_AGENT_TOOL_REFS_JSON).toBeUndefined();
|
|
38
|
+
});
|
|
39
|
+
it("returns null and unsets when payload lacks tools array", () => {
|
|
40
|
+
const env = {
|
|
41
|
+
BUNNY_AGENT_TOOL_REFS_JSON: '{"tools":"not-an-array"}',
|
|
42
|
+
};
|
|
43
|
+
expect(takeToolRefsFromEnv(env)).toBeNull();
|
|
44
|
+
expect(env.BUNNY_AGENT_TOOL_REFS_JSON).toBeUndefined();
|
|
45
|
+
});
|
|
46
|
+
it("each take is one-shot — second call returns null", () => {
|
|
47
|
+
const env = {
|
|
48
|
+
BUNNY_AGENT_TOOL_REFS_JSON: JSON.stringify({ tools: [] }),
|
|
49
|
+
};
|
|
50
|
+
expect(takeToolRefsFromEnv(env)).toEqual({ tools: [] });
|
|
51
|
+
expect(takeToolRefsFromEnv(env)).toBeNull();
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=env-payload.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-payload.test.js","sourceRoot":"","sources":["../../src/__tests__/env-payload.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,GAAG,GAAG,EAAuB,CAAC;QACpC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,aAAa,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,GAAG,GAAG;YACV,0BAA0B,EAAE,IAAI,CAAC,SAAS,CAAC;gBACzC,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,GAAG;wBACT,WAAW,EAAE,EAAE;wBACf,WAAW,EAAE,EAAE;wBACf,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE;qBAC3C;iBACF;aACF,CAAC;SACkB,CAAC;QAEvB,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,aAAa,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,GAAG,GAAG;YACV,0BAA0B,EAAE,WAAW;SACnB,CAAC;QAEvB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,aAAa,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,GAAG,GAAG;YACV,0BAA0B,EAAE,0BAA0B;SAClC,CAAC;QAEvB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,aAAa,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,GAAG,GAAG;YACV,0BAA0B,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;SACrC,CAAC;QAEvB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/bundle.mjs
CHANGED
|
@@ -145,6 +145,29 @@ CMD `);
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
+
// src/env-payload.ts
|
|
149
|
+
function takeToolRefsFromEnv(env = process.env) {
|
|
150
|
+
const raw = env.BUNNY_AGENT_TOOL_REFS_JSON;
|
|
151
|
+
if (!raw) return null;
|
|
152
|
+
delete env.BUNNY_AGENT_TOOL_REFS_JSON;
|
|
153
|
+
try {
|
|
154
|
+
const parsed = JSON.parse(raw);
|
|
155
|
+
if (!Array.isArray(parsed.tools)) {
|
|
156
|
+
console.error(
|
|
157
|
+
"[bunny-agent] BUNNY_AGENT_TOOL_REFS_JSON missing tools array; ignoring."
|
|
158
|
+
);
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
return { tools: parsed.tools };
|
|
162
|
+
} catch (err) {
|
|
163
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
164
|
+
console.error(
|
|
165
|
+
`[bunny-agent] Failed to parse BUNNY_AGENT_TOOL_REFS_JSON: ${message}`
|
|
166
|
+
);
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
148
171
|
// ../../packages/runner-harness/dist/agent-context.js
|
|
149
172
|
var BUNNY_AGENT_SYSTEM_PROMPT = [
|
|
150
173
|
"You are Bunny Agent \u2014 an AI agent built to protect humans and push humanity forward.",
|
|
@@ -5756,54 +5779,6 @@ async function runAgent(options) {
|
|
|
5756
5779
|
config({ path: resolve3(process.cwd(), ".env") });
|
|
5757
5780
|
config({ path: resolve3(process.cwd(), "../.env") });
|
|
5758
5781
|
config({ path: resolve3(process.cwd(), "../../.env") });
|
|
5759
|
-
function takeToolRefsFromEnv() {
|
|
5760
|
-
const raw = process.env.BUNNY_AGENT_TOOL_REFS_JSON;
|
|
5761
|
-
if (!raw) return null;
|
|
5762
|
-
delete process.env.BUNNY_AGENT_TOOL_REFS_JSON;
|
|
5763
|
-
try {
|
|
5764
|
-
const parsed = JSON.parse(raw);
|
|
5765
|
-
if (!Array.isArray(parsed.tools)) {
|
|
5766
|
-
console.error(
|
|
5767
|
-
"[bunny-agent] BUNNY_AGENT_TOOL_REFS_JSON missing tools array; ignoring."
|
|
5768
|
-
);
|
|
5769
|
-
return null;
|
|
5770
|
-
}
|
|
5771
|
-
return {
|
|
5772
|
-
tools: parsed.tools
|
|
5773
|
-
};
|
|
5774
|
-
} catch (err) {
|
|
5775
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
5776
|
-
console.error(
|
|
5777
|
-
`[bunny-agent] Failed to parse BUNNY_AGENT_TOOL_REFS_JSON: ${message}`
|
|
5778
|
-
);
|
|
5779
|
-
return null;
|
|
5780
|
-
}
|
|
5781
|
-
}
|
|
5782
|
-
function takeSystemEnvFromEnv() {
|
|
5783
|
-
const raw = process.env.BUNNY_AGENT_SYSTEM_ENV_JSON;
|
|
5784
|
-
if (!raw) return null;
|
|
5785
|
-
delete process.env.BUNNY_AGENT_SYSTEM_ENV_JSON;
|
|
5786
|
-
try {
|
|
5787
|
-
const parsed = JSON.parse(raw);
|
|
5788
|
-
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
5789
|
-
console.error(
|
|
5790
|
-
"[bunny-agent] BUNNY_AGENT_SYSTEM_ENV_JSON must be a JSON object; ignoring."
|
|
5791
|
-
);
|
|
5792
|
-
return null;
|
|
5793
|
-
}
|
|
5794
|
-
const out = {};
|
|
5795
|
-
for (const [k, v] of Object.entries(parsed)) {
|
|
5796
|
-
if (typeof v === "string") out[k] = v;
|
|
5797
|
-
}
|
|
5798
|
-
return Object.keys(out).length > 0 ? out : null;
|
|
5799
|
-
} catch (err) {
|
|
5800
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
5801
|
-
console.error(
|
|
5802
|
-
`[bunny-agent] Failed to parse BUNNY_AGENT_SYSTEM_ENV_JSON: ${message}`
|
|
5803
|
-
);
|
|
5804
|
-
return null;
|
|
5805
|
-
}
|
|
5806
|
-
}
|
|
5807
5782
|
function getSubcommand() {
|
|
5808
5783
|
for (let i = 2; i < process.argv.length; i++) {
|
|
5809
5784
|
const a = process.argv[i];
|
|
@@ -5952,10 +5927,6 @@ Environment:
|
|
|
5952
5927
|
CODEX_API_KEY OpenAI API key alias (for codex runner)
|
|
5953
5928
|
GEMINI_API_KEY Gemini API key (for gemini runner)
|
|
5954
5929
|
BUNNY_AGENT_WORKSPACE Default workspace path
|
|
5955
|
-
BUNNY_AGENT_SYSTEM_ENV_JSON JSON object of env vars to inject into the
|
|
5956
|
-
pi runner's bash spawn process. Read once and
|
|
5957
|
-
unset on startup. Example: '{"FOO":"bar"}'.
|
|
5958
|
-
Anything not listed here stays out of bash.
|
|
5959
5930
|
`);
|
|
5960
5931
|
}
|
|
5961
5932
|
function printImageBuildHelp() {
|
|
@@ -6023,7 +5994,6 @@ async function main() {
|
|
|
6023
5994
|
const args = parseRunArgs();
|
|
6024
5995
|
process.chdir(args.cwd);
|
|
6025
5996
|
const toolRefs = takeToolRefsFromEnv();
|
|
6026
|
-
const systemEnv = takeSystemEnvFromEnv();
|
|
6027
5997
|
await runAgent({
|
|
6028
5998
|
runner: args.runner,
|
|
6029
5999
|
model: args.model,
|
|
@@ -6035,8 +6005,7 @@ async function main() {
|
|
|
6035
6005
|
resume: args.resume,
|
|
6036
6006
|
yolo: args.yolo,
|
|
6037
6007
|
effort: args.effort,
|
|
6038
|
-
...toolRefs ? { toolRefs: toolRefs.tools } : {}
|
|
6039
|
-
...systemEnv ? { systemEnv } : {}
|
|
6008
|
+
...toolRefs ? { toolRefs: toolRefs.tools } : {}
|
|
6040
6009
|
});
|
|
6041
6010
|
break;
|
|
6042
6011
|
}
|
package/dist/cli.js
CHANGED
|
@@ -15,67 +15,8 @@ config({ path: resolve(process.cwd(), "../.env") });
|
|
|
15
15
|
config({ path: resolve(process.cwd(), "../../.env") });
|
|
16
16
|
import { parseArgs } from "node:util";
|
|
17
17
|
import { buildImage } from "./build-image.js";
|
|
18
|
+
import { takeToolRefsFromEnv } from "./env-payload.js";
|
|
18
19
|
import { runAgent } from "./runner.js";
|
|
19
|
-
/**
|
|
20
|
-
* Read and immediately unset the tool-ref env var the SDK passes through
|
|
21
|
-
* `BunnyAgent.stream`. We unset before any child process can be spawned so the
|
|
22
|
-
* payload (which can contain Bearer tokens or HTTP headers) does not leak via
|
|
23
|
-
* environment inheritance to bash tools the runner may shell out to.
|
|
24
|
-
*/
|
|
25
|
-
function takeToolRefsFromEnv() {
|
|
26
|
-
const raw = process.env.BUNNY_AGENT_TOOL_REFS_JSON;
|
|
27
|
-
if (!raw)
|
|
28
|
-
return null;
|
|
29
|
-
delete process.env.BUNNY_AGENT_TOOL_REFS_JSON;
|
|
30
|
-
try {
|
|
31
|
-
const parsed = JSON.parse(raw);
|
|
32
|
-
if (!Array.isArray(parsed.tools)) {
|
|
33
|
-
console.error("[bunny-agent] BUNNY_AGENT_TOOL_REFS_JSON missing tools array; ignoring.");
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
return {
|
|
37
|
-
tools: parsed.tools,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
catch (err) {
|
|
41
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
42
|
-
console.error(`[bunny-agent] Failed to parse BUNNY_AGENT_TOOL_REFS_JSON: ${message}`);
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Read and immediately unset `BUNNY_AGENT_SYSTEM_ENV_JSON` — the SDK's CLI
|
|
48
|
-
* fallback uses this to declare which env vars the runner should inject into
|
|
49
|
-
* the bash spawn process. Unset before any child spawns so the JSON payload
|
|
50
|
-
* itself doesn't reach bash via env inheritance.
|
|
51
|
-
*
|
|
52
|
-
* Format: `{"K1":"v1","K2":"v2"}` — same shape as the daemon body's
|
|
53
|
-
* `systemEnv` field.
|
|
54
|
-
*/
|
|
55
|
-
function takeSystemEnvFromEnv() {
|
|
56
|
-
const raw = process.env.BUNNY_AGENT_SYSTEM_ENV_JSON;
|
|
57
|
-
if (!raw)
|
|
58
|
-
return null;
|
|
59
|
-
delete process.env.BUNNY_AGENT_SYSTEM_ENV_JSON;
|
|
60
|
-
try {
|
|
61
|
-
const parsed = JSON.parse(raw);
|
|
62
|
-
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
63
|
-
console.error("[bunny-agent] BUNNY_AGENT_SYSTEM_ENV_JSON must be a JSON object; ignoring.");
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
const out = {};
|
|
67
|
-
for (const [k, v] of Object.entries(parsed)) {
|
|
68
|
-
if (typeof v === "string")
|
|
69
|
-
out[k] = v;
|
|
70
|
-
}
|
|
71
|
-
return Object.keys(out).length > 0 ? out : null;
|
|
72
|
-
}
|
|
73
|
-
catch (err) {
|
|
74
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
75
|
-
console.error(`[bunny-agent] Failed to parse BUNNY_AGENT_SYSTEM_ENV_JSON: ${message}`);
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
20
|
// ---------------------------------------------------------------------------
|
|
80
21
|
// Shared helpers
|
|
81
22
|
// ---------------------------------------------------------------------------
|
|
@@ -239,10 +180,6 @@ Environment:
|
|
|
239
180
|
CODEX_API_KEY OpenAI API key alias (for codex runner)
|
|
240
181
|
GEMINI_API_KEY Gemini API key (for gemini runner)
|
|
241
182
|
BUNNY_AGENT_WORKSPACE Default workspace path
|
|
242
|
-
BUNNY_AGENT_SYSTEM_ENV_JSON JSON object of env vars to inject into the
|
|
243
|
-
pi runner's bash spawn process. Read once and
|
|
244
|
-
unset on startup. Example: '{"FOO":"bar"}'.
|
|
245
|
-
Anything not listed here stays out of bash.
|
|
246
183
|
`);
|
|
247
184
|
}
|
|
248
185
|
function printImageBuildHelp() {
|
|
@@ -313,7 +250,6 @@ async function main() {
|
|
|
313
250
|
const args = parseRunArgs();
|
|
314
251
|
process.chdir(args.cwd);
|
|
315
252
|
const toolRefs = takeToolRefsFromEnv();
|
|
316
|
-
const systemEnv = takeSystemEnvFromEnv();
|
|
317
253
|
await runAgent({
|
|
318
254
|
runner: args.runner,
|
|
319
255
|
model: args.model,
|
|
@@ -326,7 +262,6 @@ async function main() {
|
|
|
326
262
|
yolo: args.yolo,
|
|
327
263
|
effort: args.effort,
|
|
328
264
|
...(toolRefs ? { toolRefs: toolRefs.tools } : {}),
|
|
329
|
-
...(systemEnv ? { systemEnv } : {}),
|
|
330
265
|
});
|
|
331
266
|
break;
|
|
332
267
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,4CAA4C;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,2DAA2D;AAC3D,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACjD,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;AACpD,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads & consumes one-shot env vars that carry sensitive payloads from the
|
|
3
|
+
* SDK to runner-cli. "Take" semantics: each helper returns the parsed
|
|
4
|
+
* payload and immediately deletes the source env var so subsequent child
|
|
5
|
+
* processes (notably the pi runner's bash tool) cannot inherit it via
|
|
6
|
+
* `process.env`.
|
|
7
|
+
*
|
|
8
|
+
* Currently only `BUNNY_AGENT_TOOL_REFS_JSON` lives here — toolRefs may
|
|
9
|
+
* carry Bearer tokens / HTTP headers that must never reach bash. Plain
|
|
10
|
+
* `env` / `systemEnv` go through normal `sandbox.exec({env})` because in
|
|
11
|
+
* CLI mode each runner-cli invocation is single-request, and pi's default
|
|
12
|
+
* `ctx.env` (= the runner's `process.env`) is the expected bash environment.
|
|
13
|
+
*/
|
|
14
|
+
import type { PiRunnerOptions } from "@bunny-agent/runner-pi";
|
|
15
|
+
type RunnerToolRefs = NonNullable<PiRunnerOptions["toolRefs"]>;
|
|
16
|
+
export type RunnerToolRefsPayload = {
|
|
17
|
+
tools: RunnerToolRefs;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Take `BUNNY_AGENT_TOOL_REFS_JSON`. Returns null when the var is absent or
|
|
21
|
+
* malformed. The var is deleted before parsing so even malformed payloads
|
|
22
|
+
* don't linger in `process.env` for subsequent spawns.
|
|
23
|
+
*/
|
|
24
|
+
export declare function takeToolRefsFromEnv(env?: NodeJS.ProcessEnv): RunnerToolRefsPayload | null;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=env-payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-payload.d.ts","sourceRoot":"","sources":["../src/env-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,KAAK,cAAc,GAAG,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/D,MAAM,MAAM,qBAAqB,GAAG;IAAE,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,qBAAqB,GAAG,IAAI,CAoB9B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads & consumes one-shot env vars that carry sensitive payloads from the
|
|
3
|
+
* SDK to runner-cli. "Take" semantics: each helper returns the parsed
|
|
4
|
+
* payload and immediately deletes the source env var so subsequent child
|
|
5
|
+
* processes (notably the pi runner's bash tool) cannot inherit it via
|
|
6
|
+
* `process.env`.
|
|
7
|
+
*
|
|
8
|
+
* Currently only `BUNNY_AGENT_TOOL_REFS_JSON` lives here — toolRefs may
|
|
9
|
+
* carry Bearer tokens / HTTP headers that must never reach bash. Plain
|
|
10
|
+
* `env` / `systemEnv` go through normal `sandbox.exec({env})` because in
|
|
11
|
+
* CLI mode each runner-cli invocation is single-request, and pi's default
|
|
12
|
+
* `ctx.env` (= the runner's `process.env`) is the expected bash environment.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Take `BUNNY_AGENT_TOOL_REFS_JSON`. Returns null when the var is absent or
|
|
16
|
+
* malformed. The var is deleted before parsing so even malformed payloads
|
|
17
|
+
* don't linger in `process.env` for subsequent spawns.
|
|
18
|
+
*/
|
|
19
|
+
export function takeToolRefsFromEnv(env = process.env) {
|
|
20
|
+
const raw = env.BUNNY_AGENT_TOOL_REFS_JSON;
|
|
21
|
+
if (!raw)
|
|
22
|
+
return null;
|
|
23
|
+
delete env.BUNNY_AGENT_TOOL_REFS_JSON;
|
|
24
|
+
try {
|
|
25
|
+
const parsed = JSON.parse(raw);
|
|
26
|
+
if (!Array.isArray(parsed.tools)) {
|
|
27
|
+
console.error("[bunny-agent] BUNNY_AGENT_TOOL_REFS_JSON missing tools array; ignoring.");
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return { tools: parsed.tools };
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
34
|
+
console.error(`[bunny-agent] Failed to parse BUNNY_AGENT_TOOL_REFS_JSON: ${message}`);
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=env-payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-payload.js","sourceRoot":"","sources":["../src/env-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GAAG,GAAG,CAAC,0BAA0B,CAAC;IAC3C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,GAAG,CAAC,0BAA0B,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA+B,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CACX,yEAAyE,CAC1E,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CACX,6DAA6D,OAAO,EAAE,CACvE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bunny-agent/runner-cli",
|
|
3
|
-
"version": "0.9.45
|
|
3
|
+
"version": "0.9.45",
|
|
4
4
|
"description": "BunnyAgent Runner CLI - Like gemini-cli or claude-code, runs in your local terminal with AI SDK UI streaming",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -54,10 +54,10 @@
|
|
|
54
54
|
"typescript": "^5.3.0",
|
|
55
55
|
"vitest": "^1.6.1",
|
|
56
56
|
"@bunny-agent/runner-claude": "0.6.2",
|
|
57
|
-
"@bunny-agent/runner-codex": "0.6.2",
|
|
58
|
-
"@bunny-agent/runner-opencode": "0.6.2",
|
|
59
57
|
"@bunny-agent/runner-harness": "0.1.1-beta.0",
|
|
58
|
+
"@bunny-agent/runner-codex": "0.6.2",
|
|
60
59
|
"@bunny-agent/runner-gemini": "0.6.2",
|
|
60
|
+
"@bunny-agent/runner-opencode": "0.6.2",
|
|
61
61
|
"@bunny-agent/runner-pi": "0.6.4-beta.0"
|
|
62
62
|
},
|
|
63
63
|
"scripts": {
|