@botconnector/bccli 0.4.3 → 0.4.4
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-NU4HZHQO.js → acp-SWBX4TT6.js} +2 -2
- package/dist/{args-NRTZWWEV.js → args-UCLW7NID.js} +2 -2
- package/dist/{chunk-Z5NI5FIK.js → chunk-5BVC3Y6B.js} +2 -2
- package/dist/{chunk-FUJGHCWN.js → chunk-CGBSE55G.js} +1 -1
- package/dist/{chunk-QNUJHKEL.js → chunk-FI7RUJRX.js} +5 -5
- package/dist/{chunk-4W5SKQDC.js → chunk-HBQ6OLQT.js} +43 -20
- package/dist/{chunk-XTOATEI6.js → chunk-MSDK4IIJ.js} +9 -7
- package/dist/{chunk-7I2ZGPUS.js → chunk-OZ5GHMTN.js} +1 -1
- package/dist/{chunk-KPTML72Q.js → chunk-QQJ2VVIW.js} +8 -0
- package/dist/{chunk-GWVLPN4B.js → chunk-RZF6A43N.js} +1 -1
- package/dist/{chunk-6AUROP2E.js → chunk-SMTBYDNO.js} +1 -1
- package/dist/{chunk-6UO5GX55.js → chunk-TGGKACSE.js} +1 -1
- package/dist/{chunk-WDX62DFH.js → chunk-YCHCHOMK.js} +1 -1
- package/dist/cli.js +22 -22
- package/dist/{ghBotCli-GCIUUMKQ.js → ghBotCli-ZVWU7EMG.js} +8 -8
- package/dist/{login-YXSSB2HQ.js → login-QPUWIC76.js} +1 -1
- package/dist/{modelsCli-656AKYZD.js → modelsCli-SZK4E2BY.js} +3 -3
- package/dist/{providerCli-V2576JXE.js → providerCli-PKI7B2SC.js} +4 -4
- package/dist/sdk.js +59 -26
- package/dist/{serve-XPAGXIGS.js → serve-L3SAIAAI.js} +9 -9
- package/dist/{session-V2VCAF7E.js → session-ASXO6GXR.js} +3 -3
- package/dist/{setup-HVVHOIL4.js → setup-F7FZ66OS.js} +7 -7
- package/dist/{transferCli-C6XS6QYH.js → transferCli-HKGAWZ3Q.js} +3 -3
- package/dist/{ui-43C6Y57K.js → ui-NPA52YJH.js} +23 -9
- package/dist/{update-AVZO4XID.js → update-AFIM34US.js} +1 -1
- package/package.json +1 -1
|
@@ -180,8 +180,8 @@ function runtimeAgent(cwd, allowAll = false) {
|
|
|
180
180
|
return {
|
|
181
181
|
async run(text, onChunk, signal, io) {
|
|
182
182
|
if (!rt) {
|
|
183
|
-
const { parseCliArgs } = await import("./args-
|
|
184
|
-
const { createRuntime } = await import("./setup-
|
|
183
|
+
const { parseCliArgs } = await import("./args-UCLW7NID.js");
|
|
184
|
+
const { createRuntime } = await import("./setup-F7FZ66OS.js");
|
|
185
185
|
rt = createRuntime({ cwd, args: { ...parseCliArgs([]), allowAll } });
|
|
186
186
|
}
|
|
187
187
|
if (io && !allowAll) rt.agent.askPermission = (req) => io.askPermission(req);
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import {
|
|
3
3
|
helpText,
|
|
4
4
|
parseCliArgs
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-TGGKACSE.js";
|
|
6
6
|
import "./chunk-WFZKJY3R.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-QQJ2VVIW.js";
|
|
8
8
|
import "./chunk-RX4UQX43.js";
|
|
9
9
|
import "./chunk-3WHI4LN3.js";
|
|
10
10
|
export {
|
|
@@ -91,8 +91,8 @@ function defaultLoginDeps() {
|
|
|
91
91
|
fetch: globalThis.fetch,
|
|
92
92
|
// Wiring NYATA jalur lama: persis runLogin lama (provider add + prompt key).
|
|
93
93
|
legacyAdd: async (providerId, targetCwd) => {
|
|
94
|
-
const { runProviderCommand } = await import("./providerCli-
|
|
95
|
-
const { parseCliArgs: parse } = await import("./args-
|
|
94
|
+
const { runProviderCommand } = await import("./providerCli-PKI7B2SC.js");
|
|
95
|
+
const { parseCliArgs: parse } = await import("./args-UCLW7NID.js");
|
|
96
96
|
return runProviderCommand(parse(["provider", "add", providerId]), {
|
|
97
97
|
env: process.env,
|
|
98
98
|
cwd: targetCwd,
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
resolvePath,
|
|
25
25
|
runHooks,
|
|
26
26
|
validateGlobPattern
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-HBQ6OLQT.js";
|
|
28
28
|
import {
|
|
29
29
|
createWebSearchTool,
|
|
30
30
|
fetchTool
|
|
@@ -37,10 +37,10 @@ import {
|
|
|
37
37
|
} from "./chunk-WFZKJY3R.js";
|
|
38
38
|
import {
|
|
39
39
|
addProviderKey
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-RZF6A43N.js";
|
|
41
41
|
import {
|
|
42
42
|
listAllModels
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-OZ5GHMTN.js";
|
|
44
44
|
import {
|
|
45
45
|
providerName
|
|
46
46
|
} from "./chunk-HQW4BROS.js";
|
|
@@ -50,14 +50,14 @@ import {
|
|
|
50
50
|
} from "./chunk-3I5BW3ZT.js";
|
|
51
51
|
import {
|
|
52
52
|
Session
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-SMTBYDNO.js";
|
|
54
54
|
import {
|
|
55
55
|
completionAssistantMessage,
|
|
56
56
|
createProvider,
|
|
57
57
|
hasPendingProgrammaticReplay,
|
|
58
58
|
imageUserMessage,
|
|
59
59
|
withFallbackProvider
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-MSDK4IIJ.js";
|
|
61
61
|
import {
|
|
62
62
|
expandEnvVars
|
|
63
63
|
} from "./chunk-6M55UPES.js";
|
|
@@ -200,10 +200,14 @@ function startBackground(command, cwd, env, shell) {
|
|
|
200
200
|
task.status = "exited";
|
|
201
201
|
task.head += `${task.head ? "\n" : ""}${error.message}`;
|
|
202
202
|
});
|
|
203
|
-
child.on("
|
|
203
|
+
child.on("exit", (code) => {
|
|
204
204
|
task.status = "exited";
|
|
205
205
|
task.exitCode = code;
|
|
206
206
|
});
|
|
207
|
+
child.on("close", (code) => {
|
|
208
|
+
task.status = "exited";
|
|
209
|
+
if (task.exitCode === null) task.exitCode = code;
|
|
210
|
+
});
|
|
207
211
|
return task;
|
|
208
212
|
}
|
|
209
213
|
function backgroundStatus(task) {
|
|
@@ -307,8 +311,40 @@ function runCommand(command, opts) {
|
|
|
307
311
|
};
|
|
308
312
|
child.stdout.on("data", onData);
|
|
309
313
|
child.stderr.on("data", onData);
|
|
314
|
+
let settled = false;
|
|
315
|
+
let exitDrainTimer;
|
|
316
|
+
let killDrainTimer;
|
|
317
|
+
const finish = (exitCode, extra = "") => {
|
|
318
|
+
if (settled) return;
|
|
319
|
+
settled = true;
|
|
320
|
+
active.delete(killAsAborted);
|
|
321
|
+
clearTimeout(timer);
|
|
322
|
+
if (exitDrainTimer) clearTimeout(exitDrainTimer);
|
|
323
|
+
if (killDrainTimer) clearTimeout(killDrainTimer);
|
|
324
|
+
opts.signal.removeEventListener("abort", onAbort);
|
|
325
|
+
child.stdout.removeListener("data", onData);
|
|
326
|
+
child.stderr.removeListener("data", onData);
|
|
327
|
+
child.stdout.destroy();
|
|
328
|
+
child.stderr.destroy();
|
|
329
|
+
let spillNote = "";
|
|
330
|
+
if (dropped && fullChunks.length) {
|
|
331
|
+
try {
|
|
332
|
+
const spillPath = join(tmpdir(), `bccli-bash-${Date.now()}-${Math.random().toString(36).slice(2, 8)}.log`);
|
|
333
|
+
writeFileSync(spillPath, fullChunks.join(""), "utf8");
|
|
334
|
+
spillNote = `; full output saved to ${spillPath}`;
|
|
335
|
+
} catch {
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
const output = dropped ? `${head}
|
|
339
|
+
\u2026 [${dropped} characters truncated${spillNote}] \u2026
|
|
340
|
+
${tail}` : head + tail;
|
|
341
|
+
resolve3({ output: output + extra, exitCode, timedOut, aborted });
|
|
342
|
+
};
|
|
310
343
|
const kill = () => {
|
|
311
344
|
if (child.pid !== void 0) killProcessTree(child.pid);
|
|
345
|
+
if (!killDrainTimer) {
|
|
346
|
+
killDrainTimer = setTimeout(() => finish(child.exitCode), 500);
|
|
347
|
+
}
|
|
312
348
|
};
|
|
313
349
|
const killAsAborted = () => {
|
|
314
350
|
aborted = true;
|
|
@@ -325,29 +361,16 @@ function runCommand(command, opts) {
|
|
|
325
361
|
};
|
|
326
362
|
if (opts.signal.aborted) onAbort();
|
|
327
363
|
opts.signal.addEventListener("abort", onAbort, { once: true });
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
opts.signal.removeEventListener("abort", onAbort);
|
|
332
|
-
let spillNote = "";
|
|
333
|
-
if (dropped && fullChunks.length) {
|
|
334
|
-
try {
|
|
335
|
-
const spillPath = join(tmpdir(), `bccli-bash-${Date.now()}-${Math.random().toString(36).slice(2, 8)}.log`);
|
|
336
|
-
writeFileSync(spillPath, fullChunks.join(""), "utf8");
|
|
337
|
-
spillNote = `; full output saved to ${spillPath}`;
|
|
338
|
-
} catch {
|
|
339
|
-
}
|
|
364
|
+
child.on("exit", (code) => {
|
|
365
|
+
if (!exitDrainTimer) {
|
|
366
|
+
exitDrainTimer = setTimeout(() => finish(code), 200);
|
|
340
367
|
}
|
|
341
|
-
|
|
342
|
-
\u2026 [${dropped} characters truncated${spillNote}] \u2026
|
|
343
|
-
${tail}` : head + tail;
|
|
344
|
-
resolve3({ output: output + extra, exitCode, timedOut, aborted });
|
|
345
|
-
};
|
|
368
|
+
});
|
|
346
369
|
child.on("error", (error) => finish(null, error.message));
|
|
347
|
-
child.on("close", (code) => finish(code));
|
|
370
|
+
child.on("close", (code) => finish(code ?? child.exitCode));
|
|
348
371
|
});
|
|
349
372
|
}
|
|
350
|
-
var BASH_DESCRIPTION = "Run a shell command in the project directory. No interactive input. Default timeout 2 minutes (max 10). Use for tests, builds, git, and other CLI tasks. Set background: true for long-running jobs, then poll with task_id (stop with kill: true) or use the /tasks command.";
|
|
373
|
+
var BASH_DESCRIPTION = "Run a shell command in the project directory. No interactive input. Default timeout 2 minutes (max 10). Use for tests, builds, git, and other CLI tasks. Set background: true for long-running jobs, then poll with task_id (stop with kill: true) or use the /tasks command. Do not pipe commands that start background daemons (such as agent-browser) through | head or | tail.";
|
|
351
374
|
var BASH_SCHEMA = z.object({
|
|
352
375
|
command: z.string().optional().describe("The shell command to run (required unless task_id is set)"),
|
|
353
376
|
timeout_ms: z.number().int().min(1e3).max(6e5).optional().describe("Timeout in milliseconds"),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
reasoningPayload
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QQJ2VVIW.js";
|
|
5
5
|
import {
|
|
6
6
|
t
|
|
7
7
|
} from "./chunk-3WHI4LN3.js";
|
|
@@ -159,7 +159,7 @@ async function readStream(res, onText, onThinking) {
|
|
|
159
159
|
if (!choice) return;
|
|
160
160
|
if (choice.finish_reason) finishReason = choice.finish_reason;
|
|
161
161
|
const delta = choice.delta ?? {};
|
|
162
|
-
const reasoning = delta.reasoning_content || delta.reasoning;
|
|
162
|
+
const reasoning = delta.reasoning_content || delta.reasoning || delta.thinking;
|
|
163
163
|
if (reasoning) emit({ text: "", thinking: reasoning });
|
|
164
164
|
if (delta.content) emit(splitter.push(delta.content));
|
|
165
165
|
for (const tc of delta.tool_calls ?? []) {
|
|
@@ -190,7 +190,7 @@ async function readStream(res, onText, onThinking) {
|
|
|
190
190
|
const toolCalls = calls.map((call, index) => ({ ...call, id: call.id || `call_${index}` }));
|
|
191
191
|
return { text, toolCalls, thinking: thinking || void 0, usage, finishReason };
|
|
192
192
|
}
|
|
193
|
-
async function readJson(res) {
|
|
193
|
+
async function readJson(res, onText, onThinking) {
|
|
194
194
|
const body = await res.json();
|
|
195
195
|
const choice = body.choices?.[0];
|
|
196
196
|
const toolCalls = (choice?.message?.tool_calls ?? []).map((tc, i) => ({
|
|
@@ -199,7 +199,9 @@ async function readJson(res) {
|
|
|
199
199
|
arguments: tc.function?.arguments ?? ""
|
|
200
200
|
}));
|
|
201
201
|
const split = splitThinking(choice?.message?.content ?? "");
|
|
202
|
-
const thinking = (choice?.message?.reasoning_content || choice?.message?.reasoning || "") + split.thinking;
|
|
202
|
+
const thinking = (choice?.message?.reasoning_content || choice?.message?.reasoning || choice?.message?.thinking || "") + split.thinking;
|
|
203
|
+
if (thinking) onThinking?.(thinking);
|
|
204
|
+
if (split.text) onText?.(split.text);
|
|
203
205
|
return { text: split.text, toolCalls, thinking: thinking || void 0, usage: toUsage(body.usage), finishReason: choice?.finish_reason };
|
|
204
206
|
}
|
|
205
207
|
function contentText(content) {
|
|
@@ -758,7 +760,7 @@ function createProvider(options) {
|
|
|
758
760
|
const isBotConnectorCloud = /^https:\/\/api\.botconnector\.id\/v1\/?$/.test(baseURL) && apiKey?.startsWith("bc_live_");
|
|
759
761
|
if (isBotConnectorCloud) {
|
|
760
762
|
headers["x-botconnector-client"] = "bccli";
|
|
761
|
-
headers["x-botconnector-client-version"] = "0.4.
|
|
763
|
+
headers["x-botconnector-client-version"] = "0.4.4";
|
|
762
764
|
}
|
|
763
765
|
const useNativeResponses = isBotConnectorCloud && providerId === "bc-cloud" && model === "gpt-6-luna";
|
|
764
766
|
const useResponsesWebSocket = useNativeResponses && Boolean(apiKey) && (fetchOverride === void 0 || responsesWebSocketFactory !== void 0);
|
|
@@ -789,7 +791,7 @@ function createProvider(options) {
|
|
|
789
791
|
baseURL: baseURL.replace(/\/+$/, ""),
|
|
790
792
|
defaultHeaders: {
|
|
791
793
|
"x-botconnector-client": "bccli",
|
|
792
|
-
"x-botconnector-client-version": "0.4.
|
|
794
|
+
"x-botconnector-client-version": "0.4.4"
|
|
793
795
|
}
|
|
794
796
|
});
|
|
795
797
|
lunaWs = responsesWebSocketFactory ? responsesWebSocketFactory(client) : new ResponsesWS(client, { reconnect: null });
|
|
@@ -942,7 +944,7 @@ function createProvider(options) {
|
|
|
942
944
|
{ model, messages, stream: true, stream_options: { include_usage: true }, ...tools?.length ? { tools } : {}, ...reasoningOverride },
|
|
943
945
|
signal
|
|
944
946
|
);
|
|
945
|
-
if ((res.headers.get("content-type") ?? "").includes("application/json")) return readJson(res);
|
|
947
|
+
if ((res.headers.get("content-type") ?? "").includes("application/json")) return readJson(res, onText, onThinking);
|
|
946
948
|
if (!res.body) throw new ProviderError(t("Empty response from the provider"));
|
|
947
949
|
return readStream(res, onText, onThinking);
|
|
948
950
|
},
|
|
@@ -21,6 +21,14 @@ function reasoningCapability(providerId) {
|
|
|
21
21
|
case "bc-cloud":
|
|
22
22
|
return { levels: BOTCONNECTOR_LEVELS, parameter: "reasoning_effort" };
|
|
23
23
|
case "openai":
|
|
24
|
+
case "gmi":
|
|
25
|
+
case "gmicloud":
|
|
26
|
+
case "vertex-maas":
|
|
27
|
+
case "deepseek":
|
|
28
|
+
case "groq":
|
|
29
|
+
case "together":
|
|
30
|
+
case "fireworks":
|
|
31
|
+
case "mistral":
|
|
24
32
|
return { levels: OPENAI_LEVELS, parameter: "reasoning_effort" };
|
|
25
33
|
case "openrouter":
|
|
26
34
|
return { levels: ["auto", "low", "medium", "high"], parameter: "reasoning" };
|
package/dist/cli.js
CHANGED
|
@@ -3,37 +3,37 @@ import {
|
|
|
3
3
|
resolvePrintPrompt,
|
|
4
4
|
resolveWorktree,
|
|
5
5
|
runPrint
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-YCHCHOMK.js";
|
|
7
7
|
import {
|
|
8
8
|
createRuntime
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-FI7RUJRX.js";
|
|
10
10
|
import "./chunk-OK2USAXX.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-HBQ6OLQT.js";
|
|
12
12
|
import "./chunk-JXM6REER.js";
|
|
13
13
|
import "./chunk-PSO7R5AD.js";
|
|
14
14
|
import {
|
|
15
15
|
VERSION
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-CGBSE55G.js";
|
|
17
17
|
import {
|
|
18
18
|
helpText,
|
|
19
19
|
parseCliArgs
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-TGGKACSE.js";
|
|
21
21
|
import "./chunk-WFZKJY3R.js";
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-RZF6A43N.js";
|
|
23
|
+
import "./chunk-OZ5GHMTN.js";
|
|
24
24
|
import {
|
|
25
25
|
readGlobalConfigFile
|
|
26
26
|
} from "./chunk-HQW4BROS.js";
|
|
27
27
|
import {
|
|
28
28
|
defaultLoginDeps,
|
|
29
29
|
runLogin
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-5BVC3Y6B.js";
|
|
31
31
|
import "./chunk-3I5BW3ZT.js";
|
|
32
32
|
import {
|
|
33
33
|
pruneSessions
|
|
34
|
-
} from "./chunk-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
34
|
+
} from "./chunk-SMTBYDNO.js";
|
|
35
|
+
import "./chunk-MSDK4IIJ.js";
|
|
36
|
+
import "./chunk-QQJ2VVIW.js";
|
|
37
37
|
import "./chunk-6M55UPES.js";
|
|
38
38
|
import {
|
|
39
39
|
ConfigError,
|
|
@@ -86,12 +86,12 @@ async function main() {
|
|
|
86
86
|
if (args.command === "login") return runLogin(args.loginProvider ?? "bc-cloud", cwd, args, defaultLoginDeps());
|
|
87
87
|
if (args.command === "mcp") {
|
|
88
88
|
const { runMcpCommand } = await import("./mcpCli-SETTCL3K.js");
|
|
89
|
-
const { readSecret } = await import("./login-
|
|
89
|
+
const { readSecret } = await import("./login-QPUWIC76.js");
|
|
90
90
|
return runMcpCommand(args, { env: process.env, cwd, out: (s) => console.log(s), err: (s) => console.error(s), readSecret });
|
|
91
91
|
}
|
|
92
92
|
if (args.command === "provider") {
|
|
93
|
-
const { runProviderCommand } = await import("./providerCli-
|
|
94
|
-
const { readSecret } = await import("./login-
|
|
93
|
+
const { runProviderCommand } = await import("./providerCli-PKI7B2SC.js");
|
|
94
|
+
const { readSecret } = await import("./login-QPUWIC76.js");
|
|
95
95
|
return runProviderCommand(args, { env: process.env, cwd, out: (s) => console.log(s), err: (s) => console.error(s), readSecret });
|
|
96
96
|
}
|
|
97
97
|
if (args.command === "connect" || args.command === "disconnect" || args.command === "integrations") {
|
|
@@ -105,20 +105,20 @@ async function main() {
|
|
|
105
105
|
});
|
|
106
106
|
}
|
|
107
107
|
if (args.command === "models") {
|
|
108
|
-
const { runModelsCommand } = await import("./modelsCli-
|
|
108
|
+
const { runModelsCommand } = await import("./modelsCli-SZK4E2BY.js");
|
|
109
109
|
return runModelsCommand(args, { env: process.env, cwd, out: (s) => console.log(s), err: (s) => console.error(s), fetch: globalThis.fetch });
|
|
110
110
|
}
|
|
111
111
|
if (args.command === "update") {
|
|
112
|
-
const { runUpdateCommand } = await import("./update-
|
|
112
|
+
const { runUpdateCommand } = await import("./update-AFIM34US.js");
|
|
113
113
|
return runUpdateCommand({ env: process.env });
|
|
114
114
|
}
|
|
115
115
|
if (args.command === "acp") {
|
|
116
|
-
const { runtimeAgent, runAcp } = await import("./acp-
|
|
116
|
+
const { runtimeAgent, runAcp } = await import("./acp-SWBX4TT6.js");
|
|
117
117
|
await runAcp(process.stdin, process.stdout, { cwd, newAgent: (c) => runtimeAgent(c, args.allowAll) });
|
|
118
118
|
return 0;
|
|
119
119
|
}
|
|
120
120
|
if (args.command === "serve") {
|
|
121
|
-
const { serveBanner, startServe } = await import("./serve-
|
|
121
|
+
const { serveBanner, startServe } = await import("./serve-L3SAIAAI.js");
|
|
122
122
|
const handle = await startServe({ port: args.port, host: args.host, token: args.token, cwd, env: process.env });
|
|
123
123
|
process.stderr.write(serveBanner(handle, { token: args.token }));
|
|
124
124
|
await new Promise((resolve) => {
|
|
@@ -146,7 +146,7 @@ async function main() {
|
|
|
146
146
|
});
|
|
147
147
|
}
|
|
148
148
|
if (args.command === "gh-bot") {
|
|
149
|
-
const { runGhBotCommand } = await import("./ghBotCli-
|
|
149
|
+
const { runGhBotCommand } = await import("./ghBotCli-ZVWU7EMG.js");
|
|
150
150
|
return runGhBotCommand(args, { env: process.env, cwd, out: (s) => console.log(s), err: (s) => console.error(s) });
|
|
151
151
|
}
|
|
152
152
|
if (args.command === "completion") {
|
|
@@ -162,7 +162,7 @@ async function main() {
|
|
|
162
162
|
);
|
|
163
163
|
}
|
|
164
164
|
if (args.command === "export" || args.command === "import") {
|
|
165
|
-
const { runExportCommand, runImportCommand } = await import("./transferCli-
|
|
165
|
+
const { runExportCommand, runImportCommand } = await import("./transferCli-HKGAWZ3Q.js");
|
|
166
166
|
const { bccliHome } = await import("./config-LAINORU5.js");
|
|
167
167
|
const deps = { subArgs: args.subArgs, home: bccliHome(process.env), cwd };
|
|
168
168
|
const io = { out: (s) => console.log(s), err: (s) => console.error(s) };
|
|
@@ -215,13 +215,13 @@ async function main() {
|
|
|
215
215
|
let updateMessage;
|
|
216
216
|
if (rt.config.updateCheck !== "off" && !process.env.BCCLI_NO_UPDATE_CHECK) {
|
|
217
217
|
try {
|
|
218
|
-
const { checkForUpdate } = await import("./update-
|
|
218
|
+
const { checkForUpdate } = await import("./update-AFIM34US.js");
|
|
219
219
|
const update = await checkForUpdate({ home: rt.home, fetch: globalThis.fetch, now: /* @__PURE__ */ new Date() });
|
|
220
220
|
updateMessage = update;
|
|
221
221
|
} catch {
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
|
-
const { startInteractive } = await import("./ui-
|
|
224
|
+
const { startInteractive } = await import("./ui-NPA52YJH.js");
|
|
225
225
|
return startInteractive(rt, { initialPrompt: args.prompt, resume: args.resume, version: VERSION, updateMessage });
|
|
226
226
|
}
|
|
227
227
|
main().then(
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
createRuntime
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-FI7RUJRX.js";
|
|
5
5
|
import "./chunk-OK2USAXX.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-HBQ6OLQT.js";
|
|
7
7
|
import "./chunk-JXM6REER.js";
|
|
8
8
|
import "./chunk-PSO7R5AD.js";
|
|
9
9
|
import {
|
|
10
10
|
LOOPBACK_BIND,
|
|
11
11
|
parseCliArgs
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-TGGKACSE.js";
|
|
13
13
|
import "./chunk-WFZKJY3R.js";
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-RZF6A43N.js";
|
|
15
|
+
import "./chunk-OZ5GHMTN.js";
|
|
16
16
|
import "./chunk-HQW4BROS.js";
|
|
17
17
|
import "./chunk-3I5BW3ZT.js";
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-SMTBYDNO.js";
|
|
19
|
+
import "./chunk-MSDK4IIJ.js";
|
|
20
|
+
import "./chunk-QQJ2VVIW.js";
|
|
21
21
|
import "./chunk-6M55UPES.js";
|
|
22
22
|
import {
|
|
23
23
|
ConfigError,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
listAllModels
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-OZ5GHMTN.js";
|
|
5
5
|
import "./chunk-HQW4BROS.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-MSDK4IIJ.js";
|
|
7
|
+
import "./chunk-QQJ2VVIW.js";
|
|
8
8
|
import {
|
|
9
9
|
loadConfig,
|
|
10
10
|
resolveModel
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import {
|
|
3
3
|
addProviderKey,
|
|
4
4
|
runProviderCommand
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-RZF6A43N.js";
|
|
6
|
+
import "./chunk-OZ5GHMTN.js";
|
|
7
7
|
import "./chunk-HQW4BROS.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-MSDK4IIJ.js";
|
|
9
|
+
import "./chunk-QQJ2VVIW.js";
|
|
10
10
|
import "./chunk-RX4UQX43.js";
|
|
11
11
|
import "./chunk-3WHI4LN3.js";
|
|
12
12
|
export {
|
package/dist/sdk.js
CHANGED
|
@@ -925,6 +925,14 @@ function reasoningCapability(providerId) {
|
|
|
925
925
|
case "bc-cloud":
|
|
926
926
|
return { levels: BOTCONNECTOR_LEVELS, parameter: "reasoning_effort" };
|
|
927
927
|
case "openai":
|
|
928
|
+
case "gmi":
|
|
929
|
+
case "gmicloud":
|
|
930
|
+
case "vertex-maas":
|
|
931
|
+
case "deepseek":
|
|
932
|
+
case "groq":
|
|
933
|
+
case "together":
|
|
934
|
+
case "fireworks":
|
|
935
|
+
case "mistral":
|
|
928
936
|
return { levels: OPENAI_LEVELS, parameter: "reasoning_effort" };
|
|
929
937
|
case "openrouter":
|
|
930
938
|
return { levels: ["auto", "low", "medium", "high"], parameter: "reasoning" };
|
|
@@ -1230,7 +1238,7 @@ async function readStream(res, onText, onThinking) {
|
|
|
1230
1238
|
if (!choice) return;
|
|
1231
1239
|
if (choice.finish_reason) finishReason = choice.finish_reason;
|
|
1232
1240
|
const delta = choice.delta ?? {};
|
|
1233
|
-
const reasoning = delta.reasoning_content || delta.reasoning;
|
|
1241
|
+
const reasoning = delta.reasoning_content || delta.reasoning || delta.thinking;
|
|
1234
1242
|
if (reasoning) emit({ text: "", thinking: reasoning });
|
|
1235
1243
|
if (delta.content) emit(splitter.push(delta.content));
|
|
1236
1244
|
for (const tc of delta.tool_calls ?? []) {
|
|
@@ -1261,7 +1269,7 @@ async function readStream(res, onText, onThinking) {
|
|
|
1261
1269
|
const toolCalls = calls.map((call, index) => ({ ...call, id: call.id || `call_${index}` }));
|
|
1262
1270
|
return { text, toolCalls, thinking: thinking || void 0, usage, finishReason };
|
|
1263
1271
|
}
|
|
1264
|
-
async function readJson(res) {
|
|
1272
|
+
async function readJson(res, onText, onThinking) {
|
|
1265
1273
|
const body = await res.json();
|
|
1266
1274
|
const choice = body.choices?.[0];
|
|
1267
1275
|
const toolCalls = (choice?.message?.tool_calls ?? []).map((tc, i) => ({
|
|
@@ -1270,7 +1278,9 @@ async function readJson(res) {
|
|
|
1270
1278
|
arguments: tc.function?.arguments ?? ""
|
|
1271
1279
|
}));
|
|
1272
1280
|
const split = splitThinking(choice?.message?.content ?? "");
|
|
1273
|
-
const thinking = (choice?.message?.reasoning_content || choice?.message?.reasoning || "") + split.thinking;
|
|
1281
|
+
const thinking = (choice?.message?.reasoning_content || choice?.message?.reasoning || choice?.message?.thinking || "") + split.thinking;
|
|
1282
|
+
if (thinking) onThinking?.(thinking);
|
|
1283
|
+
if (split.text) onText?.(split.text);
|
|
1274
1284
|
return { text: split.text, toolCalls, thinking: thinking || void 0, usage: toUsage(body.usage), finishReason: choice?.finish_reason };
|
|
1275
1285
|
}
|
|
1276
1286
|
function contentText(content) {
|
|
@@ -1829,7 +1839,7 @@ function createProvider(options) {
|
|
|
1829
1839
|
const isBotConnectorCloud = /^https:\/\/api\.botconnector\.id\/v1\/?$/.test(baseURL) && apiKey?.startsWith("bc_live_");
|
|
1830
1840
|
if (isBotConnectorCloud) {
|
|
1831
1841
|
headers["x-botconnector-client"] = "bccli";
|
|
1832
|
-
headers["x-botconnector-client-version"] = "0.4.
|
|
1842
|
+
headers["x-botconnector-client-version"] = "0.4.4";
|
|
1833
1843
|
}
|
|
1834
1844
|
const useNativeResponses = isBotConnectorCloud && providerId === "bc-cloud" && model === "gpt-6-luna";
|
|
1835
1845
|
const useResponsesWebSocket = useNativeResponses && Boolean(apiKey) && (fetchOverride === void 0 || responsesWebSocketFactory !== void 0);
|
|
@@ -1860,7 +1870,7 @@ function createProvider(options) {
|
|
|
1860
1870
|
baseURL: baseURL.replace(/\/+$/, ""),
|
|
1861
1871
|
defaultHeaders: {
|
|
1862
1872
|
"x-botconnector-client": "bccli",
|
|
1863
|
-
"x-botconnector-client-version": "0.4.
|
|
1873
|
+
"x-botconnector-client-version": "0.4.4"
|
|
1864
1874
|
}
|
|
1865
1875
|
});
|
|
1866
1876
|
lunaWs = responsesWebSocketFactory ? responsesWebSocketFactory(client) : new ResponsesWS(client, { reconnect: null });
|
|
@@ -2013,7 +2023,7 @@ function createProvider(options) {
|
|
|
2013
2023
|
{ model, messages, stream: true, stream_options: { include_usage: true }, ...tools?.length ? { tools } : {}, ...reasoningOverride },
|
|
2014
2024
|
signal
|
|
2015
2025
|
);
|
|
2016
|
-
if ((res.headers.get("content-type") ?? "").includes("application/json")) return readJson(res);
|
|
2026
|
+
if ((res.headers.get("content-type") ?? "").includes("application/json")) return readJson(res, onText, onThinking);
|
|
2017
2027
|
if (!res.body) throw new ProviderError(t("Empty response from the provider"));
|
|
2018
2028
|
return readStream(res, onText, onThinking);
|
|
2019
2029
|
},
|
|
@@ -2425,10 +2435,14 @@ function startBackground(command, cwd, env, shell) {
|
|
|
2425
2435
|
task.status = "exited";
|
|
2426
2436
|
task.head += `${task.head ? "\n" : ""}${error.message}`;
|
|
2427
2437
|
});
|
|
2428
|
-
child.on("
|
|
2438
|
+
child.on("exit", (code) => {
|
|
2429
2439
|
task.status = "exited";
|
|
2430
2440
|
task.exitCode = code;
|
|
2431
2441
|
});
|
|
2442
|
+
child.on("close", (code) => {
|
|
2443
|
+
task.status = "exited";
|
|
2444
|
+
if (task.exitCode === null) task.exitCode = code;
|
|
2445
|
+
});
|
|
2432
2446
|
return task;
|
|
2433
2447
|
}
|
|
2434
2448
|
function backgroundStatus(task) {
|
|
@@ -2522,8 +2536,40 @@ function runCommand(command, opts) {
|
|
|
2522
2536
|
};
|
|
2523
2537
|
child.stdout.on("data", onData);
|
|
2524
2538
|
child.stderr.on("data", onData);
|
|
2539
|
+
let settled = false;
|
|
2540
|
+
let exitDrainTimer;
|
|
2541
|
+
let killDrainTimer;
|
|
2542
|
+
const finish = (exitCode, extra = "") => {
|
|
2543
|
+
if (settled) return;
|
|
2544
|
+
settled = true;
|
|
2545
|
+
active.delete(killAsAborted);
|
|
2546
|
+
clearTimeout(timer);
|
|
2547
|
+
if (exitDrainTimer) clearTimeout(exitDrainTimer);
|
|
2548
|
+
if (killDrainTimer) clearTimeout(killDrainTimer);
|
|
2549
|
+
opts.signal.removeEventListener("abort", onAbort);
|
|
2550
|
+
child.stdout.removeListener("data", onData);
|
|
2551
|
+
child.stderr.removeListener("data", onData);
|
|
2552
|
+
child.stdout.destroy();
|
|
2553
|
+
child.stderr.destroy();
|
|
2554
|
+
let spillNote = "";
|
|
2555
|
+
if (dropped && fullChunks.length) {
|
|
2556
|
+
try {
|
|
2557
|
+
const spillPath = join2(tmpdir(), `bccli-bash-${Date.now()}-${Math.random().toString(36).slice(2, 8)}.log`);
|
|
2558
|
+
writeFileSync2(spillPath, fullChunks.join(""), "utf8");
|
|
2559
|
+
spillNote = `; full output saved to ${spillPath}`;
|
|
2560
|
+
} catch {
|
|
2561
|
+
}
|
|
2562
|
+
}
|
|
2563
|
+
const output = dropped ? `${head}
|
|
2564
|
+
\u2026 [${dropped} characters truncated${spillNote}] \u2026
|
|
2565
|
+
${tail}` : head + tail;
|
|
2566
|
+
resolve5({ output: output + extra, exitCode, timedOut, aborted });
|
|
2567
|
+
};
|
|
2525
2568
|
const kill = () => {
|
|
2526
2569
|
if (child.pid !== void 0) killProcessTree(child.pid);
|
|
2570
|
+
if (!killDrainTimer) {
|
|
2571
|
+
killDrainTimer = setTimeout(() => finish(child.exitCode), 500);
|
|
2572
|
+
}
|
|
2527
2573
|
};
|
|
2528
2574
|
const killAsAborted = () => {
|
|
2529
2575
|
aborted = true;
|
|
@@ -2540,29 +2586,16 @@ function runCommand(command, opts) {
|
|
|
2540
2586
|
};
|
|
2541
2587
|
if (opts.signal.aborted) onAbort();
|
|
2542
2588
|
opts.signal.addEventListener("abort", onAbort, { once: true });
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
opts.signal.removeEventListener("abort", onAbort);
|
|
2547
|
-
let spillNote = "";
|
|
2548
|
-
if (dropped && fullChunks.length) {
|
|
2549
|
-
try {
|
|
2550
|
-
const spillPath = join2(tmpdir(), `bccli-bash-${Date.now()}-${Math.random().toString(36).slice(2, 8)}.log`);
|
|
2551
|
-
writeFileSync2(spillPath, fullChunks.join(""), "utf8");
|
|
2552
|
-
spillNote = `; full output saved to ${spillPath}`;
|
|
2553
|
-
} catch {
|
|
2554
|
-
}
|
|
2589
|
+
child.on("exit", (code) => {
|
|
2590
|
+
if (!exitDrainTimer) {
|
|
2591
|
+
exitDrainTimer = setTimeout(() => finish(code), 200);
|
|
2555
2592
|
}
|
|
2556
|
-
|
|
2557
|
-
\u2026 [${dropped} characters truncated${spillNote}] \u2026
|
|
2558
|
-
${tail}` : head + tail;
|
|
2559
|
-
resolve5({ output: output + extra, exitCode, timedOut, aborted });
|
|
2560
|
-
};
|
|
2593
|
+
});
|
|
2561
2594
|
child.on("error", (error) => finish(null, error.message));
|
|
2562
|
-
child.on("close", (code) => finish(code));
|
|
2595
|
+
child.on("close", (code) => finish(code ?? child.exitCode));
|
|
2563
2596
|
});
|
|
2564
2597
|
}
|
|
2565
|
-
var BASH_DESCRIPTION = "Run a shell command in the project directory. No interactive input. Default timeout 2 minutes (max 10). Use for tests, builds, git, and other CLI tasks. Set background: true for long-running jobs, then poll with task_id (stop with kill: true) or use the /tasks command.";
|
|
2598
|
+
var BASH_DESCRIPTION = "Run a shell command in the project directory. No interactive input. Default timeout 2 minutes (max 10). Use for tests, builds, git, and other CLI tasks. Set background: true for long-running jobs, then poll with task_id (stop with kill: true) or use the /tasks command. Do not pipe commands that start background daemons (such as agent-browser) through | head or | tail.";
|
|
2566
2599
|
var BASH_SCHEMA = z.object({
|
|
2567
2600
|
command: z.string().optional().describe("The shell command to run (required unless task_id is set)"),
|
|
2568
2601
|
timeout_ms: z.number().int().min(1e3).max(6e5).optional().describe("Timeout in milliseconds"),
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
createRuntime
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-FI7RUJRX.js";
|
|
5
5
|
import "./chunk-OK2USAXX.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-HBQ6OLQT.js";
|
|
7
7
|
import "./chunk-JXM6REER.js";
|
|
8
8
|
import "./chunk-PSO7R5AD.js";
|
|
9
9
|
import {
|
|
10
10
|
VERSION
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-CGBSE55G.js";
|
|
12
12
|
import {
|
|
13
13
|
LOOPBACK_BIND,
|
|
14
14
|
MAX_FRAME_BYTES,
|
|
@@ -17,19 +17,19 @@ import {
|
|
|
17
17
|
parseClientFrame,
|
|
18
18
|
randomToken,
|
|
19
19
|
trustFence
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-TGGKACSE.js";
|
|
21
21
|
import "./chunk-WFZKJY3R.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-RZF6A43N.js";
|
|
23
23
|
import {
|
|
24
24
|
listAllModels
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-OZ5GHMTN.js";
|
|
26
26
|
import "./chunk-HQW4BROS.js";
|
|
27
27
|
import "./chunk-3I5BW3ZT.js";
|
|
28
28
|
import {
|
|
29
29
|
Session
|
|
30
|
-
} from "./chunk-
|
|
31
|
-
import "./chunk-
|
|
32
|
-
import "./chunk-
|
|
30
|
+
} from "./chunk-SMTBYDNO.js";
|
|
31
|
+
import "./chunk-MSDK4IIJ.js";
|
|
32
|
+
import "./chunk-QQJ2VVIW.js";
|
|
33
33
|
import "./chunk-6M55UPES.js";
|
|
34
34
|
import {
|
|
35
35
|
bccliHome,
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import {
|
|
3
3
|
Session,
|
|
4
4
|
pruneSessions
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-SMTBYDNO.js";
|
|
6
|
+
import "./chunk-MSDK4IIJ.js";
|
|
7
|
+
import "./chunk-QQJ2VVIW.js";
|
|
8
8
|
import "./chunk-3WHI4LN3.js";
|
|
9
9
|
export {
|
|
10
10
|
Session,
|
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
import {
|
|
3
3
|
createRuntime,
|
|
4
4
|
lunaPtcAutoEnabled
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-FI7RUJRX.js";
|
|
6
6
|
import "./chunk-OK2USAXX.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-HBQ6OLQT.js";
|
|
8
8
|
import "./chunk-JXM6REER.js";
|
|
9
9
|
import "./chunk-PSO7R5AD.js";
|
|
10
10
|
import "./chunk-WFZKJY3R.js";
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-RZF6A43N.js";
|
|
12
|
+
import "./chunk-OZ5GHMTN.js";
|
|
13
13
|
import "./chunk-HQW4BROS.js";
|
|
14
14
|
import "./chunk-3I5BW3ZT.js";
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-SMTBYDNO.js";
|
|
16
|
+
import "./chunk-MSDK4IIJ.js";
|
|
17
|
+
import "./chunk-QQJ2VVIW.js";
|
|
18
18
|
import "./chunk-6M55UPES.js";
|
|
19
19
|
import "./chunk-RX4UQX43.js";
|
|
20
20
|
import "./chunk-3WHI4LN3.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
Session
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-SMTBYDNO.js";
|
|
5
|
+
import "./chunk-MSDK4IIJ.js";
|
|
6
|
+
import "./chunk-QQJ2VVIW.js";
|
|
7
7
|
import {
|
|
8
8
|
t
|
|
9
9
|
} from "./chunk-3WHI4LN3.js";
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
toolLabel,
|
|
10
10
|
verifyFollowup,
|
|
11
11
|
worktreeListText
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-YCHCHOMK.js";
|
|
13
13
|
import {
|
|
14
14
|
BUILTIN_AGENTS,
|
|
15
15
|
appendMemory,
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
runCommand,
|
|
25
25
|
runHooks,
|
|
26
26
|
validateGlobPattern
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-HBQ6OLQT.js";
|
|
28
28
|
import "./chunk-PSO7R5AD.js";
|
|
29
29
|
import {
|
|
30
30
|
nextMode,
|
|
@@ -37,16 +37,16 @@ import {
|
|
|
37
37
|
} from "./chunk-HQW4BROS.js";
|
|
38
38
|
import {
|
|
39
39
|
Session
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-SMTBYDNO.js";
|
|
41
41
|
import {
|
|
42
42
|
contentText
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-MSDK4IIJ.js";
|
|
44
44
|
import {
|
|
45
45
|
REASONING_LEVELS,
|
|
46
46
|
assertReasoningSupported,
|
|
47
47
|
parseReasoningLevel,
|
|
48
48
|
supportedReasoningLevels
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-QQJ2VVIW.js";
|
|
50
50
|
import {
|
|
51
51
|
addGlobalServer,
|
|
52
52
|
globalMcpPath,
|
|
@@ -1645,6 +1645,7 @@ function App({ runtime, initialPrompt, version, updateMessage }) {
|
|
|
1645
1645
|
const [queued, setQueued] = useState8([]);
|
|
1646
1646
|
const [showThinking, setShowThinking] = useState8(runtime.config.thinkingVisible === true);
|
|
1647
1647
|
const showThinkingRef = useRef(showThinking);
|
|
1648
|
+
const [, setConfigRev] = useState8(0);
|
|
1648
1649
|
const [lastThinking, setLastThinking] = useState8("");
|
|
1649
1650
|
const hasThinking = !!lastThinking.trim();
|
|
1650
1651
|
const { stdin } = useStdin();
|
|
@@ -2134,11 +2135,17 @@ function App({ runtime, initialPrompt, version, updateMessage }) {
|
|
|
2134
2135
|
if (key === "theme") writeGlobalConfig({ theme: val }, runtime.env);
|
|
2135
2136
|
else if (key === "editor" && (val === "emacs" || val === "vim")) writeGlobalConfig({ editor: val }, runtime.env);
|
|
2136
2137
|
else if (key === "repoMap") writeGlobalConfig({ repoMap: val === "true" || val === "on" }, runtime.env);
|
|
2137
|
-
else if (key === "thinkingVisible")
|
|
2138
|
+
else if (key === "thinkingVisible") {
|
|
2139
|
+
const next = val === "true" || val === "on";
|
|
2140
|
+
writeGlobalConfig({ thinkingVisible: next }, runtime.env);
|
|
2141
|
+
showThinkingRef.current = next;
|
|
2142
|
+
setShowThinking(next);
|
|
2143
|
+
} else if (key === "thinkingClickCollapse") writeGlobalConfig({ thinkingClickCollapse: val === "true" || val === "on" }, runtime.env);
|
|
2138
2144
|
else if (key === "sandbox" && (val === "on" || val === "off")) writeGlobalConfig({ sandbox: val }, runtime.env);
|
|
2139
2145
|
else if (key === "networkPolicy" && (val === "allow" || val === "offline")) writeGlobalConfig({ networkPolicy: val }, runtime.env);
|
|
2140
2146
|
else return false;
|
|
2141
2147
|
runtime.reloadConfig();
|
|
2148
|
+
setConfigRev((n) => n + 1);
|
|
2142
2149
|
notice(`${key} = ${val}`);
|
|
2143
2150
|
return true;
|
|
2144
2151
|
};
|
|
@@ -2152,6 +2159,7 @@ function App({ runtime, initialPrompt, version, updateMessage }) {
|
|
|
2152
2159
|
{ id: `editor:${c.editor === "vim" ? "emacs" : "vim"}`, label: `editor: ${c.editor}`, hint: "toggle emacs/vim" },
|
|
2153
2160
|
{ id: `repoMap:${!c.repoMap}`, label: `repoMap: ${c.repoMap}`, hint: "toggle true/false" },
|
|
2154
2161
|
{ id: `thinkingVisible:${!c.thinkingVisible}`, label: `thinkingVisible: ${!!c.thinkingVisible}`, hint: "toggle true/false" },
|
|
2162
|
+
{ id: `thinkingClickCollapse:${!c.thinkingClickCollapse}`, label: `thinkingClickCollapse: ${!!c.thinkingClickCollapse}`, hint: "toggle true/false" },
|
|
2155
2163
|
{ id: `sandbox:${c.sandbox === "on" ? "off" : "on"}`, label: `sandbox: ${c.sandbox}`, hint: "toggle on/off" },
|
|
2156
2164
|
{ id: `networkPolicy:${c.networkPolicy === "offline" ? "allow" : "offline"}`, label: `networkPolicy: ${c.networkPolicy ?? "allow"}`, hint: "toggle allow/offline" }
|
|
2157
2165
|
],
|
|
@@ -2400,12 +2408,17 @@ ${t2.output}`);
|
|
|
2400
2408
|
return /* @__PURE__ */ jsx16(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx16(Text16, { color: e.tone === "error" ? color("red") : e.tone === "warn" ? color("yellow") : void 0, dimColor: e.tone === "info", children: e.text }) }, e.id);
|
|
2401
2409
|
}
|
|
2402
2410
|
};
|
|
2411
|
+
const activeToolEntry = transcript.live.findLast((e) => e.kind === "tool" && !e.done);
|
|
2412
|
+
const activeSub = activeToolEntry?.sub?.findLast((s) => !s.done);
|
|
2413
|
+
const activeTarget = (activeSub ? `${toolLabel(activeSub.tool)} ${activeSub.target}` : activeToolEntry?.target ?? "").replace(/\s+/g, " ").trim();
|
|
2414
|
+
const activeSpinnerSummary = activeToolEntry ? `${toolLabel(activeToolEntry.tool)}${activeTarget ? ` ${activeTarget.length > 20 ? `${activeTarget.slice(0, 20)}\u2026` : activeTarget}` : ""}` : "";
|
|
2415
|
+
const activeToolSummary = activeToolEntry ? `${toolLabel(activeToolEntry.tool)}${activeTarget ? ` ${activeTarget.length > 68 ? `${activeTarget.slice(0, 68)}\u2026` : activeTarget}` : ""}` : "";
|
|
2403
2416
|
return /* @__PURE__ */ jsxs12(Box13, { ref: liveRootRef, flexDirection: "column", children: [
|
|
2404
2417
|
/* @__PURE__ */ jsx16(Static, { items: transcript.done, children: renderEntry }),
|
|
2405
2418
|
transcript.live.map(renderEntry),
|
|
2406
2419
|
busy && !pending && !planAsk || !busy && hasThinking ? /* @__PURE__ */ jsxs12(Box13, { ref: thinkingTargetRef, marginTop: 1, flexDirection: "column", children: [
|
|
2407
2420
|
/* @__PURE__ */ jsxs12(Box13, { flexDirection: "row", children: [
|
|
2408
|
-
busy ? /* @__PURE__ */ jsx16(Spinner, { label: cancelling ? t("Cancelling") : t("Thinking"), startedAt }) : /* @__PURE__ */ jsx16(Text16, { dimColor: true, children: t("\u273B Thinking") }),
|
|
2421
|
+
busy ? /* @__PURE__ */ jsx16(Spinner, { label: cancelling ? t("Cancelling") : activeSpinnerSummary ? `${t("Thinking")} \xB7 ${activeSpinnerSummary}` : t("Thinking"), startedAt }) : /* @__PURE__ */ jsx16(Text16, { dimColor: true, children: t("\u273B Thinking") }),
|
|
2409
2422
|
/* @__PURE__ */ jsxs12(Text16, { dimColor: true, children: [
|
|
2410
2423
|
" \xB7 ",
|
|
2411
2424
|
runtime.config.keybinds.thinking.spec,
|
|
@@ -2414,7 +2427,8 @@ ${t2.output}`);
|
|
|
2414
2427
|
] }),
|
|
2415
2428
|
showThinking ? /* @__PURE__ */ jsxs12(Box13, { flexDirection: "column", paddingLeft: 2, children: [
|
|
2416
2429
|
/* @__PURE__ */ jsx16(Text16, { dimColor: true, children: t("Model: {model} \xB7 reasoning: {level}", { model: runtime.modelRef, level: reasoning }) }),
|
|
2417
|
-
|
|
2430
|
+
activeToolSummary ? /* @__PURE__ */ jsx16(Text16, { dimColor: true, children: `\u25B6 ${activeToolSummary}` }) : null,
|
|
2431
|
+
lastThinking.trim() ? /* @__PURE__ */ jsx16(Text16, { dimColor: true, italic: true, children: lastThinking.trim() }) : !activeToolSummary ? /* @__PURE__ */ jsx16(Text16, { dimColor: true, children: t("No reasoning summary received yet; tool activity remains visible above.") }) : null
|
|
2418
2432
|
] }) : null
|
|
2419
2433
|
] }) : null,
|
|
2420
2434
|
pending ? /* @__PURE__ */ jsx16(PermissionPrompt, { request: pending.request, onAnswer: answer }, pending.id) : null,
|
|
@@ -2469,7 +2483,7 @@ ${t2.output}`);
|
|
|
2469
2483
|
import { jsx as jsx17 } from "react/jsx-runtime";
|
|
2470
2484
|
async function startInteractive(rt, opts) {
|
|
2471
2485
|
if (opts.resume) {
|
|
2472
|
-
const { Session: Session2 } = await import("./session-
|
|
2486
|
+
const { Session: Session2 } = await import("./session-ASXO6GXR.js");
|
|
2473
2487
|
const list = Session2.list(rt.home, rt.cwd).slice(0, 20);
|
|
2474
2488
|
if (!list.length) console.log(t("No sessions in this folder yet; starting a new one."));
|
|
2475
2489
|
else {
|