@wrongstack/cli 0.296.2 → 0.296.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/boot/dispatch-webui.d.ts +1 -0
  2. package/dist/boot/dispatch-webui.d.ts.map +1 -1
  3. package/dist/boot/tui-session-resume.d.ts.map +1 -1
  4. package/dist/{chunk-IN4GXGYW.js → chunk-BQCAJ7FI.js} +2 -2
  5. package/dist/{chunk-IN4GXGYW.js.map → chunk-BQCAJ7FI.js.map} +2 -2
  6. package/dist/{chunk-X5DQTPXT.js → chunk-OI7GWJDS.js} +1048 -804
  7. package/dist/chunk-OI7GWJDS.js.map +7 -0
  8. package/dist/{cli-main-6AU6E4XZ.js → cli-main-RTY35OPD.js} +196 -54
  9. package/dist/cli-main-RTY35OPD.js.map +7 -0
  10. package/dist/cli-main.d.ts.map +1 -1
  11. package/dist/execute-deps.d.ts +1 -0
  12. package/dist/execute-deps.d.ts.map +1 -1
  13. package/dist/{execution-V26SE52F.js → execution-O7I5DYE6.js} +34 -8
  14. package/dist/execution-O7I5DYE6.js.map +7 -0
  15. package/dist/execution-storage-observability.d.ts.map +1 -1
  16. package/dist/execution.d.ts.map +1 -1
  17. package/dist/fleet/host-subagent-factory.d.ts.map +1 -1
  18. package/dist/{hq-BECGICEZ.js → hq-JUYKUNJX.js} +2 -2
  19. package/dist/hq-server/auth.d.ts +15 -4
  20. package/dist/hq-server/auth.d.ts.map +1 -1
  21. package/dist/hq-server/routes/auth-handlers.d.ts +6 -13
  22. package/dist/hq-server/routes/auth-handlers.d.ts.map +1 -1
  23. package/dist/hq-server/routes.d.ts +6 -4
  24. package/dist/hq-server/routes.d.ts.map +1 -1
  25. package/dist/hq-server/snapshot.d.ts +44 -0
  26. package/dist/hq-server/snapshot.d.ts.map +1 -1
  27. package/dist/hq-server/types.d.ts +22 -4
  28. package/dist/hq-server/types.d.ts.map +1 -1
  29. package/dist/hq-server/utils.d.ts +8 -0
  30. package/dist/hq-server/utils.d.ts.map +1 -1
  31. package/dist/hq-server/ws.d.ts +1 -1
  32. package/dist/hq-server/ws.d.ts.map +1 -1
  33. package/dist/{hq-server-FJOVOERO.js → hq-server-6AQ3BXZA.js} +2 -2
  34. package/dist/hq-server.d.ts +3 -3
  35. package/dist/hq-server.d.ts.map +1 -1
  36. package/dist/{hq-tunnel-YZLRONPV.js → hq-tunnel-RFKGC4HI.js} +8 -5
  37. package/dist/{hq-tunnel-YZLRONPV.js.map → hq-tunnel-RFKGC4HI.js.map} +2 -2
  38. package/dist/hq-tunnel.d.ts +1 -1
  39. package/dist/hq-tunnel.d.ts.map +1 -1
  40. package/dist/index.js +5 -5
  41. package/dist/{sdd-runtime-IKPROVV2.js → sdd-runtime-JG4EEKL6.js} +2 -2
  42. package/dist/services/sdd/task-manager.d.ts.map +1 -1
  43. package/dist/slash-commands/settings.d.ts.map +1 -1
  44. package/dist/{webui-server-G3TISUIY.js → webui-server-ZF5KVGC5.js} +3 -2
  45. package/dist/webui-server-ZF5KVGC5.js.map +7 -0
  46. package/dist/webui-server-options.d.ts +2 -0
  47. package/dist/webui-server-options.d.ts.map +1 -1
  48. package/dist/webui-server.d.ts.map +1 -1
  49. package/dist/wiring/sage.d.ts.map +1 -1
  50. package/dist/wiring/session.d.ts +3 -1
  51. package/dist/wiring/session.d.ts.map +1 -1
  52. package/package.json +22 -22
  53. package/dist/chunk-X5DQTPXT.js.map +0 -7
  54. package/dist/cli-main-6AU6E4XZ.js.map +0 -7
  55. package/dist/execution-V26SE52F.js.map +0 -7
  56. package/dist/webui-server-G3TISUIY.js.map +0 -7
  57. /package/dist/{hq-BECGICEZ.js.map → hq-JUYKUNJX.js.map} +0 -0
  58. /package/dist/{hq-server-FJOVOERO.js.map → hq-server-6AQ3BXZA.js.map} +0 -0
  59. /package/dist/{sdd-runtime-IKPROVV2.js.map → sdd-runtime-JG4EEKL6.js.map} +0 -0
@@ -29,7 +29,7 @@ import {
29
29
  getTaskProgress,
30
30
  matchTaskNode,
31
31
  sddState
32
- } from "./chunk-IN4GXGYW.js";
32
+ } from "./chunk-BQCAJ7FI.js";
33
33
  import {
34
34
  setupPlugins
35
35
  } from "./chunk-QUNHS6O3.js";
@@ -1587,7 +1587,7 @@ async function loadOnlineAgentsForPrompt(projectDir, skip) {
1587
1587
  }
1588
1588
  }
1589
1589
  async function getSddRuntimeStateForCli() {
1590
- const sdd = await import("./sdd-runtime-IKPROVV2.js");
1590
+ const sdd = await import("./sdd-runtime-JG4EEKL6.js");
1591
1591
  return {
1592
1592
  tracker: sdd.getTaskTracker(),
1593
1593
  builder: sdd.getActiveBuilder(),
@@ -17832,9 +17832,9 @@ function buildSecurityCommand(opts) {
17832
17832
  }
17833
17833
 
17834
17834
  // src/slash-commands/settings.ts
17835
- import { color as color44 } from "@wrongstack/core/utils";
17836
17835
  import { noOpVault as noOpVault9 } from "@wrongstack/core/security";
17837
17836
  import { resolveFleetChatVerbosity } from "@wrongstack/core/types";
17837
+ import { color as color44, toErrorMessage as toErrorMessage20 } from "@wrongstack/core/utils";
17838
17838
  import { getProcessRegistry } from "@wrongstack/tools";
17839
17839
 
17840
17840
  // src/utils/delay-format.ts
@@ -17845,7 +17845,6 @@ function formatDelay(ms) {
17845
17845
  }
17846
17846
 
17847
17847
  // src/slash-commands/settings.ts
17848
- import { toErrorMessage as toErrorMessage20 } from "@wrongstack/core/utils";
17849
17848
  function buildSettingsCommand(opts) {
17850
17849
  const help = [
17851
17850
  "Usage:",
@@ -17885,6 +17884,7 @@ function buildSettingsCommand(opts) {
17885
17884
  " /settings thinking-word <word> TUI status-chip word (single short word)",
17886
17885
  " /settings statusline minimum|detailed|no-color TUI statusline density",
17887
17886
  " /settings animation rainbow|wave|pulse|dots|breathe|cycle TUI working-chip animation",
17887
+ " /settings read-symbols on|off Include codebase-index symbols in read tool results",
17888
17888
  " /settings reasoning auto|on|off Reasoning mode (auto = provider default)",
17889
17889
  " /settings reasoning-effort none|minimal|low|medium|high|xhigh|max Reasoning effort",
17890
17890
  " /settings reasoning-preserve on|off Preserve thinking across turns",
@@ -17975,6 +17975,7 @@ function buildSettingsCommand(opts) {
17975
17975
  ` thinking word: ${color44.cyan(au?.thinkingWord ?? "thinking")} ${color44.dim("change: /settings thinking-word <word>")}`,
17976
17976
  ` statusline mode: ${color44.cyan(au?.statuslineMode ?? "detailed")} ${color44.dim("change: /settings statusline minimum|detailed|no-color")}`,
17977
17977
  ` animation style: ${color44.cyan(au?.animationStyle ?? "rainbow")} ${color44.dim("change: /settings animation rainbow|wave|pulse|dots|breathe|cycle")}`,
17978
+ ` read symbols: ${au?.readAdvancedMode === true ? color44.cyan("on") : color44.dim("off")} ${color44.dim("change: /settings read-symbols on|off")}`,
17978
17979
  ` reasoning mode: ${color44.cyan(reasoningMode)} ${color44.dim("change: /settings reasoning auto|on|off")}`,
17979
17980
  ` reasoning effort: ${color44.cyan(reasoningEffort)} ${color44.dim("change: /settings reasoning-effort <level>")}`,
17980
17981
  ` reasoning preserve: ${reasoningPreserve ? color44.cyan("on") : color44.dim("off")} ${color44.dim("change: /settings reasoning-preserve on|off")}`,
@@ -18042,14 +18043,18 @@ function buildSettingsCommand(opts) {
18042
18043
  hq.enabled = on;
18043
18044
  cfg.hq = hq;
18044
18045
  });
18045
- return { message: `${color44.green("\u2713")} HQ publishing \u2192 ${on ? color44.cyan("on") : color44.dim("off")}` };
18046
+ return {
18047
+ message: `${color44.green("\u2713")} HQ publishing \u2192 ${on ? color44.cyan("on") : color44.dim("off")}`
18048
+ };
18046
18049
  }
18047
18050
  if (sub === "hq-url") {
18048
18051
  const raw = rest.join(" ").trim();
18049
- if (!raw) return { message: `${color44.amber("Usage:")} /settings hq-url <http://host:3499>` };
18052
+ if (!raw)
18053
+ return { message: `${color44.amber("Usage:")} /settings hq-url <http://host:3499>` };
18050
18054
  try {
18051
18055
  const url = new URL(raw);
18052
- if (url.protocol !== "http:" && url.protocol !== "https:") throw new Error("bad protocol");
18056
+ if (url.protocol !== "http:" && url.protocol !== "https:")
18057
+ throw new Error("bad protocol");
18053
18058
  } catch {
18054
18059
  return { message: `${color44.red("Invalid URL")}: ${raw}` };
18055
18060
  }
@@ -18063,14 +18068,17 @@ function buildSettingsCommand(opts) {
18063
18068
  }
18064
18069
  if (sub === "hq-token") {
18065
18070
  const token = rest.join(" ").trim();
18066
- if (!token) return { message: `${color44.amber("Usage:")} /settings hq-token <client-token>` };
18071
+ if (!token)
18072
+ return { message: `${color44.amber("Usage:")} /settings hq-token <client-token>` };
18067
18073
  await persistConfigSetting({ ...persistDeps, forceGlobal: true }, (cfg) => {
18068
18074
  const hq = cfg.hq ?? {};
18069
18075
  hq.token = token;
18070
18076
  hq.enabled = true;
18071
18077
  cfg.hq = hq;
18072
18078
  });
18073
- return { message: `${color44.green("\u2713")} HQ token saved ${color44.dim("(active profile config)")}` };
18079
+ return {
18080
+ message: `${color44.green("\u2713")} HQ token saved ${color44.dim("(active profile config)")}`
18081
+ };
18074
18082
  }
18075
18083
  if (sub === "hq-raw") {
18076
18084
  const raw = (rest[0] ?? "").toLowerCase();
@@ -18083,7 +18091,9 @@ function buildSettingsCommand(opts) {
18083
18091
  hq.rawContent = on;
18084
18092
  cfg.hq = hq;
18085
18093
  });
18086
- return { message: `${color44.green("\u2713")} HQ raw content \u2192 ${on ? color44.cyan("on") : color44.dim("off")}` };
18094
+ return {
18095
+ message: `${color44.green("\u2713")} HQ raw content \u2192 ${on ? color44.cyan("on") : color44.dim("off")}`
18096
+ };
18087
18097
  }
18088
18098
  if (sub === "delay") {
18089
18099
  const raw = rest[0];
@@ -18323,7 +18333,10 @@ function buildSettingsCommand(opts) {
18323
18333
  const ms = Math.round(seconds * 1e3);
18324
18334
  await persistConfigSetting(persistDeps, (cfg) => {
18325
18335
  const cb = cfg.circuitBreaker;
18326
- cfg.circuitBreaker = { ...cb ?? {}, autoKillResetMs: ms };
18336
+ cfg.circuitBreaker = {
18337
+ ...cb ?? {},
18338
+ autoKillResetMs: ms
18339
+ };
18327
18340
  });
18328
18341
  getProcessRegistry().setBreakerConfig({ autoKillResetMs: ms });
18329
18342
  return {
@@ -18334,7 +18347,9 @@ function buildSettingsCommand(opts) {
18334
18347
  const raw = (rest[0] ?? "").toLowerCase();
18335
18348
  const modes = ["balanced", "frugal", "deep"];
18336
18349
  if (!modes.includes(raw)) {
18337
- return { message: `${color44.amber("Usage:")} /settings context-mode balanced|frugal|deep` };
18350
+ return {
18351
+ message: `${color44.amber("Usage:")} /settings context-mode balanced|frugal|deep`
18352
+ };
18338
18353
  }
18339
18354
  await persistConfigSetting(persistDeps, (cfg) => {
18340
18355
  const ctx = cfg.context ?? {};
@@ -18349,7 +18364,9 @@ function buildSettingsCommand(opts) {
18349
18364
  const raw = (rest[0] ?? "").toLowerCase();
18350
18365
  const strategies = ["hybrid", "intelligent", "selective"];
18351
18366
  if (!strategies.includes(raw)) {
18352
- return { message: `${color44.amber("Usage:")} /settings context-strategy hybrid|intelligent|selective` };
18367
+ return {
18368
+ message: `${color44.amber("Usage:")} /settings context-strategy hybrid|intelligent|selective`
18369
+ };
18353
18370
  }
18354
18371
  await persistConfigSetting(persistDeps, (cfg) => {
18355
18372
  const ctx = cfg.context ?? {};
@@ -18379,7 +18396,9 @@ function buildSettingsCommand(opts) {
18379
18396
  const raw = (rest[0] ?? "").toLowerCase();
18380
18397
  const tiers = ["off", "minimal", "light", "medium", "aggressive"];
18381
18398
  if (!tiers.includes(raw)) {
18382
- return { message: `${color44.amber("Usage:")} /settings token-saving off|minimal|light|medium|aggressive` };
18399
+ return {
18400
+ message: `${color44.amber("Usage:")} /settings token-saving off|minimal|light|medium|aggressive`
18401
+ };
18383
18402
  }
18384
18403
  await persistConfigSetting(persistDeps, (cfg) => {
18385
18404
  const feat = cfg.features ?? {};
@@ -18482,125 +18501,173 @@ function buildSettingsCommand(opts) {
18482
18501
  }
18483
18502
  if (sub === "mcp") {
18484
18503
  const raw = (rest[0] ?? "").toLowerCase();
18485
- if (!["on", "off"].includes(raw)) return { message: `${color44.amber("Usage:")} /settings mcp on|off` };
18504
+ if (!["on", "off"].includes(raw))
18505
+ return { message: `${color44.amber("Usage:")} /settings mcp on|off` };
18486
18506
  const on = raw === "on";
18487
18507
  await persistConfigSetting(persistDeps, (cfg) => {
18488
18508
  const feats = cfg.features ?? {};
18489
18509
  feats.mcp = on;
18490
18510
  cfg.features = feats;
18491
18511
  });
18492
- return { message: `${color44.green("\u2713")} MCP features \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}` };
18512
+ return {
18513
+ message: `${color44.green("\u2713")} MCP features \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}`
18514
+ };
18493
18515
  }
18494
18516
  if (sub === "plugins") {
18495
18517
  const raw = (rest[0] ?? "").toLowerCase();
18496
- if (!["on", "off"].includes(raw)) return { message: `${color44.amber("Usage:")} /settings plugins on|off` };
18518
+ if (!["on", "off"].includes(raw))
18519
+ return { message: `${color44.amber("Usage:")} /settings plugins on|off` };
18497
18520
  const on = raw === "on";
18498
18521
  await persistConfigSetting(persistDeps, (cfg) => {
18499
18522
  const feats = cfg.features ?? {};
18500
18523
  feats.plugins = on;
18501
18524
  cfg.features = feats;
18502
18525
  });
18503
- return { message: `${color44.green("\u2713")} Plugin features \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}` };
18526
+ return {
18527
+ message: `${color44.green("\u2713")} Plugin features \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}`
18528
+ };
18504
18529
  }
18505
18530
  if (sub === "memory") {
18506
18531
  const raw = (rest[0] ?? "").toLowerCase();
18507
- if (!["on", "off"].includes(raw)) return { message: `${color44.amber("Usage:")} /settings memory on|off` };
18532
+ if (!["on", "off"].includes(raw))
18533
+ return { message: `${color44.amber("Usage:")} /settings memory on|off` };
18508
18534
  const on = raw === "on";
18509
18535
  await persistConfigSetting(persistDeps, (cfg) => {
18510
18536
  const feats = cfg.features ?? {};
18511
18537
  feats.memory = on;
18512
18538
  cfg.features = feats;
18513
18539
  });
18514
- return { message: `${color44.green("\u2713")} Memory features \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}` };
18540
+ return {
18541
+ message: `${color44.green("\u2713")} Memory features \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}`
18542
+ };
18515
18543
  }
18516
18544
  if (sub === "skills") {
18517
18545
  const raw = (rest[0] ?? "").toLowerCase();
18518
- if (!["on", "off"].includes(raw)) return { message: `${color44.amber("Usage:")} /settings skills on|off` };
18546
+ if (!["on", "off"].includes(raw))
18547
+ return { message: `${color44.amber("Usage:")} /settings skills on|off` };
18519
18548
  const on = raw === "on";
18520
18549
  await persistConfigSetting(persistDeps, (cfg) => {
18521
18550
  const feats = cfg.features ?? {};
18522
18551
  feats.skills = on;
18523
18552
  cfg.features = feats;
18524
18553
  });
18525
- return { message: `${color44.green("\u2713")} Skills features \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}` };
18554
+ return {
18555
+ message: `${color44.green("\u2713")} Skills features \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}`
18556
+ };
18526
18557
  }
18527
18558
  if (sub === "models-registry") {
18528
18559
  const raw = (rest[0] ?? "").toLowerCase();
18529
- if (!["on", "off"].includes(raw)) return { message: `${color44.amber("Usage:")} /settings models-registry on|off` };
18560
+ if (!["on", "off"].includes(raw))
18561
+ return { message: `${color44.amber("Usage:")} /settings models-registry on|off` };
18530
18562
  const on = raw === "on";
18531
18563
  await persistConfigSetting(persistDeps, (cfg) => {
18532
18564
  const feats = cfg.features ?? {};
18533
18565
  feats.modelsRegistry = on;
18534
18566
  cfg.features = feats;
18535
18567
  });
18536
- return { message: `${color44.green("\u2713")} Models registry \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}` };
18568
+ return {
18569
+ message: `${color44.green("\u2713")} Models registry \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("restart to apply")}`
18570
+ };
18537
18571
  }
18538
18572
  if (sub === "stream-fleet") {
18539
18573
  const raw = (rest[0] ?? "").toLowerCase();
18540
18574
  const mode = raw === "on" ? "full" : raw === "off" || raw === "full" ? raw : void 0;
18541
- if (!mode) return { message: `${color44.amber("Usage:")} /settings stream-fleet off|full (on = full)` };
18575
+ if (!mode)
18576
+ return {
18577
+ message: `${color44.amber("Usage:")} /settings stream-fleet off|full (on = full)`
18578
+ };
18542
18579
  await persistAutonomySetting(persistDeps, (autonomy) => {
18543
18580
  autonomy.fleetChatVerbosity = mode;
18544
18581
  });
18545
18582
  opts.fleetStreamController?.setMode(mode);
18546
18583
  const desc = mode === "full" ? "every subagent tool call and message in chat" : "subagent chat lines hidden (F2/F3 stay live)";
18547
- return { message: `${color44.green("\u2713")} fleet chat \u2192 ${color44.cyan(mode)} ${color44.dim(desc)}` };
18584
+ return {
18585
+ message: `${color44.green("\u2713")} fleet chat \u2192 ${color44.cyan(mode)} ${color44.dim(desc)}`
18586
+ };
18548
18587
  }
18549
18588
  if (sub === "chime") {
18550
18589
  const raw = (rest[0] ?? "").toLowerCase();
18551
- if (!["on", "off"].includes(raw)) return { message: `${color44.amber("Usage:")} /settings chime on|off` };
18590
+ if (!["on", "off"].includes(raw))
18591
+ return { message: `${color44.amber("Usage:")} /settings chime on|off` };
18552
18592
  const on = raw === "on";
18553
18593
  await persistAutonomySetting(persistDeps, (autonomy) => {
18554
18594
  autonomy.chime = on;
18555
18595
  });
18556
- return { message: `${color44.green("\u2713")} completion chime \u2192 ${on ? color44.cyan("on") : color44.dim("off")}` };
18596
+ return {
18597
+ message: `${color44.green("\u2713")} completion chime \u2192 ${on ? color44.cyan("on") : color44.dim("off")}`
18598
+ };
18557
18599
  }
18558
18600
  if (sub === "confirm-exit") {
18559
18601
  const raw = (rest[0] ?? "").toLowerCase();
18560
- if (!["on", "off"].includes(raw)) return { message: `${color44.amber("Usage:")} /settings confirm-exit on|off` };
18602
+ if (!["on", "off"].includes(raw))
18603
+ return { message: `${color44.amber("Usage:")} /settings confirm-exit on|off` };
18561
18604
  const on = raw === "on";
18562
18605
  await persistAutonomySetting(persistDeps, (autonomy) => {
18563
18606
  autonomy.confirmExit = on;
18564
18607
  });
18565
- return { message: `${color44.green("\u2713")} confirm before exit \u2192 ${on ? color44.cyan("on") : color44.dim("off")}` };
18608
+ return {
18609
+ message: `${color44.green("\u2713")} confirm before exit \u2192 ${on ? color44.cyan("on") : color44.dim("off")}`
18610
+ };
18566
18611
  }
18567
18612
  if (sub === "max-iterations") {
18568
18613
  const raw = rest[0];
18569
- if (raw === void 0) return { message: `${color44.amber("Usage:")} /settings max-iterations <n> ${color44.dim("(0 = default)")}` };
18614
+ if (raw === void 0)
18615
+ return {
18616
+ message: `${color44.amber("Usage:")} /settings max-iterations <n> ${color44.dim("(0 = default)")}`
18617
+ };
18570
18618
  const n = Number.parseInt(raw, 10);
18571
- if (Number.isNaN(n) || n < 0) return { message: `${color44.red("Invalid number")}: "${raw}". Enter a non-negative integer.` };
18619
+ if (Number.isNaN(n) || n < 0)
18620
+ return {
18621
+ message: `${color44.red("Invalid number")}: "${raw}". Enter a non-negative integer.`
18622
+ };
18572
18623
  await persistConfigSetting(persistDeps, (cfg) => {
18573
18624
  const tools = cfg.tools ?? {};
18574
18625
  tools.maxIterations = n;
18575
18626
  cfg.tools = tools;
18576
18627
  });
18577
- return { message: `${color44.green("\u2713")} max iterations \u2192 ${color44.cyan(n === 0 ? "default" : String(n))} ${color44.dim("agent pauses after this many iterations")}` };
18628
+ return {
18629
+ message: `${color44.green("\u2713")} max iterations \u2192 ${color44.cyan(n === 0 ? "default" : String(n))} ${color44.dim("agent pauses after this many iterations")}`
18630
+ };
18578
18631
  }
18579
18632
  if (sub === "auto-proceed-max-iterations") {
18580
18633
  const raw = rest[0];
18581
- if (raw === void 0) return { message: `${color44.amber("Usage:")} /settings auto-proceed-max-iterations <n> ${color44.dim("(0 = unlimited)")}` };
18634
+ if (raw === void 0)
18635
+ return {
18636
+ message: `${color44.amber("Usage:")} /settings auto-proceed-max-iterations <n> ${color44.dim("(0 = unlimited)")}`
18637
+ };
18582
18638
  const n = Number.parseInt(raw, 10);
18583
- if (Number.isNaN(n) || n < 0) return { message: `${color44.red("Invalid number")}: "${raw}". Enter a non-negative integer.` };
18639
+ if (Number.isNaN(n) || n < 0)
18640
+ return {
18641
+ message: `${color44.red("Invalid number")}: "${raw}". Enter a non-negative integer.`
18642
+ };
18584
18643
  await persistAutonomySetting(persistDeps, (autonomy) => {
18585
18644
  autonomy.autoProceedMaxIterations = n;
18586
18645
  });
18587
- return { message: `${color44.green("\u2713")} auto-proceed max iterations \u2192 ${color44.cyan(n === 0 ? "unlimited" : String(n))}` };
18646
+ return {
18647
+ message: `${color44.green("\u2713")} auto-proceed max iterations \u2192 ${color44.cyan(n === 0 ? "unlimited" : String(n))}`
18648
+ };
18588
18649
  }
18589
18650
  if (sub === "index-on-start") {
18590
18651
  const raw = (rest[0] ?? "").toLowerCase();
18591
- if (!["on", "off"].includes(raw)) return { message: `${color44.amber("Usage:")} /settings index-on-start on|off` };
18652
+ if (!["on", "off"].includes(raw))
18653
+ return { message: `${color44.amber("Usage:")} /settings index-on-start on|off` };
18592
18654
  const on = raw === "on";
18593
18655
  await persistConfigSetting(persistDeps, (cfg) => {
18594
18656
  const idx = cfg.indexing ?? {};
18595
18657
  idx.onSessionStart = on;
18596
18658
  cfg.indexing = idx;
18597
18659
  });
18598
- return { message: `${color44.green("\u2713")} index on session start \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("effective next session")}` };
18660
+ return {
18661
+ message: `${color44.green("\u2713")} index on session start \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim("effective next session")}`
18662
+ };
18599
18663
  }
18600
18664
  if (sub === "log-level") {
18601
18665
  const raw = (rest[0] ?? "").toLowerCase();
18602
18666
  const levels = ["error", "warn", "info", "debug", "trace"];
18603
- if (!levels.includes(raw)) return { message: `${color44.amber("Usage:")} /settings log-level error|warn|info|debug|trace` };
18667
+ if (!levels.includes(raw))
18668
+ return {
18669
+ message: `${color44.amber("Usage:")} /settings log-level error|warn|info|debug|trace`
18670
+ };
18604
18671
  await persistConfigSetting(persistDeps, (cfg) => {
18605
18672
  const log = cfg.log ?? {};
18606
18673
  log.level = raw;
@@ -18611,18 +18678,27 @@ function buildSettingsCommand(opts) {
18611
18678
  if (sub === "audit-level") {
18612
18679
  const raw = (rest[0] ?? "").toLowerCase();
18613
18680
  const levels = ["minimal", "standard", "full"];
18614
- if (!levels.includes(raw)) return { message: `${color44.amber("Usage:")} /settings audit-level minimal|standard|full` };
18681
+ if (!levels.includes(raw))
18682
+ return {
18683
+ message: `${color44.amber("Usage:")} /settings audit-level minimal|standard|full`
18684
+ };
18615
18685
  await persistConfigSetting(persistDeps, (cfg) => {
18616
18686
  const sess = cfg.session ?? {};
18617
18687
  sess.auditLevel = raw;
18618
18688
  cfg.session = sess;
18619
18689
  });
18620
- return { message: `${color44.green("\u2713")} audit level \u2192 ${color44.cyan(raw)} ${color44.dim("restart to apply")}` };
18690
+ return {
18691
+ message: `${color44.green("\u2713")} audit level \u2192 ${color44.cyan(raw)} ${color44.dim("restart to apply")}`
18692
+ };
18621
18693
  }
18622
18694
  if (sub === "thinking-word") {
18623
18695
  const raw = rest.join(" ").trim();
18624
- if (!raw) return { message: `${color44.amber("Usage:")} /settings thinking-word <word> ${color44.dim('single short word, e.g. "thinking", "vibing", "cooking"')}` };
18625
- if (raw.length > 16) return { message: `${color44.red("Word too long")}: max 16 characters.` };
18696
+ if (!raw)
18697
+ return {
18698
+ message: `${color44.amber("Usage:")} /settings thinking-word <word> ${color44.dim('single short word, e.g. "thinking", "vibing", "cooking"')}`
18699
+ };
18700
+ if (raw.length > 16)
18701
+ return { message: `${color44.red("Word too long")}: max 16 characters.` };
18626
18702
  await persistAutonomySetting(persistDeps, (autonomy) => {
18627
18703
  autonomy.thinkingWord = raw;
18628
18704
  });
@@ -18631,23 +18707,45 @@ function buildSettingsCommand(opts) {
18631
18707
  if (sub === "statusline") {
18632
18708
  const raw = (rest[0] ?? "").toLowerCase();
18633
18709
  const modes = ["minimum", "detailed", "no-color"];
18634
- if (!modes.includes(raw)) return { message: `${color44.amber("Usage:")} /settings statusline minimum|detailed|no-color` };
18710
+ if (!modes.includes(raw))
18711
+ return {
18712
+ message: `${color44.amber("Usage:")} /settings statusline minimum|detailed|no-color`
18713
+ };
18635
18714
  await persistAutonomySetting(persistDeps, (autonomy) => {
18636
18715
  autonomy.statuslineMode = raw;
18637
18716
  });
18638
18717
  return { message: `${color44.green("\u2713")} statusline mode \u2192 ${color44.cyan(raw)}` };
18639
18718
  }
18719
+ if (sub === "read-symbols") {
18720
+ const raw = (rest[0] ?? "").toLowerCase();
18721
+ if (!["on", "off"].includes(raw)) {
18722
+ return { message: `${color44.amber("Usage:")} /settings read-symbols on|off` };
18723
+ }
18724
+ const on = raw === "on";
18725
+ await persistAutonomySetting(persistDeps, (autonomy) => {
18726
+ autonomy.readAdvancedMode = on;
18727
+ });
18728
+ if (opts.context?.meta) {
18729
+ opts.context.meta["tools.read.advancedMode"] = on;
18730
+ }
18731
+ return {
18732
+ message: `${color44.green("\u2713")} read symbols \u2192 ${on ? color44.cyan("on") : color44.dim("off")} ${color44.dim(on ? "codebase-index symbols will be included in read tool results" : "read tool returns file content only")}`
18733
+ };
18734
+ }
18640
18735
  if (sub === "animation") {
18641
18736
  const raw = (rest[0] ?? "").toLowerCase();
18642
18737
  const styles = ["rainbow", "wave", "pulse", "dots", "breathe", "cycle"];
18643
- if (!styles.includes(raw)) return { message: `${color44.amber("Usage:")} /settings animation rainbow|wave|pulse|dots|breathe|cycle` };
18738
+ if (!styles.includes(raw))
18739
+ return {
18740
+ message: `${color44.amber("Usage:")} /settings animation rainbow|wave|pulse|dots|breathe|cycle`
18741
+ };
18644
18742
  await persistAutonomySetting(persistDeps, (autonomy) => {
18645
18743
  autonomy.animationStyle = raw;
18646
18744
  });
18647
18745
  return { message: `${color44.green("\u2713")} animation style \u2192 ${color44.cyan(raw)}` };
18648
18746
  }
18649
18747
  return {
18650
- message: `${color44.red("Unknown setting")} "${sub}". ${unknownSubcommand(sub, ["delay", "mode", "hints", "debug-stream", "config-scope", "fs-access", "refine", "refine-delay", "refine-language", "refiner-provider", "refiner-model", "refiner-fallback-profile", "refiner-clear", "semver-part", "breaker", "breaker-timeout", "context-mode", "context-strategy", "context-auto-compact", "token-saving", "max-concurrent", "title-animation", "reasoning", "reasoning-effort", "reasoning-preserve", "cache-ttl", "stream-fleet", "chime", "confirm-exit", "mcp", "plugins", "memory", "skills", "models-registry", "max-iterations", "auto-proceed-max-iterations", "index-on-start", "log-level", "audit-level", "thinking-word", "statusline", "animation", "defaults"], "settings")}`
18748
+ message: `${color44.red("Unknown setting")} "${sub}". ${unknownSubcommand(sub, ["delay", "mode", "hints", "debug-stream", "config-scope", "fs-access", "refine", "refine-delay", "refine-language", "refiner-provider", "refiner-model", "refiner-fallback-profile", "refiner-clear", "semver-part", "breaker", "breaker-timeout", "context-mode", "context-strategy", "context-auto-compact", "token-saving", "max-concurrent", "title-animation", "reasoning", "reasoning-effort", "reasoning-preserve", "cache-ttl", "stream-fleet", "chime", "confirm-exit", "mcp", "plugins", "memory", "skills", "models-registry", "max-iterations", "auto-proceed-max-iterations", "index-on-start", "log-level", "audit-level", "thinking-word", "statusline", "animation", "read-symbols", "defaults"], "settings")}`
18651
18749
  };
18652
18750
  } catch (err) {
18653
18751
  return {
@@ -23197,6 +23295,16 @@ ${audienceMemory.map((text) => `- ${text}`).join("\n")}`
23197
23295
  subReasoningConfig = await resolveHostSubagentReasoningConfig(host.deps, id, model);
23198
23296
  },
23199
23297
  events,
23298
+ // Thread the leader's shared ProviderModelStatusTracker so the
23299
+ // subagent's fallback extension quarantines a (provider, model) pair
23300
+ // on the first 429 (rate-limit) failure instead of silently
23301
+ // reassigning the same doomed model on every concurrent spawn.
23302
+ // Without this dep, deps.statusTracker in fallback-model.ts is
23303
+ // undefined and every recordFailure / isAvailable call is a no-op,
23304
+ // so the waiting-room transition never fires along the subagent
23305
+ // dispatch path. The tracker is the same singleton the leader uses,
23306
+ // populated by brain-and-orchestration.ts into host.opts.statusTracker.
23307
+ ...host.opts.statusTracker ? { statusTracker: host.opts.statusTracker } : {},
23200
23308
  ...mergedConfig.fallbackStickiness?.primaryProbeInterval !== void 0 ? { primaryCooldownMs: mergedConfig.fallbackStickiness.primaryProbeInterval } : {},
23201
23309
  ...mergedConfig.fallbackStickiness?.stickyFallbackTurns !== void 0 ? { stickyFallbackTurns: mergedConfig.fallbackStickiness.stickyFallbackTurns } : {}
23202
23310
  })
@@ -27532,6 +27640,7 @@ function setupSage(deps) {
27532
27640
  maxCharsPerTool: cfg?.inject?.maxCharsPerTool,
27533
27641
  taskAware: cfg?.inject?.taskAware,
27534
27642
  minScore: cfg?.inject?.minScore,
27643
+ minImportance: cfg?.inject?.minImportance,
27535
27644
  repeatCooldownMs: cfg?.inject?.repeatCooldownMs,
27536
27645
  verifyOnMutation: cfg?.hygiene?.autoOnFileChange,
27537
27646
  triggers: cfg?.inject?.triggers,
@@ -28233,7 +28342,12 @@ async function setupSession(params) {
28233
28342
  const todosCheckpointPath = sessionScopedPath3(wpaths.projectSessions, sessionId, ".todos.json");
28234
28343
  if (resumeId) {
28235
28344
  try {
28236
- const restoredTodos = await loadTodosCheckpoint(todosCheckpointPath, eventsBus, traceId);
28345
+ const restoredTodos = await loadTodosCheckpoint(
28346
+ todosCheckpointPath,
28347
+ eventsBus,
28348
+ traceId,
28349
+ sessionId
28350
+ );
28237
28351
  if (restoredTodos && restoredTodos.length > 0) {
28238
28352
  context.state.replaceTodos(restoredTodos);
28239
28353
  renderer.writeInfo(
@@ -28243,14 +28357,39 @@ async function setupSession(params) {
28243
28357
  } catch {
28244
28358
  }
28245
28359
  }
28246
- const detachTodosCheckpointOnly = attachTodosCheckpoint(
28360
+ const checkpointWarning = loggerParam ? (msg) => loggerParam.warn(msg) : void 0;
28361
+ let checkpointSessionId = sessionId;
28362
+ let checkpointSessionsDir = wpaths.projectSessions;
28363
+ const attachCheckpoint = (targetSessionId, sessionsDir) => attachTodosCheckpoint(
28247
28364
  context.state,
28248
- todosCheckpointPath,
28249
- sessionId,
28365
+ sessionScopedPath3(sessionsDir, targetSessionId, ".todos.json"),
28366
+ targetSessionId,
28250
28367
  eventsBus,
28251
28368
  traceId,
28252
- loggerParam ? (msg) => loggerParam.warn(msg) : void 0
28369
+ checkpointWarning
28253
28370
  );
28371
+ let detachTodosCheckpointOnly = attachCheckpoint(sessionId, checkpointSessionsDir);
28372
+ let checkpointAttached = true;
28373
+ const detachCurrentCheckpoint = async () => {
28374
+ if (!checkpointAttached) return;
28375
+ checkpointAttached = false;
28376
+ await detachTodosCheckpointOnly();
28377
+ };
28378
+ let checkpointRebindTail = Promise.resolve();
28379
+ const rebindTodosCheckpoint = (nextSessionId, sessionsDir = wpaths.projectSessions) => {
28380
+ const transition = checkpointRebindTail.then(async () => {
28381
+ if (checkpointAttached && nextSessionId === checkpointSessionId && sessionsDir === checkpointSessionsDir) {
28382
+ return;
28383
+ }
28384
+ await detachCurrentCheckpoint();
28385
+ checkpointSessionId = nextSessionId;
28386
+ checkpointSessionsDir = sessionsDir;
28387
+ detachTodosCheckpointOnly = attachCheckpoint(nextSessionId, sessionsDir);
28388
+ checkpointAttached = true;
28389
+ });
28390
+ checkpointRebindTail = transition.catch(() => void 0);
28391
+ return transition;
28392
+ };
28254
28393
  const planPath = sessionScopedPath3(wpaths.projectSessions, sessionId, ".plan.json");
28255
28394
  context.state.setMeta("plan.path", planPath);
28256
28395
  const taskPath = sessionScopedPath3(wpaths.projectSessions, sessionId, ".tasks.json");
@@ -28260,7 +28399,8 @@ async function setupSession(params) {
28260
28399
  const detachTodosCheckpoint = async () => {
28261
28400
  detachSessionKanbanMirror();
28262
28401
  cacheLedger?.dispose();
28263
- await detachTodosCheckpointOnly();
28402
+ await checkpointRebindTail;
28403
+ await detachCurrentCheckpoint();
28264
28404
  };
28265
28405
  let dirState;
28266
28406
  if (resumeId) {
@@ -28299,6 +28439,7 @@ async function setupSession(params) {
28299
28439
  queueStore,
28300
28440
  planPath,
28301
28441
  detachTodosCheckpoint,
28442
+ rebindTodosCheckpoint,
28302
28443
  priorFleetState: dirState ?? void 0,
28303
28444
  restoredToolCalls,
28304
28445
  restoredEvents,
@@ -28939,7 +29080,7 @@ async function runInteractive(cliCtx) {
28939
29080
  onEvent: evOn
28940
29081
  });
28941
29082
  const savedProviderCfg = config.providers?.[config.provider];
28942
- const { execute } = await import("./execution-V26SE52F.js");
29083
+ const { execute } = await import("./execution-O7I5DYE6.js");
28943
29084
  const stopHeapWatchdog = startHeapWatchdog();
28944
29085
  teardownHandlers.push(() => {
28945
29086
  void stopHeapWatchdog();
@@ -28972,6 +29113,7 @@ async function runInteractive(cliCtx) {
28972
29113
  queueStore,
28973
29114
  context,
28974
29115
  detachTodosCheckpoint,
29116
+ rebindTodosCheckpoint: sessResult.rebindTodosCheckpoint,
28975
29117
  sessionStore,
28976
29118
  memoryStore,
28977
29119
  modeStore,
@@ -29123,4 +29265,4 @@ export {
29123
29265
  CLI_VERSION,
29124
29266
  runInteractive
29125
29267
  };
29126
- //# sourceMappingURL=cli-main-6AU6E4XZ.js.map
29268
+ //# sourceMappingURL=cli-main-RTY35OPD.js.map