@bunny-agent/runner-cli 0.9.33 → 0.9.35-beta.1
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/bundle.mjs +319 -41
- package/dist/cli.js +4 -2
- package/dist/cli.js.map +1 -1
- package/package.json +5 -5
package/dist/bundle.mjs
CHANGED
|
@@ -1280,14 +1280,14 @@ function createOpenCodeRunner(options = {}) {
|
|
|
1280
1280
|
// ../../packages/runner-pi/dist/pi-runner.js
|
|
1281
1281
|
import { appendFileSync as appendFileSync2, existsSync as existsSync5, unlinkSync as unlinkSync3 } from "node:fs";
|
|
1282
1282
|
import { join as join8 } from "node:path";
|
|
1283
|
-
import { getModel } from "@
|
|
1284
|
-
import { AuthStorage, createAgentSession, ModelRegistry, SessionManager as SessionManager2 } from "@
|
|
1283
|
+
import { getModel } from "@earendil-works/pi-ai";
|
|
1284
|
+
import { AuthStorage, createAgentSession, ModelRegistry, SessionManager as SessionManager2 } from "@earendil-works/pi-coding-agent";
|
|
1285
1285
|
|
|
1286
1286
|
// ../../packages/runner-pi/dist/bunny-agent-resource-loader.js
|
|
1287
1287
|
import { existsSync as existsSync4 } from "node:fs";
|
|
1288
1288
|
import { homedir } from "node:os";
|
|
1289
1289
|
import { isAbsolute, join as join5, resolve as resolve2 } from "node:path";
|
|
1290
|
-
import { DefaultResourceLoader, loadSkills } from "@
|
|
1290
|
+
import { DefaultResourceLoader, loadSkills } from "@earendil-works/pi-coding-agent";
|
|
1291
1291
|
var LOG_PREFIX = "[bunny-agent:pi]";
|
|
1292
1292
|
function logSkillLoad(cwd, agentDir, skillPaths, result) {
|
|
1293
1293
|
const lines = [
|
|
@@ -1316,7 +1316,7 @@ function logSkillLoad(cwd, agentDir, skillPaths, result) {
|
|
|
1316
1316
|
var BunnyAgentResourceLoader = class {
|
|
1317
1317
|
constructor(options = {}) {
|
|
1318
1318
|
this.cwd = options.cwd ?? process.cwd();
|
|
1319
|
-
this.agentDir = options.agentDir ?? join5(homedir(), ".
|
|
1319
|
+
this.agentDir = options.agentDir ?? join5(homedir(), ".bunny", "agent");
|
|
1320
1320
|
this.skillPaths = options.skillPaths ?? [];
|
|
1321
1321
|
this.extraAppendPrompt = options.appendSystemPrompt;
|
|
1322
1322
|
this.delegate = new DefaultResourceLoader({
|
|
@@ -1334,7 +1334,8 @@ var BunnyAgentResourceLoader = class {
|
|
|
1334
1334
|
this.cachedSkills = loadSkills({
|
|
1335
1335
|
cwd: this.cwd,
|
|
1336
1336
|
agentDir: this.agentDir,
|
|
1337
|
-
skillPaths: this.skillPaths
|
|
1337
|
+
skillPaths: this.skillPaths,
|
|
1338
|
+
includeDefaults: true
|
|
1338
1339
|
});
|
|
1339
1340
|
if (this.skillPaths.length > 0) {
|
|
1340
1341
|
logSkillLoad(this.cwd, this.agentDir, this.skillPaths, this.cachedSkills);
|
|
@@ -1429,6 +1430,33 @@ var generateImageSchema = {
|
|
|
1429
1430
|
required: ["prompt"],
|
|
1430
1431
|
additionalProperties: false
|
|
1431
1432
|
};
|
|
1433
|
+
var hasImagePayload = (item) => Boolean(item.b64_json ?? item.b64Json ?? item.image_base64 ?? item.imageBase64 ?? item.base64 ?? item.data ?? item.inlineData?.data ?? item.inline_data?.data ?? item.url ?? item.image_url ?? item.imageUrl ?? (typeof item.image === "string" ? item.image : item.image?.b64_json ?? item.image?.base64 ?? item.image?.data ?? item.image?.url));
|
|
1434
|
+
function readString(value) {
|
|
1435
|
+
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
1436
|
+
}
|
|
1437
|
+
function readInlineData(value) {
|
|
1438
|
+
if (!value || typeof value !== "object")
|
|
1439
|
+
return void 0;
|
|
1440
|
+
const obj = value;
|
|
1441
|
+
return {
|
|
1442
|
+
data: readString(obj.data),
|
|
1443
|
+
mimeType: readString(obj.mimeType),
|
|
1444
|
+
mime_type: readString(obj.mime_type)
|
|
1445
|
+
};
|
|
1446
|
+
}
|
|
1447
|
+
function readImage(value) {
|
|
1448
|
+
if (typeof value === "string" && value.length > 0)
|
|
1449
|
+
return value;
|
|
1450
|
+
if (!value || typeof value !== "object")
|
|
1451
|
+
return void 0;
|
|
1452
|
+
const obj = value;
|
|
1453
|
+
return {
|
|
1454
|
+
base64: readString(obj.base64),
|
|
1455
|
+
b64_json: readString(obj.b64_json),
|
|
1456
|
+
url: readString(obj.url),
|
|
1457
|
+
data: readString(obj.data)
|
|
1458
|
+
};
|
|
1459
|
+
}
|
|
1432
1460
|
async function resolveB64(item, apiKey) {
|
|
1433
1461
|
if (item.b64_json)
|
|
1434
1462
|
return item.b64_json;
|
|
@@ -1440,12 +1468,20 @@ async function resolveB64(item, apiKey) {
|
|
|
1440
1468
|
return item.imageBase64;
|
|
1441
1469
|
if (item.base64)
|
|
1442
1470
|
return item.base64;
|
|
1471
|
+
if (item.data)
|
|
1472
|
+
return item.data;
|
|
1473
|
+
if (item.inlineData?.data)
|
|
1474
|
+
return item.inlineData.data;
|
|
1475
|
+
if (item.inline_data?.data)
|
|
1476
|
+
return item.inline_data.data;
|
|
1443
1477
|
if (typeof item.image === "string")
|
|
1444
1478
|
return item.image;
|
|
1445
1479
|
if (item.image?.b64_json)
|
|
1446
1480
|
return item.image.b64_json;
|
|
1447
1481
|
if (item.image?.base64)
|
|
1448
1482
|
return item.image.base64;
|
|
1483
|
+
if (item.image?.data)
|
|
1484
|
+
return item.image.data;
|
|
1449
1485
|
const url = item.url ?? item.image_url ?? item.imageUrl ?? item.image?.url;
|
|
1450
1486
|
if (url) {
|
|
1451
1487
|
const headers = {};
|
|
@@ -1463,16 +1499,24 @@ function pickImageItem(response) {
|
|
|
1463
1499
|
if (!value || typeof value !== "object")
|
|
1464
1500
|
return void 0;
|
|
1465
1501
|
const obj = value;
|
|
1502
|
+
const image = readImage(obj.image);
|
|
1503
|
+
const inlineData = readInlineData(obj.inlineData);
|
|
1504
|
+
const inline_data = readInlineData(obj.inline_data);
|
|
1466
1505
|
return {
|
|
1467
|
-
b64_json: obj.b64_json ?? obj.b64Json,
|
|
1468
|
-
b64Json: obj.b64Json,
|
|
1469
|
-
url: obj.url ?? obj.imageUrl,
|
|
1470
|
-
image_base64: obj.image_base64 ?? obj.imageBase64,
|
|
1471
|
-
imageBase64: obj.imageBase64,
|
|
1472
|
-
image_url: obj.image_url ?? obj.imageUrl,
|
|
1473
|
-
imageUrl: obj.imageUrl,
|
|
1474
|
-
base64: obj.base64,
|
|
1475
|
-
|
|
1506
|
+
b64_json: readString(obj.b64_json) ?? readString(obj.b64Json),
|
|
1507
|
+
b64Json: readString(obj.b64Json),
|
|
1508
|
+
url: readString(obj.url) ?? readString(obj.imageUrl),
|
|
1509
|
+
image_base64: readString(obj.image_base64) ?? readString(obj.imageBase64),
|
|
1510
|
+
imageBase64: readString(obj.imageBase64),
|
|
1511
|
+
image_url: readString(obj.image_url) ?? readString(obj.imageUrl),
|
|
1512
|
+
imageUrl: readString(obj.imageUrl),
|
|
1513
|
+
base64: readString(obj.base64),
|
|
1514
|
+
data: readString(obj.data),
|
|
1515
|
+
mimeType: readString(obj.mimeType),
|
|
1516
|
+
mime_type: readString(obj.mime_type),
|
|
1517
|
+
inlineData,
|
|
1518
|
+
inline_data,
|
|
1519
|
+
image
|
|
1476
1520
|
};
|
|
1477
1521
|
};
|
|
1478
1522
|
const asItem = (value) => {
|
|
@@ -1483,7 +1527,7 @@ function pickImageItem(response) {
|
|
|
1483
1527
|
}
|
|
1484
1528
|
if (typeof value === "object") {
|
|
1485
1529
|
const normalized = tryFromObject(value);
|
|
1486
|
-
if (normalized)
|
|
1530
|
+
if (normalized && hasImagePayload(normalized))
|
|
1487
1531
|
return normalized;
|
|
1488
1532
|
}
|
|
1489
1533
|
return void 0;
|
|
@@ -1526,8 +1570,7 @@ function pickImageItem(response) {
|
|
|
1526
1570
|
continue;
|
|
1527
1571
|
const normalized = tryFromObject(current);
|
|
1528
1572
|
if (normalized) {
|
|
1529
|
-
|
|
1530
|
-
if (hasUsefulField)
|
|
1573
|
+
if (hasImagePayload(normalized))
|
|
1531
1574
|
return normalized;
|
|
1532
1575
|
}
|
|
1533
1576
|
if (Array.isArray(current)) {
|
|
@@ -1672,6 +1715,27 @@ var editImageSchema = {
|
|
|
1672
1715
|
type: "string",
|
|
1673
1716
|
enum: ["low", "medium", "high", "auto"],
|
|
1674
1717
|
description: "Image quality. Optional; omit or set auto to let model decide."
|
|
1718
|
+
},
|
|
1719
|
+
aspectRatio: {
|
|
1720
|
+
type: "string",
|
|
1721
|
+
enum: [
|
|
1722
|
+
"1:1",
|
|
1723
|
+
"3:2",
|
|
1724
|
+
"2:3",
|
|
1725
|
+
"3:4",
|
|
1726
|
+
"4:3",
|
|
1727
|
+
"4:5",
|
|
1728
|
+
"5:4",
|
|
1729
|
+
"9:16",
|
|
1730
|
+
"16:9",
|
|
1731
|
+
"21:9"
|
|
1732
|
+
],
|
|
1733
|
+
description: "Gemini image aspect ratio. Use this instead of size for Gemini image edit models when exact proportions matter."
|
|
1734
|
+
},
|
|
1735
|
+
imageSize: {
|
|
1736
|
+
type: "string",
|
|
1737
|
+
enum: ["1K", "2K", "4K"],
|
|
1738
|
+
description: "Gemini output resolution for image edit models that support K-resolution output."
|
|
1675
1739
|
}
|
|
1676
1740
|
},
|
|
1677
1741
|
required: ["image", "prompt"],
|
|
@@ -1708,12 +1772,13 @@ function buildImageEditTool(cwd, imageModelId, baseUrl, apiKey) {
|
|
|
1708
1772
|
name: "edit_image",
|
|
1709
1773
|
label: "edit image",
|
|
1710
1774
|
description: "Edit an existing image based on a text prompt. Optionally use a mask to control which areas to modify. Saves the result to disk and returns the file path.",
|
|
1711
|
-
promptSnippet: "edit_image(image, prompt, mask?, filename?, size?, quality?) - edit an existing image",
|
|
1775
|
+
promptSnippet: "edit_image(image, prompt, mask?, filename?, size?, quality?, aspectRatio?, imageSize?) - edit an existing image",
|
|
1712
1776
|
promptGuidelines: [
|
|
1713
1777
|
"Use edit_image when the user wants to modify, retouch, or transform an existing image.",
|
|
1714
1778
|
"The prompt should describe the full desired final image, not just the change.",
|
|
1715
1779
|
"Provide the source image path. Use a mask image (PNG with transparent areas) to control where edits happen.",
|
|
1716
|
-
"Without a mask, the model decides what to change based on the prompt."
|
|
1780
|
+
"Without a mask, the model decides what to change based on the prompt.",
|
|
1781
|
+
"For Gemini image edit models, use aspectRatio and imageSize when the user asks for those controls."
|
|
1717
1782
|
],
|
|
1718
1783
|
// biome-ignore lint/suspicious/noExplicitAny: plain JSON Schema compatible with TypeBox TSchema
|
|
1719
1784
|
parameters: editImageSchema,
|
|
@@ -1726,6 +1791,8 @@ function buildImageEditTool(cwd, imageModelId, baseUrl, apiKey) {
|
|
|
1726
1791
|
const maskPath = p.mask;
|
|
1727
1792
|
const size = p.size;
|
|
1728
1793
|
const quality = p.quality;
|
|
1794
|
+
const aspectRatio = p.aspectRatio;
|
|
1795
|
+
const imageSize = p.imageSize;
|
|
1729
1796
|
const rawFilename = p.filename;
|
|
1730
1797
|
const safePrompt = buildPolicySafeEditPrompt(prompt);
|
|
1731
1798
|
const resolvedImage = resolve4(cwd, imagePath);
|
|
@@ -1757,6 +1824,12 @@ function buildImageEditTool(cwd, imageModelId, baseUrl, apiKey) {
|
|
|
1757
1824
|
if (quality && quality !== "auto") {
|
|
1758
1825
|
fields.push({ name: "quality", value: quality });
|
|
1759
1826
|
}
|
|
1827
|
+
if (aspectRatio) {
|
|
1828
|
+
fields.push({ name: "aspect_ratio", value: aspectRatio });
|
|
1829
|
+
}
|
|
1830
|
+
if (imageSize) {
|
|
1831
|
+
fields.push({ name: "image_size", value: imageSize });
|
|
1832
|
+
}
|
|
1760
1833
|
const files = [
|
|
1761
1834
|
{
|
|
1762
1835
|
name: "image",
|
|
@@ -1835,7 +1908,7 @@ function buildImageEditTool(cwd, imageModelId, baseUrl, apiKey) {
|
|
|
1835
1908
|
// ../../packages/runner-pi/dist/session-utils.js
|
|
1836
1909
|
import { closeSync, fstatSync, openSync, readdirSync as readdirSync2, readSync, statSync as statSync2 } from "node:fs";
|
|
1837
1910
|
import { join as join7 } from "node:path";
|
|
1838
|
-
import { SessionManager } from "@
|
|
1911
|
+
import { SessionManager } from "@earendil-works/pi-coding-agent";
|
|
1839
1912
|
var MAX_SESSION_FILE_BYTES = Number(process.env.SANDAGENT_MAX_SESSION_BYTES) || 10 * 1024 * 1024;
|
|
1840
1913
|
function resolveSessionPathById(cwd, sessionId) {
|
|
1841
1914
|
const tempMgr = SessionManager.create(cwd);
|
|
@@ -2040,7 +2113,7 @@ var PiAISDKStreamConverter = class {
|
|
|
2040
2113
|
return chunks;
|
|
2041
2114
|
}
|
|
2042
2115
|
if (event.type === "tool_execution_end") {
|
|
2043
|
-
const output = this.options.
|
|
2116
|
+
const output = this.options.normalizeToolOutput(event.result);
|
|
2044
2117
|
const raw = event.result?.details?.usage?.raw;
|
|
2045
2118
|
if (raw != null)
|
|
2046
2119
|
accumulateToolUsage(this.toolUsageTally, raw);
|
|
@@ -2088,13 +2161,16 @@ var PiAISDKStreamConverter = class {
|
|
|
2088
2161
|
return [sseData({ type: "text-start", id: this.activeTextPartId })];
|
|
2089
2162
|
}
|
|
2090
2163
|
emitTextDelta(rawDelta) {
|
|
2091
|
-
|
|
2092
|
-
if (!delta)
|
|
2164
|
+
if (!rawDelta)
|
|
2093
2165
|
return [];
|
|
2094
2166
|
const startChunk = this.activeTextPartId == null ? this.openTextStream() : [];
|
|
2095
2167
|
return [
|
|
2096
2168
|
...startChunk,
|
|
2097
|
-
sseData({
|
|
2169
|
+
sseData({
|
|
2170
|
+
type: "text-delta",
|
|
2171
|
+
id: this.activeTextPartId,
|
|
2172
|
+
delta: rawDelta
|
|
2173
|
+
})
|
|
2098
2174
|
];
|
|
2099
2175
|
}
|
|
2100
2176
|
endTextStreamIfOpen() {
|
|
@@ -2137,7 +2213,7 @@ var PiAISDKStreamConverter = class {
|
|
|
2137
2213
|
};
|
|
2138
2214
|
|
|
2139
2215
|
// ../../packages/runner-pi/dist/tool-overrides.js
|
|
2140
|
-
import { createBashTool, createReadTool } from "@
|
|
2216
|
+
import { createBashTool, createReadTool } from "@earendil-works/pi-coding-agent";
|
|
2141
2217
|
|
|
2142
2218
|
// ../../packages/runner-pi/dist/web-tools.js
|
|
2143
2219
|
var braveProvider = {
|
|
@@ -5237,8 +5313,211 @@ function serializeResult(result) {
|
|
|
5237
5313
|
return JSON.stringify(result);
|
|
5238
5314
|
}
|
|
5239
5315
|
|
|
5316
|
+
// ../../packages/runner-pi/dist/video-tools.js
|
|
5317
|
+
function resolveArkConfig(env) {
|
|
5318
|
+
const apiKey = env.ARK_API_KEY ?? process.env.ARK_API_KEY;
|
|
5319
|
+
const modelId = env.ARK_MODEL_ID ?? process.env.ARK_MODEL_ID ?? "dreamina-seedance-2-0";
|
|
5320
|
+
const baseUrl = env.ARK_BASE_URL ?? process.env.ARK_BASE_URL ?? "https://ark.ap-southeast.bytepluses.com/api/v3";
|
|
5321
|
+
if (!apiKey)
|
|
5322
|
+
throw new Error("Missing ARK_API_KEY");
|
|
5323
|
+
return { apiKey, modelId, baseUrl };
|
|
5324
|
+
}
|
|
5325
|
+
function mapArkStatus(raw) {
|
|
5326
|
+
switch (raw) {
|
|
5327
|
+
case "queued":
|
|
5328
|
+
return "queued";
|
|
5329
|
+
case "running":
|
|
5330
|
+
return "running";
|
|
5331
|
+
case "succeeded":
|
|
5332
|
+
return "succeeded";
|
|
5333
|
+
case "cancelled":
|
|
5334
|
+
return "cancelled";
|
|
5335
|
+
case "failed":
|
|
5336
|
+
case "unknown":
|
|
5337
|
+
default:
|
|
5338
|
+
return "failed";
|
|
5339
|
+
}
|
|
5340
|
+
}
|
|
5341
|
+
var byteplusProvider = {
|
|
5342
|
+
id: "byteplus",
|
|
5343
|
+
label: "BytePlus Ark",
|
|
5344
|
+
envKeys: ["ARK_API_KEY"],
|
|
5345
|
+
pollIntervalMs: 1e4,
|
|
5346
|
+
async create({ prompt, env, signal }) {
|
|
5347
|
+
const { apiKey, modelId, baseUrl } = resolveArkConfig(env);
|
|
5348
|
+
const res = await fetch(`${baseUrl}/contents/generations/tasks`, {
|
|
5349
|
+
method: "POST",
|
|
5350
|
+
headers: {
|
|
5351
|
+
"Content-Type": "application/json",
|
|
5352
|
+
Authorization: `Bearer ${apiKey}`
|
|
5353
|
+
},
|
|
5354
|
+
body: JSON.stringify({
|
|
5355
|
+
model: modelId,
|
|
5356
|
+
content: [{ type: "text", text: prompt }]
|
|
5357
|
+
}),
|
|
5358
|
+
signal
|
|
5359
|
+
});
|
|
5360
|
+
if (!res.ok) {
|
|
5361
|
+
const errorText = await res.text();
|
|
5362
|
+
throw new Error(`Failed to create video task: ${res.status} ${errorText}`);
|
|
5363
|
+
}
|
|
5364
|
+
const data = await res.json();
|
|
5365
|
+
if (!data.id) {
|
|
5366
|
+
throw new Error("No task ID returned from video generation API");
|
|
5367
|
+
}
|
|
5368
|
+
return { taskId: data.id };
|
|
5369
|
+
},
|
|
5370
|
+
async poll({ taskId, env, signal }) {
|
|
5371
|
+
const { apiKey, baseUrl } = resolveArkConfig(env);
|
|
5372
|
+
const res = await fetch(`${baseUrl}/contents/generations/tasks/${taskId}`, {
|
|
5373
|
+
method: "GET",
|
|
5374
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
5375
|
+
signal
|
|
5376
|
+
});
|
|
5377
|
+
if (!res.ok) {
|
|
5378
|
+
const errorText = await res.text();
|
|
5379
|
+
throw new Error(`Failed to check task status: ${res.status} ${errorText}`);
|
|
5380
|
+
}
|
|
5381
|
+
const data = await res.json();
|
|
5382
|
+
const status = mapArkStatus(data.status);
|
|
5383
|
+
const state = { status };
|
|
5384
|
+
if (status === "succeeded") {
|
|
5385
|
+
state.videoUrl = data.content?.[0]?.video?.url;
|
|
5386
|
+
} else if (status === "failed") {
|
|
5387
|
+
state.error = typeof data.error === "string" ? data.error : data.error?.message ?? `Task status: ${data.status}`;
|
|
5388
|
+
}
|
|
5389
|
+
return state;
|
|
5390
|
+
},
|
|
5391
|
+
async cancel({ taskId, env }) {
|
|
5392
|
+
const { apiKey, baseUrl } = resolveArkConfig(env);
|
|
5393
|
+
const ctl = new AbortController();
|
|
5394
|
+
const timer = setTimeout(() => ctl.abort(), 5e3);
|
|
5395
|
+
try {
|
|
5396
|
+
await fetch(`${baseUrl}/contents/generations/tasks/${taskId}`, {
|
|
5397
|
+
method: "DELETE",
|
|
5398
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
5399
|
+
signal: ctl.signal
|
|
5400
|
+
});
|
|
5401
|
+
} finally {
|
|
5402
|
+
clearTimeout(timer);
|
|
5403
|
+
}
|
|
5404
|
+
}
|
|
5405
|
+
};
|
|
5406
|
+
var PROVIDERS = [byteplusProvider];
|
|
5407
|
+
function getEnv2(env, key) {
|
|
5408
|
+
const v = env?.[key] ?? process.env[key];
|
|
5409
|
+
return v && v.length > 0 ? v : void 0;
|
|
5410
|
+
}
|
|
5411
|
+
function resolveVideoProvider(env) {
|
|
5412
|
+
for (const p of PROVIDERS) {
|
|
5413
|
+
const hasAllKeys = p.envKeys.every((key) => getEnv2(env, key) !== void 0);
|
|
5414
|
+
if (hasAllKeys)
|
|
5415
|
+
return p;
|
|
5416
|
+
}
|
|
5417
|
+
return null;
|
|
5418
|
+
}
|
|
5419
|
+
function sleepAbortable(ms, signal) {
|
|
5420
|
+
return new Promise((resolve4, reject) => {
|
|
5421
|
+
if (signal?.aborted)
|
|
5422
|
+
return reject(new Error("aborted"));
|
|
5423
|
+
const timer = setTimeout(() => {
|
|
5424
|
+
signal?.removeEventListener("abort", onAbort);
|
|
5425
|
+
resolve4();
|
|
5426
|
+
}, ms);
|
|
5427
|
+
const onAbort = () => {
|
|
5428
|
+
clearTimeout(timer);
|
|
5429
|
+
reject(new Error("aborted"));
|
|
5430
|
+
};
|
|
5431
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
5432
|
+
});
|
|
5433
|
+
}
|
|
5434
|
+
function buildVideoGenerateTool(env) {
|
|
5435
|
+
const provider = resolveVideoProvider(env);
|
|
5436
|
+
if (!provider)
|
|
5437
|
+
return null;
|
|
5438
|
+
return {
|
|
5439
|
+
name: "generate_video",
|
|
5440
|
+
label: `Video Generator (${provider.label})`,
|
|
5441
|
+
description: "Generate a video from a text prompt. Returns the video URL.",
|
|
5442
|
+
promptSnippet: "generate_video(prompt)",
|
|
5443
|
+
promptGuidelines: [
|
|
5444
|
+
"Use this when the user wants to generate, create, or render a video.",
|
|
5445
|
+
"Provide a highly descriptive prompt."
|
|
5446
|
+
],
|
|
5447
|
+
parameters: {
|
|
5448
|
+
type: "object",
|
|
5449
|
+
properties: {
|
|
5450
|
+
prompt: {
|
|
5451
|
+
type: "string",
|
|
5452
|
+
description: "Text description of the video to generate."
|
|
5453
|
+
}
|
|
5454
|
+
},
|
|
5455
|
+
required: ["prompt"]
|
|
5456
|
+
},
|
|
5457
|
+
async execute(_toolCallId, params, signal, onUpdate) {
|
|
5458
|
+
const { prompt } = params;
|
|
5459
|
+
const resolvedEnv = env ?? {};
|
|
5460
|
+
const report = (msg) => onUpdate?.({
|
|
5461
|
+
content: [{ type: "text", text: msg }],
|
|
5462
|
+
details: {}
|
|
5463
|
+
});
|
|
5464
|
+
report(`[${provider.label}] Submitting video generation task...`);
|
|
5465
|
+
const { taskId } = await provider.create({
|
|
5466
|
+
prompt,
|
|
5467
|
+
env: resolvedEnv,
|
|
5468
|
+
signal
|
|
5469
|
+
});
|
|
5470
|
+
report(`[${provider.label}] Task ${taskId} submitted. Polling for completion...`);
|
|
5471
|
+
const intervalMs = provider.pollIntervalMs ?? 1e4;
|
|
5472
|
+
let videoUrl;
|
|
5473
|
+
try {
|
|
5474
|
+
while (true) {
|
|
5475
|
+
await sleepAbortable(intervalMs, signal);
|
|
5476
|
+
const state = await provider.poll({
|
|
5477
|
+
taskId,
|
|
5478
|
+
env: resolvedEnv,
|
|
5479
|
+
signal
|
|
5480
|
+
});
|
|
5481
|
+
if (state.status === "succeeded") {
|
|
5482
|
+
videoUrl = state.videoUrl ?? "URL not found in response payload";
|
|
5483
|
+
break;
|
|
5484
|
+
}
|
|
5485
|
+
if (state.status === "failed" || state.status === "cancelled") {
|
|
5486
|
+
throw new Error(`Video task ended with status: ${state.status}${state.error ? `. ${state.error}` : ""}`);
|
|
5487
|
+
}
|
|
5488
|
+
const progress = state.progress != null ? ` (${state.progress}%)` : "";
|
|
5489
|
+
report(`[${provider.label}] Task status: ${state.status}${progress}`);
|
|
5490
|
+
}
|
|
5491
|
+
} catch (err) {
|
|
5492
|
+
if (signal?.aborted) {
|
|
5493
|
+
await provider.cancel({ taskId, env: resolvedEnv }).catch(() => void 0);
|
|
5494
|
+
}
|
|
5495
|
+
throw err;
|
|
5496
|
+
}
|
|
5497
|
+
const details = { usage: { raw: {} } };
|
|
5498
|
+
return {
|
|
5499
|
+
content: [
|
|
5500
|
+
{
|
|
5501
|
+
type: "text",
|
|
5502
|
+
text: `Video generated successfully via ${provider.label}!
|
|
5503
|
+
URL: ${videoUrl}
|
|
5504
|
+
(Task ID: ${taskId})`
|
|
5505
|
+
}
|
|
5506
|
+
],
|
|
5507
|
+
details
|
|
5508
|
+
};
|
|
5509
|
+
}
|
|
5510
|
+
};
|
|
5511
|
+
}
|
|
5512
|
+
|
|
5240
5513
|
// ../../packages/runner-pi/dist/pi-runner.js
|
|
5241
5514
|
var LOG_PREFIX3 = "[bunny-agent:pi]";
|
|
5515
|
+
function applyAllowedTools(tools, allowedTools) {
|
|
5516
|
+
if (!allowedTools)
|
|
5517
|
+
return tools;
|
|
5518
|
+
const allowed = new Set(allowedTools);
|
|
5519
|
+
return tools.filter((tool) => allowed.has(tool.name));
|
|
5520
|
+
}
|
|
5242
5521
|
function parseModelSpec(model) {
|
|
5243
5522
|
const trimmed = model.trim();
|
|
5244
5523
|
const separator = trimmed.indexOf(":");
|
|
@@ -5397,19 +5676,22 @@ function createPiRunner(options = {}) {
|
|
|
5397
5676
|
const apiKey = await modelRegistry.authStorage.getApiKey(provider) ?? "";
|
|
5398
5677
|
customTools.push(buildImageGenerateTool(cwd, imageModelName, model.baseUrl, apiKey), buildImageEditTool(cwd, imageModelName, model.baseUrl, apiKey));
|
|
5399
5678
|
}
|
|
5400
|
-
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
if (options.toolRefs && options.toolRefs.length > 0) {
|
|
5404
|
-
customTools.push(...buildToolDefinitionsFromRefs(options.toolRefs));
|
|
5679
|
+
const videoTool = buildVideoGenerateTool(options.env ?? {});
|
|
5680
|
+
if (videoTool) {
|
|
5681
|
+
customTools.push(videoTool);
|
|
5405
5682
|
}
|
|
5683
|
+
const toolRefDefinitions = options.toolRefs && options.toolRefs.length > 0 ? buildToolDefinitionsFromRefs(options.toolRefs) : [];
|
|
5406
5684
|
const { session } = await createAgentSession({
|
|
5407
5685
|
cwd,
|
|
5408
5686
|
model,
|
|
5409
5687
|
sessionManager,
|
|
5410
5688
|
modelRegistry,
|
|
5411
5689
|
resourceLoader,
|
|
5412
|
-
|
|
5690
|
+
tools: options.allowedTools,
|
|
5691
|
+
customTools: [
|
|
5692
|
+
...applyAllowedTools(customTools, options.allowedTools),
|
|
5693
|
+
...toolRefDefinitions
|
|
5694
|
+
]
|
|
5413
5695
|
});
|
|
5414
5696
|
const eventQueue = [];
|
|
5415
5697
|
let isComplete = false;
|
|
@@ -5446,12 +5728,6 @@ function createPiRunner(options = {}) {
|
|
|
5446
5728
|
const streamConverter = new PiAISDKStreamConverter({
|
|
5447
5729
|
sessionId: session.sessionId,
|
|
5448
5730
|
model,
|
|
5449
|
-
redactText: (value) => {
|
|
5450
|
-
if (options.env && Object.keys(options.env).length > 0) {
|
|
5451
|
-
return redactSecrets(value, options.env);
|
|
5452
|
-
}
|
|
5453
|
-
return value;
|
|
5454
|
-
},
|
|
5455
5731
|
normalizeToolOutput: extractToolResultText,
|
|
5456
5732
|
getUsageFromAgentEndMessages,
|
|
5457
5733
|
getErrorFromAgentEndMessages
|
|
@@ -5491,8 +5767,8 @@ function createPiRunner(options = {}) {
|
|
|
5491
5767
|
}
|
|
5492
5768
|
return;
|
|
5493
5769
|
}
|
|
5494
|
-
if (!streamConverter.finished && session.agent.state.
|
|
5495
|
-
for (const chunk of streamConverter.forceError(session.agent.state.
|
|
5770
|
+
if (!streamConverter.finished && session.agent.state.errorMessage) {
|
|
5771
|
+
for (const chunk of streamConverter.forceError(session.agent.state.errorMessage)) {
|
|
5496
5772
|
yield chunk;
|
|
5497
5773
|
}
|
|
5498
5774
|
}
|
|
@@ -5678,7 +5954,9 @@ function takeToolRefsFromEnv() {
|
|
|
5678
5954
|
);
|
|
5679
5955
|
return null;
|
|
5680
5956
|
}
|
|
5681
|
-
return
|
|
5957
|
+
return {
|
|
5958
|
+
tools: parsed.tools
|
|
5959
|
+
};
|
|
5682
5960
|
} catch (err) {
|
|
5683
5961
|
const message = err instanceof Error ? err.message : String(err);
|
|
5684
5962
|
console.error(
|
|
@@ -5910,7 +6188,7 @@ async function main() {
|
|
|
5910
6188
|
skillPaths: args.skillPaths,
|
|
5911
6189
|
resume: args.resume,
|
|
5912
6190
|
yolo: args.yolo,
|
|
5913
|
-
...toolRefs ? { toolRefs } : {}
|
|
6191
|
+
...toolRefs ? { toolRefs: toolRefs.tools } : {}
|
|
5914
6192
|
});
|
|
5915
6193
|
break;
|
|
5916
6194
|
}
|
package/dist/cli.js
CHANGED
|
@@ -33,7 +33,9 @@ function takeToolRefsFromEnv() {
|
|
|
33
33
|
console.error("[bunny-agent] BUNNY_AGENT_TOOL_REFS_JSON missing tools array; ignoring.");
|
|
34
34
|
return null;
|
|
35
35
|
}
|
|
36
|
-
return
|
|
36
|
+
return {
|
|
37
|
+
tools: parsed.tools,
|
|
38
|
+
};
|
|
37
39
|
}
|
|
38
40
|
catch (err) {
|
|
39
41
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -282,7 +284,7 @@ async function main() {
|
|
|
282
284
|
skillPaths: args.skillPaths,
|
|
283
285
|
resume: args.resume,
|
|
284
286
|
yolo: args.yolo,
|
|
285
|
-
...(toolRefs ? { toolRefs } : {}),
|
|
287
|
+
...(toolRefs ? { toolRefs: toolRefs.tools } : {}),
|
|
286
288
|
});
|
|
287
289
|
break;
|
|
288
290
|
}
|
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;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
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;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAOvC;;;;;GAKG;AACH,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACnD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAE5B,CAAC;QACF,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;YACL,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,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,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,2DAA2D;AAC3D,SAAS,aAAa;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,IAAI;YAAE,MAAM;QACtB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,qFAAqF;AACrF,SAAS,gBAAgB;IACvB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,IAAI;YAAE,MAAM;QACtB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,sDAAsD;AACtD,SAAS,oBAAoB,CAAC,CAAS;IACrC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACjE,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAmBD,SAAS,YAAY;IACnB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;QACxC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAC7B,OAAO,EAAE;YACP,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE;YACzD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,GAAG;gBACV,OAAO,EAAE,0BAA0B;aACpC;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,GAAG;gBACV,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,EAAE;aAC5D;YACD,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;YAC/C,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;YAC3C,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;YAC/C,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;YAChD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YACzB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;SACtC;QACD,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;SAAM,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAO,CAAC;IAC9B,IACE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC5E,CAAC;QACD,OAAO,CAAC,KAAK,CACX,0FAA0F,CAC3F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO;QACL,MAAM;QACN,KAAK,EAAE,MAAM,CAAC,KAAM;QACpB,GAAG,EAAE,MAAM,CAAC,GAAI;QAChB,YAAY,EAAE,MAAM,CAAC,eAAe,CAAC;QACrC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC;YAC3B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;YAC1C,CAAC,CAAC,SAAS;QACb,YAAY,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtE,UAAU,EAAE,MAAM,CAAC,YAAY,CAAyB;QACxD,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QACpB,SAAS;KACV,CAAC;AACJ,CAAC;AAeD,SAAS,mBAAmB;IAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC3B,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAC7B,OAAO,EAAE;YACP,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;YAChD,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC1C,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;YACpD,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;YACzC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;SACtC;QACD,gBAAgB,EAAE,KAAK;QACvB,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,mBAAmB,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAK;QAClB,GAAG,EAAE,MAAM,CAAC,GAAI;QAChB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAS;QAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,KAAK;KAC3B,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,SAAS,YAAY;IACnB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CAyBb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;CAsBb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;CAYb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;CAWb,CAAC,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC7C,eAAe,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;YACvC,MAAM,QAAQ,CAAC;gBACb,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClD,CAAC,CAAC;YACH,MAAM;QACR,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACtD,cAAc,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,mBAAmB,EAAE,CAAC;gBACnC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;gBACrD,cAAc,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM;QACR,CAAC;QACD;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;YACzC,eAAe,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bunny-agent/runner-cli",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.35-beta.1",
|
|
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": {
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
],
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@anthropic-ai/claude-agent-sdk": "0.2.70",
|
|
44
|
-
"@
|
|
45
|
-
"@
|
|
46
|
-
"@
|
|
44
|
+
"@earendil-works/pi-agent-core": "0.74.0",
|
|
45
|
+
"@earendil-works/pi-ai": "0.74.0",
|
|
46
|
+
"@earendil-works/pi-coding-agent": "0.74.0",
|
|
47
47
|
"@openai/codex-sdk": "^0.110.0",
|
|
48
48
|
"dotenv": "^17.3.1",
|
|
49
49
|
"zod": "^4.0.0"
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"scripts": {
|
|
64
64
|
"build": "tsc && pnpm bundle",
|
|
65
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:@
|
|
66
|
+
"bundle": "esbuild src/cli.ts --bundle --platform=node --format=esm --external:dotenv --external:@anthropic-ai/claude-agent-sdk --external:@openai/codex-sdk --external:@earendil-works/pi-agent-core --external:@earendil-works/pi-ai --external:@earendil-works/pi-coding-agent --outfile=dist/bundle.mjs",
|
|
67
67
|
"dev": "tsc --watch",
|
|
68
68
|
"clean": "rm -rf dist",
|
|
69
69
|
"typecheck": "tsc --noEmit",
|