@bunny-agent/runner-cli 0.9.59-beta.2 → 0.9.59-beta.3
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.js +20 -1
- package/dist/__tests__/env-payload.test.js.map +1 -1
- package/dist/bundle.mjs +266 -19
- package/dist/cli.js +3 -2
- package/dist/cli.js.map +1 -1
- package/dist/env-payload.d.ts +2 -0
- package/dist/env-payload.d.ts.map +1 -1
- package/dist/env-payload.js +10 -0
- package/dist/env-payload.js.map +1 -1
- package/package.json +3 -2
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { takeMcpConfigFromEnv, takeToolRefsFromEnv } from "../env-payload.js";
|
|
2
|
+
import { takeAgentInputFromEnv, takeMcpConfigFromEnv, takeToolRefsFromEnv, } from "../env-payload.js";
|
|
3
|
+
describe("takeAgentInputFromEnv", () => {
|
|
4
|
+
it("validates and deletes the one-shot structured payload", () => {
|
|
5
|
+
const env = {
|
|
6
|
+
BUNNY_AGENT_INPUT_JSON: JSON.stringify({
|
|
7
|
+
version: 1,
|
|
8
|
+
input: [{ type: "text", text: "hello" }],
|
|
9
|
+
capabilities: [],
|
|
10
|
+
execution: {},
|
|
11
|
+
}),
|
|
12
|
+
};
|
|
13
|
+
expect(takeAgentInputFromEnv(env)).toMatchObject({ version: 1 });
|
|
14
|
+
expect(env.BUNNY_AGENT_INPUT_JSON).toBeUndefined();
|
|
15
|
+
});
|
|
16
|
+
it("deletes malformed payloads before throwing", () => {
|
|
17
|
+
const env = { BUNNY_AGENT_INPUT_JSON: "not-json" };
|
|
18
|
+
expect(() => takeAgentInputFromEnv(env)).toThrow();
|
|
19
|
+
expect(env.BUNNY_AGENT_INPUT_JSON).toBeUndefined();
|
|
20
|
+
});
|
|
21
|
+
});
|
|
3
22
|
describe("takeToolRefsFromEnv", () => {
|
|
4
23
|
beforeEach(() => {
|
|
5
24
|
vi.spyOn(console, "error").mockImplementation(() => { });
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"env-payload.test.js","sourceRoot":"","sources":["../../src/__tests__/env-payload.test.ts"],"names":[],"mappings":"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"}
|
package/dist/bundle.mjs
CHANGED
|
@@ -145,7 +145,199 @@ CMD `);
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
+
// ../../packages/manager/dist/agent-input.js
|
|
149
|
+
var assertString = (value, field) => {
|
|
150
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
151
|
+
throw new Error(`Invalid structured agent input: ${field} must be a non-empty string`);
|
|
152
|
+
}
|
|
153
|
+
return value;
|
|
154
|
+
};
|
|
155
|
+
var isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
156
|
+
var hasForbiddenSecretKey = (value) => {
|
|
157
|
+
if (Array.isArray(value))
|
|
158
|
+
return value.some(hasForbiddenSecretKey);
|
|
159
|
+
if (!isRecord(value))
|
|
160
|
+
return false;
|
|
161
|
+
return Object.entries(value).some(([key, child]) => {
|
|
162
|
+
const normalized = key.toLowerCase();
|
|
163
|
+
return (/* @__PURE__ */ new Set([
|
|
164
|
+
"apikey",
|
|
165
|
+
"api_key",
|
|
166
|
+
"authorization",
|
|
167
|
+
"cookie",
|
|
168
|
+
"credential",
|
|
169
|
+
"credentials",
|
|
170
|
+
"password",
|
|
171
|
+
"secret",
|
|
172
|
+
"token",
|
|
173
|
+
"accesstoken",
|
|
174
|
+
"refreshtoken",
|
|
175
|
+
"signedurl",
|
|
176
|
+
"storageref"
|
|
177
|
+
])).has(normalized) || hasForbiddenSecretKey(child);
|
|
178
|
+
});
|
|
179
|
+
};
|
|
180
|
+
var parseAgentTurnInputV1 = (value) => {
|
|
181
|
+
if (!isRecord(value) || value.version !== 1 || !Array.isArray(value.input)) {
|
|
182
|
+
throw new Error("Invalid structured agent input: expected AgentTurnInputV1");
|
|
183
|
+
}
|
|
184
|
+
if (!Array.isArray(value.capabilities) || !isRecord(value.execution)) {
|
|
185
|
+
throw new Error("Invalid structured agent input: capabilities and execution are required");
|
|
186
|
+
}
|
|
187
|
+
if (hasForbiddenSecretKey(value.execution)) {
|
|
188
|
+
throw new Error("Invalid structured agent input: execution must not contain secrets");
|
|
189
|
+
}
|
|
190
|
+
if (value.displaySnapshot !== void 0) {
|
|
191
|
+
if (!isRecord(value.displaySnapshot) || value.displaySnapshot.version !== 1 || !("document" in value.displaySnapshot) || hasForbiddenSecretKey(value.displaySnapshot)) {
|
|
192
|
+
throw new Error("Invalid structured agent input: displaySnapshot must be version 1 and secret-free");
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const requireRecordArray = (candidate, field) => {
|
|
196
|
+
if (candidate === void 0)
|
|
197
|
+
return [];
|
|
198
|
+
if (!Array.isArray(candidate) || !candidate.every(isRecord)) {
|
|
199
|
+
throw new Error(`Invalid structured agent input: execution.${field} must be an object array`);
|
|
200
|
+
}
|
|
201
|
+
return candidate;
|
|
202
|
+
};
|
|
203
|
+
const resolvedSkills = requireRecordArray(value.execution.skills, "skills");
|
|
204
|
+
const resolvedIntegrations = requireRecordArray(value.execution.integrations, "integrations");
|
|
205
|
+
const resolvedReferences = requireRecordArray(value.execution.references, "references");
|
|
206
|
+
const resolvedCapabilityKeys = value.execution.capabilityKeys ?? [];
|
|
207
|
+
if (!Array.isArray(resolvedCapabilityKeys) || !resolvedCapabilityKeys.every((key) => typeof key === "string")) {
|
|
208
|
+
throw new Error("Invalid structured agent input: execution.capabilityKeys must be a string array");
|
|
209
|
+
}
|
|
210
|
+
const assetIds = /* @__PURE__ */ new Set();
|
|
211
|
+
for (const [index, item] of value.input.entries()) {
|
|
212
|
+
if (!isRecord(item)) {
|
|
213
|
+
throw new Error(`Invalid structured agent input: input[${index}] must be an object`);
|
|
214
|
+
}
|
|
215
|
+
switch (item.type) {
|
|
216
|
+
case "text":
|
|
217
|
+
if (typeof item.text !== "string") {
|
|
218
|
+
throw new Error(`Invalid structured agent input: input[${index}].text must be a string`);
|
|
219
|
+
}
|
|
220
|
+
break;
|
|
221
|
+
case "asset": {
|
|
222
|
+
const id = assertString(item.id, `input[${index}].id`);
|
|
223
|
+
if (assetIds.has(id)) {
|
|
224
|
+
throw new Error(`Invalid structured agent input: duplicate asset id ${id}`);
|
|
225
|
+
}
|
|
226
|
+
assetIds.add(id);
|
|
227
|
+
assertString(item.label, `input[${index}].label`);
|
|
228
|
+
if (!isRecord(item.asset)) {
|
|
229
|
+
throw new Error(`Invalid structured agent input: input[${index}].asset is required`);
|
|
230
|
+
}
|
|
231
|
+
const mediaType = assertString(item.asset.mediaType, `input[${index}].asset.mediaType`);
|
|
232
|
+
assertString(item.asset.data, `input[${index}].asset.data`);
|
|
233
|
+
if (!mediaType.startsWith("image/")) {
|
|
234
|
+
throw new Error(`Unsupported structured agent input asset type: ${mediaType}`);
|
|
235
|
+
}
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
case "skill": {
|
|
239
|
+
const id = assertString(item.id, `input[${index}].id`);
|
|
240
|
+
const name = assertString(item.name, `input[${index}].name`);
|
|
241
|
+
if (!resolvedSkills.some((skill) => skill.id === id && skill.name === name)) {
|
|
242
|
+
throw new Error(`Unresolved structured agent skill: ${id}`);
|
|
243
|
+
}
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
case "integration": {
|
|
247
|
+
const id = assertString(item.id, `input[${index}].id`);
|
|
248
|
+
const providerKey = assertString(item.providerKey, `input[${index}].providerKey`);
|
|
249
|
+
if (!resolvedIntegrations.some((integration) => integration.id === id && integration.providerKey === providerKey)) {
|
|
250
|
+
throw new Error(`Unresolved structured agent integration: ${id}`);
|
|
251
|
+
}
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
case "reference":
|
|
255
|
+
if (!resolvedReferences.some((reference) => reference.id === assertString(item.id, `input[${index}].id`) && reference.referenceKind === assertString(item.referenceKind, `input[${index}].referenceKind`) && reference.targetId === assertString(item.targetId, `input[${index}].targetId`))) {
|
|
256
|
+
throw new Error(`Unresolved structured agent reference: ${String(item.id)}`);
|
|
257
|
+
}
|
|
258
|
+
break;
|
|
259
|
+
case "extension": {
|
|
260
|
+
assertString(item.id, `input[${index}].id`);
|
|
261
|
+
const key = `${assertString(item.namespace, `input[${index}].namespace`)}/${assertString(item.name, `input[${index}].name`)}`;
|
|
262
|
+
if (!Number.isSafeInteger(item.version) || Number(item.version) < 1) {
|
|
263
|
+
throw new Error(`Invalid structured agent input: input[${index}].version must be a positive integer`);
|
|
264
|
+
}
|
|
265
|
+
if (!isRecord(item.payload) || hasForbiddenSecretKey(item.payload)) {
|
|
266
|
+
throw new Error(`Invalid structured agent input: input[${index}].payload must be secret-free JSON`);
|
|
267
|
+
}
|
|
268
|
+
const versions = value.execution.extensionVersions;
|
|
269
|
+
if (!isRecord(versions) || versions[key] !== item.version) {
|
|
270
|
+
throw new Error(`Unsupported structured agent input extension: ${key}@${String(item.version)}`);
|
|
271
|
+
}
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
default:
|
|
275
|
+
throw new Error(`Unsupported structured agent input type: ${String(item.type)}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
for (const [index, capability] of value.capabilities.entries()) {
|
|
279
|
+
if (!isRecord(capability)) {
|
|
280
|
+
throw new Error(`Invalid structured agent input: capabilities[${index}] must be an object`);
|
|
281
|
+
}
|
|
282
|
+
const key = assertString(capability.key, `capabilities[${index}].key`);
|
|
283
|
+
if (typeof capability.enabled !== "boolean") {
|
|
284
|
+
throw new Error(`Invalid structured agent input: capabilities[${index}].enabled must be boolean`);
|
|
285
|
+
}
|
|
286
|
+
if (capability.enabled && !resolvedCapabilityKeys.includes(key)) {
|
|
287
|
+
throw new Error(`Unresolved structured agent capability: ${key}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
const hasSemanticInput = value.input.some((item) => isRecord(item) && item.type !== "text");
|
|
291
|
+
if ((hasSemanticInput || value.capabilities.length > 0) && value.execution.resolvedBy !== "server") {
|
|
292
|
+
throw new Error("Invalid structured agent input: semantic inputs require server-resolved execution");
|
|
293
|
+
}
|
|
294
|
+
return value;
|
|
295
|
+
};
|
|
296
|
+
var compileAgentTurnInput = (turn) => {
|
|
297
|
+
const parsed = parseAgentTurnInputV1(turn);
|
|
298
|
+
const text = [];
|
|
299
|
+
const images = [];
|
|
300
|
+
for (const item of parsed.input) {
|
|
301
|
+
switch (item.type) {
|
|
302
|
+
case "text":
|
|
303
|
+
text.push(item.text);
|
|
304
|
+
break;
|
|
305
|
+
case "asset":
|
|
306
|
+
images.push({
|
|
307
|
+
id: item.id,
|
|
308
|
+
label: item.label,
|
|
309
|
+
mediaType: item.asset.mediaType,
|
|
310
|
+
data: item.asset.data,
|
|
311
|
+
filename: item.asset.filename
|
|
312
|
+
});
|
|
313
|
+
break;
|
|
314
|
+
case "skill":
|
|
315
|
+
case "integration":
|
|
316
|
+
break;
|
|
317
|
+
case "reference":
|
|
318
|
+
text.push(item.label ?? `[${item.referenceKind}: ${item.targetId}]`);
|
|
319
|
+
break;
|
|
320
|
+
case "extension":
|
|
321
|
+
throw new Error(`Runner adapter does not support extension ${item.namespace}/${item.name}@${item.version}`);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return { text: text.join(""), images };
|
|
325
|
+
};
|
|
326
|
+
var createLegacyAgentTurnInput = (userInput) => ({
|
|
327
|
+
version: 1,
|
|
328
|
+
input: [{ type: "text", text: userInput }],
|
|
329
|
+
capabilities: [],
|
|
330
|
+
execution: {}
|
|
331
|
+
});
|
|
332
|
+
|
|
148
333
|
// src/env-payload.ts
|
|
334
|
+
function takeAgentInputFromEnv(env = process.env) {
|
|
335
|
+
const raw = env.BUNNY_AGENT_INPUT_JSON;
|
|
336
|
+
if (raw === void 0) return null;
|
|
337
|
+
delete env.BUNNY_AGENT_INPUT_JSON;
|
|
338
|
+
if (raw.length === 0) return null;
|
|
339
|
+
return parseAgentTurnInputV1(JSON.parse(raw));
|
|
340
|
+
}
|
|
149
341
|
function takeToolRefsFromEnv(env = process.env) {
|
|
150
342
|
const raw = env.BUNNY_AGENT_TOOL_REFS_JSON;
|
|
151
343
|
if (!raw) return null;
|
|
@@ -14524,6 +14716,38 @@ function errorResult(text) {
|
|
|
14524
14716
|
}
|
|
14525
14717
|
|
|
14526
14718
|
// ../../packages/runner-claude/dist/claude-runner.js
|
|
14719
|
+
function buildUserMessage(userInput) {
|
|
14720
|
+
const parsedContent = typeof userInput === "string" ? userInput : buildStructuredClaudeContent(userInput);
|
|
14721
|
+
return {
|
|
14722
|
+
type: "user",
|
|
14723
|
+
message: {
|
|
14724
|
+
role: "user",
|
|
14725
|
+
content: parsedContent
|
|
14726
|
+
}
|
|
14727
|
+
};
|
|
14728
|
+
}
|
|
14729
|
+
function buildStructuredClaudeContent(input) {
|
|
14730
|
+
const compiled = compileAgentTurnInput(input);
|
|
14731
|
+
const content = [];
|
|
14732
|
+
for (const image of compiled.images) {
|
|
14733
|
+
content.push({ type: "text", text: image.label });
|
|
14734
|
+
content.push({
|
|
14735
|
+
type: "image",
|
|
14736
|
+
source: {
|
|
14737
|
+
type: "base64",
|
|
14738
|
+
media_type: image.mediaType,
|
|
14739
|
+
data: image.data
|
|
14740
|
+
}
|
|
14741
|
+
});
|
|
14742
|
+
}
|
|
14743
|
+
if (compiled.text.length > 0) {
|
|
14744
|
+
content.push({ type: "text", text: compiled.text });
|
|
14745
|
+
}
|
|
14746
|
+
return content;
|
|
14747
|
+
}
|
|
14748
|
+
async function* buildSDKUserMessageIterable(userInput) {
|
|
14749
|
+
yield buildUserMessage(userInput);
|
|
14750
|
+
}
|
|
14527
14751
|
function createCanUseToolCallback(claudeOptions) {
|
|
14528
14752
|
return async (toolName, input, options) => {
|
|
14529
14753
|
const { toolUseID } = options;
|
|
@@ -14614,15 +14838,15 @@ function createClaudeRunner(options) {
|
|
|
14614
14838
|
async *run(userInput) {
|
|
14615
14839
|
if (!hasClaudeAuth()) {
|
|
14616
14840
|
console.error("[BunnyAgent] Warning: No Claude auth configured. Using mock response.\nTo use the real Claude Agent SDK, set one of:\n ANTHROPIC_API_KEY, AWS_BEARER_TOKEN_BEDROCK, ANTHROPIC_AUTH_TOKEN, or LITELLM_MASTER_KEY\n Or for Bedrock proxy: CLAUDE_CODE_USE_BEDROCK=1 and ANTHROPIC_BEDROCK_BASE_URL (and ANTHROPIC_AUTH_TOKEN or LITELLM_MASTER_KEY)\nThen install the SDK: npm install @anthropic-ai/claude-agent-sdk");
|
|
14617
|
-
yield* runMockAgent(options, userInput, options.abortController?.signal);
|
|
14841
|
+
yield* runMockAgent(options, typeof userInput === "string" ? userInput : compileAgentTurnInput(userInput).text, options.abortController?.signal);
|
|
14618
14842
|
return;
|
|
14619
14843
|
}
|
|
14620
14844
|
const sdk = await loadClaudeAgentSDK();
|
|
14621
14845
|
if (sdk) {
|
|
14622
|
-
yield* runWithClaudeAgentSDK(sdk, options, userInput);
|
|
14846
|
+
yield* runWithClaudeAgentSDK(sdk, options, typeof userInput === "string" ? userInput : buildSDKUserMessageIterable(userInput));
|
|
14623
14847
|
} else {
|
|
14624
14848
|
console.error("[BunnyAgent] Warning: @anthropic-ai/claude-agent-sdk not installed. Using mock response.\nInstall the SDK: npm install @anthropic-ai/claude-agent-sdk");
|
|
14625
|
-
yield* runMockAgent(options, userInput, options.abortController?.signal);
|
|
14849
|
+
yield* runMockAgent(options, typeof userInput === "string" ? userInput : compileAgentTurnInput(userInput).text, options.abortController?.signal);
|
|
14626
14850
|
}
|
|
14627
14851
|
}
|
|
14628
14852
|
};
|
|
@@ -17230,14 +17454,14 @@ var zGuardCreateElicitationResponseCancel = object({
|
|
|
17230
17454
|
|
|
17231
17455
|
// ../../node_modules/.pnpm/@agentclientprotocol+sdk@1.2.1_zod@4.3.6/node_modules/@agentclientprotocol/sdk/dist/jsonrpc.js
|
|
17232
17456
|
var CANCEL_REQUEST_METHOD = "$/cancel_request";
|
|
17233
|
-
function
|
|
17457
|
+
function isRecord2(value) {
|
|
17234
17458
|
return typeof value === "object" && value !== null;
|
|
17235
17459
|
}
|
|
17236
17460
|
function isJsonRpcId(value) {
|
|
17237
17461
|
return value === null || typeof value === "string" || typeof value === "number" && Number.isFinite(value);
|
|
17238
17462
|
}
|
|
17239
17463
|
function cancelRequestId(params) {
|
|
17240
|
-
if (!
|
|
17464
|
+
if (!isRecord2(params) || !isJsonRpcId(params["requestId"])) {
|
|
17241
17465
|
return void 0;
|
|
17242
17466
|
}
|
|
17243
17467
|
return params["requestId"];
|
|
@@ -17669,7 +17893,7 @@ var Connection = class {
|
|
|
17669
17893
|
if (this.abortController.signal.aborted) {
|
|
17670
17894
|
return;
|
|
17671
17895
|
}
|
|
17672
|
-
if (!
|
|
17896
|
+
if (!isRecord2(message)) {
|
|
17673
17897
|
console.error("Invalid message", { message });
|
|
17674
17898
|
return;
|
|
17675
17899
|
}
|
|
@@ -17762,7 +17986,7 @@ var Connection = class {
|
|
|
17762
17986
|
pendingResponse.cleanup?.();
|
|
17763
17987
|
if ("result" in response) {
|
|
17764
17988
|
pendingResponse.resolve(response.result);
|
|
17765
|
-
} else if ("error" in response &&
|
|
17989
|
+
} else if ("error" in response && isRecord2(response.error)) {
|
|
17766
17990
|
const { code, message, data } = response.error;
|
|
17767
17991
|
pendingResponse.reject(new RequestError(code, message, data));
|
|
17768
17992
|
} else {
|
|
@@ -18035,7 +18259,7 @@ function ndJsonStream(output, input) {
|
|
|
18035
18259
|
if (trimmedLine) {
|
|
18036
18260
|
try {
|
|
18037
18261
|
const message = JSON.parse(trimmedLine);
|
|
18038
|
-
if (
|
|
18262
|
+
if (isRecord2(message)) {
|
|
18039
18263
|
controller.enqueue(message);
|
|
18040
18264
|
} else {
|
|
18041
18265
|
console.warn("Skipping JSON line that is not an object:", trimmedLine);
|
|
@@ -24629,8 +24853,15 @@ function createPiRunner(options = {}) {
|
|
|
24629
24853
|
}
|
|
24630
24854
|
try {
|
|
24631
24855
|
traceRawMessage(cwd, null, true, options.env);
|
|
24632
|
-
const
|
|
24633
|
-
const
|
|
24856
|
+
const compiled = typeof userInput === "string" ? { text: userInput, images: [] } : compileAgentTurnInput(userInput);
|
|
24857
|
+
const images = compiled.images.map((image) => ({
|
|
24858
|
+
type: "image",
|
|
24859
|
+
data: image.data,
|
|
24860
|
+
mimeType: image.mediaType
|
|
24861
|
+
}));
|
|
24862
|
+
const promptPromise = session.prompt(compiled.text, {
|
|
24863
|
+
images: images.length > 0 ? images : void 0
|
|
24864
|
+
});
|
|
24634
24865
|
void promptPromise.then(() => {
|
|
24635
24866
|
promptSettled = true;
|
|
24636
24867
|
notify();
|
|
@@ -24780,11 +25011,14 @@ function createRunner(options) {
|
|
|
24780
25011
|
env,
|
|
24781
25012
|
abortController
|
|
24782
25013
|
};
|
|
24783
|
-
const
|
|
25014
|
+
const input = options.input ? parseAgentTurnInputV1(options.input) : createLegacyAgentTurnInput(options.userInput ?? "");
|
|
25015
|
+
const rawStream = dispatchRunner(options.runner, base, cwd, options, input);
|
|
24784
25016
|
return autoInject ? captureSessionId(rawStream, cwd) : rawStream;
|
|
24785
25017
|
}
|
|
24786
|
-
function dispatchRunner(runner, base, cwd, options) {
|
|
25018
|
+
function dispatchRunner(runner, base, cwd, options, input) {
|
|
24787
25019
|
const _env = base.env;
|
|
25020
|
+
const compiled = compileAgentTurnInput(input);
|
|
25021
|
+
const hasStructuredInput = options.input !== void 0;
|
|
24788
25022
|
switch (runner) {
|
|
24789
25023
|
case "claude":
|
|
24790
25024
|
return createClaudeRunner({
|
|
@@ -24793,19 +25027,25 @@ function dispatchRunner(runner, base, cwd, options) {
|
|
|
24793
25027
|
forkFrom: options.forkFrom,
|
|
24794
25028
|
skillPaths: options.skillPaths ?? discoverSkillPaths(cwd),
|
|
24795
25029
|
toolRefs: options.toolRefs
|
|
24796
|
-
}).run(
|
|
25030
|
+
}).run(hasStructuredInput ? input : compiled.text);
|
|
24797
25031
|
case "codex": {
|
|
24798
25032
|
const { outputFormat: _of, ...codexBase } = base;
|
|
24799
25033
|
const codexEfforts = ["minimal", "low", "medium", "high", "xhigh"];
|
|
25034
|
+
if (compiled.images.length > 0) {
|
|
25035
|
+
throw new Error("Runner codex does not support structured image input");
|
|
25036
|
+
}
|
|
24800
25037
|
return createCodexRunner({
|
|
24801
25038
|
...codexBase,
|
|
24802
25039
|
cwd,
|
|
24803
25040
|
...options.effort && codexEfforts.includes(options.effort) ? {
|
|
24804
25041
|
modelReasoningEffort: options.effort
|
|
24805
25042
|
} : {}
|
|
24806
|
-
}).run(
|
|
25043
|
+
}).run(compiled.text);
|
|
24807
25044
|
}
|
|
24808
25045
|
case "gemini":
|
|
25046
|
+
if (compiled.images.length > 0) {
|
|
25047
|
+
throw new Error("Runner gemini does not support structured image input");
|
|
25048
|
+
}
|
|
24809
25049
|
return createGeminiRunner({
|
|
24810
25050
|
model: options.model,
|
|
24811
25051
|
cwd,
|
|
@@ -24814,7 +25054,7 @@ function dispatchRunner(runner, base, cwd, options) {
|
|
|
24814
25054
|
systemPrompt: base.systemPrompt,
|
|
24815
25055
|
resume: base.resume,
|
|
24816
25056
|
yolo: base.yolo
|
|
24817
|
-
}).run(
|
|
25057
|
+
}).run(compiled.text);
|
|
24818
25058
|
case "pi": {
|
|
24819
25059
|
return createPiRunner({
|
|
24820
25060
|
...base,
|
|
@@ -24826,9 +25066,12 @@ function dispatchRunner(runner, base, cwd, options) {
|
|
|
24826
25066
|
mcpConfig: options.mcpConfig,
|
|
24827
25067
|
effort: options.effort,
|
|
24828
25068
|
systemEnv: options.systemEnv
|
|
24829
|
-
}).run(
|
|
25069
|
+
}).run(hasStructuredInput ? input : compiled.text);
|
|
24830
25070
|
}
|
|
24831
25071
|
case "opencode":
|
|
25072
|
+
if (compiled.images.length > 0) {
|
|
25073
|
+
throw new Error("Runner opencode does not support structured image input");
|
|
25074
|
+
}
|
|
24832
25075
|
return createOpenCodeRunner({
|
|
24833
25076
|
model: options.model,
|
|
24834
25077
|
cwd,
|
|
@@ -24837,9 +25080,12 @@ function dispatchRunner(runner, base, cwd, options) {
|
|
|
24837
25080
|
systemPrompt: base.systemPrompt,
|
|
24838
25081
|
resume: base.resume,
|
|
24839
25082
|
yolo: base.yolo
|
|
24840
|
-
}).run(
|
|
25083
|
+
}).run(compiled.text);
|
|
24841
25084
|
case "copilot": {
|
|
24842
25085
|
const reasoningEfforts = ["low", "medium", "high", "xhigh"];
|
|
25086
|
+
if (compiled.images.length > 0) {
|
|
25087
|
+
throw new Error("Runner copilot does not support structured image input");
|
|
25088
|
+
}
|
|
24843
25089
|
return createCopilotRunner({
|
|
24844
25090
|
model: options.model,
|
|
24845
25091
|
systemPrompt: base.systemPrompt,
|
|
@@ -24852,7 +25098,7 @@ function dispatchRunner(runner, base, cwd, options) {
|
|
|
24852
25098
|
...options.effort && reasoningEfforts.includes(options.effort) ? {
|
|
24853
25099
|
reasoningEffort: options.effort
|
|
24854
25100
|
} : {}
|
|
24855
|
-
}).run(
|
|
25101
|
+
}).run(compiled.text);
|
|
24856
25102
|
}
|
|
24857
25103
|
default:
|
|
24858
25104
|
throw new Error(`Unknown runner: ${runner}`);
|
|
@@ -25126,12 +25372,13 @@ async function main() {
|
|
|
25126
25372
|
case "run": {
|
|
25127
25373
|
const args = parseRunArgs();
|
|
25128
25374
|
process.chdir(args.cwd);
|
|
25375
|
+
const input = takeAgentInputFromEnv();
|
|
25129
25376
|
const toolRefs = takeToolRefsFromEnv();
|
|
25130
25377
|
const mcpConfig = takeMcpConfigFromEnv();
|
|
25131
25378
|
await runAgent({
|
|
25132
25379
|
runner: args.runner,
|
|
25133
25380
|
model: args.model,
|
|
25134
|
-
userInput: args.userInput,
|
|
25381
|
+
...input ? { input } : { userInput: args.userInput },
|
|
25135
25382
|
systemPrompt: args.systemPrompt,
|
|
25136
25383
|
maxTurns: args.maxTurns,
|
|
25137
25384
|
allowedTools: args.allowedTools,
|
package/dist/cli.js
CHANGED
|
@@ -15,7 +15,7 @@ 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 { takeMcpConfigFromEnv, takeToolRefsFromEnv } from "./env-payload.js";
|
|
18
|
+
import { takeAgentInputFromEnv, takeMcpConfigFromEnv, takeToolRefsFromEnv, } from "./env-payload.js";
|
|
19
19
|
import { runAgent } from "./runner.js";
|
|
20
20
|
// ---------------------------------------------------------------------------
|
|
21
21
|
// Shared helpers
|
|
@@ -258,12 +258,13 @@ async function main() {
|
|
|
258
258
|
case "run": {
|
|
259
259
|
const args = parseRunArgs();
|
|
260
260
|
process.chdir(args.cwd);
|
|
261
|
+
const input = takeAgentInputFromEnv();
|
|
261
262
|
const toolRefs = takeToolRefsFromEnv();
|
|
262
263
|
const mcpConfig = takeMcpConfigFromEnv();
|
|
263
264
|
await runAgent({
|
|
264
265
|
runner: args.runner,
|
|
265
266
|
model: args.model,
|
|
266
|
-
userInput: args.userInput,
|
|
267
|
+
...(input ? { input } : { userInput: args.userInput }),
|
|
267
268
|
systemPrompt: args.systemPrompt,
|
|
268
269
|
maxTurns: args.maxTurns,
|
|
269
270
|
allowedTools: args.allowedTools,
|
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;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/env-payload.d.ts
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* single-request, and pi's default `ctx.env` (= the runner's `process.env`)
|
|
12
12
|
* is the expected bash environment.
|
|
13
13
|
*/
|
|
14
|
+
import { type AgentTurnInputV1 } from "@bunny-agent/manager";
|
|
14
15
|
import type { PiRunnerOptions } from "@bunny-agent/runner-pi";
|
|
15
16
|
type RunnerToolRefs = NonNullable<PiRunnerOptions["toolRefs"]>;
|
|
16
17
|
export type RunnerToolRefsPayload = {
|
|
@@ -20,6 +21,7 @@ type RunnerMcpConfig = NonNullable<PiRunnerOptions["mcpConfig"]>;
|
|
|
20
21
|
export type RunnerMcpConfigPayload = {
|
|
21
22
|
config: RunnerMcpConfig;
|
|
22
23
|
};
|
|
24
|
+
export declare function takeAgentInputFromEnv(env?: NodeJS.ProcessEnv): AgentTurnInputV1 | null;
|
|
23
25
|
/**
|
|
24
26
|
* Take `BUNNY_AGENT_TOOL_REFS_JSON`. Returns null when the var is absent or
|
|
25
27
|
* malformed. The var is deleted before parsing so even malformed payloads
|
|
@@ -1 +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;AAC9D,KAAK,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;AACjE,MAAM,MAAM,sBAAsB,GAAG;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AAEjE;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,qBAAqB,GAAG,IAAI,CAoB9B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,sBAAsB,GAAG,IAAI,CA0B/B"}
|
|
1
|
+
{"version":3,"file":"env-payload.d.ts","sourceRoot":"","sources":["../src/env-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,sBAAsB,CAAC;AAC9B,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;AAC9D,KAAK,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;AACjE,MAAM,MAAM,sBAAsB,GAAG;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AAEjE,wBAAgB,qBAAqB,CACnC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,gBAAgB,GAAG,IAAI,CAMzB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,qBAAqB,GAAG,IAAI,CAoB9B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,sBAAsB,GAAG,IAAI,CA0B/B"}
|
package/dist/env-payload.js
CHANGED
|
@@ -11,6 +11,16 @@
|
|
|
11
11
|
* single-request, and pi's default `ctx.env` (= the runner's `process.env`)
|
|
12
12
|
* is the expected bash environment.
|
|
13
13
|
*/
|
|
14
|
+
import { parseAgentTurnInputV1, } from "@bunny-agent/manager";
|
|
15
|
+
export function takeAgentInputFromEnv(env = process.env) {
|
|
16
|
+
const raw = env.BUNNY_AGENT_INPUT_JSON;
|
|
17
|
+
if (raw === undefined)
|
|
18
|
+
return null;
|
|
19
|
+
delete env.BUNNY_AGENT_INPUT_JSON;
|
|
20
|
+
if (raw.length === 0)
|
|
21
|
+
return null;
|
|
22
|
+
return parseAgentTurnInputV1(JSON.parse(raw));
|
|
23
|
+
}
|
|
14
24
|
/**
|
|
15
25
|
* Take `BUNNY_AGENT_TOOL_REFS_JSON`. Returns null when the var is absent or
|
|
16
26
|
* malformed. The var is deleted before parsing so even malformed payloads
|
package/dist/env-payload.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-payload.js","sourceRoot":"","sources":["../src/env-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"env-payload.js","sourceRoot":"","sources":["../src/env-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAEL,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAQ9B,MAAM,UAAU,qBAAqB,CACnC,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GAAG,GAAG,CAAC,sBAAsB,CAAC;IACvC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,GAAG,CAAC,sBAAsB,CAAC;IAClC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;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;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GAAG,GAAG,CAAC,2BAA2B,CAAC;IAC5C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,GAAG,CAAC,2BAA2B,CAAC;IACvC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QACvD,IACE,MAAM,CAAC,MAAM,IAAI,IAAI;YACrB,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YACjC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAC5B,CAAC;YACD,OAAO,CAAC,KAAK,CACX,4EAA4E,CAC7E,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAyB,EAAE,CAAC;IACtD,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,8DAA8D,OAAO,EAAE,CACxE,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.59-beta.
|
|
3
|
+
"version": "0.9.59-beta.3",
|
|
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": {
|
|
@@ -59,13 +59,14 @@
|
|
|
59
59
|
"esbuild": "^0.27.2",
|
|
60
60
|
"typescript": "^5.3.0",
|
|
61
61
|
"vitest": "^1.6.1",
|
|
62
|
-
"@bunny-agent/
|
|
62
|
+
"@bunny-agent/manager": "0.9.59-beta.3",
|
|
63
63
|
"@bunny-agent/runner-claude": "0.6.2",
|
|
64
64
|
"@bunny-agent/runner-codex": "0.6.2",
|
|
65
65
|
"@bunny-agent/runner-copilot": "0.1.0",
|
|
66
66
|
"@bunny-agent/runner-harness": "0.1.1-beta.0",
|
|
67
67
|
"@bunny-agent/runner-gemini": "0.6.2",
|
|
68
68
|
"@bunny-agent/runner-opencode": "0.6.2",
|
|
69
|
+
"@bunny-agent/apply-patch": "0.1.0",
|
|
69
70
|
"@bunny-agent/runner-pi": "0.6.4-beta.0"
|
|
70
71
|
},
|
|
71
72
|
"scripts": {
|