@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
@@ -1,20 +1,19 @@
1
1
  import {
2
2
  createHqCommandDispatcher
3
- } from "./chunk-7YLN7YUA.js";
4
- import {
5
- WEBUI_SESSION_CHILD_CAPABILITIES
6
- } from "./chunk-GPPRNAKW.js";
3
+ } from "./chunk-IMWXXF4J.js";
7
4
  import {
8
5
  createKanbanRunMirror
9
6
  } from "./chunk-VCYZ3WZV.js";
7
+ import {
8
+ WEBUI_SESSION_CHILD_CAPABILITIES
9
+ } from "./chunk-GPPRNAKW.js";
10
10
  import {
11
11
  startCliHqConnection
12
- } from "./chunk-XYKYXFEE.js";
12
+ } from "./chunk-TE3Q32JP.js";
13
13
  import {
14
14
  loadConfigProviders,
15
15
  mutateConfigProviders
16
- } from "./chunk-XPX432BZ.js";
17
- import "./chunk-7OCVIDC7.js";
16
+ } from "./chunk-DR2OXU46.js";
18
17
 
19
18
  // src/webui-server.ts
20
19
  import * as path7 from "node:path";
@@ -41,6 +40,7 @@ import {
41
40
  resolvePendingConfirmsForSession,
42
41
  scheduleOwnerlessEmptySessionCleanup,
43
42
  sendSerialized,
43
+ stampDispatchSession,
44
44
  startTerminalDashboard,
45
45
  startWebUILiveStatusLogger,
46
46
  toSessionHistoryEntries
@@ -48,6 +48,7 @@ import {
48
48
  import { WebSocketServer } from "ws";
49
49
 
50
50
  // src/webui-server/client-registration.ts
51
+ import { mailboxSessionTag } from "@wrongstack/core/coordination";
51
52
  import { createWebuiClientPresence } from "@wrongstack/webui-server";
52
53
  function createWebuiClientRegistration(deps) {
53
54
  const control = deps.hqControl;
@@ -57,6 +58,9 @@ function createWebuiClientRegistration(deps) {
57
58
  events: deps.events,
58
59
  hqSessionId: deps.hqSessionId,
59
60
  getSessionId: deps.getSessionId,
61
+ ...deps.listSessions ? { listSessions: deps.listSessions } : {},
62
+ ...deps.isSessionOwnedElsewhere ? { isSessionOwnedElsewhere: deps.isSessionOwnedElsewhere } : {},
63
+ ...deps.getSessionWriter ? { getSessionWriter: deps.getSessionWriter } : {},
60
64
  startHqConnection: (options) => startCliHqConnection({
61
65
  ...options,
62
66
  capabilities: options.capabilities
@@ -66,7 +70,17 @@ function createWebuiClientRegistration(deps) {
66
70
  steerMailbox: mailbox,
67
71
  interruptLeader: control.interruptLeader,
68
72
  allowRunCommand: control.allowRunCommand,
69
- sessionTag: deps.getSessionId,
73
+ // The session HQ actually SHOWS for this client — the boot
74
+ // session the telemetry bridge publishes under and the only one
75
+ // `interruptLeader` speaks for. `getSessionId` follows whichever
76
+ // browser tab is in front, which is a different session HQ has
77
+ // no view of and cannot control.
78
+ sessionTag: () => mailboxSessionTag(deps.hqSessionId),
79
+ // The session HQ falls back to when a command names none — the
80
+ // boot tab. A command that DOES name one is honoured (and
81
+ // refused when this host no longer has it) via `ownsSession`.
82
+ sessionId: () => deps.hqSessionId,
83
+ ...control.ownsSession ? { ownsSession: control.ownsSession } : {},
70
84
  ...control.spawnAgent ? { spawnAgent: control.spawnAgent } : {},
71
85
  ...control.killFleet ? { killFleet: control.killFleet } : {},
72
86
  ...control.terminateAgent ? { terminateAgent: control.terminateAgent } : {}
@@ -1175,7 +1189,7 @@ function createSessionStartPayloadBuilder(deps) {
1175
1189
  }
1176
1190
 
1177
1191
  // src/webui-server/setup-events.ts
1178
- import { mailboxSessionTag } from "@wrongstack/core/coordination";
1192
+ import { mailboxSessionTag as mailboxSessionTag2 } from "@wrongstack/core/coordination";
1179
1193
  import {
1180
1194
  createEternalSubscription,
1181
1195
  setupEvents as setupCanonicalEvents
@@ -1246,7 +1260,7 @@ function createSetupEvents(deps) {
1246
1260
  type: "subagent.event",
1247
1261
  payload: deps.sessionPayload({
1248
1262
  kind: "leader_updated",
1249
- subagentId: `leader@${mailboxSessionTag(deps.currentSessionId())}`,
1263
+ subagentId: `leader@${mailboxSessionTag2(deps.currentSessionId())}`,
1250
1264
  isLeader: true,
1251
1265
  name: "Leader",
1252
1266
  status: "running"
@@ -1391,6 +1405,23 @@ async function runWebUI(opts) {
1391
1405
  events: opts.events,
1392
1406
  hqSessionId: opts.session.id,
1393
1407
  getSessionId: () => opts.agent.ctx.session?.id ?? opts.session.id,
1408
+ // One HQ session per open tab. The set is the same one the terminal
1409
+ // panel lists: every session a connected browser is displaying.
1410
+ listSessions: () => {
1411
+ const ids = /* @__PURE__ */ new Set();
1412
+ for (const client of clients.values()) {
1413
+ if (client.sessionId) ids.add(client.sessionId);
1414
+ for (const id of client.sessionIds ?? []) ids.add(id);
1415
+ }
1416
+ return [...ids];
1417
+ },
1418
+ // `cli-main` already runs a tracker and a bridge for the boot session.
1419
+ // Announcing it here too would put two trackers on one bus flushing the
1420
+ // same agent list.
1421
+ isSessionOwnedElsewhere: (sessionId) => sessionId === opts.session.id,
1422
+ // The tab's own journal, so HQ takes its turns from the write path
1423
+ // instead of tailing the file.
1424
+ getSessionWriter: (sessionId) => sessionAgentsRef?.peek(sessionId)?.ctx.session,
1394
1425
  hqControl: {
1395
1426
  // HQ speaks for the LEADER — the boot session, the one it registered
1396
1427
  // itself under (`hqSessionId`) — not for whatever else the browser
@@ -1399,8 +1430,12 @@ async function runWebUI(opts) {
1399
1430
  // the three other tabs' in-flight runs. Deleting the entries was
1400
1431
  // wrong on its own terms too: the run's own `end()` owns removal, and
1401
1432
  // clearing early makes `isRunActive` lie to every tab still running.
1402
- interruptLeader: () => {
1403
- const leaderId = opts.session.id;
1433
+ // Every open tab is its own session with its own abort controller, so
1434
+ // the command's session is the one that gets stopped. Falling back to
1435
+ // the boot session keeps a dashboard that sends no session — every one
1436
+ // before this existed — behaving exactly as before.
1437
+ interruptLeader: (sessionId) => {
1438
+ const leaderId = sessionId ?? opts.session.id;
1404
1439
  const controller = abortControllers.get(leaderId);
1405
1440
  if (!controller) return false;
1406
1441
  controller.abort();
@@ -1410,7 +1445,11 @@ async function runWebUI(opts) {
1410
1445
  }
1411
1446
  return true;
1412
1447
  },
1413
- allowRunCommand: () => opts.hqAllowExec === true
1448
+ allowRunCommand: () => opts.hqAllowExec === true,
1449
+ // A command naming a tab this process no longer holds is refused, not
1450
+ // redirected onto the boot session: the operator picked a terminal,
1451
+ // and steering a different one is worse than not steering at all.
1452
+ ownsSession: (sessionId) => sessionId === opts.session.id || sessionAgentsRef?.has(sessionId) === true
1414
1453
  }
1415
1454
  });
1416
1455
  registerWebuiClient();
@@ -1890,7 +1929,7 @@ async function runWebUI(opts) {
1890
1929
  registerWebuiSignalHandlers(signalShutdown);
1891
1930
  });
1892
1931
  function send(ws, msg) {
1893
- sendSerialized(ws, JSON.stringify(msg));
1932
+ sendSerialized(ws, JSON.stringify(stampDispatchSession(msg)));
1894
1933
  }
1895
1934
  function broadcast(msg, targetSessionId) {
1896
1935
  const data = JSON.stringify(msg);
@@ -1912,4 +1951,4 @@ async function runWebUI(opts) {
1912
1951
  export {
1913
1952
  runWebUI
1914
1953
  };
1915
- //# sourceMappingURL=webui-server-F7MSRHOF.js.map
1954
+ //# sourceMappingURL=webui-server-5R35BHWZ.js.map
@@ -67,6 +67,8 @@ interface BrainOrchestrationDeps {
67
67
  interface BrainOrchestrationResult {
68
68
  brain: ObservableBrainArbiter;
69
69
  brainLog: AnyObj[];
70
+ /** Session-lifetime per-tier decision tally for `/brain stats`. */
71
+ brainTierStats: () => import('@wrongstack/core/coordination').BrainTierStats;
70
72
  brainSettings: BrainRuntimeSettings;
71
73
  /** Live-editable Brain config owner (apply = live + persist-to-global). */
72
74
  brainRuntime: BrainRuntime;
@@ -54,6 +54,7 @@ export declare function runCliExecution(params: {
54
54
  resolvedProvider: X['provider']['resolvedProvider'];
55
55
  logger: Logger;
56
56
  switchProviderAndModel: X['provider']['switchProviderAndModel'];
57
+ reloadProviderConfig: () => Promise<void>;
57
58
  applyMaxContext: NonNullable<X['provider']['onModelContextResolved']>;
58
59
  renderer: X['ui']['renderer'];
59
60
  reader: X['ui']['reader'];
@@ -86,6 +87,9 @@ export declare function runCliExecution(params: {
86
87
  statuslineLines?: RC['statuslineLines'];
87
88
  setStatuslineLines?: NonNullable<RC['setStatuslineLines']>;
88
89
  saveStatuslineLines?: NonNullable<RC['saveStatuslineLines']>;
90
+ statuslineDensities?: RC['statuslineDensities'];
91
+ setStatuslineDensities?: NonNullable<RC['setStatuslineDensities']>;
92
+ saveStatuslineDensities?: NonNullable<RC['saveStatuslineDensities']>;
89
93
  setYoloMode: NonNullable<RC['getYolo']>;
90
94
  autonomyMode: ReturnType<RC['getAutonomy']>;
91
95
  setAutonomyMode: NonNullable<RC['setAutonomy']>;
@@ -62,6 +62,7 @@ export declare function setupCliSlashCommands(params: {
62
62
  brainSettings: B['brainSettings'];
63
63
  brainRuntime: B['brainRuntime'];
64
64
  initialBrainLog: ReturnType<NonNullable<B['getBrainLog']>>;
65
+ brainTierStats: NonNullable<B['brainTierStats']>;
65
66
  coordinatorController: B['coordinatorController'];
66
67
  statusTracker: B['statusTracker'];
67
68
  shadowController: B['shadowController'];
@@ -1,6 +1,7 @@
1
1
  /** Mutable command-host state created after the runtime fleet is available. */
2
2
  import { type BrainArbiter, type Director } from '@wrongstack/core/coordination';
3
3
  import type { EventBus } from '@wrongstack/core/kernel';
4
+ import type { StatuslineDensities, StatuslineLines } from '@wrongstack/core/statusline';
4
5
  import { type Config, type SessionWriter } from '@wrongstack/core/types';
5
6
  import type { WstackPaths } from '@wrongstack/core/utils';
6
7
  import { SddRunRegistry } from '@wrongstack/sdd';
@@ -8,7 +9,6 @@ import type { HqCommandController } from '../hq-command-controller.js';
8
9
  import type { ReadlineInputReader } from '../input-reader.js';
9
10
  import type { MultiAgentHost } from '../multi-agent.js';
10
11
  import type { TerminalRenderer } from '../renderer.js';
11
- import type { StatuslineLines } from '@wrongstack/core/statusline';
12
12
  interface CommandHostStateInput {
13
13
  getConfig: () => Config;
14
14
  setConfig: (config: Config) => void;
@@ -44,10 +44,10 @@ export declare function setupCommandHostState(input: CommandHostStateInput): Pro
44
44
  interruptController: import("./controllers.js").InterruptController;
45
45
  enhanceController: import("./controllers.js").EnhanceController;
46
46
  statuslineConfigDeps: import("./controllers.js").StatuslineConfigDeps;
47
- statuslineHiddenItems: ("auto_proceed" | "autonomy" | "brain" | "breaker" | "cache" | "context" | "cost" | "debug_stream" | "dropped_tools" | "elapsed" | "enhance" | "eternal_stage" | "fleet" | "fleet_agents" | "git" | "goal" | "hint" | "index" | "mailbox" | "memory_context" | "mode" | "model" | "next_steps" | "plan" | "processes" | "project" | "prompt_variant" | "queue" | "sessions" | "side_effects" | "state" | "tasks" | "theme" | "todos" | "token_saving" | "tokens" | "tools" | "version" | "working_dir" | "yolo")[];
48
- getCurrentHiddenItems: () => ("auto_proceed" | "autonomy" | "brain" | "breaker" | "cache" | "context" | "cost" | "debug_stream" | "dropped_tools" | "elapsed" | "enhance" | "eternal_stage" | "fleet" | "fleet_agents" | "git" | "goal" | "hint" | "index" | "mailbox" | "memory_context" | "mode" | "model" | "next_steps" | "plan" | "processes" | "project" | "prompt_variant" | "queue" | "sessions" | "side_effects" | "state" | "tasks" | "theme" | "todos" | "token_saving" | "tokens" | "tools" | "version" | "working_dir" | "yolo")[];
49
- setStatuslineHiddenItems: (items: ("auto_proceed" | "autonomy" | "brain" | "breaker" | "cache" | "context" | "cost" | "debug_stream" | "dropped_tools" | "elapsed" | "enhance" | "eternal_stage" | "fleet" | "fleet_agents" | "git" | "goal" | "hint" | "index" | "mailbox" | "memory_context" | "mode" | "model" | "next_steps" | "plan" | "processes" | "project" | "prompt_variant" | "queue" | "sessions" | "side_effects" | "state" | "tasks" | "theme" | "todos" | "token_saving" | "tokens" | "tools" | "version" | "working_dir" | "yolo")[]) => void;
50
- saveStatuslineHiddenItems: (items: ("auto_proceed" | "autonomy" | "brain" | "breaker" | "cache" | "context" | "cost" | "debug_stream" | "dropped_tools" | "elapsed" | "enhance" | "eternal_stage" | "fleet" | "fleet_agents" | "git" | "goal" | "hint" | "index" | "mailbox" | "memory_context" | "mode" | "model" | "next_steps" | "plan" | "processes" | "project" | "prompt_variant" | "queue" | "sessions" | "side_effects" | "state" | "tasks" | "theme" | "todos" | "token_saving" | "tokens" | "tools" | "version" | "working_dir" | "yolo")[]) => Promise<void>;
47
+ statuslineHiddenItems: import("@wrongstack/core/statusline").StatuslineItem[];
48
+ getCurrentHiddenItems: () => import("@wrongstack/core/statusline").StatuslineItem[];
49
+ setStatuslineHiddenItems: (items: import("@wrongstack/core/statusline").StatuslineItem[]) => void;
50
+ saveStatuslineHiddenItems: (items: import("@wrongstack/core/statusline").StatuslineItem[]) => Promise<void>;
51
51
  statuslineLines: {
52
52
  auto_proceed?: import("@wrongstack/core/statusline").StatuslineLine;
53
53
  autonomy?: import("@wrongstack/core/statusline").StatuslineLine;
@@ -93,6 +93,51 @@ export declare function setupCommandHostState(input: CommandHostStateInput): Pro
93
93
  getCurrentStatuslineLines: () => Partial<Record<import("@wrongstack/core/statusline").StatuslineItem, import("@wrongstack/core/statusline").StatuslineLine>>;
94
94
  setStatuslineLines: (next: StatuslineLines) => void;
95
95
  saveStatuslineLines: (next: StatuslineLines) => Promise<void>;
96
+ statuslineDensities: {
97
+ auto_proceed?: import("@wrongstack/core/statusline").StatuslineDensity;
98
+ autonomy?: import("@wrongstack/core/statusline").StatuslineDensity;
99
+ brain?: import("@wrongstack/core/statusline").StatuslineDensity;
100
+ breaker?: import("@wrongstack/core/statusline").StatuslineDensity;
101
+ cache?: import("@wrongstack/core/statusline").StatuslineDensity;
102
+ context?: import("@wrongstack/core/statusline").StatuslineDensity;
103
+ cost?: import("@wrongstack/core/statusline").StatuslineDensity;
104
+ debug_stream?: import("@wrongstack/core/statusline").StatuslineDensity;
105
+ dropped_tools?: import("@wrongstack/core/statusline").StatuslineDensity;
106
+ elapsed?: import("@wrongstack/core/statusline").StatuslineDensity;
107
+ enhance?: import("@wrongstack/core/statusline").StatuslineDensity;
108
+ eternal_stage?: import("@wrongstack/core/statusline").StatuslineDensity;
109
+ fleet?: import("@wrongstack/core/statusline").StatuslineDensity;
110
+ fleet_agents?: import("@wrongstack/core/statusline").StatuslineDensity;
111
+ git?: import("@wrongstack/core/statusline").StatuslineDensity;
112
+ goal?: import("@wrongstack/core/statusline").StatuslineDensity;
113
+ hint?: import("@wrongstack/core/statusline").StatuslineDensity;
114
+ index?: import("@wrongstack/core/statusline").StatuslineDensity;
115
+ mailbox?: import("@wrongstack/core/statusline").StatuslineDensity;
116
+ memory_context?: import("@wrongstack/core/statusline").StatuslineDensity;
117
+ mode?: import("@wrongstack/core/statusline").StatuslineDensity;
118
+ model?: import("@wrongstack/core/statusline").StatuslineDensity;
119
+ next_steps?: import("@wrongstack/core/statusline").StatuslineDensity;
120
+ plan?: import("@wrongstack/core/statusline").StatuslineDensity;
121
+ processes?: import("@wrongstack/core/statusline").StatuslineDensity;
122
+ project?: import("@wrongstack/core/statusline").StatuslineDensity;
123
+ prompt_variant?: import("@wrongstack/core/statusline").StatuslineDensity;
124
+ queue?: import("@wrongstack/core/statusline").StatuslineDensity;
125
+ sessions?: import("@wrongstack/core/statusline").StatuslineDensity;
126
+ side_effects?: import("@wrongstack/core/statusline").StatuslineDensity;
127
+ state?: import("@wrongstack/core/statusline").StatuslineDensity;
128
+ tasks?: import("@wrongstack/core/statusline").StatuslineDensity;
129
+ theme?: import("@wrongstack/core/statusline").StatuslineDensity;
130
+ todos?: import("@wrongstack/core/statusline").StatuslineDensity;
131
+ token_saving?: import("@wrongstack/core/statusline").StatuslineDensity;
132
+ tokens?: import("@wrongstack/core/statusline").StatuslineDensity;
133
+ tools?: import("@wrongstack/core/statusline").StatuslineDensity;
134
+ version?: import("@wrongstack/core/statusline").StatuslineDensity;
135
+ working_dir?: import("@wrongstack/core/statusline").StatuslineDensity;
136
+ yolo?: import("@wrongstack/core/statusline").StatuslineDensity;
137
+ };
138
+ getCurrentStatuslineDensities: () => Partial<Record<import("@wrongstack/core/statusline").StatuslineItem, import("@wrongstack/core/statusline").StatuslineDensity>>;
139
+ setStatuslineDensities: (next: StatuslineDensities) => void;
140
+ saveStatuslineDensities: (next: StatuslineDensities) => Promise<void>;
96
141
  agentsMonitorController: import("./controllers.js").AgentsMonitorController;
97
142
  onPanelOpen: {
98
143
  current: ((action: string) => boolean) | null;
@@ -25,6 +25,15 @@
25
25
  * First-party/built-in plugins never enter this module.
26
26
  */
27
27
  import type { Config, Logger, Plugin } from '@wrongstack/core/types';
28
+ /** Policy for the external-plugin trust gate. See FeaturesConfig.pluginsTrust. */
29
+ export type ExternalPluginTrustMode = 'off' | 'required' | 'tofu' | 'advisory';
30
+ /**
31
+ * Resolve the trust mode from config. `true`, `undefined`, and `'tofu'` all
32
+ * map to the documented default (trust on first use); `false` skips the
33
+ * gate; unknown strings fall back to the default rather than inventing
34
+ * behavior.
35
+ */
36
+ export declare function resolveExternalPluginTrustMode(raw: boolean | string | undefined): ExternalPluginTrustMode;
28
37
  /** Resolve a `file:` URL / absolute / relative path to an absolute fs path. */
29
38
  export declare function normalizeConfigPath(raw: string, projectRoot: string): string;
30
39
  /**
@@ -62,6 +62,8 @@ interface ProviderRuntimeResult {
62
62
  refreshMaxContextFor: (providerId: string, modelId: string) => Promise<void>;
63
63
  refreshRuntimeModelStateFor: (providerId: string, modelId: string) => Promise<void>;
64
64
  switchProviderAndModel: (providerId: string, modelId: string) => Promise<string | null>;
65
+ /** Immediately apply the same merged snapshot used by the file watcher. */
66
+ reloadProviderConfig: () => Promise<void>;
65
67
  }
66
68
  /**
67
69
  * Wire runtime provider-config helpers, fallback model extension,
@@ -22,6 +22,9 @@ interface RuntimeControllerDepsInput {
22
22
  statuslineLines?: ControllerDeps['statuslineLines'];
23
23
  setStatuslineLines?: ControllerDeps['setStatuslineLines'];
24
24
  saveStatuslineLines?: ControllerDeps['saveStatuslineLines'];
25
+ statuslineDensities?: ControllerDeps['statuslineDensities'];
26
+ setStatuslineDensities?: ControllerDeps['setStatuslineDensities'];
27
+ saveStatuslineDensities?: ControllerDeps['saveStatuslineDensities'];
25
28
  getYolo: NonNullable<ControllerDeps['getYolo']>;
26
29
  onYolo: NonNullable<ControllerDeps['onYolo']>;
27
30
  getAutonomy: () => AutonomyMode;
@@ -1,10 +1,22 @@
1
1
  import type { MemoryPort } from '@wrongstack/core/types';
2
2
  import { VectorMemoryStore } from '@wrongstack/vector-memory';
3
+ /** Subset of `Config['Sage']['vector']` this phase reads. */
4
+ export interface VectorMemoryTuning {
5
+ enabled?: boolean | undefined;
6
+ weight?: number | undefined;
7
+ threshold?: number | undefined;
8
+ vectorOnlyThreshold?: number | undefined;
9
+ maxMaterializations?: number | undefined;
10
+ }
11
+ /** Weight of the semantic channel in the RRF blend when config says nothing. */
12
+ export declare const DEFAULT_VECTOR_WEIGHT = 0.3;
3
13
  interface VectorMemoryArgs {
4
14
  projectRoot: string;
5
15
  flags: {
6
16
  'vector-sync'?: unknown;
7
17
  };
18
+ /** `config.Sage?.vector`. Omitted = every default applies. */
19
+ tuning?: VectorMemoryTuning | undefined;
8
20
  logger: {
9
21
  warn: (message: string) => void;
10
22
  info: (message: string) => void;
@@ -14,10 +14,13 @@
14
14
  * - Registered in `bindSystemPromptBuilder`'s contributors array, after
15
15
  * the ETERNAL AUTONOMY contributor (registration order is preserved).
16
16
  */
17
- import type { SystemPromptContributor } from '@wrongstack/core/types';
17
+ import type { SystemPromptContributor, TokenSavingTier } from '@wrongstack/core/types';
18
+ export interface WrongTracePromptContributorOptions {
19
+ tokenSavingMode?: TokenSavingTier | boolean | undefined;
20
+ }
18
21
  /**
19
22
  * Build the contributor. Fresh instance per `bindSystemPromptBuilder` call
20
23
  * (i.e. per process); cheap since the gate singleton is process-shared.
21
24
  */
22
- export declare function createWrongTracePromptContributor(): SystemPromptContributor;
25
+ export declare function createWrongTracePromptContributor(options?: WrongTracePromptContributorOptions): SystemPromptContributor;
23
26
  //# sourceMappingURL=wrongtrace-prompt-contributor.d.ts.map
@@ -8,7 +8,6 @@ import {
8
8
  resetGateDecisions,
9
9
  snapshotGateDecisions
10
10
  } from "./chunk-D3K4NYQL.js";
11
- import "./chunk-7OCVIDC7.js";
12
11
  export {
13
12
  countersFilePath,
14
13
  createWrongTraceGateCounter,
@@ -19,4 +18,4 @@ export {
19
18
  resetGateDecisions,
20
19
  snapshotGateDecisions
21
20
  };
22
- //# sourceMappingURL=wrongtrace-gate-counters-GSVY372D.js.map
21
+ //# sourceMappingURL=wrongtrace-gate-counters-7C2EAAZL.js.map
@@ -1,7 +1,6 @@
1
1
  import {
2
2
  getWrongTrace
3
3
  } from "./chunk-ERX4BLKP.js";
4
- import "./chunk-7OCVIDC7.js";
5
4
 
6
5
  // src/wiring/wrongtrace-telemetry.ts
7
6
  function buildWrongTraceTelemetryReport(input) {
@@ -31,4 +30,4 @@ export {
31
30
  buildWrongTraceTelemetryReport,
32
31
  reportWrongTraceSessionTelemetry
33
32
  };
34
- //# sourceMappingURL=wrongtrace-telemetry-KBBM5NLQ.js.map
33
+ //# sourceMappingURL=wrongtrace-telemetry-3ASFKOZO.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrongstack/cli",
3
- "version": "0.319.1",
3
+ "version": "1.0.1",
4
4
  "license": "MIT",
5
5
  "description": "WrongStack CLI — terminal AI coding agent with provider catalog from models.dev. Provides `wrongstack` and `wstack` binaries.",
6
6
  "keywords": [
@@ -41,36 +41,36 @@
41
41
  "data"
42
42
  ],
43
43
  "dependencies": {
44
- "@wrongstack/acp": "0.319.1",
45
- "@wrongstack/bench": "0.319.1",
46
- "@wrongstack/core": "0.319.1",
47
- "@wrongstack/primitives": "0.319.1",
48
- "@wrongstack/kanban": "0.319.1",
49
- "@wrongstack/mcp": "0.319.1",
50
- "@wrongstack/persistence": "0.319.1",
51
- "@wrongstack/plug-lsp": "0.319.1",
52
- "@wrongstack/plugins": "0.319.1",
53
- "@wrongstack/providers": "0.319.1",
54
- "@wrongstack/requirement-intake": "0.319.1",
55
- "@wrongstack/runtime": "0.319.1",
56
- "@wrongstack/sage": "0.319.1",
57
- "@wrongstack/sdd": "0.319.1",
58
- "@wrongstack/security-scanner": "0.319.1",
59
- "@wrongstack/simpleui": "0.319.1",
60
- "@wrongstack/techstack": "0.319.1",
61
- "@wrongstack/telegram": "0.319.1",
62
- "@wrongstack/tools": "0.319.1",
63
- "@wrongstack/tui": "0.319.1",
64
- "@wrongstack/vector-memory": "0.319.1",
65
- "@wrongstack/webui": "0.319.1",
66
- "@wrongstack/webui-hq": "0.319.1",
67
- "@wrongstack/webui-protocol": "0.319.1",
68
- "@wrongstack/wrongtrace": "0.319.1",
69
- "@wrongstack/webui-server": "0.319.1",
44
+ "@wrongstack/acp": "1.0.1",
45
+ "@wrongstack/bench": "1.0.1",
46
+ "@wrongstack/core": "1.0.1",
47
+ "@wrongstack/primitives": "1.0.1",
48
+ "@wrongstack/kanban": "1.0.1",
49
+ "@wrongstack/mcp": "1.0.1",
50
+ "@wrongstack/persistence": "1.0.1",
51
+ "@wrongstack/plug-lsp": "1.0.1",
52
+ "@wrongstack/plugins": "1.0.1",
53
+ "@wrongstack/providers": "1.0.1",
54
+ "@wrongstack/requirement-intake": "1.0.1",
55
+ "@wrongstack/runtime": "1.0.1",
56
+ "@wrongstack/sage": "1.0.1",
57
+ "@wrongstack/sdd": "1.0.1",
58
+ "@wrongstack/security-scanner": "1.0.1",
59
+ "@wrongstack/simpleui": "1.0.1",
60
+ "@wrongstack/techstack": "1.0.1",
61
+ "@wrongstack/telegram": "1.0.1",
62
+ "@wrongstack/tools": "1.0.1",
63
+ "@wrongstack/tui": "1.0.1",
64
+ "@wrongstack/vector-memory": "1.0.0",
65
+ "@wrongstack/webui": "1.0.1",
66
+ "@wrongstack/webui-hq": "1.0.1",
67
+ "@wrongstack/webui-protocol": "1.0.1",
68
+ "@wrongstack/wrongtrace": "1.0.1",
69
+ "@wrongstack/webui-server": "1.0.1",
70
70
  "ws": "^8.21.3"
71
71
  },
72
72
  "optionalDependencies": {
73
- "@wrongstack/desktop": "0.319.1"
73
+ "@wrongstack/desktop": "1.0.1"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@types/node": "^26.2.0",
@@ -1,11 +0,0 @@
1
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
- }) : x)(function(x) {
4
- if (typeof require !== "undefined") return require.apply(this, arguments);
5
- throw Error('Dynamic require of "' + x + '" is not supported');
6
- });
7
-
8
- export {
9
- __require
10
- };
11
- //# sourceMappingURL=chunk-7OCVIDC7.js.map
@@ -1,52 +0,0 @@
1
-
2
- // src/subcommands/index.ts
3
- var loaders = {
4
- acp: async () => (await import("./acp-5ANIAOZC.js")).acpCmd,
5
- init: async () => (await import("./init-4JQSG66Q.js")).initCmd,
6
- auth: async () => (await import("./auth-ND7J7DTD.js")).authCmd,
7
- update: async () => (await import("./update-K45CS6SS.js")).updateCmd,
8
- sessions: async () => (await import("./sessions-config-KAMEBVOX.js")).sessionsCmd,
9
- config: async () => (await import("./sessions-config-KAMEBVOX.js")).configCmd,
10
- rewind: async () => (await import("./rewind-2FFNOOKS.js")).rewindCmd,
11
- replay: async () => (await import("./replay-RZXZKP2U.js")).replayCmd,
12
- audit: async () => (await import("./audit-ZPCLCC3C.js")).auditCmd,
13
- tools: async () => (await import("./tools-skills-Q4P27URS.js")).toolsCmd,
14
- skills: async () => (await import("./tools-skills-Q4P27URS.js")).skillsCmd,
15
- providers: async () => (await import("./providers-models-OKKQZIWU.js")).providersCmd,
16
- models: async () => (await import("./providers-models-OKKQZIWU.js")).modelsCmd,
17
- mcp: async () => (await import("./mcp-AQKSASHD.js")).mcpCmd,
18
- plugin: async () => (await import("./plugin-usage-7WCZW4NP.js")).pluginCmd,
19
- plugins: async () => (await import("./plugin-usage-7WCZW4NP.js")).pluginCmd,
20
- diag: async () => (await import("./diag-doctor-QZVKUAE5.js")).diagCmd,
21
- doctor: async () => (await import("./diag-doctor-QZVKUAE5.js")).doctorCmd,
22
- "proxy-status": async () => (await import("./diag-doctor-QZVKUAE5.js")).proxyCmd,
23
- export: async () => (await import("./export-ROG3DKTZ.js")).exportCmd,
24
- usage: async () => (await import("./plugin-usage-7WCZW4NP.js")).usageCmd,
25
- version: async () => (await import("./version-help-WMPSEL4U.js")).versionCmd,
26
- help: async () => (await import("./version-help-WMPSEL4U.js")).helpCmd,
27
- projects: async () => (await import("./projects-5J727S4L.js")).projectsCmd,
28
- modeldiag: async () => (await import("./modeldiag-ZL4ROTQ5.js")).modeldiagCmd,
29
- quick: async () => (await import("./quick-XLYLZX4B.js")).quickCmd,
30
- bench: async () => (await import("./bench-XYG56AMO.js")).benchCmd,
31
- chronicle: async () => (await import("./chronicle-6EPPMUC5.js")).chronicleCmd,
32
- hq: async () => (await import("./hq-4QQJO2GN.js")).hqCmd,
33
- mailbox: async () => (await import("./mailbox-serve-VKQIRCCB.js")).mailboxServeCmd,
34
- permissions: async () => (await import("./permissions-2PWBL4YU.js")).permissionsCmd,
35
- project: async () => (await import("./project-BLQ3ALVL.js")).projectCmd,
36
- governance: async () => (await import("./governance-JSGHHA2R.js")).governanceCmd
37
- };
38
- var subcommands = Object.fromEntries(
39
- Object.entries(loaders).map(
40
- ([name, load]) => [
41
- name,
42
- async (args, deps) => (await load())(args, deps)
43
- ]
44
- )
45
- );
46
- var subcommandNames = Object.keys(loaders);
47
-
48
- export {
49
- subcommands,
50
- subcommandNames
51
- };
52
- //# sourceMappingURL=chunk-KYDJJLJI.js.map
@@ -1,49 +0,0 @@
1
- /**
2
- * Launch-time feature hints. Shown once per CLI launch — after the
3
- * provider/model/mode/YOLO prompts have resolved and right before the
4
- * REPL or TUI starts — to remind users what slash commands, flags, and
5
- * runtime controls this build ships with. Suppress with `--no-hints` or
6
- * `WRONGSTACK_NO_HINTS=1`.
7
- *
8
- * Rather than dumping every category at once, each launch shows ONE
9
- * category and rotates to the next on the following launch (round-robin
10
- * via a tiny persisted cursor). So you see Autonomy one boot, agent tools
11
- * the next, workspace integrations after that — bite-sized, and the whole
12
- * set still comes around quickly. `/help` lists everything on demand.
13
- *
14
- * The list is intentionally hand-curated rather than auto-derived from
15
- * the slash-command registry: a one-line blurb tuned for each entry
16
- * lands better than `command.description` boilerplate.
17
- */
18
- import type { TerminalRenderer } from './renderer.js';
19
- /**
20
- * Total number of hints across all groups. Exported so callers can
21
- * assert "≥ 20" in tests without re-counting.
22
- */
23
- export declare const HINT_COUNT: number;
24
- /** Number of rotating categories. */
25
- export declare const HINT_GROUP_COUNT: number;
26
- /** Category titles, in rotation order. Exported for tests. */
27
- export declare const HINT_GROUP_TITLES: readonly string[];
28
- interface LaunchHintOptions {
29
- /**
30
- * File holding the rotation cursor. When set, each call advances it so
31
- * consecutive launches show different categories (round-robin). Missing
32
- * or unreadable file starts the rotation at the first category.
33
- */
34
- readonly cursorFile?: string | undefined;
35
- /**
36
- * Force a specific category index (wraps around). Overrides the cursor.
37
- * Mainly for tests and `--hints`-style explicit selection.
38
- */
39
- readonly groupIndex?: number | undefined;
40
- /** Terminal width used to wrap long hint rows. Defaults to stdout width. */
41
- readonly termWidth?: number | undefined;
42
- }
43
- /**
44
- * Print one rotating category of launch hints to `renderer`. No-op when
45
- * suppressed via `--no-hints` or `WRONGSTACK_NO_HINTS=1`.
46
- */
47
- export declare function printLaunchHints(renderer: Pick<TerminalRenderer, 'write'>, flags: Record<string, string | boolean>, opts?: LaunchHintOptions): Promise<void>;
48
- export {};
49
- //# sourceMappingURL=launch-hints.d.ts.map
@@ -1,11 +0,0 @@
1
- import {
2
- handleHelpVersionShortCircuit
3
- } from "./chunk-LIWVIEZM.js";
4
- import "./chunk-QAC263FZ.js";
5
- import "./chunk-XJXDOF63.js";
6
- import "./chunk-GGGUZSAU.js";
7
- import "./chunk-7OCVIDC7.js";
8
- export {
9
- handleHelpVersionShortCircuit
10
- };
11
- //# sourceMappingURL=short-circuit-flags-7YUCERBB.js.map
@@ -1,10 +0,0 @@
1
- import {
2
- subcommandNames,
3
- subcommands
4
- } from "./chunk-KYDJJLJI.js";
5
- import "./chunk-7OCVIDC7.js";
6
- export {
7
- subcommandNames,
8
- subcommands
9
- };
10
- //# sourceMappingURL=subcommands-KE6MEQQP.js.map
@@ -1,11 +0,0 @@
1
- import {
2
- helpCmd,
3
- versionCmd
4
- } from "./chunk-QAC263FZ.js";
5
- import "./chunk-XJXDOF63.js";
6
- import "./chunk-7OCVIDC7.js";
7
- export {
8
- helpCmd,
9
- versionCmd
10
- };
11
- //# sourceMappingURL=version-help-WMPSEL4U.js.map
@@ -1,14 +0,0 @@
1
- import { type TrustBoundary, type TrustRisk, type TrustSubject } from '@wrongstack/core/security';
2
- import { type ProcessRouteHandlers } from '@wrongstack/webui-server';
3
- export declare function authorizeCliWebUIAction(boundary: TrustBoundary, action: {
4
- capability: string;
5
- subject: TrustSubject;
6
- risk: TrustRisk;
7
- cwd?: string | undefined;
8
- metadata?: Readonly<Record<string, string | number | boolean | null>> | undefined;
9
- }): Promise<{
10
- allowed: boolean;
11
- reason: string;
12
- }>;
13
- export declare function createCliProcessRoutes(boundary: TrustBoundary): ProcessRouteHandlers;
14
- //# sourceMappingURL=privileged-actions.d.ts.map