@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.
Files changed (26) hide show
  1. package/dist/{acp-NU4HZHQO.js → acp-SWBX4TT6.js} +2 -2
  2. package/dist/{args-NRTZWWEV.js → args-UCLW7NID.js} +2 -2
  3. package/dist/{chunk-Z5NI5FIK.js → chunk-5BVC3Y6B.js} +2 -2
  4. package/dist/{chunk-FUJGHCWN.js → chunk-CGBSE55G.js} +1 -1
  5. package/dist/{chunk-QNUJHKEL.js → chunk-FI7RUJRX.js} +5 -5
  6. package/dist/{chunk-4W5SKQDC.js → chunk-HBQ6OLQT.js} +43 -20
  7. package/dist/{chunk-XTOATEI6.js → chunk-MSDK4IIJ.js} +9 -7
  8. package/dist/{chunk-7I2ZGPUS.js → chunk-OZ5GHMTN.js} +1 -1
  9. package/dist/{chunk-KPTML72Q.js → chunk-QQJ2VVIW.js} +8 -0
  10. package/dist/{chunk-GWVLPN4B.js → chunk-RZF6A43N.js} +1 -1
  11. package/dist/{chunk-6AUROP2E.js → chunk-SMTBYDNO.js} +1 -1
  12. package/dist/{chunk-6UO5GX55.js → chunk-TGGKACSE.js} +1 -1
  13. package/dist/{chunk-WDX62DFH.js → chunk-YCHCHOMK.js} +1 -1
  14. package/dist/cli.js +22 -22
  15. package/dist/{ghBotCli-GCIUUMKQ.js → ghBotCli-ZVWU7EMG.js} +8 -8
  16. package/dist/{login-YXSSB2HQ.js → login-QPUWIC76.js} +1 -1
  17. package/dist/{modelsCli-656AKYZD.js → modelsCli-SZK4E2BY.js} +3 -3
  18. package/dist/{providerCli-V2576JXE.js → providerCli-PKI7B2SC.js} +4 -4
  19. package/dist/sdk.js +59 -26
  20. package/dist/{serve-XPAGXIGS.js → serve-L3SAIAAI.js} +9 -9
  21. package/dist/{session-V2VCAF7E.js → session-ASXO6GXR.js} +3 -3
  22. package/dist/{setup-HVVHOIL4.js → setup-F7FZ66OS.js} +7 -7
  23. package/dist/{transferCli-C6XS6QYH.js → transferCli-HKGAWZ3Q.js} +3 -3
  24. package/dist/{ui-43C6Y57K.js → ui-NPA52YJH.js} +23 -9
  25. package/dist/{update-AVZO4XID.js → update-AFIM34US.js} +1 -1
  26. 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-NRTZWWEV.js");
184
- const { createRuntime } = await import("./setup-HVVHOIL4.js");
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-6UO5GX55.js";
5
+ } from "./chunk-TGGKACSE.js";
6
6
  import "./chunk-WFZKJY3R.js";
7
- import "./chunk-KPTML72Q.js";
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-V2576JXE.js");
95
- const { parseCliArgs: parse } = await import("./args-NRTZWWEV.js");
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,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/version.ts
4
- var VERSION = true ? "0.4.3" : "0.0.0-dev";
4
+ var VERSION = true ? "0.4.4" : "0.0.0-dev";
5
5
 
6
6
  export {
7
7
  VERSION
@@ -24,7 +24,7 @@ import {
24
24
  resolvePath,
25
25
  runHooks,
26
26
  validateGlobPattern
27
- } from "./chunk-4W5SKQDC.js";
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-GWVLPN4B.js";
40
+ } from "./chunk-RZF6A43N.js";
41
41
  import {
42
42
  listAllModels
43
- } from "./chunk-7I2ZGPUS.js";
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-6AUROP2E.js";
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-XTOATEI6.js";
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("close", (code) => {
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
- const finish = (exitCode, extra = "") => {
329
- active.delete(killAsAborted);
330
- clearTimeout(timer);
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
- const output = dropped ? `${head}
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-KPTML72Q.js";
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.3";
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.3"
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
  },
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-HQW4BROS.js";
6
6
  import {
7
7
  createProvider
8
- } from "./chunk-XTOATEI6.js";
8
+ } from "./chunk-MSDK4IIJ.js";
9
9
  import {
10
10
  PRESETS,
11
11
  readCredentials
@@ -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" };
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  listAllModels
4
- } from "./chunk-7I2ZGPUS.js";
4
+ } from "./chunk-OZ5GHMTN.js";
5
5
  import {
6
6
  hasKey,
7
7
  providerName,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  contentText
4
- } from "./chunk-XTOATEI6.js";
4
+ } from "./chunk-MSDK4IIJ.js";
5
5
 
6
6
  // src/session.ts
7
7
  import { randomBytes } from "crypto";
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  REASONING_LEVELS,
7
7
  isReasoningLevel
8
- } from "./chunk-KPTML72Q.js";
8
+ } from "./chunk-QQJ2VVIW.js";
9
9
  import {
10
10
  ConfigError
11
11
  } from "./chunk-RX4UQX43.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  runCommand,
4
4
  runHooks
5
- } from "./chunk-4W5SKQDC.js";
5
+ } from "./chunk-HBQ6OLQT.js";
6
6
  import {
7
7
  ConfigError
8
8
  } from "./chunk-RX4UQX43.js";
package/dist/cli.js CHANGED
@@ -3,37 +3,37 @@ import {
3
3
  resolvePrintPrompt,
4
4
  resolveWorktree,
5
5
  runPrint
6
- } from "./chunk-WDX62DFH.js";
6
+ } from "./chunk-YCHCHOMK.js";
7
7
  import {
8
8
  createRuntime
9
- } from "./chunk-QNUJHKEL.js";
9
+ } from "./chunk-FI7RUJRX.js";
10
10
  import "./chunk-OK2USAXX.js";
11
- import "./chunk-4W5SKQDC.js";
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-FUJGHCWN.js";
16
+ } from "./chunk-CGBSE55G.js";
17
17
  import {
18
18
  helpText,
19
19
  parseCliArgs
20
- } from "./chunk-6UO5GX55.js";
20
+ } from "./chunk-TGGKACSE.js";
21
21
  import "./chunk-WFZKJY3R.js";
22
- import "./chunk-GWVLPN4B.js";
23
- import "./chunk-7I2ZGPUS.js";
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-Z5NI5FIK.js";
30
+ } from "./chunk-5BVC3Y6B.js";
31
31
  import "./chunk-3I5BW3ZT.js";
32
32
  import {
33
33
  pruneSessions
34
- } from "./chunk-6AUROP2E.js";
35
- import "./chunk-XTOATEI6.js";
36
- import "./chunk-KPTML72Q.js";
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-YXSSB2HQ.js");
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-V2576JXE.js");
94
- const { readSecret } = await import("./login-YXSSB2HQ.js");
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-656AKYZD.js");
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-AVZO4XID.js");
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-NU4HZHQO.js");
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-XPAGXIGS.js");
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-GCIUUMKQ.js");
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-C6XS6QYH.js");
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-AVZO4XID.js");
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-43C6Y57K.js");
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-QNUJHKEL.js";
4
+ } from "./chunk-FI7RUJRX.js";
5
5
  import "./chunk-OK2USAXX.js";
6
- import "./chunk-4W5SKQDC.js";
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-6UO5GX55.js";
12
+ } from "./chunk-TGGKACSE.js";
13
13
  import "./chunk-WFZKJY3R.js";
14
- import "./chunk-GWVLPN4B.js";
15
- import "./chunk-7I2ZGPUS.js";
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-6AUROP2E.js";
19
- import "./chunk-XTOATEI6.js";
20
- import "./chunk-KPTML72Q.js";
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,
@@ -4,7 +4,7 @@ import {
4
4
  readLine,
5
5
  readSecret,
6
6
  runLogin
7
- } from "./chunk-Z5NI5FIK.js";
7
+ } from "./chunk-5BVC3Y6B.js";
8
8
  import "./chunk-3I5BW3ZT.js";
9
9
  import "./chunk-RX4UQX43.js";
10
10
  import "./chunk-3WHI4LN3.js";
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  listAllModels
4
- } from "./chunk-7I2ZGPUS.js";
4
+ } from "./chunk-OZ5GHMTN.js";
5
5
  import "./chunk-HQW4BROS.js";
6
- import "./chunk-XTOATEI6.js";
7
- import "./chunk-KPTML72Q.js";
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-GWVLPN4B.js";
6
- import "./chunk-7I2ZGPUS.js";
5
+ } from "./chunk-RZF6A43N.js";
6
+ import "./chunk-OZ5GHMTN.js";
7
7
  import "./chunk-HQW4BROS.js";
8
- import "./chunk-XTOATEI6.js";
9
- import "./chunk-KPTML72Q.js";
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.3";
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.3"
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("close", (code) => {
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
- const finish = (exitCode, extra = "") => {
2544
- active.delete(killAsAborted);
2545
- clearTimeout(timer);
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
- const output = dropped ? `${head}
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-QNUJHKEL.js";
4
+ } from "./chunk-FI7RUJRX.js";
5
5
  import "./chunk-OK2USAXX.js";
6
- import "./chunk-4W5SKQDC.js";
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-FUJGHCWN.js";
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-6UO5GX55.js";
20
+ } from "./chunk-TGGKACSE.js";
21
21
  import "./chunk-WFZKJY3R.js";
22
- import "./chunk-GWVLPN4B.js";
22
+ import "./chunk-RZF6A43N.js";
23
23
  import {
24
24
  listAllModels
25
- } from "./chunk-7I2ZGPUS.js";
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-6AUROP2E.js";
31
- import "./chunk-XTOATEI6.js";
32
- import "./chunk-KPTML72Q.js";
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-6AUROP2E.js";
6
- import "./chunk-XTOATEI6.js";
7
- import "./chunk-KPTML72Q.js";
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-QNUJHKEL.js";
5
+ } from "./chunk-FI7RUJRX.js";
6
6
  import "./chunk-OK2USAXX.js";
7
- import "./chunk-4W5SKQDC.js";
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-GWVLPN4B.js";
12
- import "./chunk-7I2ZGPUS.js";
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-6AUROP2E.js";
16
- import "./chunk-XTOATEI6.js";
17
- import "./chunk-KPTML72Q.js";
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-6AUROP2E.js";
5
- import "./chunk-XTOATEI6.js";
6
- import "./chunk-KPTML72Q.js";
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-WDX62DFH.js";
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-4W5SKQDC.js";
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-6AUROP2E.js";
40
+ } from "./chunk-SMTBYDNO.js";
41
41
  import {
42
42
  contentText
43
- } from "./chunk-XTOATEI6.js";
43
+ } from "./chunk-MSDK4IIJ.js";
44
44
  import {
45
45
  REASONING_LEVELS,
46
46
  assertReasoningSupported,
47
47
  parseReasoningLevel,
48
48
  supportedReasoningLevels
49
- } from "./chunk-KPTML72Q.js";
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") writeGlobalConfig({ thinkingVisible: val === "true" || val === "on" }, runtime.env);
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
- lastThinking.trim() ? /* @__PURE__ */ jsx16(Text16, { dimColor: true, italic: true, children: lastThinking.trim() }) : /* @__PURE__ */ jsx16(Text16, { dimColor: true, children: t("No reasoning summary received yet; tool activity remains visible above.") })
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-V2VCAF7E.js");
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 {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  VERSION
4
- } from "./chunk-FUJGHCWN.js";
4
+ } from "./chunk-CGBSE55G.js";
5
5
  import {
6
6
  t
7
7
  } from "./chunk-3WHI4LN3.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botconnector/bccli",
3
- "version": "0.4.3",
3
+ "version": "0.4.4",
4
4
  "description": "BCCLI — BotConnector AI coding agent for the terminal",
5
5
  "type": "module",
6
6
  "bin": {