@wrongstack/cli 0.319.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/data/providers.json +22 -15
  2. package/dist/{acp-5ANIAOZC.js → acp-3LARESEO.js} +113 -10
  3. package/dist/acp-hq-telemetry.d.ts +44 -0
  4. package/dist/{audit-ZPCLCC3C.js → audit-46YK5DSC.js} +1 -2
  5. package/dist/{auth-ND7J7DTD.js → auth-ZUMCDNE5.js} +6 -7
  6. package/dist/auth-menu/add-provider.d.ts +7 -0
  7. package/dist/auth-menu/panel-service.d.ts +2 -20
  8. package/dist/{auto-discover-providers-MHFLDSD3.js → auto-discover-providers-VQU3IZMR.js} +1 -2
  9. package/dist/{bench-XYG56AMO.js → bench-YBU6BVQP.js} +175 -35
  10. package/dist/boot/brain-decision-log.d.ts +22 -2
  11. package/dist/boot/system-prompt-menu.d.ts +7 -0
  12. package/dist/{boot-auto-thin-BZ675EVT.js → boot-auto-thin-MANHOYHE.js} +1 -2
  13. package/dist/{chronicle-6EPPMUC5.js → chronicle-UTFETHP6.js} +1 -2
  14. package/dist/{chunk-HF5VQWIY.js → chunk-5IA5337I.js} +3 -3
  15. package/dist/{chunk-TALOKMIC.js → chunk-C2E24IXZ.js} +31 -15
  16. package/dist/chunk-D2VCUN7M.js +54 -0
  17. package/dist/{chunk-XPX432BZ.js → chunk-DR2OXU46.js} +50 -39
  18. package/dist/{chunk-GGGUZSAU.js → chunk-E6RFXHWD.js} +18 -13
  19. package/dist/{chunk-TYO2OVAD.js → chunk-EWKESL4L.js} +8 -4
  20. package/dist/{chunk-QAC263FZ.js → chunk-FPIWTJ2G.js} +2 -3
  21. package/dist/{chunk-7YLN7YUA.js → chunk-IMWXXF4J.js} +61 -9
  22. package/dist/{chunk-LIWVIEZM.js → chunk-KHWDTNBZ.js} +5 -5
  23. package/dist/{chunk-IMT6PNV5.js → chunk-MNQQ4ZNF.js} +26 -22
  24. package/dist/{chunk-P2OKBDCH.js → chunk-MXEJEYT7.js} +53 -14
  25. package/dist/{chunk-PCBJSXYV.js → chunk-O4A3HHKD.js} +2 -2
  26. package/dist/{chunk-XYKYXFEE.js → chunk-TE3Q32JP.js} +10 -4
  27. package/dist/{chunk-635WW3II.js → chunk-TEBMCYZN.js} +67 -18
  28. package/dist/{chunk-E4I2TF5S.js → chunk-TNK6237M.js} +2 -2
  29. package/dist/chunk-UQUYBDMG.js +51 -0
  30. package/dist/{chunk-F5GA2QW2.js → chunk-ZSZ3EYWH.js} +2 -2
  31. package/dist/{cli-context-K73EIND5.js → cli-context-7X3M6U73.js} +59 -308
  32. package/dist/{cli-main-QXSKKANW.js → cli-main-53KG6HAV.js} +972 -293
  33. package/dist/config-transfer-2YF3CRTN.js +99 -0
  34. package/dist/{diag-doctor-QZVKUAE5.js → diag-doctor-7LYUYU35.js} +1 -2
  35. package/dist/execute-deps.d.ts +5 -1
  36. package/dist/{execution-7ZFY4FJY.js → execution-MIBWBYB6.js} +52 -35
  37. package/dist/{export-ROG3DKTZ.js → export-VVRIOWFV.js} +1 -2
  38. package/dist/{governance-JSGHHA2R.js → governance-RYSHV675.js} +1 -2
  39. package/dist/{hq-4QQJO2GN.js → hq-IG3YRGCO.js} +2 -3
  40. package/dist/hq-command-controller.d.ts +37 -7
  41. package/dist/hq-server/ws.d.ts +1 -1
  42. package/dist/{hq-server-CVAYICIS.js → hq-server-OILU3NPI.js} +2 -3
  43. package/dist/{hq-ttl-KUO3AU7X.js → hq-ttl-VJR65OBJ.js} +1 -2
  44. package/dist/{hq-tunnel-LO55RCZE.js → hq-tunnel-NIJ5EP2Y.js} +1 -2
  45. package/dist/index.js +5 -6
  46. package/dist/{init-4JQSG66Q.js → init-DRMMFG2G.js} +1 -2
  47. package/dist/{kanban-run-mirror-EKVNGXWW.js → kanban-run-mirror-22HQ5FNG.js} +1 -2
  48. package/dist/live-settings-input.d.ts +2 -0
  49. package/dist/{mailbox-serve-VKQIRCCB.js → mailbox-serve-VUCWZ2SJ.js} +2 -3
  50. package/dist/{mcp-AQKSASHD.js → mcp-HOMLC4WE.js} +1 -2
  51. package/dist/{modeldiag-ZL4ROTQ5.js → modeldiag-FMJT37SN.js} +2 -3
  52. package/dist/{per-subcommand-help-6VCIKDUW.js → per-subcommand-help-BWBHYVJO.js} +2 -3
  53. package/dist/{permissions-2PWBL4YU.js → permissions-CFDLXETM.js} +1 -2
  54. package/dist/{plugin-usage-7WCZW4NP.js → plugin-usage-HFBI3TFT.js} +2 -3
  55. package/dist/{plugins-7N3TF2QF.js → plugins-PZ2VZL7V.js} +4 -5
  56. package/dist/{project-BLQ3ALVL.js → project-AOQI5XTK.js} +1 -2
  57. package/dist/{project-manifest-RV5FXGQI.js → project-manifest-7NSFVBM3.js} +1 -2
  58. package/dist/{project-picker-CCQR3W4I.js → project-picker-SVBXMPKX.js} +1 -2
  59. package/dist/{projects-5J727S4L.js → projects-L6C6XLDY.js} +1 -2
  60. package/dist/provider-config-utils.d.ts +1 -1
  61. package/dist/{providers-models-OKKQZIWU.js → providers-models-YVMVYWRS.js} +3 -4
  62. package/dist/{proxy-wiring-QCI7EWQC.js → proxy-wiring-MGRSKZZB.js} +1 -2
  63. package/dist/{quick-XLYLZX4B.js → quick-CNB4Z3HS.js} +1 -2
  64. package/dist/{replay-RZXZKP2U.js → replay-JJ2NOWD6.js} +1 -2
  65. package/dist/{replay-FJ2JBXUA.js → replay-Z3FTJEMM.js} +1 -2
  66. package/dist/{rewind-2FFNOOKS.js → rewind-JA3ZLCNM.js} +1 -2
  67. package/dist/{sdd-runtime-R6FAK2G2.js → sdd-runtime-PTOSPYI4.js} +1 -2
  68. package/dist/services/statusline-config.d.ts +43 -13
  69. package/dist/{sessions-config-KAMEBVOX.js → sessions-config-UL45XKX7.js} +2 -3
  70. package/dist/{sessions-doctor-EXHAZSSE.js → sessions-doctor-QUL37U32.js} +1 -2
  71. package/dist/settings-behavior-sections.d.ts +20 -0
  72. package/dist/short-circuit-flags-UREFSYBL.js +10 -0
  73. package/dist/{simpleui-dist-JKNRCRRK.js → simpleui-dist-CXSIDAXZ.js} +1 -2
  74. package/dist/slash-commands/command-context.d.ts +10 -0
  75. package/dist/slash-commands/statusline.d.ts +1 -1
  76. package/dist/subcommands/handlers/bench-run-config.d.ts +18 -0
  77. package/dist/subcommands/handlers/bench.d.ts +8 -7
  78. package/dist/subcommands/handlers/config-transfer.d.ts +6 -0
  79. package/dist/subcommands-WJLBHVKC.js +9 -0
  80. package/dist/{tools-skills-Q4P27URS.js → tools-skills-GH24UCBY.js} +1 -2
  81. package/dist/{update-K45CS6SS.js → update-5DPB4YD4.js} +1 -2
  82. package/dist/{update-check-PKSMSMD6.js → update-check-BS3DHTSI.js} +1 -2
  83. package/dist/version-help-MYKF724O.js +10 -0
  84. package/dist/webui-server/client-registration.d.ts +9 -1
  85. package/dist/{webui-server-F7MSRHOF.js → webui-server-5R35BHWZ.js} +54 -15
  86. package/dist/wiring/brain-and-orchestration.d.ts +2 -0
  87. package/dist/wiring/cli-execute-builder.d.ts +4 -0
  88. package/dist/wiring/cli-slash-commands-setup.d.ts +1 -0
  89. package/dist/wiring/command-host-state.d.ts +50 -5
  90. package/dist/wiring/external-plugins.d.ts +9 -0
  91. package/dist/wiring/provider-runtime-setup.d.ts +2 -0
  92. package/dist/wiring/runtime-controller-deps.d.ts +3 -0
  93. package/dist/wiring/vector-memory-setup.d.ts +12 -0
  94. package/dist/wiring/wrongtrace-prompt-contributor.d.ts +5 -2
  95. package/dist/{wrongtrace-gate-counters-GSVY372D.js → wrongtrace-gate-counters-7C2EAAZL.js} +1 -2
  96. package/dist/{wrongtrace-telemetry-KBBM5NLQ.js → wrongtrace-telemetry-3ASFKOZO.js} +1 -2
  97. package/package.json +28 -28
  98. package/dist/chunk-7OCVIDC7.js +0 -11
  99. package/dist/chunk-KYDJJLJI.js +0 -52
  100. package/dist/launch-hints.d.ts +0 -49
  101. package/dist/short-circuit-flags-7YUCERBB.js +0 -11
  102. package/dist/subcommands-KE6MEQQP.js +0 -10
  103. package/dist/version-help-WMPSEL4U.js +0 -11
  104. package/dist/webui-server/privileged-actions.d.ts +0 -14
  105. package/dist/wiring/cli-heap-watchdog.d.ts +0 -34
@@ -0,0 +1,99 @@
1
+ import {
2
+ extractBehaviorSettings,
3
+ mergeBehaviorSettings
4
+ } from "./chunk-UQUYBDMG.js";
5
+
6
+ // src/subcommands/handlers/config-transfer.ts
7
+ import * as fs from "node:fs/promises";
8
+ import * as path from "node:path";
9
+ import { color, toErrorMessage } from "@wrongstack/core/utils";
10
+ var FILE_NAME = "wstack-config.json";
11
+ var SAFETY_NOTE = "No providers, API keys, fallbacks, or model/fallback routing data is included.";
12
+ var configExportCmd = async (_args, deps) => {
13
+ const settings = extractBehaviorSettings(deps.config);
14
+ const payload = {
15
+ kind: "wstack-config",
16
+ version: 1,
17
+ exportedAt: (/* @__PURE__ */ new Date()).toISOString(),
18
+ profile: String(
19
+ deps.config["activeProfile"] ?? "default"
20
+ ),
21
+ settings
22
+ };
23
+ const target = path.resolve(deps.cwd, FILE_NAME);
24
+ try {
25
+ await fs.writeFile(target, `${JSON.stringify(payload, null, 2)}
26
+ `, "utf8");
27
+ } catch (err) {
28
+ deps.renderer.writeError(`Export failed: ${toErrorMessage(err)}`);
29
+ return 1;
30
+ }
31
+ deps.renderer.write(`${color.green("\u2713")} Wrote ${color.cyan(target)}
32
+ `);
33
+ deps.renderer.write(` Sections: ${color.cyan(Object.keys(settings).join(", "))}
34
+ `);
35
+ deps.renderer.write(` ${color.dim(SAFETY_NOTE)}
36
+ `);
37
+ return 0;
38
+ };
39
+ var configImportCmd = async (_args, deps) => {
40
+ const target = path.resolve(deps.cwd, FILE_NAME);
41
+ let payload;
42
+ try {
43
+ payload = JSON.parse(await fs.readFile(target, "utf8"));
44
+ } catch (err) {
45
+ deps.renderer.writeError(
46
+ `Import failed: cannot read ${FILE_NAME} in ${deps.cwd} \u2014 ${toErrorMessage(err)}`
47
+ );
48
+ return 1;
49
+ }
50
+ if (payload["kind"] !== "wstack-config") {
51
+ deps.renderer.writeError(
52
+ `Import failed: ${FILE_NAME} is not a wstack config export (missing "kind": "wstack-config").`
53
+ );
54
+ return 1;
55
+ }
56
+ const settings = payload["settings"];
57
+ if (settings === null || typeof settings !== "object") {
58
+ deps.renderer.writeError("Import failed: the export carries no settings object.");
59
+ return 1;
60
+ }
61
+ const profile = String(
62
+ deps.config["activeProfile"] ?? "default"
63
+ );
64
+ const profilePath = deps.paths.profileConfig(profile);
65
+ let disk = {};
66
+ try {
67
+ disk = JSON.parse(await fs.readFile(profilePath, "utf8"));
68
+ } catch {
69
+ }
70
+ const applied = mergeBehaviorSettings(disk, settings);
71
+ if (applied.length === 0) {
72
+ deps.renderer.write(
73
+ `${color.amber("Nothing to import")} \u2014 the export carries none of the known behavior sections.
74
+ `
75
+ );
76
+ return 0;
77
+ }
78
+ try {
79
+ await fs.writeFile(profilePath, `${JSON.stringify(disk, null, 2)}
80
+ `, "utf8");
81
+ } catch (err) {
82
+ deps.renderer.writeError(`Import failed while writing profile: ${toErrorMessage(err)}`);
83
+ return 1;
84
+ }
85
+ deps.renderer.write(
86
+ `${color.green("\u2713")} Imported ${applied.length} section(s) into profile ${color.cyan(profile)}: ${color.cyan(applied.join(", "))}
87
+ `
88
+ );
89
+ deps.renderer.write(` ${color.dim(SAFETY_NOTE)}
90
+ `);
91
+ deps.renderer.write(` ${color.dim("Restart wstack so imported settings take effect.")}
92
+ `);
93
+ return 0;
94
+ };
95
+ export {
96
+ configExportCmd,
97
+ configImportCmd
98
+ };
99
+ //# sourceMappingURL=config-transfer-2YF3CRTN.js.map
@@ -8,7 +8,6 @@ import {
8
8
  import {
9
9
  API_VERSION
10
10
  } from "./chunk-XJXDOF63.js";
11
- import "./chunk-7OCVIDC7.js";
12
11
 
13
12
  // src/subcommands/handlers/diag-doctor.ts
14
13
  import * as fs2 from "node:fs/promises";
@@ -383,4 +382,4 @@ export {
383
382
  doctorCmd,
384
383
  proxyCmd
385
384
  };
386
- //# sourceMappingURL=diag-doctor-QZVKUAE5.js.map
385
+ //# sourceMappingURL=diag-doctor-7LYUYU35.js.map
@@ -25,7 +25,7 @@ import type { ReadlineInputReader } from './input-reader.js';
25
25
  import type { LiveSettingsInput } from './live-settings-input.js';
26
26
  import type { TerminalRenderer } from './renderer.js';
27
27
  import type { AutonomyMode } from './services/autonomy-mode.js';
28
- import type { StatuslineLines } from '@wrongstack/core/statusline';
28
+ import type { StatuslineDensities, StatuslineLines } from '@wrongstack/core/statusline';
29
29
  import type { StatuslineConfigKey } from './services/statusline-config.js';
30
30
  import type { SessionStats } from './session-stats.js';
31
31
  import type { UpdateInfo } from './update-check.js';
@@ -270,6 +270,10 @@ export interface ControllerDeps {
270
270
  statuslineLines?: StatuslineLines | undefined;
271
271
  setStatuslineLines?: ((lines: StatuslineLines) => void) | undefined;
272
272
  saveStatuslineLines?: ((lines: StatuslineLines) => Promise<void>) | undefined;
273
+ /** Per-chip statusline density pin (schema v3). */
274
+ statuslineDensities?: StatuslineDensities | undefined;
275
+ setStatuslineDensities?: ((densities: StatuslineDensities) => void) | undefined;
276
+ saveStatuslineDensities?: ((densities: StatuslineDensities) => Promise<void>) | undefined;
273
277
  getYolo?: (() => boolean) | undefined;
274
278
  onYolo?: ((setTo?: boolean) => boolean) | undefined;
275
279
  getAutonomy?: (() => AutonomyMode) | undefined;
@@ -21,7 +21,7 @@ import {
21
21
  } from "./chunk-GPPRNAKW.js";
22
22
  import {
23
23
  fmtTok
24
- } from "./chunk-TYO2OVAD.js";
24
+ } from "./chunk-EWKESL4L.js";
25
25
  import "./chunk-WHOIR577.js";
26
26
  import {
27
27
  advanceToNextTask,
@@ -40,19 +40,18 @@ import {
40
40
  terminalLink,
41
41
  terminalText
42
42
  } from "./chunk-HXJYHAR4.js";
43
- import {
44
- startCliHqConnection
45
- } from "./chunk-XYKYXFEE.js";
46
43
  import {
47
44
  CLI_VERSION
48
45
  } from "./chunk-XJXDOF63.js";
46
+ import {
47
+ startCliHqConnection
48
+ } from "./chunk-TE3Q32JP.js";
49
49
  import {
50
50
  activeProfileConfigPath
51
51
  } from "./chunk-YMXXOOFN.js";
52
52
  import {
53
53
  resolveActiveApiKey
54
- } from "./chunk-XPX432BZ.js";
55
- import "./chunk-7OCVIDC7.js";
54
+ } from "./chunk-DR2OXU46.js";
56
55
 
57
56
  // src/execution.ts
58
57
  import * as path14 from "node:path";
@@ -212,7 +211,7 @@ async function runWebUIDispatch(ctx) {
212
211
  const isSimpleUi = !isSessionChild && flags["simpleui"] === true;
213
212
  agent.disableInteractiveConfirmation();
214
213
  renderer.setSilent(true);
215
- const { runWebUI } = await import("./webui-server-F7MSRHOF.js");
214
+ const { runWebUI } = await import("./webui-server-5R35BHWZ.js");
216
215
  const flagValue = (names) => {
217
216
  for (const name of names) {
218
217
  if (!Object.hasOwn(flags, name)) continue;
@@ -267,7 +266,7 @@ async function runWebUIDispatch(ctx) {
267
266
  webuiPublicWsUrl = webuiSessionChild?.publicWsUrl ?? flagValue(["webui-public-ws-url", "public-ws-url"]) ?? process.env["WEBUI_PUBLIC_WS_URL"];
268
267
  webuiRequireToken = webuiSessionChild?.requireToken ?? flagBoolean(["webui-require-token", "require-token"]) ?? envFlag("WEBUI_REQUIRE_TOKEN");
269
268
  if (isSimpleUi) {
270
- const { ensureSimpleUiDistDir } = await import("./simpleui-dist-JKNRCRRK.js");
269
+ const { ensureSimpleUiDistDir } = await import("./simpleui-dist-CXSIDAXZ.js");
271
270
  frontendDistDir = await ensureSimpleUiDistDir();
272
271
  }
273
272
  } catch (err) {
@@ -415,7 +414,7 @@ async function runWebUIDispatch(ctx) {
415
414
  applyLiveSettings?.({ yolo: enabled });
416
415
  },
417
416
  onWrongProxyPrefsChange: (payload) => {
418
- void import("./proxy-wiring-QCI7EWQC.js").then(
417
+ void import("./proxy-wiring-MGRSKZZB.js").then(
419
418
  ({ applyWrongProxyPrefs }) => applyWrongProxyPrefs(payload)
420
419
  );
421
420
  }
@@ -893,7 +892,7 @@ function onSwitchToSession(ctx, _sessionId, targetRoot, projectName) {
893
892
  import * as path4 from "node:path";
894
893
  import { color as color3 } from "@wrongstack/core/utils";
895
894
  async function getProjectPickerItems(ctx) {
896
- const { buildPickerItems } = await import("./project-picker-CCQR3W4I.js");
895
+ const { buildPickerItems } = await import("./project-picker-SVBXMPKX.js");
897
896
  return buildPickerItems({
898
897
  globalConfigPath: ctx.state.wpaths.globalConfig,
899
898
  currentProjectRoot: ctx.state.projectRoot
@@ -911,7 +910,7 @@ async function onProjectSelect(ctx, slug, kind) {
911
910
  }
912
911
  return;
913
912
  }
914
- const { loadManifest, saveManifest } = await import("./project-manifest-RV5FXGQI.js");
913
+ const { loadManifest, saveManifest } = await import("./project-manifest-7NSFVBM3.js");
915
914
  const manifest = await loadManifest(state.wpaths.globalConfig);
916
915
  const project = manifest.projects.find((p) => p.slug === slug);
917
916
  if (!project) return;
@@ -1214,7 +1213,7 @@ async function switchProjectInPlace(ctx, targetRoot, displayName) {
1214
1213
 
1215
1214
  // src/boot/tui-sdd-callback.ts
1216
1215
  async function getSDDContext() {
1217
- const { getActiveSDDContext: getActiveSDDContext2 } = await import("./sdd-runtime-R6FAK2G2.js");
1216
+ const { getActiveSDDContext: getActiveSDDContext2 } = await import("./sdd-runtime-PTOSPYI4.js");
1218
1217
  return getActiveSDDContext2();
1219
1218
  }
1220
1219
  async function onSDDOutput(output) {
@@ -1225,7 +1224,7 @@ async function onSDDOutput(output) {
1225
1224
  autoDetectTaskCompletion: autoDetectTaskCompletion2,
1226
1225
  getTaskProgress: getTaskProgress2,
1227
1226
  getActiveSDDPhase: getActiveSDDPhase2
1228
- } = await import("./sdd-runtime-R6FAK2G2.js");
1227
+ } = await import("./sdd-runtime-PTOSPYI4.js");
1229
1228
  const messages = [];
1230
1229
  const specSaved = await trySaveSpecFromAIOutput2(output);
1231
1230
  if (specSaved) messages.push("\u2713 Spec detected and saved! Use /sdd approve to continue.");
@@ -1875,20 +1874,20 @@ function createSettingsAdapter(ctx) {
1875
1874
  const contextModeRaw = cfg.context?.mode;
1876
1875
  const contextMode = contextModeRaw === "frugal" || contextModeRaw === "deep" ? contextModeRaw : "balanced";
1877
1876
  const reasoningEffortRaw = modelRuntime?.reasoning?.effort;
1878
- const reasoningEffort = reasoningEffortRaw === "none" || reasoningEffortRaw === "minimal" || reasoningEffortRaw === "low" || reasoningEffortRaw === "medium" || reasoningEffortRaw === "high" || reasoningEffortRaw === "xhigh" || reasoningEffortRaw === "max" ? reasoningEffortRaw : "high";
1877
+ const reasoningEffort = reasoningEffortRaw === "none" || reasoningEffortRaw === "minimal" || reasoningEffortRaw === "low" || reasoningEffortRaw === "medium" || reasoningEffortRaw === "high" || reasoningEffortRaw === "xhigh" || reasoningEffortRaw === "max" ? reasoningEffortRaw : "medium";
1879
1878
  const featuresAllow = cfg.features?.allowOutsideProjectRoot;
1880
1879
  const toolsRestrict = cfg.tools?.restrictToProjectRoot;
1881
1880
  const resolvedAllow = featuresAllow !== void 0 ? featuresAllow : toolsRestrict !== void 0 ? !toolsRestrict : true;
1882
1881
  const resolvedRestrict = !resolvedAllow;
1883
1882
  return {
1884
1883
  mode,
1885
- delayMs: autonomy?.autoProceedDelayMs ?? 45e3,
1884
+ delayMs: autonomy?.autoProceedDelayMs ?? 15e3,
1886
1885
  titleAnimation: autonomy?.terminalTitleAnimation !== false,
1887
- yolo: cfg.yolo ?? autonomy?.yolo ?? false,
1886
+ yolo: cfg.yolo ?? autonomy?.yolo ?? true,
1888
1887
  fleetChatVerbosity: resolveFleetChatVerbosity(cfg.autonomy),
1889
- chime: autonomy?.chime ?? false,
1888
+ chime: autonomy?.chime ?? true,
1890
1889
  confirmExit: autonomy?.confirmExit !== false,
1891
- nextPrediction: cfg.nextPrediction ?? false,
1890
+ nextPrediction: cfg.nextPrediction ?? true,
1892
1891
  featureMcp: cfg.features?.mcp !== false,
1893
1892
  featurePlugins: cfg.features?.plugins !== false,
1894
1893
  featureMemory: cfg.features?.memory !== false,
@@ -1902,24 +1901,29 @@ function createSettingsAdapter(ctx) {
1902
1901
  contextAutoCompact: cfg.context?.autoCompact !== false,
1903
1902
  contextStrategy: cfg.context?.strategy ?? "hybrid",
1904
1903
  contextMode,
1905
- maxConcurrent: cfg.maxConcurrent ?? 4,
1906
- logLevel: cfg.log?.level ?? "info",
1907
- auditLevel: cfg.session?.auditLevel ?? "standard",
1904
+ maxConcurrent: cfg.maxConcurrent ?? 10,
1905
+ logLevel: cfg.log?.level ?? "warn",
1906
+ auditLevel: cfg.session?.auditLevel ?? "full",
1908
1907
  indexOnStart: cfg.indexing?.onSessionStart !== false,
1909
- maxIterations: cfg.tools?.maxIterations ?? 500,
1908
+ maxIterations: cfg.tools?.maxIterations ?? 0,
1909
+ // Multi-diff summary threshold — mirrors the WebUI parity path
1910
+ // (pref-helpers.ts reads/writes `decrypted.autonomy.multiDiffSummaryThreshold`;
1911
+ // here we read from `decrypted.tools.multiDiffSummaryThreshold` to
1912
+ // match the Tools-section write gate added in saveSettings).
1913
+ multiDiffSummaryThreshold: cfg.tools?.multiDiffSummaryThreshold ?? 5,
1910
1914
  nextStepsTool: cfg.tools?.nextsteps?.enabled === true,
1911
1915
  restrictFsToRoot: resolvedRestrict,
1912
- autoProceedMaxIterations: cfg.autonomy?.autoProceedMaxIterations ?? 50,
1916
+ autoProceedMaxIterations: cfg.autonomy?.autoProceedMaxIterations ?? 0,
1913
1917
  debugStream: cfg.debugStream ?? false,
1914
1918
  shellBangWarningDontShowAgain: autonomy?.shellBangWarningDontShowAgain === true,
1915
1919
  statuslineMode: autonomy?.statuslineMode === "no-color" ? "no-color" : autonomy?.statuslineMode === "detailed" ? "detailed" : "minimum",
1916
1920
  thinkingWord: normalizeTuiThinkingWord(autonomy?.thinkingWord),
1917
1921
  animationStyle: normalizeAnimationStyle(autonomy?.animationStyle),
1918
1922
  configScope: cfg.configScope ?? "global",
1919
- systemPromptVariant: cfg.systemPrompt?.variant === "lite" || cfg.systemPrompt?.variant === "pro" ? cfg.systemPrompt.variant : "default",
1920
- enhanceDelayMs: cfg.autonomy?.enhanceDelayMs ?? 6e4,
1923
+ systemPromptVariant: cfg.systemPrompt?.variant === "lite" || cfg.systemPrompt?.variant === "pro" ? cfg.systemPrompt.variant : cfg.systemPrompt?.variant === "default" ? "default" : "pro",
1924
+ enhanceDelayMs: cfg.autonomy?.enhanceDelayMs ?? 15e3,
1921
1925
  enhanceEnabled: cfg.autonomy?.enhance ?? true,
1922
- enhanceLanguage: cfg.autonomy?.enhanceLanguage === "english" ? "english" : "original",
1926
+ enhanceLanguage: cfg.autonomy?.enhanceLanguage === "english" ? "english" : cfg.autonomy?.enhanceLanguage === "original" ? "original" : "english",
1923
1927
  midRunSendPicker: cfg.autonomy?.midRunSendPicker ?? true,
1924
1928
  mouseMode: autonomy?.mouseMode ?? false,
1925
1929
  autonomyNextPrompt: cfg.autonomy?.autonomyNextPrompt ?? "auto {{suggestion}}",
@@ -1929,7 +1933,7 @@ function createSettingsAdapter(ctx) {
1929
1933
  cacheTtl: modelRuntime?.cache?.ttl === "5m" || modelRuntime?.cache?.ttl === "1h" ? modelRuntime.cache.ttl : "default",
1930
1934
  breakerEnabled: cfg.circuitBreaker?.enabled === true,
1931
1935
  breakerAutoKillResetMs: cfg.circuitBreaker?.autoKillResetMs ?? 6e4,
1932
- showModelReasoning: autonomy?.showModelReasoning ?? true,
1936
+ showModelReasoning: autonomy?.showModelReasoning ?? false,
1933
1937
  showAgentSwarmPanel: coerceAgentSwarmMode(autonomy?.showAgentSwarmPanel),
1934
1938
  showSidebar: autonomy?.showSidebar ?? true,
1935
1939
  // Migrate the legacy `autonomy.showAgentSwarmPanel: 'sidebar'` into
@@ -1956,7 +1960,7 @@ function createSettingsAdapter(ctx) {
1956
1960
  }
1957
1961
  async function saveSettings(s) {
1958
1962
  try {
1959
- if (s.mode !== void 0 || s.delayMs !== void 0 || s.titleAnimation !== void 0 || s.yolo !== void 0 || s.fleetChatVerbosity !== void 0 || s.chime !== void 0 || s.confirmExit !== void 0 || s.mouseMode !== void 0 || s.featureMcp !== void 0 || s.featurePlugins !== void 0 || s.featureMemory !== void 0 || s.featureSkills !== void 0 || s.featureModelsRegistry !== void 0 || s.featureTokenSaving !== void 0 || s.allowOutsideProjectRoot !== void 0 || s.contextAutoCompact !== void 0 || s.contextStrategy !== void 0 || s.contextMode !== void 0 || s.maxConcurrent !== void 0 || s.logLevel !== void 0 || s.auditLevel !== void 0 || s.indexOnStart !== void 0 || s.maxIterations !== void 0 || s.nextStepsTool !== void 0 || s.restrictFsToRoot !== void 0 || s.nextPrediction !== void 0 || s.debugStream !== void 0 || s.shellBangWarningDontShowAgain !== void 0 || s.configScope !== void 0 || s.enhanceDelayMs !== void 0 || s.enhanceEnabled !== void 0 || s.enhanceLanguage !== void 0 || s.midRunSendPicker !== void 0 || s.statuslineMode !== void 0 || s.thinkingWord !== void 0 || s.animationStyle !== void 0 || s.autonomyNextPrompt !== void 0 || s.autoProceedMaxIterations !== void 0 || s.reasoningMode !== void 0 || s.reasoningEffort !== void 0 || s.reasoningPreserve !== void 0 || s.cacheTtl !== void 0 || s.breakerEnabled !== void 0 || s.breakerAutoKillResetMs !== void 0 || s.showModelReasoning !== void 0 || s.showAgentSwarmPanel !== void 0 || s.showSidebar !== void 0 || s.panelPositions !== void 0 || s.showSageMemoryInject !== void 0 || s.sageMemoryInjectThreshold !== void 0 || s.readSymbols !== void 0 || // WrongProxy / WrongTrace: gate the persisted-section write on
1963
+ if (s.mode !== void 0 || s.delayMs !== void 0 || s.titleAnimation !== void 0 || s.yolo !== void 0 || s.fleetChatVerbosity !== void 0 || s.chime !== void 0 || s.confirmExit !== void 0 || s.mouseMode !== void 0 || s.featureMcp !== void 0 || s.featurePlugins !== void 0 || s.featureMemory !== void 0 || s.featureSkills !== void 0 || s.featureModelsRegistry !== void 0 || s.featureTokenSaving !== void 0 || s.allowOutsideProjectRoot !== void 0 || s.contextAutoCompact !== void 0 || s.contextStrategy !== void 0 || s.contextMode !== void 0 || s.maxConcurrent !== void 0 || s.logLevel !== void 0 || s.auditLevel !== void 0 || s.indexOnStart !== void 0 || s.maxIterations !== void 0 || s.multiDiffSummaryThreshold !== void 0 || s.nextStepsTool !== void 0 || s.restrictFsToRoot !== void 0 || s.nextPrediction !== void 0 || s.debugStream !== void 0 || s.shellBangWarningDontShowAgain !== void 0 || s.configScope !== void 0 || s.enhanceDelayMs !== void 0 || s.enhanceEnabled !== void 0 || s.enhanceLanguage !== void 0 || s.midRunSendPicker !== void 0 || s.statuslineMode !== void 0 || s.thinkingWord !== void 0 || s.animationStyle !== void 0 || s.autonomyNextPrompt !== void 0 || s.autoProceedMaxIterations !== void 0 || s.reasoningMode !== void 0 || s.reasoningEffort !== void 0 || s.reasoningPreserve !== void 0 || s.cacheTtl !== void 0 || s.breakerEnabled !== void 0 || s.breakerAutoKillResetMs !== void 0 || s.showModelReasoning !== void 0 || s.showAgentSwarmPanel !== void 0 || s.showSidebar !== void 0 || s.panelPositions !== void 0 || s.showSageMemoryInject !== void 0 || s.sageMemoryInjectThreshold !== void 0 || s.readSymbols !== void 0 || // WrongProxy / WrongTrace: gate the persisted-section write on
1960
1964
  // either key being present in the live patch. Without this, a
1961
1965
  // picker toggle round-trip would silently no-op the persistence
1962
1966
  // layer (the runtime probe would never read the change).
@@ -2066,6 +2070,9 @@ function createSettingsAdapter(ctx) {
2066
2070
  s.wrongProxyEnabled !== void 0 || s.wrongProxyUrl !== void 0) {
2067
2071
  const tools = decrypted.tools ?? {};
2068
2072
  if (s.maxIterations !== void 0) tools.maxIterations = s.maxIterations;
2073
+ if (s.multiDiffSummaryThreshold !== void 0) {
2074
+ tools.multiDiffSummaryThreshold = s.multiDiffSummaryThreshold;
2075
+ }
2069
2076
  if (s.nextStepsTool !== void 0) tools.nextsteps = { enabled: s.nextStepsTool };
2070
2077
  if (fsAccess !== void 0) tools.restrictToProjectRoot = fsAccess.restrictToProjectRoot;
2071
2078
  if (s.wrongProxyEnabled !== void 0 || s.wrongProxyUrl !== void 0) {
@@ -2184,7 +2191,7 @@ function createSettingsAdapter(ctx) {
2184
2191
  ...decrypted.indexing ?? {}
2185
2192
  }
2186
2193
  } : {},
2187
- ...s.maxIterations !== void 0 || s.nextStepsTool !== void 0 || fsAccess !== void 0 || // WrongProxy / WrongTrace: must be in the tools guard or the
2194
+ ...s.maxIterations !== void 0 || s.multiDiffSummaryThreshold !== void 0 || s.nextStepsTool !== void 0 || fsAccess !== void 0 || // WrongProxy / WrongTrace: must be in the tools guard or the
2188
2195
  // in-memory ConfigStore never sees the freshly-saved values,
2189
2196
  // and the next picker open in the same process would overwrite
2190
2197
  // the on-disk selection with stale state. See Chimera review.
@@ -2339,6 +2346,7 @@ function createBrainPanelHost(deps) {
2339
2346
  councilPerCallTimeoutMs: snap.council.perCallTimeoutMs,
2340
2347
  councilMaxConcurrency: snap.council.maxConcurrency,
2341
2348
  councilVoterMaxTokens: snap.council.voterMaxTokens,
2349
+ councilDeliberationRounds: snap.council.deliberationRounds,
2342
2350
  councilJudgeMaxTokens: snap.council.judgeMaxTokens,
2343
2351
  // The EFFECTIVE judge, not `council.judge`. The configured one is
2344
2352
  // usually absent, so the panel used to read "auto" and say nothing
@@ -2421,6 +2429,7 @@ function createBrainPanelHost(deps) {
2421
2429
  setCouncilPerCallTimeout: (ms) => apply({ council: { perCallTimeoutMs: ms ?? null } }),
2422
2430
  setCouncilMaxConcurrency: (count) => apply({ council: { maxConcurrency: count ?? null } }),
2423
2431
  setCouncilVoterMaxTokens: (tokens) => apply({ council: { voterMaxTokens: tokens ?? null } }),
2432
+ setCouncilDeliberationRounds: (rounds) => apply({ council: { deliberationRounds: rounds ?? null } }),
2424
2433
  setCouncilJudgeMaxTokens: (tokens) => apply({ council: { judgeMaxTokens: tokens ?? null } }),
2425
2434
  setLedgerEnabled: (on) => apply({ ledger: { enabled: on } }),
2426
2435
  setAutoDeny: (count) => apply({ ledger: { autoDenyAfterFailures: count ?? null } }),
@@ -2673,7 +2682,7 @@ async function finalizeExecutionCleanup(input) {
2673
2682
  })
2674
2683
  );
2675
2684
  } else {
2676
- const { reportWrongTraceSessionTelemetry } = await import("./wrongtrace-telemetry-KBBM5NLQ.js");
2685
+ const { reportWrongTraceSessionTelemetry } = await import("./wrongtrace-telemetry-3ASFKOZO.js");
2677
2686
  const usage = tokenCounter.total();
2678
2687
  const report = reportWrongTraceSessionTelemetry({
2679
2688
  sessionId: activeSession.id,
@@ -2701,7 +2710,7 @@ async function finalizeExecutionCleanup(input) {
2701
2710
  } catch {
2702
2711
  }
2703
2712
  try {
2704
- const { snapshotGateDecisions, persistWrongTraceGateCounters } = await import("./wrongtrace-gate-counters-GSVY372D.js");
2713
+ const { snapshotGateDecisions, persistWrongTraceGateCounters } = await import("./wrongtrace-gate-counters-7C2EAAZL.js");
2705
2714
  const projectRoot = agent.ctx.projectRoot;
2706
2715
  if (projectRoot) {
2707
2716
  await persistWrongTraceGateCounters(projectRoot, snapshotGateDecisions());
@@ -4436,7 +4445,7 @@ ${list}`);
4436
4445
  function parsePredictions(raw, max = 3) {
4437
4446
  const text = raw.trim();
4438
4447
  if (!text) return [];
4439
- if (/^none\b/i.test(text) || /no further steps/i.test(text)) return [];
4448
+ if (/^none\.?\s*$/i.test(text) || /^no further steps/i.test(text)) return [];
4440
4449
  const out = [];
4441
4450
  for (const lineRaw of text.split("\n")) {
4442
4451
  const line = lineRaw.trim();
@@ -4974,7 +4983,7 @@ function printBanner(renderer, projectName) {
4974
4983
  }
4975
4984
 
4976
4985
  // src/repl.ts
4977
- var DEFAULT_MAX_CONSECUTIVE_AUTO_PROCEED = 50;
4986
+ var DEFAULT_MAX_CONSECUTIVE_AUTO_PROCEED = 0;
4978
4987
  async function runRepl(opts) {
4979
4988
  if (opts.banner !== false) printBanner(opts.renderer, opts.projectName);
4980
4989
  await renderGoalBanner(opts);
@@ -6127,6 +6136,9 @@ async function execute(deps) {
6127
6136
  statuslineLines,
6128
6137
  setStatuslineLines,
6129
6138
  saveStatuslineLines,
6139
+ statuslineDensities,
6140
+ setStatuslineDensities,
6141
+ saveStatuslineDensities,
6130
6142
  getYolo,
6131
6143
  onYolo,
6132
6144
  getAutonomy,
@@ -6410,6 +6422,8 @@ async function execute(deps) {
6410
6422
  ensureAutonomousCoordinator
6411
6423
  }),
6412
6424
  onClearHistory: (dispatch) => {
6425
+ void attachments.clear().catch(() => {
6426
+ });
6413
6427
  dispatch({ type: "clearHistory", model: context.model, provider: context.provider.id });
6414
6428
  dispatch({ type: "resetContextChip" });
6415
6429
  dispatch({ type: "streamReset" });
@@ -6429,6 +6443,9 @@ async function execute(deps) {
6429
6443
  statuslineLines,
6430
6444
  setStatuslineLines,
6431
6445
  saveStatuslineLines,
6446
+ statuslineDensities,
6447
+ setStatuslineDensities,
6448
+ saveStatuslineDensities,
6432
6449
  getPluginItems,
6433
6450
  onPluginToggle,
6434
6451
  getMcpServers,
@@ -6640,7 +6657,7 @@ async function execute(deps) {
6640
6657
  ...createKanbanDispatchHandler({ config, events, skillLoader, sddSubagentFactory })
6641
6658
  });
6642
6659
  } else {
6643
- const headlessKanbanMirror = projectRoot ? (await import("./kanban-run-mirror-EKVNGXWW.js")).createKanbanRunMirror({
6660
+ const headlessKanbanMirror = projectRoot ? (await import("./kanban-run-mirror-22HQ5FNG.js")).createKanbanRunMirror({
6644
6661
  projectRoot,
6645
6662
  events,
6646
6663
  broadcast: () => {
@@ -6724,4 +6741,4 @@ export {
6724
6741
  execute,
6725
6742
  resolveReviewerFallbackModels
6726
6743
  };
6727
- //# sourceMappingURL=execution-7ZFY4FJY.js.map
6744
+ //# sourceMappingURL=execution-MIBWBYB6.js.map
@@ -1,7 +1,6 @@
1
1
  import {
2
2
  restoreFlags
3
3
  } from "./chunk-CSAPOCBP.js";
4
- import "./chunk-7OCVIDC7.js";
5
4
 
6
5
  // src/subcommands/handlers/export.ts
7
6
  import * as fs from "node:fs/promises";
@@ -64,4 +63,4 @@ var exportCmd = async (args, deps) => {
64
63
  export {
65
64
  exportCmd
66
65
  };
67
- //# sourceMappingURL=export-ROG3DKTZ.js.map
66
+ //# sourceMappingURL=export-VVRIOWFV.js.map
@@ -1,4 +1,3 @@
1
- import "./chunk-7OCVIDC7.js";
2
1
 
3
2
  // src/subcommands/handlers/governance.ts
4
3
  var DEFAULT_DEPENDENCIES = {
@@ -62,4 +61,4 @@ export {
62
61
  governanceCmd,
63
62
  runGovernanceStatusCommand
64
63
  };
65
- //# sourceMappingURL=governance-JSGHHA2R.js.map
64
+ //# sourceMappingURL=governance-RYSHV675.js.map
@@ -4,7 +4,6 @@ import {
4
4
  import {
5
5
  resolveAuditActor
6
6
  } from "./chunk-Q5GTM25S.js";
7
- import "./chunk-7OCVIDC7.js";
8
7
 
9
8
  // src/subcommands/handlers/hq.ts
10
9
  import * as fs from "node:fs/promises";
@@ -51,7 +50,7 @@ var hqCmd = async (args, deps) => {
51
50
  return 1;
52
51
  };
53
52
  async function startServer(deps) {
54
- const { startHqServer } = await import("./hq-server-CVAYICIS.js");
53
+ const { startHqServer } = await import("./hq-server-OILU3NPI.js");
55
54
  const dataDir = resolveDataDir(deps);
56
55
  const flags = deps.flags ?? {};
57
56
  const host = typeof flags["host"] === "string" ? flags["host"] : HQ_CLI_DEFAULT_HOST;
@@ -709,4 +708,4 @@ export {
709
708
  hqCmd,
710
709
  resolveAuditActor
711
710
  };
712
- //# sourceMappingURL=hq-4QQJO2GN.js.map
711
+ //# sourceMappingURL=hq-IG3YRGCO.js.map
@@ -25,16 +25,46 @@ import type { HqPublisherCommandResult } from '@wrongstack/core/hq';
25
25
  export interface HqCommandController {
26
26
  /** Project mailbox used to deliver steer/broadcast messages. */
27
27
  steerMailbox?: RemoteMailbox | undefined;
28
- /** Abort the session leader's running Agent.run(). Returns true if a run was aborted. */
29
- interruptLeader: () => boolean;
28
+ /**
29
+ * Abort the leader run of `sessionId`. Returns true if a run was aborted.
30
+ *
31
+ * The session is the one the command named, already resolved against this
32
+ * controller's default. A host that owns several sessions at once (the WebUI
33
+ * gives every open tab its own) MUST honour it rather than aborting whatever
34
+ * it considers the leader — that is how an operator who picked tab 3 in HQ
35
+ * ended up stopping tab 1.
36
+ */
37
+ interruptLeader: (sessionId?: string) => boolean;
30
38
  /** Terminate a specific subagent by id. Returns true if terminated. */
31
- terminateAgent?: (subagentId: string) => boolean | Promise<boolean>;
32
- /** Stop the entire fleet (all running/idle subagents). Returns kill count. */
33
- killFleet?: () => number | Promise<number>;
34
- /** Spawn a subagent of the given role. Returns the new subagentId. */
35
- spawnAgent?: (role: string, task?: string, maxIterations?: number) => Promise<string>;
39
+ terminateAgent?: (subagentId: string, sessionId?: string) => boolean | Promise<boolean>;
40
+ /** Stop the entire fleet of `sessionId` (all running/idle subagents). */
41
+ killFleet?: (sessionId?: string) => number | Promise<number>;
42
+ /** Spawn a subagent of the given role, owned by `sessionId`. */
43
+ spawnAgent?: (role: string, task?: string, maxIterations?: number, sessionId?: string) => Promise<string>;
36
44
  /** Derive the session-unique mailbox tag for addressing (e.g. `leader@<tag>`). */
37
45
  sessionTag: () => string;
46
+ /**
47
+ * The session HQ is speaking for, live.
48
+ *
49
+ * Steering addresses the bare `leader` alias, which EVERY leader in the
50
+ * project answers to — a second terminal on the same project consumes the
51
+ * same message (unread state is per reader, so both get it). Stamping the
52
+ * session id makes `acceptMailboxMessageForSession` drop it at every other
53
+ * leader, so an operator who picked one session in HQ reaches exactly that
54
+ * session. Optional: without it the message stays project-wide, which is
55
+ * the pre-existing behaviour rather than a silent drop.
56
+ */
57
+ sessionId?: (() => string | undefined) | undefined;
58
+ /**
59
+ * Does this host currently own `sessionId`?
60
+ *
61
+ * A command that names a session this process no longer has must be
62
+ * REJECTED, never silently redirected to the default: the operator picked a
63
+ * specific terminal, and steering a different one is worse than not steering
64
+ * at all. Absent means the host has a single session and the default check
65
+ * (equality with `sessionId()`) applies.
66
+ */
67
+ ownsSession?: ((sessionId: string) => boolean) | undefined;
38
68
  /** Whether raw shell execution is explicitly opted-in by the operator. */
39
69
  allowRunCommand: () => boolean;
40
70
  }
@@ -6,8 +6,8 @@
6
6
  import type { HqCommandAuditLog, HqEventEnvelope, HqPersistence, HqRedactionPolicy, HqToken, HqTranscriptEntry } from '@wrongstack/core/hq';
7
7
  import { WebSocket } from 'ws';
8
8
  import type { ConnectedClient, HqSnapshotBroadcaster, TranscriptRing } from './types.js';
9
- export { detectLeaderLoss } from './ws-leader.js';
10
9
  export { fanoutKanbanDelta } from './ws-client-events.js';
10
+ export { detectLeaderLoss } from './ws-leader.js';
11
11
  export { handleClientResume } from './ws-resume.js';
12
12
  export declare function handleBrowser(ws: WebSocket, snapshotBroadcaster: HqSnapshotBroadcaster, browsers: Set<WebSocket>, eventLog: HqEventEnvelope[]): void;
13
13
  export declare function handleClient(ws: WebSocket, clients: Map<WebSocket, ConnectedClient>, browsers: Set<WebSocket>, eventLog: HqEventEnvelope[], auth: {
@@ -10,10 +10,9 @@ import {
10
10
  readLocalSubagentTranscript,
11
11
  sanitizeApiError,
12
12
  startHqServer
13
- } from "./chunk-TALOKMIC.js";
13
+ } from "./chunk-C2E24IXZ.js";
14
14
  import "./chunk-HXJYHAR4.js";
15
15
  import "./chunk-Q5GTM25S.js";
16
- import "./chunk-7OCVIDC7.js";
17
16
  export {
18
17
  DEFAULT_HOST,
19
18
  DEFAULT_PORT,
@@ -27,4 +26,4 @@ export {
27
26
  sanitizeApiError,
28
27
  startHqServer
29
28
  };
30
- //# sourceMappingURL=hq-server-CVAYICIS.js.map
29
+ //# sourceMappingURL=hq-server-OILU3NPI.js.map
@@ -1,8 +1,7 @@
1
1
  import {
2
2
  parseTokenTtlValue
3
3
  } from "./chunk-UZ2TMHNH.js";
4
- import "./chunk-7OCVIDC7.js";
5
4
  export {
6
5
  parseTokenTtlValue
7
6
  };
8
- //# sourceMappingURL=hq-ttl-KUO3AU7X.js.map
7
+ //# sourceMappingURL=hq-ttl-VJR65OBJ.js.map
@@ -1,4 +1,3 @@
1
- import "./chunk-7OCVIDC7.js";
2
1
 
3
2
  // src/hq-tunnel.ts
4
3
  import { spawn } from "node:child_process";
@@ -111,4 +110,4 @@ export {
111
110
  hasRegisteredQuickTunnelConnection,
112
111
  startHqQuickTunnel
113
112
  };
114
- //# sourceMappingURL=hq-tunnel-LO55RCZE.js.map
113
+ //# sourceMappingURL=hq-tunnel-NIJ5EP2Y.js.map
package/dist/index.js CHANGED
@@ -2,14 +2,13 @@
2
2
  import {
3
3
  applyNodeEnvDefault,
4
4
  applySessionShellDefault
5
- } from "./chunk-PCBJSXYV.js";
5
+ } from "./chunk-O4A3HHKD.js";
6
6
  import {
7
7
  CLI_VERSION
8
8
  } from "./chunk-XJXDOF63.js";
9
9
  import {
10
10
  parseArgs
11
- } from "./chunk-GGGUZSAU.js";
12
- import "./chunk-7OCVIDC7.js";
11
+ } from "./chunk-E6RFXHWD.js";
13
12
 
14
13
  // src/cli-entry-main.ts
15
14
  async function main(argv) {
@@ -17,14 +16,14 @@ async function main(argv) {
17
16
  applySessionShellDefault();
18
17
  const earlyFlags = parseArgs(argv).flags;
19
18
  if (earlyFlags["help"] === true || earlyFlags["version"] === true) {
20
- const { handleHelpVersionShortCircuit } = await import("./short-circuit-flags-7YUCERBB.js");
19
+ const { handleHelpVersionShortCircuit } = await import("./short-circuit-flags-UREFSYBL.js");
21
20
  const earlyExit = await handleHelpVersionShortCircuit(argv);
22
21
  if (earlyExit !== null) return earlyExit;
23
22
  }
24
- const { initializeCli } = await import("./cli-context-K73EIND5.js");
23
+ const { initializeCli } = await import("./cli-context-7X3M6U73.js");
25
24
  const cliCtx = await initializeCli(argv);
26
25
  if (typeof cliCtx === "number") return cliCtx;
27
- const { runInteractive } = await import("./cli-main-QXSKKANW.js");
26
+ const { runInteractive } = await import("./cli-main-53KG6HAV.js");
28
27
  return runInteractive(cliCtx);
29
28
  }
30
29
 
@@ -1,4 +1,3 @@
1
- import "./chunk-7OCVIDC7.js";
2
1
 
3
2
  // src/subcommands/handlers/init.ts
4
3
  import { color } from "@wrongstack/core/utils";
@@ -24,4 +23,4 @@ var initCmd = async (_args, deps) => {
24
23
  export {
25
24
  initCmd
26
25
  };
27
- //# sourceMappingURL=init-4JQSG66Q.js.map
26
+ //# sourceMappingURL=init-DRMMFG2G.js.map
@@ -3,10 +3,9 @@ import {
3
3
  buildTaskGraphFromSddSnapshot,
4
4
  createKanbanRunMirror
5
5
  } from "./chunk-VCYZ3WZV.js";
6
- import "./chunk-7OCVIDC7.js";
7
6
  export {
8
7
  buildTaskGraphFromGoalPhase,
9
8
  buildTaskGraphFromSddSnapshot,
10
9
  createKanbanRunMirror
11
10
  };
12
- //# sourceMappingURL=kanban-run-mirror-EKVNGXWW.js.map
11
+ //# sourceMappingURL=kanban-run-mirror-22HQ5FNG.js.map
@@ -30,6 +30,8 @@ export interface LiveSettingsInput {
30
30
  indexOnStart?: boolean | undefined;
31
31
  maxIterations?: number | undefined;
32
32
  autoProceedMaxIterations?: number | undefined;
33
+ /** Per-tool diff threshold that triggers multi-diff summary view. Default: 5. */
34
+ multiDiffSummaryThreshold?: number | undefined;
33
35
  /** When true, file tools are confined to the project root. Default false. */
34
36
  restrictFsToRoot?: boolean | undefined;
35
37
  debugStream?: boolean | undefined;