@botconnector/bccli 0.4.0-beta.45 → 0.4.0-beta.47
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/{acp-QUDKQCTK.js → acp-QMD7IKKI.js} +2 -2
- package/dist/{args-HXDHQUL2.js → args-6T55MFPG.js} +4 -4
- package/dist/{chunk-7BQQYDPU.js → chunk-226R2FBX.js} +1 -1
- package/dist/{chunk-FNCDUDOB.js → chunk-3ETD6HSV.js} +31 -18
- package/dist/{chunk-W2ME7AGN.js → chunk-5D35DOMD.js} +3 -3
- package/dist/{chunk-4BQAIMAM.js → chunk-5YTZXUGU.js} +4 -4
- package/dist/{chunk-NJ5YDSSP.js → chunk-DAFJ7VOQ.js} +1 -1
- package/dist/{chunk-ERXWNEVU.js → chunk-EC67VAZX.js} +68 -12
- package/dist/{chunk-O33VFLLL.js → chunk-FNECQ433.js} +2 -2
- package/dist/{chunk-IA35YV5K.js → chunk-HBR62GF2.js} +1 -1
- package/dist/{chunk-JZ5XPSIA.js → chunk-JRUQQRP6.js} +5 -4
- package/dist/{chunk-X5ZJGTWY.js → chunk-KVXONGYT.js} +4 -4
- package/dist/{chunk-IU7PB6US.js → chunk-QGTAINBU.js} +6 -6
- package/dist/{chunk-JKRSZHDV.js → chunk-R72DRWZ6.js} +1 -1
- package/dist/{chunk-Q7DFEWE7.js → chunk-SJTJHATK.js} +2 -2
- package/dist/{chunk-VQ4FJ7R2.js → chunk-SVGARF5B.js} +3 -3
- package/dist/{chunk-FNGFR7R6.js → chunk-TSZFE2RV.js} +2 -1
- package/dist/{chunk-F4XYLKG5.js → chunk-Y7F5CZ4D.js} +1 -1
- package/dist/{chunk-RFSNTLOW.js → chunk-YGITX6JU.js} +1 -1
- package/dist/cli.js +37 -37
- package/dist/{completion-5OLAKCX7.js → completion-QO5B6N4R.js} +1 -1
- package/dist/{config-LSB274W4.js → config-67RNJLDR.js} +3 -3
- package/dist/{config-2PLBQKNC.js → config-TBRDIB7O.js} +2 -2
- package/dist/{ghBotCli-MB7KATUU.js → ghBotCli-4SXXJQGT.js} +13 -13
- package/dist/{integrationCli-L7OLA3DG.js → integrationCli-KTHSQC4Y.js} +2 -2
- package/dist/{login-4CIXDZZ7.js → login-7T6M25XB.js} +3 -3
- package/dist/{mcpCli-SAJTQGI7.js → mcpCli-7RR5N7SX.js} +5 -5
- package/dist/{modelsCli-L6VODTVW.js → modelsCli-GDE5RVD4.js} +6 -6
- package/dist/{oauthLogin-6TP475PO.js → oauthLogin-ZVKAVGJH.js} +1 -1
- package/dist/{pluginsCli-LE2IDSST.js → pluginsCli-UKMRWPVT.js} +2 -2
- package/dist/{prCli-PQJDEF7H.js → prCli-26OUBDFO.js} +1 -1
- package/dist/providerCli-QVYG6PFQ.js +15 -0
- package/dist/sdk.js +93 -22
- package/dist/{serve-QAVMAYEU.js → serve-PAXJYBVI.js} +3 -3
- package/dist/{serve-ZBCAEE72.js → serve-SEGKQ5DM.js} +14 -14
- package/dist/session-GDPYDGOX.js +12 -0
- package/dist/setup-HRZW73ZW.js +24 -0
- package/dist/{statsCli-AJG3IJTX.js → statsCli-ZHURTHK7.js} +1 -1
- package/dist/{transferCli-HNJMZYLV.js → transferCli-PQCFSIVT.js} +4 -4
- package/dist/{ui-ORZ5ZNIC.js → ui-52SWT2AL.js} +139 -44
- package/dist/{update-REYFMT5X.js → update-URVV6UXT.js} +2 -2
- package/package.json +1 -1
- package/dist/providerCli-SEAZ5OLH.js +0 -15
- package/dist/session-3I64N64B.js +0 -12
- package/dist/setup-N3PMYREM.js +0 -24
package/dist/sdk.js
CHANGED
|
@@ -68,6 +68,10 @@ var ID = {
|
|
|
68
68
|
" enter save \xB7 esc cancel": " enter simpan \xB7 esc batal",
|
|
69
69
|
"shift+tab switch mode": "shift+tab ganti mode",
|
|
70
70
|
"{n} tokens": "{n} token",
|
|
71
|
+
"\u273B Thinking": "\u273B Berpikir",
|
|
72
|
+
"click to toggle": "klik untuk buka/tutup",
|
|
73
|
+
"Model: {model} \xB7 reasoning: {level}": "Model: {model} \xB7 penalaran: {level}",
|
|
74
|
+
"No reasoning summary received yet; tool activity remains visible above.": "Belum ada ringkasan penalaran dari model; aktivitas tool tetap terlihat di atas.",
|
|
71
75
|
"esc to cancel": "esc batal",
|
|
72
76
|
"/ for commands": "/ perintah",
|
|
73
77
|
"\u2026 {n} earlier steps": "\u2026 {n} langkah sebelumnya",
|
|
@@ -284,6 +288,7 @@ Opsi:
|
|
|
284
288
|
"Note: {env} is still set in the environment and will keep being used.": "Catatan: {env} masih ter-set di environment dan akan terus dipakai.",
|
|
285
289
|
"To revoke keys on your account, open {dashboard}.": "Untuk mencabut key akun kamu, buka {dashboard}.",
|
|
286
290
|
"Budget exceeded ({kind}): {used} of {limit}. Further model calls are blocked; raise usageCap in ~/.bccli/config.json.": "Anggaran terlampaui ({kind}): {used} dari {limit}. Panggilan model selanjutnya diblokir; naikkan usageCap di ~/.bccli/config.json.",
|
|
291
|
+
"Could not save thinking visibility: {error}": "Gagal menyimpan pengaturan tampilan Thinking: {error}",
|
|
287
292
|
"Verifying edits: {cmds}": "Memverifikasi edit: {cmds}",
|
|
288
293
|
"Verification passed.": "Verifikasi lulus.",
|
|
289
294
|
"Verification still failing after {n} fix round(s). Run the commands manually to see why.": "Verifikasi masih gagal setelah {n} ronde perbaikan. Jalankan perintahnya secara manual untuk melihat penyebabnya.",
|
|
@@ -448,15 +453,11 @@ Opsi:
|
|
|
448
453
|
"Unknown command: /{name}. Type /help.": "Perintah tidak dikenal: /{name}. Ketik /help.",
|
|
449
454
|
"Skill {name} cannot be read: {error}": "Skill {name} tidak bisa dibaca: {error}",
|
|
450
455
|
"{n} queued messages cancelled.": "{n} pesan antrian dibatalkan.",
|
|
451
|
-
"Thinking shown ({bind} to hide).": "Thinking ditampilkan ({bind} untuk menutup).",
|
|
452
|
-
"Thinking hidden ({bind} to show).": "Thinking disembunyikan ({bind} untuk membuka).",
|
|
453
456
|
"MCP {name} removed.": "MCP {name} dihapus.",
|
|
454
457
|
"MCP {name} installed, connecting\u2026": "MCP {name} dipasang, menghubungkan\u2026",
|
|
455
458
|
"MCP {name} active \xB7 {n} tools.": "MCP {name} aktif \xB7 {n} alat.",
|
|
456
459
|
"MCP {name} failed: {error}": "MCP {name} gagal: {error}",
|
|
457
460
|
"unknown": "tidak diketahui",
|
|
458
|
-
"\u273B Thinking \xB7 {n} lines \xB7 {bind} to show": "\u273B Berpikir \xB7 {n} baris \xB7 {bind} buka",
|
|
459
|
-
"\u273B Thinking ({bind} to hide)": "\u273B Berpikir ({bind} tutup)",
|
|
460
461
|
" \u23F3 queued: {q}": " \u23F3 antri: {q}",
|
|
461
462
|
"Thinking": "Berpikir",
|
|
462
463
|
"Cancelling": "Membatalkan",
|
|
@@ -683,6 +684,7 @@ function loadConfig(cwd, env = process.env) {
|
|
|
683
684
|
model: project.model ?? global.model ?? DEFAULT_CONFIG.model,
|
|
684
685
|
permissionMode: global.permissionMode ?? DEFAULT_CONFIG.permissionMode,
|
|
685
686
|
reasoning: global.reasoning ?? DEFAULT_CONFIG.reasoning,
|
|
687
|
+
thinkingVisible: global.thinkingVisible === true,
|
|
686
688
|
maxSteps: resolvedMaxSteps(global),
|
|
687
689
|
hooks: global.hooks,
|
|
688
690
|
vision: global.vision ?? DEFAULT_CONFIG.vision,
|
|
@@ -1054,6 +1056,13 @@ var ProviderError = class extends Error {
|
|
|
1054
1056
|
status;
|
|
1055
1057
|
code;
|
|
1056
1058
|
};
|
|
1059
|
+
function outputReasoningSummary(items) {
|
|
1060
|
+
return (items ?? []).flatMap((item) => {
|
|
1061
|
+
if (!item || typeof item !== "object" || !("type" in item) || item.type !== "reasoning") return [];
|
|
1062
|
+
if (!("summary" in item) || !Array.isArray(item.summary)) return [];
|
|
1063
|
+
return item.summary;
|
|
1064
|
+
}).map((part) => part && typeof part === "object" && "text" in part && typeof part.text === "string" ? part.text : "").filter(Boolean).join("\n");
|
|
1065
|
+
}
|
|
1057
1066
|
var retryable = (status) => status === 429 || status >= 500;
|
|
1058
1067
|
function detectRepetition(text) {
|
|
1059
1068
|
const tail = text.slice(-600);
|
|
@@ -1335,8 +1344,8 @@ function responseTools(tools, enableProgrammaticToolCalling = false, programmati
|
|
|
1335
1344
|
return lunaToolPlan(tools, enableProgrammaticToolCalling, programmaticToolNames, forceProgrammaticOnly).tools;
|
|
1336
1345
|
}
|
|
1337
1346
|
function responseReasoning(level) {
|
|
1338
|
-
if (level === "
|
|
1339
|
-
return { reasoning: {
|
|
1347
|
+
if (level === "off") return { reasoning: { effort: "none" } };
|
|
1348
|
+
return { reasoning: { ...level === "auto" ? {} : { effort: level }, summary: "auto" } };
|
|
1340
1349
|
}
|
|
1341
1350
|
function toResponsesUsage(usage) {
|
|
1342
1351
|
return usage ? { inputTokens: usage.input_tokens ?? 0, outputTokens: usage.output_tokens ?? 0 } : void 0;
|
|
@@ -1363,8 +1372,9 @@ function hasPendingProgrammaticReplay(messages) {
|
|
|
1363
1372
|
}
|
|
1364
1373
|
return pending;
|
|
1365
1374
|
}
|
|
1366
|
-
async function readResponsesStream(res, onText) {
|
|
1375
|
+
async function readResponsesStream(res, onText, onThinking) {
|
|
1367
1376
|
let text = "";
|
|
1377
|
+
let thinking = "";
|
|
1368
1378
|
let usage;
|
|
1369
1379
|
let finishReason;
|
|
1370
1380
|
let loopAt = -1;
|
|
@@ -1395,6 +1405,12 @@ async function readResponsesStream(res, onText) {
|
|
|
1395
1405
|
if (event.type === "response.failed") {
|
|
1396
1406
|
throw new ProviderError(t("Error from the provider: {message}", { message: event.response?.error?.message ?? "Response failed" }));
|
|
1397
1407
|
}
|
|
1408
|
+
if (event.type === "response.reasoning_summary_text.delta" || event.type === "response.reasoning_summary.delta") {
|
|
1409
|
+
const summary = String(event.delta ?? "");
|
|
1410
|
+
thinking += summary;
|
|
1411
|
+
if (summary) onThinking?.(summary);
|
|
1412
|
+
return;
|
|
1413
|
+
}
|
|
1398
1414
|
if (event.type === "response.output_text.delta" || event.type === "response.refusal.delta") {
|
|
1399
1415
|
emitText(String(event.delta ?? ""));
|
|
1400
1416
|
return;
|
|
@@ -1431,12 +1447,26 @@ async function readResponsesStream(res, onText) {
|
|
|
1431
1447
|
if (event.type === "response.completed") {
|
|
1432
1448
|
usage = toResponsesUsage(event.response?.usage);
|
|
1433
1449
|
responsesOutputItems = event.response?.output ?? [...outputItems.entries()].sort(([a], [b]) => a - b).map(([, item]) => item);
|
|
1450
|
+
if (!thinking) {
|
|
1451
|
+
const summary = outputReasoningSummary(responsesOutputItems);
|
|
1452
|
+
if (summary) {
|
|
1453
|
+
thinking = summary;
|
|
1454
|
+
onThinking?.(summary);
|
|
1455
|
+
}
|
|
1456
|
+
}
|
|
1434
1457
|
finishReason = responsesFinishReason(responsesOutputItems, calls.size);
|
|
1435
1458
|
return;
|
|
1436
1459
|
}
|
|
1437
1460
|
if (event.type === "response.incomplete") {
|
|
1438
1461
|
usage = toResponsesUsage(event.response?.usage);
|
|
1439
1462
|
responsesOutputItems = event.response?.output ?? [...outputItems.entries()].sort(([a], [b]) => a - b).map(([, item]) => item);
|
|
1463
|
+
if (!thinking) {
|
|
1464
|
+
const summary = outputReasoningSummary(responsesOutputItems);
|
|
1465
|
+
if (summary) {
|
|
1466
|
+
thinking = summary;
|
|
1467
|
+
onThinking?.(summary);
|
|
1468
|
+
}
|
|
1469
|
+
}
|
|
1440
1470
|
finishReason = responsesFinishReason(
|
|
1441
1471
|
responsesOutputItems,
|
|
1442
1472
|
calls.size,
|
|
@@ -1460,14 +1490,16 @@ async function readResponsesStream(res, onText) {
|
|
|
1460
1490
|
return {
|
|
1461
1491
|
text,
|
|
1462
1492
|
toolCalls: [...calls.entries()].sort(([a], [b]) => a - b).map(([, call]) => call),
|
|
1493
|
+
thinking: thinking || void 0,
|
|
1463
1494
|
usage,
|
|
1464
1495
|
finishReason,
|
|
1465
1496
|
responsesOutputItems
|
|
1466
1497
|
};
|
|
1467
1498
|
}
|
|
1468
|
-
async function readResponsesJson(res) {
|
|
1499
|
+
async function readResponsesJson(res, onThinking) {
|
|
1469
1500
|
const body = await res.json();
|
|
1470
1501
|
let text = "";
|
|
1502
|
+
let thinking = "";
|
|
1471
1503
|
const toolCalls = [];
|
|
1472
1504
|
for (const item of body.output ?? []) {
|
|
1473
1505
|
if (item?.type === "message") {
|
|
@@ -1475,6 +1507,12 @@ async function readResponsesJson(res) {
|
|
|
1475
1507
|
if (part?.type === "output_text" && typeof part.text === "string") text += part.text;
|
|
1476
1508
|
else if (part?.type === "refusal" && typeof part.refusal === "string") text += part.refusal;
|
|
1477
1509
|
}
|
|
1510
|
+
} else if (item?.type === "reasoning" && Array.isArray(item.summary)) {
|
|
1511
|
+
const summary = item.summary.filter((part) => typeof part === "object" && part !== null && typeof part.text === "string").map((part) => part.text).join("");
|
|
1512
|
+
if (summary) {
|
|
1513
|
+
thinking += summary;
|
|
1514
|
+
onThinking?.(summary);
|
|
1515
|
+
}
|
|
1478
1516
|
} else if (item?.type === "function_call") {
|
|
1479
1517
|
toolCalls.push({
|
|
1480
1518
|
id: String(item.call_id || item.id || `call_${toolCalls.length}`),
|
|
@@ -1487,6 +1525,7 @@ async function readResponsesJson(res) {
|
|
|
1487
1525
|
return {
|
|
1488
1526
|
text,
|
|
1489
1527
|
toolCalls,
|
|
1528
|
+
thinking: thinking || void 0,
|
|
1490
1529
|
usage: toResponsesUsage(body.usage),
|
|
1491
1530
|
responsesOutputItems: body.output,
|
|
1492
1531
|
finishReason: responsesFinishReason(
|
|
@@ -1544,9 +1583,10 @@ function responseContinuationInput(messages, continuation) {
|
|
|
1544
1583
|
incremental: true
|
|
1545
1584
|
};
|
|
1546
1585
|
}
|
|
1547
|
-
async function readResponsesWebSocketTurn(events, ws, onText, signal) {
|
|
1586
|
+
async function readResponsesWebSocketTurn(events, ws, onText, onThinking, signal) {
|
|
1548
1587
|
let responseId = "";
|
|
1549
1588
|
let text = "";
|
|
1589
|
+
let thinking = "";
|
|
1550
1590
|
let usage;
|
|
1551
1591
|
let finishReason;
|
|
1552
1592
|
let loopAt = -1;
|
|
@@ -1593,6 +1633,12 @@ async function readResponsesWebSocketTurn(events, ws, onText, signal) {
|
|
|
1593
1633
|
responseId = String(event.response?.id || responseId);
|
|
1594
1634
|
continue;
|
|
1595
1635
|
}
|
|
1636
|
+
if (event.type === "response.reasoning_summary_text.delta") {
|
|
1637
|
+
const summary = String(event.delta ?? "");
|
|
1638
|
+
thinking += summary;
|
|
1639
|
+
if (summary) onThinking?.(summary);
|
|
1640
|
+
continue;
|
|
1641
|
+
}
|
|
1596
1642
|
if (event.type === "response.output_text.delta" || event.type === "response.refusal.delta") {
|
|
1597
1643
|
emitText(String(event.delta ?? ""));
|
|
1598
1644
|
if (loopAt >= 0) {
|
|
@@ -1643,6 +1689,13 @@ async function readResponsesWebSocketTurn(events, ws, onText, signal) {
|
|
|
1643
1689
|
responseId = String(event.response?.id || responseId);
|
|
1644
1690
|
usage = toResponsesUsage(event.response?.usage);
|
|
1645
1691
|
const responsesOutputItems = event.response?.output ?? [...outputItems.entries()].sort(([a], [b]) => a - b).map(([, item]) => item);
|
|
1692
|
+
if (!thinking) {
|
|
1693
|
+
const summary = outputReasoningSummary(responsesOutputItems);
|
|
1694
|
+
if (summary) {
|
|
1695
|
+
thinking = summary;
|
|
1696
|
+
onThinking?.(summary);
|
|
1697
|
+
}
|
|
1698
|
+
}
|
|
1646
1699
|
finishReason = responsesFinishReason(
|
|
1647
1700
|
responsesOutputItems,
|
|
1648
1701
|
calls.size,
|
|
@@ -1653,6 +1706,7 @@ async function readResponsesWebSocketTurn(events, ws, onText, signal) {
|
|
|
1653
1706
|
completion: {
|
|
1654
1707
|
text,
|
|
1655
1708
|
toolCalls: [...calls.entries()].sort(([a], [b]) => a - b).map(([, call]) => call),
|
|
1709
|
+
thinking: thinking || void 0,
|
|
1656
1710
|
usage,
|
|
1657
1711
|
finishReason,
|
|
1658
1712
|
responsesOutputItems
|
|
@@ -1725,7 +1779,7 @@ function createProvider(options) {
|
|
|
1725
1779
|
lunaWsIdleTimer = setTimeout(() => resetLunaWebSocket(), 10 * 6e4);
|
|
1726
1780
|
lunaWsIdleTimer.unref?.();
|
|
1727
1781
|
};
|
|
1728
|
-
async function chatLunaWebSocket(messages, tools, programmaticToolNames, reasoning, signal, onText) {
|
|
1782
|
+
async function chatLunaWebSocket(messages, tools, programmaticToolNames, reasoning, signal, onText, onThinking) {
|
|
1729
1783
|
const ptcEnabled = shouldEnableLunaPtc(messages, enableProgrammaticToolCalling, programmaticToolNames);
|
|
1730
1784
|
const forcePtc = shouldForceLunaPtc(messages, ptcEnabled);
|
|
1731
1785
|
const nativeTools = responseTools(tools, ptcEnabled, programmaticToolNames, forcePtc);
|
|
@@ -1750,9 +1804,13 @@ function createProvider(options) {
|
|
|
1750
1804
|
if (delta) emittedText = true;
|
|
1751
1805
|
onText?.(delta);
|
|
1752
1806
|
};
|
|
1807
|
+
const trackSummary = (delta) => {
|
|
1808
|
+
if (delta) emittedText = true;
|
|
1809
|
+
onThinking?.(delta);
|
|
1810
|
+
};
|
|
1753
1811
|
try {
|
|
1754
1812
|
ws.send(createEvent);
|
|
1755
|
-
const result = await readResponsesWebSocketTurn(events, ws, trackText, signal);
|
|
1813
|
+
const result = await readResponsesWebSocketTurn(events, ws, trackText, trackSummary, signal);
|
|
1756
1814
|
if (result.completion.finishReason === "repetition") {
|
|
1757
1815
|
resetLunaWebSocket();
|
|
1758
1816
|
return result.completion;
|
|
@@ -1813,7 +1871,7 @@ function createProvider(options) {
|
|
|
1813
1871
|
}
|
|
1814
1872
|
if (useResponsesWebSocket) {
|
|
1815
1873
|
try {
|
|
1816
|
-
return await chatLunaWebSocket(messages, tools, programmaticToolNames, reasoning, signal, onText);
|
|
1874
|
+
return await chatLunaWebSocket(messages, tools, programmaticToolNames, reasoning, signal, onText, onThinking);
|
|
1817
1875
|
} catch (error) {
|
|
1818
1876
|
const err = error instanceof ProviderError ? error : new ProviderError(error.message);
|
|
1819
1877
|
if (err.code !== "bc_ws_http_fallback") throw err;
|
|
@@ -1836,9 +1894,9 @@ function createProvider(options) {
|
|
|
1836
1894
|
},
|
|
1837
1895
|
signal
|
|
1838
1896
|
);
|
|
1839
|
-
if ((res2.headers.get("content-type") ?? "").includes("application/json")) return readResponsesJson(res2);
|
|
1897
|
+
if ((res2.headers.get("content-type") ?? "").includes("application/json")) return readResponsesJson(res2, onThinking);
|
|
1840
1898
|
if (!res2.body) throw new ProviderError(t("Empty response from the provider"));
|
|
1841
|
-
return readResponsesStream(res2, onText);
|
|
1899
|
+
return readResponsesStream(res2, onText, onThinking);
|
|
1842
1900
|
}
|
|
1843
1901
|
const res = await post(
|
|
1844
1902
|
"/chat/completions",
|
|
@@ -3378,13 +3436,15 @@ var Agent2 = class {
|
|
|
3378
3436
|
const keepTokens = Math.min(15e3, Math.floor(this.contextWindow * 0.1));
|
|
3379
3437
|
const [older, keep] = splitKeepRecent(this.messages, keepTokens);
|
|
3380
3438
|
const history = trimToFit(older, Math.floor(this.contextWindow * 0.8));
|
|
3381
|
-
const
|
|
3439
|
+
const pending = this.provider.chat({
|
|
3382
3440
|
messages: [{ role: "system", content: this.systemPrompt }, ...history, { role: "user", content: COMPACT_PROMPT }],
|
|
3383
3441
|
// Some gateways reject tool_calls in history when no tools are declared.
|
|
3384
3442
|
tools: this.definitions,
|
|
3385
3443
|
signal,
|
|
3386
3444
|
reasoning: this.reasoning
|
|
3387
3445
|
});
|
|
3446
|
+
const completion = await raceAbort(pending, signal);
|
|
3447
|
+
if (completion === ABORTED) throw new Error("aborted");
|
|
3388
3448
|
this.clear();
|
|
3389
3449
|
this.push({ role: "user", content: `Summary of the previous conversation:
|
|
3390
3450
|
${completion.text}` });
|
|
@@ -3426,15 +3486,26 @@ ${completion.text}` });
|
|
|
3426
3486
|
this.onEvent({ type: "budgetExceeded", ...over });
|
|
3427
3487
|
return;
|
|
3428
3488
|
}
|
|
3429
|
-
|
|
3489
|
+
const pendingCompletion = this.provider.chat({
|
|
3430
3490
|
messages: [{ role: "system", content: this.systemPrompt }, ...this.messages],
|
|
3431
3491
|
tools: this.turnDefinitions,
|
|
3432
3492
|
programmaticToolNames: this.turnTools.filter((tool) => tool.programmaticSafe).map((tool) => tool.name),
|
|
3433
3493
|
signal,
|
|
3434
|
-
|
|
3435
|
-
|
|
3494
|
+
// Late output from a cancelled provider must not leak into the next turn.
|
|
3495
|
+
onText: (delta) => {
|
|
3496
|
+
if (!signal.aborted) this.onEvent({ type: "text", delta });
|
|
3497
|
+
},
|
|
3498
|
+
onThinking: (delta) => {
|
|
3499
|
+
if (!signal.aborted) this.onEvent({ type: "thinking", delta });
|
|
3500
|
+
},
|
|
3436
3501
|
reasoning: this.reasoning
|
|
3437
3502
|
});
|
|
3503
|
+
const outcome = await raceAbort(pendingCompletion, signal);
|
|
3504
|
+
if (outcome === ABORTED) {
|
|
3505
|
+
this.onEvent({ type: "aborted" });
|
|
3506
|
+
return;
|
|
3507
|
+
}
|
|
3508
|
+
let completion = outcome;
|
|
3438
3509
|
if (!completion.toolCalls.length && completion.finishReason !== "repetition") {
|
|
3439
3510
|
const recovered = recoverTextToolCalls(completion.text, this.turnDefinitions);
|
|
3440
3511
|
if (recovered) {
|
|
@@ -3481,8 +3552,8 @@ ${completion.text}` });
|
|
|
3481
3552
|
const batch = calls.slice(i, j);
|
|
3482
3553
|
const tickets = batch.map(() => ({ abandoned: false, open: false }));
|
|
3483
3554
|
const running = Promise.all(batch.map((c, k) => this.runTool(c, signal, tickets[k])));
|
|
3484
|
-
const
|
|
3485
|
-
if (
|
|
3555
|
+
const outcome2 = await raceAbort(running, signal);
|
|
3556
|
+
if (outcome2 === ABORTED) {
|
|
3486
3557
|
batch.forEach((c, k) => {
|
|
3487
3558
|
const ticket = tickets[k];
|
|
3488
3559
|
ticket.abandoned = true;
|
|
@@ -3495,11 +3566,11 @@ ${completion.text}` });
|
|
|
3495
3566
|
return;
|
|
3496
3567
|
}
|
|
3497
3568
|
batch.forEach((c, k) => {
|
|
3498
|
-
roundImages.push(...
|
|
3569
|
+
roundImages.push(...outcome2[k].images ?? []);
|
|
3499
3570
|
this.push({
|
|
3500
3571
|
role: "tool",
|
|
3501
3572
|
tool_call_id: c.id,
|
|
3502
|
-
content:
|
|
3573
|
+
content: outcome2[k].output,
|
|
3503
3574
|
...c.caller ? { responses_caller: c.caller } : {}
|
|
3504
3575
|
});
|
|
3505
3576
|
});
|
|
@@ -3,15 +3,15 @@ import {
|
|
|
3
3
|
createFetchTool,
|
|
4
4
|
createWebSearchTool,
|
|
5
5
|
isPrivateHost
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-R72DRWZ6.js";
|
|
7
7
|
import "./chunk-PSO7R5AD.js";
|
|
8
8
|
import {
|
|
9
9
|
loadConfig,
|
|
10
10
|
readCredentials
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-TSZFE2RV.js";
|
|
12
12
|
import {
|
|
13
13
|
t
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-JRUQQRP6.js";
|
|
15
15
|
|
|
16
16
|
// src/mcpServer/serve.ts
|
|
17
17
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
createRuntime
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-3ETD6HSV.js";
|
|
5
5
|
import "./chunk-QZKLZELZ.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-DAFJ7VOQ.js";
|
|
7
|
+
import "./chunk-R72DRWZ6.js";
|
|
8
8
|
import "./chunk-PSO7R5AD.js";
|
|
9
9
|
import {
|
|
10
10
|
VERSION
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-226R2FBX.js";
|
|
12
12
|
import {
|
|
13
13
|
LOOPBACK_BIND,
|
|
14
14
|
MAX_FRAME_BYTES,
|
|
@@ -17,25 +17,25 @@ import {
|
|
|
17
17
|
parseClientFrame,
|
|
18
18
|
randomToken,
|
|
19
19
|
trustFence
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-5D35DOMD.js";
|
|
21
21
|
import "./chunk-GAFJEQTJ.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-KVXONGYT.js";
|
|
23
23
|
import {
|
|
24
24
|
listAllModels
|
|
25
|
-
} from "./chunk-
|
|
26
|
-
import "./chunk-
|
|
25
|
+
} from "./chunk-5YTZXUGU.js";
|
|
26
|
+
import "./chunk-Y7F5CZ4D.js";
|
|
27
27
|
import "./chunk-7F3IWBPQ.js";
|
|
28
28
|
import {
|
|
29
29
|
Session
|
|
30
|
-
} from "./chunk-
|
|
31
|
-
import "./chunk-
|
|
32
|
-
import "./chunk-
|
|
33
|
-
import "./chunk-
|
|
30
|
+
} from "./chunk-HBR62GF2.js";
|
|
31
|
+
import "./chunk-EC67VAZX.js";
|
|
32
|
+
import "./chunk-YGITX6JU.js";
|
|
33
|
+
import "./chunk-SJTJHATK.js";
|
|
34
34
|
import {
|
|
35
35
|
bccliHome,
|
|
36
36
|
loadConfig
|
|
37
|
-
} from "./chunk-
|
|
38
|
-
import "./chunk-
|
|
37
|
+
} from "./chunk-TSZFE2RV.js";
|
|
38
|
+
import "./chunk-JRUQQRP6.js";
|
|
39
39
|
|
|
40
40
|
// src/serve.ts
|
|
41
41
|
import { randomBytes } from "crypto";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
createRuntime,
|
|
4
|
+
lunaPtcAutoEnabled
|
|
5
|
+
} from "./chunk-3ETD6HSV.js";
|
|
6
|
+
import "./chunk-QZKLZELZ.js";
|
|
7
|
+
import "./chunk-DAFJ7VOQ.js";
|
|
8
|
+
import "./chunk-R72DRWZ6.js";
|
|
9
|
+
import "./chunk-PSO7R5AD.js";
|
|
10
|
+
import "./chunk-GAFJEQTJ.js";
|
|
11
|
+
import "./chunk-KVXONGYT.js";
|
|
12
|
+
import "./chunk-5YTZXUGU.js";
|
|
13
|
+
import "./chunk-Y7F5CZ4D.js";
|
|
14
|
+
import "./chunk-7F3IWBPQ.js";
|
|
15
|
+
import "./chunk-HBR62GF2.js";
|
|
16
|
+
import "./chunk-EC67VAZX.js";
|
|
17
|
+
import "./chunk-YGITX6JU.js";
|
|
18
|
+
import "./chunk-SJTJHATK.js";
|
|
19
|
+
import "./chunk-TSZFE2RV.js";
|
|
20
|
+
import "./chunk-JRUQQRP6.js";
|
|
21
|
+
export {
|
|
22
|
+
createRuntime,
|
|
23
|
+
lunaPtcAutoEnabled
|
|
24
|
+
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
Session
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-HBR62GF2.js";
|
|
5
|
+
import "./chunk-EC67VAZX.js";
|
|
6
|
+
import "./chunk-YGITX6JU.js";
|
|
7
7
|
import {
|
|
8
8
|
t
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-JRUQQRP6.js";
|
|
10
10
|
|
|
11
11
|
// src/transferCli.ts
|
|
12
12
|
import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "fs";
|