@wrongstack/cli 1.0.33 → 1.0.36

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 (145) hide show
  1. package/dist/{acp-EDGUWU7N.js → acp-QLU7T5WX.js} +470 -466
  2. package/dist/{auth-SUHKFFO4.js → auth-AED7RW7D.js} +7 -7
  3. package/dist/auth-menu/openai-codex-oauth.d.ts +1 -1
  4. package/dist/auth-menu/panel-provider-edits.d.ts +15 -0
  5. package/dist/auth-menu/panel-service.d.ts +1 -1
  6. package/dist/{automation-MCDFCIMV.js → automation-3E3AUPBF.js} +19 -4
  7. package/dist/boot/governance-evidence-candidate.d.ts +1 -2
  8. package/dist/boot/system-prompt-builder.d.ts +1 -1
  9. package/dist/boot/tui-project-spawn.d.ts +0 -1
  10. package/dist/boot/tui-session-resume-contracts.d.ts +95 -0
  11. package/dist/boot/tui-session-resume.d.ts +2 -88
  12. package/dist/boot/tui-settings-read.d.ts +3 -0
  13. package/dist/{boot-auto-thin-K2DHHYIW.js → boot-auto-thin-AGJ6TAWY.js} +3 -3
  14. package/dist/boot-launch-choices.d.ts +22 -0
  15. package/dist/boot-provider-gate.d.ts +28 -0
  16. package/dist/boot-subcommand-dispatch.d.ts +24 -0
  17. package/dist/boot.d.ts +1 -1
  18. package/dist/chimera-cascade-evidence.d.ts +1 -1
  19. package/dist/{chunk-TI7KLHYX.js → chunk-2CMMWRQH.js} +81 -80
  20. package/dist/{chunk-4BX2YDTQ.js → chunk-4JMAWKLA.js} +45 -4
  21. package/dist/{chunk-TWSQTQKR.js → chunk-4R6TVMYA.js} +2 -2
  22. package/dist/{chunk-HHRYIDOW.js → chunk-ACW64W4M.js} +34 -7
  23. package/dist/{chunk-5EA6OTLJ.js → chunk-AFOH6CHO.js} +2 -2
  24. package/dist/{chunk-WHEYHDIE.js → chunk-AKESWZH5.js} +2 -1
  25. package/dist/{chunk-JHUJUIOH.js → chunk-AT2A7RJZ.js} +4 -16
  26. package/dist/{chunk-LKFKO4JW.js → chunk-B6EHK772.js} +2 -2
  27. package/dist/{chunk-U3SS4NRH.js → chunk-BHXAKTBE.js} +1 -1
  28. package/dist/{chunk-4UWCMBPG.js → chunk-BJH44J7G.js} +3 -3
  29. package/dist/{chunk-MPQCHBDJ.js → chunk-CJSHS2K7.js} +5 -1
  30. package/dist/{chunk-RQ4UBKYH.js → chunk-GF7LUWQS.js} +5 -11
  31. package/dist/{chunk-TXAFIERF.js → chunk-L5NWFP5R.js} +2 -2
  32. package/dist/{chunk-24C6VVLM.js → chunk-LPGZ3NUF.js} +23 -23
  33. package/dist/{chunk-UQUYBDMG.js → chunk-M4G5FO7F.js} +1 -1
  34. package/dist/{chunk-P3GRLV47.js → chunk-NEWXDNF2.js} +212 -145
  35. package/dist/{chunk-3LEFXLAW.js → chunk-NOZJIN46.js} +36 -37
  36. package/dist/{chunk-4MDRHMX4.js → chunk-RE73FP2X.js} +4 -27
  37. package/dist/{chunk-5UZBUV2H.js → chunk-RKU66D2O.js} +6 -4
  38. package/dist/{chunk-SWOPJHXI.js → chunk-RYTSPBNM.js} +4 -4
  39. package/dist/{chunk-WTJDSTYD.js → chunk-T5KR6SNO.js} +2 -2
  40. package/dist/chunk-TGSPCFBT.js +1 -0
  41. package/dist/{chunk-ZYACRPLN.js → chunk-ULYAI7CP.js} +6 -3
  42. package/dist/{chunk-HLSHFXTO.js → chunk-WY74MMDB.js} +2 -2
  43. package/dist/{chunk-PGNERAZL.js → chunk-ZWBI7ORM.js} +3 -3
  44. package/dist/{cli-context-7HK67B2Z.js → cli-context-I6HJCVCV.js} +1607 -1495
  45. package/dist/cli-initial-tools.d.ts +54 -0
  46. package/dist/{cli-main-TQGLKB6D.js → cli-main-X7KD7IOC.js} +38223 -37136
  47. package/dist/cli-main-boot.d.ts +133 -0
  48. package/dist/cli-main-orchestration.d.ts +170 -0
  49. package/dist/cli-main-state.d.ts +19 -0
  50. package/dist/config-doctor.d.ts +1 -1
  51. package/dist/{config-transfer-UE37X4B5.js → config-transfer-YPD7HYXH.js} +7 -5
  52. package/dist/{execution-C2IECWF7.js → execution-M7D4KNBB.js} +171 -132
  53. package/dist/fleet/host-director-setup.d.ts +41 -0
  54. package/dist/fleet/host-spawn-types.d.ts +17 -0
  55. package/dist/fleet/host.d.ts +2 -1
  56. package/dist/goal-host-prompts.d.ts +5 -0
  57. package/dist/goal-host-types.d.ts +94 -0
  58. package/dist/goal-host.d.ts +2 -91
  59. package/dist/{hq-KBFDKTDD.js → hq-BBLGEEUH.js} +5 -6
  60. package/dist/hq-server/handle-types.d.ts +1 -1
  61. package/dist/hq-server/routes/auth-handlers.d.ts +1 -1
  62. package/dist/hq-server/routes.d.ts +1 -13
  63. package/dist/hq-server/utils.d.ts +1 -1
  64. package/dist/{hq-server-AVNKZ2PV.js → hq-server-5TR6NBGS.js} +3 -3
  65. package/dist/{hq-service-FGB7BY2D.js → hq-service-4Q64WFNT.js} +3 -3
  66. package/dist/{import-claude-code-AYG24RG2.js → import-claude-code-GHIS2F7Y.js} +3 -3
  67. package/dist/index.js +5 -5
  68. package/dist/live-settings-input.d.ts +2 -0
  69. package/dist/mailbox-bridge-bootstrap.d.ts +1 -4
  70. package/dist/{mailbox-serve-S536N66F.js → mailbox-serve-DRWJVMYU.js} +2 -2
  71. package/dist/{modeldiag-NEPTLFZW.js → modeldiag-F3LUF4VJ.js} +3 -3
  72. package/dist/picker-effort.d.ts +32 -0
  73. package/dist/picker-model-picker.d.ts +13 -2
  74. package/dist/picker-provider-list.d.ts +66 -0
  75. package/dist/picker.d.ts +12 -12
  76. package/dist/plugin-config.d.ts +6 -0
  77. package/dist/{plugin-usage-3TZGROK7.js → plugin-usage-EM752WHG.js} +3 -3
  78. package/dist/{plugins-ITH4SLO6.js → plugins-U6HQFJ7N.js} +4 -4
  79. package/dist/{providers-models-O75MKLN2.js → providers-models-S3S6VXME.js} +249 -239
  80. package/dist/repl-suggestions.d.ts +0 -5
  81. package/dist/{sage-FFKUOCQL.js → sage-BMRDJCDI.js} +9 -5
  82. package/dist/{sage-sync-ZMTHB477.js → sage-sync-PCWCNEUK.js} +2 -2
  83. package/dist/{sdd-runtime-PTOSPYI4.js → sdd-runtime-PF72WHLO.js} +3 -20
  84. package/dist/services/sdd/task-manager.d.ts +1 -12
  85. package/dist/services/sdd-runtime.d.ts +3 -4
  86. package/dist/services/statusline-config.d.ts +0 -2
  87. package/dist/{sessions-config-VE26SB56.js → sessions-config-RQRQDW5Q.js} +2 -2
  88. package/dist/settings-behavior-sections.d.ts +0 -1
  89. package/dist/short-circuit-flags-IEV3FEOT.js +10 -0
  90. package/dist/{skill-suggest-L2EVWB6R.js → skill-suggest-THANK3LV.js} +1 -1
  91. package/dist/slash-commands/command-context.d.ts +2 -0
  92. package/dist/slash-commands/doctor.d.ts +0 -9
  93. package/dist/slash-commands/fallback-chain-view.d.ts +3 -0
  94. package/dist/slash-commands/fallback-ref-validation.d.ts +34 -0
  95. package/dist/slash-commands/goal-refiner.d.ts +10 -2
  96. package/dist/slash-commands/goals.d.ts +6 -0
  97. package/dist/slash-commands/kanban-task-completion.d.ts +17 -0
  98. package/dist/slash-commands/mcp.d.ts +0 -1
  99. package/dist/slash-commands/memory-purge-domain-terms.d.ts +5 -0
  100. package/dist/slash-commands/nextsteps-mode.d.ts +13 -0
  101. package/dist/slash-commands/session-live-status.d.ts +21 -0
  102. package/dist/slash-commands/session.d.ts +1 -1
  103. package/dist/slash-commands/settings-feature-ui-mutations.d.ts +8 -0
  104. package/dist/slash-commands/settings-hq-autonomy-mutations.d.ts +8 -0
  105. package/dist/slash-commands/settings-persist-deps.d.ts +10 -0
  106. package/dist/slash-commands/settings-runtime-mutations.d.ts +12 -0
  107. package/dist/slash-commands/shadow.d.ts +0 -1
  108. package/dist/slash-commands/tool-auto-thin-commands.d.ts +15 -0
  109. package/dist/{standalone-auto-update-VQC4GYCM.js → standalone-auto-update-QUXOZ4B5.js} +13 -2
  110. package/dist/subcommands/handlers/acp-agents.d.ts +9 -0
  111. package/dist/subcommands/handlers/acp-server.d.ts +7 -0
  112. package/dist/subcommands/handlers/hq.d.ts +0 -1
  113. package/dist/subcommands/handlers/providers-models-custom.d.ts +33 -0
  114. package/dist/subcommands/handlers/providers-models-visibility.d.ts +29 -0
  115. package/dist/subcommands/handlers/skill-suggest.d.ts +0 -2
  116. package/dist/{subcommands-CLI6QTLU.js → subcommands-75IB23LS.js} +2 -2
  117. package/dist/{typesafe-NHC322W5.js → typesafe-KW2XHOG3.js} +2 -2
  118. package/dist/{update-J5WHAFPE.js → update-LHCWAWEZ.js} +3 -3
  119. package/dist/utils/win32-cmd.d.ts +1 -1
  120. package/dist/{version-help-ATOKGMTK.js → version-help-JQGRPDJW.js} +2 -2
  121. package/dist/webui-server/credential-watcher.d.ts +3 -1
  122. package/dist/webui-server/host-settings.d.ts +17 -0
  123. package/dist/webui-server/http-bridge.d.ts +32 -0
  124. package/dist/webui-server/instance-registration.d.ts +19 -0
  125. package/dist/webui-server/kanban-services.d.ts +9 -0
  126. package/dist/webui-server/message-router.d.ts +14 -0
  127. package/dist/webui-server/prefs-seeding.d.ts +1 -2
  128. package/dist/webui-server/provider-config.d.ts +0 -1
  129. package/dist/webui-server/provider-plane.d.ts +14 -0
  130. package/dist/webui-server/session-agents.d.ts +18 -0
  131. package/dist/webui-server/session-start-live.d.ts +11 -0
  132. package/dist/webui-server/stream-coalescer.d.ts +1 -1
  133. package/dist/webui-server/transport.d.ts +12 -0
  134. package/dist/{webui-server-GQOVLQS3.js → webui-server-CUIFA25W.js} +1472 -1335
  135. package/dist/webui-session-maintenance.d.ts +16 -0
  136. package/dist/wiring/brain-and-orchestration.d.ts +1 -1
  137. package/dist/wiring/cli-slash-commands-setup.d.ts +1 -0
  138. package/dist/wiring/command-host-state.d.ts +11 -2
  139. package/dist/wiring/dep-watcher-bridge.d.ts +8 -1
  140. package/dist/wiring/management-tools.d.ts +9 -1
  141. package/dist/wiring/session-command-handlers.d.ts +2 -1
  142. package/dist/worktree-command-host.d.ts +31 -0
  143. package/package.json +31 -31
  144. package/dist/chunk-WHOIR577.js +0 -1
  145. package/dist/short-circuit-flags-D6VAG47Y.js +0 -10
@@ -185,8 +185,14 @@ async function ensureHistoryDir(homeFn = defaultHomeDir, targetConfigPath) {
185
185
  }
186
186
  }
187
187
  async function readIndex(homeFn = defaultHomeDir, targetConfigPath) {
188
+ let raw;
189
+ try {
190
+ raw = await fs.readFile(historyIndexPath(homeFn, targetConfigPath), "utf8");
191
+ } catch (err) {
192
+ if (err.code !== "ENOENT") throw err;
193
+ return rebuildIndexFromEntries(homeFn, targetConfigPath);
194
+ }
188
195
  try {
189
- const raw = await fs.readFile(historyIndexPath(homeFn, targetConfigPath), "utf8");
190
196
  const parsed = JSON.parse(raw);
191
197
  if (parsed && typeof parsed === "object" && Array.isArray(parsed.entries)) {
192
198
  const entries = parsed.entries.filter(
@@ -194,10 +200,44 @@ async function readIndex(homeFn = defaultHomeDir, targetConfigPath) {
194
200
  );
195
201
  return { version: 1, entries };
196
202
  }
197
- return { version: 1, entries: [] };
198
203
  } catch {
199
- return { version: 1, entries: [] };
200
204
  }
205
+ return rebuildIndexFromEntries(homeFn, targetConfigPath);
206
+ }
207
+ async function rebuildIndexFromEntries(homeFn = defaultHomeDir, targetConfigPath) {
208
+ const dir = historyDir(homeFn, targetConfigPath);
209
+ let files;
210
+ try {
211
+ files = (await fs.readdir(dir)).filter((file) => file.endsWith(".json"));
212
+ } catch (err) {
213
+ if (err.code === "ENOENT") return { version: 1, entries: [] };
214
+ throw err;
215
+ }
216
+ const entries = [];
217
+ for (const file of files) {
218
+ const id = file.slice(0, -".json".length);
219
+ let raw;
220
+ try {
221
+ raw = await fs.readFile(path.join(dir, file), "utf8");
222
+ } catch (err) {
223
+ if (err.code === "ENOENT") continue;
224
+ entries.push({ id, timestamp: "", description: "" });
225
+ continue;
226
+ }
227
+ try {
228
+ const entry = JSON.parse(raw);
229
+ if (entry.id === id && typeof entry.timestamp === "string") {
230
+ entries.push({
231
+ id,
232
+ timestamp: entry.timestamp,
233
+ description: typeof entry.description === "string" ? entry.description : ""
234
+ });
235
+ }
236
+ } catch {
237
+ }
238
+ }
239
+ entries.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
240
+ return { version: 1, entries };
201
241
  }
202
242
  async function writeIndex(idx, homeFn = defaultHomeDir, targetConfigPath) {
203
243
  await ensureHistoryDir(homeFn, targetConfigPath);
@@ -297,6 +337,7 @@ async function appendHistory(oldCfg, newCfg, description, homeFn = defaultHomeDi
297
337
  }
298
338
  await withFileLock(historyIndexPath(homeFn, targetConfigPath), async () => {
299
339
  const idx = await readIndex(homeFn, targetConfigPath);
340
+ idx.entries = idx.entries.filter((e) => e.id !== id);
300
341
  idx.entries.unshift({ id, timestamp, description });
301
342
  await pruneHistoryEntries(idx, homeFn, targetConfigPath);
302
343
  await writeIndex(idx, homeFn, targetConfigPath);
@@ -398,4 +439,4 @@ export {
398
439
  restoreFromHistory,
399
440
  restoreLast
400
441
  };
401
- //# sourceMappingURL=chunk-4BX2YDTQ.js.map
442
+ //# sourceMappingURL=chunk-4JMAWKLA.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  mutateConfigProviders
3
- } from "./chunk-ZYACRPLN.js";
3
+ } from "./chunk-ULYAI7CP.js";
4
4
  import {
5
5
  activeProfileConfigPath
6
6
  } from "./chunk-YMXXOOFN.js";
@@ -51,4 +51,4 @@ export {
51
51
  installProviderPersisters,
52
52
  applyProviderOAuthRefresh2 as applyProviderOAuthRefresh
53
53
  };
54
- //# sourceMappingURL=chunk-TWSQTQKR.js.map
54
+ //# sourceMappingURL=chunk-4R6TVMYA.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  backupCurrent
3
- } from "./chunk-4BX2YDTQ.js";
3
+ } from "./chunk-4JMAWKLA.js";
4
4
 
5
5
  // src/wiring/external-plugins.ts
6
6
  import { isAbsolute, join, resolve } from "node:path";
@@ -356,11 +356,25 @@ import { homedir } from "node:os";
356
356
  import { join as join2 } from "node:path";
357
357
  import { updateJsonObjectFile } from "@wrongstack/core/utils";
358
358
  async function readConfig(file) {
359
+ let raw;
359
360
  try {
360
- return JSON.parse(await fs.readFile(file, "utf8"));
361
+ raw = await fs.readFile(file, "utf8");
362
+ } catch (error) {
363
+ if (error.code === "ENOENT") return {};
364
+ throw error;
365
+ }
366
+ let parsed;
367
+ try {
368
+ parsed = JSON.parse(raw.replace(/^\uFEFF/, ""));
361
369
  } catch {
362
- return {};
370
+ throw new Error(
371
+ `Profile config "${file}" is not valid JSON \u2014 fix or remove it before changing plugins`
372
+ );
363
373
  }
374
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
375
+ throw new Error(`Profile config "${file}" must contain a JSON object`);
376
+ }
377
+ return parsed;
364
378
  }
365
379
  function pluginName(p) {
366
380
  return typeof p === "string" ? p : p.name;
@@ -411,6 +425,7 @@ import { execFile } from "node:child_process";
411
425
  import * as fs2 from "node:fs/promises";
412
426
  import { join as join3 } from "node:path";
413
427
  import { buildChildEnv } from "@wrongstack/core/utils";
428
+ import { treeKill } from "@wrongstack/core/utils/tree-kill";
414
429
  import { resolveExecInvocation } from "@wrongstack/plugins/runtime";
415
430
  function detectPackageManager(args) {
416
431
  const override = args.find((a) => a.startsWith("--pm="));
@@ -467,7 +482,10 @@ function runPackageManagerInstall(pm, args, cwd) {
467
482
  });
468
483
  return;
469
484
  }
470
- execFile(
485
+ let settled = false;
486
+ let timedOut = false;
487
+ let timer;
488
+ const child = execFile(
471
489
  invocation.cmd,
472
490
  invocation.args,
473
491
  {
@@ -476,20 +494,29 @@ function runPackageManagerInstall(pm, args, cwd) {
476
494
  // untrusted package lifecycle scripts — with the full inherited
477
495
  // environment. Strip credentials via the shared child env.
478
496
  env: buildChildEnv(),
479
- timeout: 3e5,
480
497
  maxBuffer: 16 * 1024 * 1024,
481
498
  windowsHide: true,
482
499
  ...invocation.windowsVerbatimArguments ? { windowsVerbatimArguments: true } : {}
483
500
  },
484
501
  (err, stdout, stderr) => {
502
+ settled = true;
503
+ clearTimeout(timer);
485
504
  const code = err ? err.code ?? 1 : 0;
486
505
  resolvePromise({
487
- code: typeof code === "number" ? code : 1,
506
+ code: typeof code === "number" && !timedOut ? code : 1,
488
507
  stdout: typeof stdout === "string" ? stdout : "",
489
508
  stderr: typeof stderr === "string" ? stderr : ""
490
509
  });
491
510
  }
492
511
  );
512
+ if (!settled) {
513
+ timer = setTimeout(() => {
514
+ timedOut = true;
515
+ treeKill(child);
516
+ child.stdout?.destroy();
517
+ child.stderr?.destroy();
518
+ }, 3e5);
519
+ }
493
520
  });
494
521
  }
495
522
  async function installPluginPackage(spec, args, deps) {
@@ -1109,4 +1136,4 @@ export {
1109
1136
  PLUGIN_AUDIT_ENTRIES,
1110
1137
  runPluginManagementCommand
1111
1138
  };
1112
- //# sourceMappingURL=chunk-HHRYIDOW.js.map
1139
+ //# sourceMappingURL=chunk-ACW64W4M.js.map
@@ -17,7 +17,7 @@ import * as os2 from "node:os";
17
17
  import * as path from "node:path";
18
18
  import { resolveHqDataDir } from "@wrongstack/core/hq";
19
19
  import { isSafeSessionId as coreIsSafeSessionId } from "@wrongstack/core/utils";
20
- import { sanitizeApiError, scrubErrorDetail } from "@wrongstack/core/security";
20
+ import { sanitizeApiError } from "@wrongstack/core/security";
21
21
  var TRANSCRIPT_RING_MAX = 4e3;
22
22
  var MAX_TRANSCRIPT_SESSIONS = 400;
23
23
  var MAX_AGENT_RINGS = 800;
@@ -236,4 +236,4 @@ export {
236
236
  recordTimeseriesSignal,
237
237
  sanitizeApiError
238
238
  };
239
- //# sourceMappingURL=chunk-5EA6OTLJ.js.map
239
+ //# sourceMappingURL=chunk-AFOH6CHO.js.map
@@ -93,6 +93,7 @@ var helpCmd = async (_args, deps) => {
93
93
  ...section("Tools & permissions", [
94
94
  ["--yolo | --no-yolo", "Auto-approve on or off (gated destructive kinds still ask)"],
95
95
  ["--yolo-destructive", "Let YOLO run every destructive kind you may un-gate"],
96
+ ["--yolo-plus", "YOLO+: never ask for anything (explicit deny rules still refuse)"],
96
97
  ["--restricted", "Untrusted repo: no shell/network/MCP tools, stay in project, no YOLO"],
97
98
  ["--safe-mode", "Troubleshoot: no 3rd-party plugins, hooks, MCP, skills, overrides"],
98
99
  ["--only-tools <a,b,...>", "Expose only these tools (trailing * = prefix: mcp__gh__*)"],
@@ -156,4 +157,4 @@ export {
156
157
  versionCmd,
157
158
  helpCmd
158
159
  };
159
- //# sourceMappingURL=chunk-WHEYHDIE.js.map
160
+ //# sourceMappingURL=chunk-AKESWZH5.js.map
@@ -1,4 +1,7 @@
1
1
 
2
+ // src/services/sdd/project-context.ts
3
+ import { gatherProjectContext } from "@wrongstack/sdd";
4
+
2
5
  // src/services/sdd/state.ts
3
6
  import {
4
7
  SpecVersioning
@@ -85,7 +88,6 @@ function getSessionState(ctx) {
85
88
  }
86
89
 
87
90
  // src/services/sdd/project-context.ts
88
- import { gatherProjectContext } from "@wrongstack/sdd";
89
91
  function getActiveBuilder() {
90
92
  return sddState.getBuilder();
91
93
  }
@@ -375,17 +377,6 @@ function matchTaskNode(nodes, query) {
375
377
  const q = trimmed.toLowerCase();
376
378
  return nodes.find((n) => n.title.toLowerCase().includes(q) || q.includes(n.title.toLowerCase())) ?? null;
377
379
  }
378
- function markTaskCompleted(taskTitle) {
379
- const tracker = sddState.getTaskTracker();
380
- if (!tracker) return false;
381
- const nodes = tracker.getAllNodes({ status: ["pending", "in_progress"] });
382
- const match = nodes.find(
383
- (n) => n.title.toLowerCase().includes(taskTitle.toLowerCase()) || taskTitle.toLowerCase().includes(n.title.toLowerCase())
384
- );
385
- if (!match) return false;
386
- tracker.updateNodeStatus(match.id, "completed");
387
- return true;
388
- }
389
380
  function getTaskGraphId() {
390
381
  return sddState.getTaskGraphId();
391
382
  }
@@ -394,7 +385,6 @@ function getTaskTrackerExport() {
394
385
  }
395
386
 
396
387
  export {
397
- SDDState,
398
388
  sddState,
399
389
  getSessionState,
400
390
  getActiveBuilder,
@@ -402,7 +392,6 @@ export {
402
392
  getActiveSDDPhase,
403
393
  findSpec,
404
394
  gatherProjectContext,
405
- isExplanatoryText,
406
395
  trySaveSpecFromAIOutput,
407
396
  trySaveImplementationPlan,
408
397
  autoDetectTaskCompletion,
@@ -414,8 +403,7 @@ export {
414
403
  renderTaskListWithProgress,
415
404
  getCurrentExecutingContext,
416
405
  matchTaskNode,
417
- markTaskCompleted,
418
406
  getTaskGraphId,
419
407
  getTaskTrackerExport
420
408
  };
421
- //# sourceMappingURL=chunk-JHUJUIOH.js.map
409
+ //# sourceMappingURL=chunk-AT2A7RJZ.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  PLUGIN_AUDIT_ENTRIES,
6
6
  loadExternalPlugins
7
- } from "./chunk-HHRYIDOW.js";
7
+ } from "./chunk-ACW64W4M.js";
8
8
 
9
9
  // src/wiring/plugins.ts
10
10
  import { join } from "node:path";
@@ -306,4 +306,4 @@ export {
306
306
  BUILTIN_PLUGIN_NAME_HINTS,
307
307
  setupPlugins
308
308
  };
309
- //# sourceMappingURL=chunk-LKFKO4JW.js.map
309
+ //# sourceMappingURL=chunk-B6EHK772.js.map
@@ -7,4 +7,4 @@ import {
7
7
  export {
8
8
  buildWin32CmdShimInvocation
9
9
  };
10
- //# sourceMappingURL=chunk-U3SS4NRH.js.map
10
+ //# sourceMappingURL=chunk-BHXAKTBE.js.map
@@ -413,9 +413,9 @@ function pruneExpiredTombstones(state, now) {
413
413
  return changed;
414
414
  }
415
415
  async function readState(projectRoot) {
416
+ const raw = await readKanbanMetadata(projectRoot, SYNC_STATE_KEY);
417
+ if (raw === null) return { boards: {}, tombstones: {} };
416
418
  try {
417
- const raw = await readKanbanMetadata(projectRoot, SYNC_STATE_KEY);
418
- if (raw === null) return { boards: {}, tombstones: {} };
419
419
  const parsed = JSON.parse(raw);
420
420
  return { boards: parsed.boards ?? {}, tombstones: parsed.tombstones ?? {} };
421
421
  } catch {
@@ -686,4 +686,4 @@ function startCliHqConnection(options) {
686
686
  export {
687
687
  startCliHqConnection
688
688
  };
689
- //# sourceMappingURL=chunk-4UWCMBPG.js.map
689
+ //# sourceMappingURL=chunk-BJH44J7G.js.map
@@ -3,6 +3,7 @@
3
3
  var BOOLEAN_FLAGS = /* @__PURE__ */ new Set([
4
4
  "yolo",
5
5
  "no-yolo",
6
+ "yolo-plus",
6
7
  "yolo-destructive",
7
8
  "confirm-destructive",
8
9
  "force-all-yolo",
@@ -107,6 +108,9 @@ var BOOLEAN_FLAGS = /* @__PURE__ */ new Set([
107
108
  "all-models",
108
109
  "plan",
109
110
  "json",
111
+ // `wstack modeldiag eval [role] --quick`: as a value flag it swallowed the
112
+ // role (`eval --quick coder` ran a full all-category eval, not a quick one).
113
+ "quick",
110
114
  // Destructive-preview switch (`wstack chronicle prune --dry-run`). It is
111
115
  // boolean at every call site, and leaving it out let it consume the next
112
116
  // positional — on a command whose whole purpose is to NOT delete.
@@ -307,4 +311,4 @@ export {
307
311
  parseAuthFlags,
308
312
  parseSpawnFlags
309
313
  };
310
- //# sourceMappingURL=chunk-MPQCHBDJ.js.map
314
+ //# sourceMappingURL=chunk-CJSHS2K7.js.map
@@ -24,7 +24,7 @@ import {
24
24
  sanitizeApiError,
25
25
  truncateHqSummary,
26
26
  writeInvalidBody
27
- } from "./chunk-5EA6OTLJ.js";
27
+ } from "./chunk-AFOH6CHO.js";
28
28
  import {
29
29
  createHqIpAllowlist
30
30
  } from "./chunk-Q7E3BPDU.js";
@@ -49,6 +49,7 @@ import {
49
49
  watchHqAuthFile
50
50
  } from "@wrongstack/core/hq";
51
51
  import { createCompatibilityTrustBoundary } from "@wrongstack/core/security";
52
+ import { isPidAlive } from "@wrongstack/core/utils";
52
53
  import { WebSocket as WebSocket4, WebSocketServer } from "ws";
53
54
 
54
55
  // src/hq-recovery-html.ts
@@ -2890,7 +2891,7 @@ async function handleApiAgentMessages(req, res, match, agentMessages) {
2890
2891
  async function handleApiSystemUpdate(res) {
2891
2892
  const [{ checkForUpdate }, { detectUpdatePackageName }] = await Promise.all([
2892
2893
  import("./update-check-VLVT4IV2.js"),
2893
- import("./update-J5WHAFPE.js")
2894
+ import("./update-LHCWAWEZ.js")
2894
2895
  ]);
2895
2896
  const packageName = detectUpdatePackageName();
2896
2897
  const info = await checkForUpdate({ packageName });
@@ -5002,14 +5003,7 @@ async function startHqServerWithAuth(options, host, port, dataDir, firstRunAuth)
5002
5003
  const metadataPath = path8.join(projectDir, ".mailbox-server.json");
5003
5004
  const ownerPid = await fs4.readFile(metadataPath, "utf8").then((raw) => JSON.parse(raw).pid).catch(() => void 0);
5004
5005
  if (ownerPid === void 0) return;
5005
- let ownerAlive = false;
5006
- try {
5007
- process.kill(ownerPid, 0);
5008
- ownerAlive = true;
5009
- } catch {
5010
- ownerAlive = false;
5011
- }
5012
- if (!ownerAlive) {
5006
+ if (!isPidAlive(ownerPid)) {
5013
5007
  await fs4.rm(metadataPath, { force: true }).catch(() => {
5014
5008
  });
5015
5009
  return;
@@ -5367,4 +5361,4 @@ export {
5367
5361
  startHqServer,
5368
5362
  HqInsecureExposureError2 as HqInsecureExposureError
5369
5363
  };
5370
- //# sourceMappingURL=chunk-RQ4UBKYH.js.map
5364
+ //# sourceMappingURL=chunk-GF7LUWQS.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  loadConfigProviders,
3
3
  mutateConfigProviders
4
- } from "./chunk-ZYACRPLN.js";
4
+ } from "./chunk-ULYAI7CP.js";
5
5
 
6
6
  // src/provider-cloud-config.ts
7
7
  import {
@@ -34,4 +34,4 @@ async function providerCloudConfig(id, updates, configPath, vault) {
34
34
  export {
35
35
  providerCloudConfig
36
36
  };
37
- //# sourceMappingURL=chunk-TXAFIERF.js.map
37
+ //# sourceMappingURL=chunk-L5NWFP5R.js.map
@@ -1,48 +1,48 @@
1
1
 
2
2
  // src/subcommands/index.ts
3
3
  var loaders = {
4
- automation: async () => (await import("./automation-MCDFCIMV.js")).automationCmd,
4
+ automation: async () => (await import("./automation-3E3AUPBF.js")).automationCmd,
5
5
  sandbox: async () => (await import("./sandbox-TYGD6FI2.js")).sandboxCmd,
6
- acp: async () => (await import("./acp-EDGUWU7N.js")).acpCmd,
6
+ acp: async () => (await import("./acp-QLU7T5WX.js")).acpCmd,
7
7
  init: async () => (await import("./init-DRMMFG2G.js")).initCmd,
8
- auth: async () => (await import("./auth-SUHKFFO4.js")).authCmd,
9
- update: async () => (await import("./update-J5WHAFPE.js")).updateCmd,
8
+ auth: async () => (await import("./auth-AED7RW7D.js")).authCmd,
9
+ update: async () => (await import("./update-LHCWAWEZ.js")).updateCmd,
10
10
  remote: async () => (await import("./remote-C74BCNND.js")).remoteCmd,
11
- sessions: async () => (await import("./sessions-config-VE26SB56.js")).sessionsCmd,
12
- config: async () => (await import("./sessions-config-VE26SB56.js")).configCmd,
13
- "config-export": async () => (await import("./config-transfer-UE37X4B5.js")).configExportCmd,
14
- "config-import": async () => (await import("./config-transfer-UE37X4B5.js")).configImportCmd,
11
+ sessions: async () => (await import("./sessions-config-RQRQDW5Q.js")).sessionsCmd,
12
+ config: async () => (await import("./sessions-config-RQRQDW5Q.js")).configCmd,
13
+ "config-export": async () => (await import("./config-transfer-YPD7HYXH.js")).configExportCmd,
14
+ "config-import": async () => (await import("./config-transfer-YPD7HYXH.js")).configImportCmd,
15
15
  rewind: async () => (await import("./rewind-7AULJS7F.js")).rewindCmd,
16
16
  replay: async () => (await import("./replay-JJ2NOWD6.js")).replayCmd,
17
17
  audit: async () => (await import("./audit-KCBTHUQI.js")).auditCmd,
18
18
  tools: async () => (await import("./tools-skills-33AI6K6S.js")).toolsCmd,
19
19
  skills: async () => (await import("./tools-skills-33AI6K6S.js")).skillsCmd,
20
- "skill-suggest": async () => (await import("./skill-suggest-L2EVWB6R.js")).skillSuggestCmd,
21
- typesafe: async () => (await import("./typesafe-NHC322W5.js")).typesafeCmd,
22
- providers: async () => (await import("./providers-models-O75MKLN2.js")).providersCmd,
23
- models: async () => (await import("./providers-models-O75MKLN2.js")).modelsCmd,
20
+ "skill-suggest": async () => (await import("./skill-suggest-THANK3LV.js")).skillSuggestCmd,
21
+ typesafe: async () => (await import("./typesafe-KW2XHOG3.js")).typesafeCmd,
22
+ providers: async () => (await import("./providers-models-S3S6VXME.js")).providersCmd,
23
+ models: async () => (await import("./providers-models-S3S6VXME.js")).modelsCmd,
24
24
  mcp: async () => (await import("./mcp-LBS45HWZ.js")).mcpCmd,
25
- plugin: async () => (await import("./plugin-usage-3TZGROK7.js")).pluginCmd,
26
- plugins: async () => (await import("./plugin-usage-3TZGROK7.js")).pluginCmd,
25
+ plugin: async () => (await import("./plugin-usage-EM752WHG.js")).pluginCmd,
26
+ plugins: async () => (await import("./plugin-usage-EM752WHG.js")).pluginCmd,
27
27
  diag: async () => (await import("./diag-doctor-BIZAFIAT.js")).diagCmd,
28
28
  doctor: async () => (await import("./diag-doctor-BIZAFIAT.js")).doctorCmd,
29
29
  "proxy-status": async () => (await import("./diag-doctor-BIZAFIAT.js")).proxyCmd,
30
30
  export: async () => (await import("./export-VVRIOWFV.js")).exportCmd,
31
- usage: async () => (await import("./plugin-usage-3TZGROK7.js")).usageCmd,
32
- version: async () => (await import("./version-help-ATOKGMTK.js")).versionCmd,
33
- help: async () => (await import("./version-help-ATOKGMTK.js")).helpCmd,
31
+ usage: async () => (await import("./plugin-usage-EM752WHG.js")).usageCmd,
32
+ version: async () => (await import("./version-help-JQGRPDJW.js")).versionCmd,
33
+ help: async () => (await import("./version-help-JQGRPDJW.js")).helpCmd,
34
34
  projects: async () => (await import("./projects-T4CZCA25.js")).projectsCmd,
35
- modeldiag: async () => (await import("./modeldiag-NEPTLFZW.js")).modeldiagCmd,
35
+ modeldiag: async () => (await import("./modeldiag-F3LUF4VJ.js")).modeldiagCmd,
36
36
  quick: async () => (await import("./quick-CNB4Z3HS.js")).quickCmd,
37
37
  bench: async () => (await import("./bench-MMZHFHDL.js")).benchCmd,
38
38
  chronicle: async () => (await import("./chronicle-PBJS7BN6.js")).chronicleCmd,
39
- hq: async () => (await import("./hq-KBFDKTDD.js")).hqCmd,
40
- mailbox: async () => (await import("./mailbox-serve-S536N66F.js")).mailboxServeCmd,
39
+ hq: async () => (await import("./hq-BBLGEEUH.js")).hqCmd,
40
+ mailbox: async () => (await import("./mailbox-serve-DRWJVMYU.js")).mailboxServeCmd,
41
41
  permissions: async () => (await import("./permissions-PL27UHYD.js")).permissionsCmd,
42
42
  project: async () => (await import("./project-AOQI5XTK.js")).projectCmd,
43
- sage: async () => (await import("./sage-FFKUOCQL.js")).sageCmd,
43
+ sage: async () => (await import("./sage-BMRDJCDI.js")).sageCmd,
44
44
  governance: async () => (await import("./governance-RYSHV675.js")).governanceCmd,
45
- "import-claude-code": async () => (await import("./import-claude-code-AYG24RG2.js")).importClaudeCodeCmd
45
+ "import-claude-code": async () => (await import("./import-claude-code-GHIS2F7Y.js")).importClaudeCodeCmd
46
46
  };
47
47
  var subcommands = Object.fromEntries(
48
48
  Object.entries(loaders).map(
@@ -58,4 +58,4 @@ export {
58
58
  subcommands,
59
59
  subcommandNames
60
60
  };
61
- //# sourceMappingURL=chunk-24C6VVLM.js.map
61
+ //# sourceMappingURL=chunk-LPGZ3NUF.js.map
@@ -48,4 +48,4 @@ export {
48
48
  extractBehaviorSettings,
49
49
  mergeBehaviorSettings
50
50
  };
51
- //# sourceMappingURL=chunk-UQUYBDMG.js.map
51
+ //# sourceMappingURL=chunk-M4G5FO7F.js.map