@wrongstack/cli 0.302.0 → 0.302.2

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 (112) hide show
  1. package/data/providers.json +41 -155
  2. package/dist/{acp-DATHHPNT.js → acp-XCE4JJF3.js} +4 -4
  3. package/dist/{audit-QRCLEHHW.js → audit-BBR22QH3.js} +2 -2
  4. package/dist/{auth-PJD3JRH2.js → auth-K7CYVVKH.js} +121 -78
  5. package/dist/auth-menu/index.d.ts +5 -5
  6. package/dist/auth-menu/local.d.ts +4 -5
  7. package/dist/auth-menu/openai-codex-oauth.d.ts +1 -1
  8. package/dist/{auto-discover-providers-DRW4OZHG.js → auto-discover-providers-MHFLDSD3.js} +2 -2
  9. package/dist/{bench-7ZDWSNEF.js → bench-XNDUJOSZ.js} +10 -11
  10. package/dist/boot/auto-discover-providers.d.ts +1 -1
  11. package/dist/boot/container-wiring.d.ts +3 -3
  12. package/dist/boot/dispatch-webui.d.ts +1 -1
  13. package/dist/boot/system-prompt.d.ts +1 -2
  14. package/dist/boot/tool-registry.d.ts +1 -1
  15. package/dist/boot/tui-coordinator-setup.d.ts +1 -1
  16. package/dist/boot/tui-project-picker-callback.d.ts +1 -1
  17. package/dist/boot-config.d.ts +2 -2
  18. package/dist/boot.d.ts +1 -1
  19. package/dist/{chunk-ETOEGL3V.js → chunk-3IC4IEZC.js} +7 -2
  20. package/dist/{chunk-PFVVUH5B.js → chunk-3JPTNADJ.js} +3 -2
  21. package/dist/{chunk-4GVH7V3S.js → chunk-52C7PD2H.js} +1 -1
  22. package/dist/{chunk-OP47B3IX.js → chunk-7YLN7YUA.js} +7 -2
  23. package/dist/{chunk-263G3FMB.js → chunk-B4JLSXZB.js} +11 -14
  24. package/dist/{chunk-I5MEUFDI.js → chunk-BXQG3H2Y.js} +8 -3
  25. package/dist/{chunk-MT6FGXO3.js → chunk-C5NXM2SI.js} +19 -6
  26. package/dist/{chunk-XTIXVJXP.js → chunk-DGXNL7OT.js} +1 -1
  27. package/dist/{chunk-3MOUBRKZ.js → chunk-FJVCVZIV.js} +974 -935
  28. package/dist/{chunk-MRLYDHQ7.js → chunk-JQURRYU4.js} +4 -6
  29. package/dist/{chunk-ZECLGUTF.js → chunk-KV6DNQT6.js} +2 -2
  30. package/dist/{chunk-F4PEGAJZ.js → chunk-NUIHRGPY.js} +1 -1
  31. package/dist/{chunk-GUHQQG63.js → chunk-RK7E3IXT.js} +2 -4
  32. package/dist/{chunk-PYTFS4MC.js → chunk-SSSJQVUY.js} +27 -16
  33. package/dist/{chunk-PJHET45A.js → chunk-SZ42FYPT.js} +3 -3
  34. package/dist/{chunk-2KDOFTTM.js → chunk-WOXUE2CN.js} +1067 -900
  35. package/dist/{chunk-A6Q5KGLV.js → chunk-YKBRFSGL.js} +5 -5
  36. package/dist/cli-context.d.ts +2 -2
  37. package/dist/cli-eternal-flag.d.ts +1 -2
  38. package/dist/{cli-main-EOJ74CI4.js → cli-main-PJMDZHDK.js} +2680 -2133
  39. package/dist/context-limit.d.ts +11 -5
  40. package/dist/{diag-doctor-OQ3AA63O.js → diag-doctor-ZF5BF2MK.js} +2 -3
  41. package/dist/execute-deps.d.ts +1 -1
  42. package/dist/{execution-CQ772VPS.js → execution-LZRYRGDD.js} +234 -143
  43. package/dist/{export-DOBGPY23.js → export-CCUXRJOU.js} +3 -11
  44. package/dist/fleet/host-supervisor.d.ts +1 -1
  45. package/dist/fleet/host.d.ts +1 -1
  46. package/dist/fleet/routing.d.ts +1 -2
  47. package/dist/goal-host.d.ts +2 -2
  48. package/dist/hooks-wiring.d.ts +1 -1
  49. package/dist/{hq-LN5CJHCM.js → hq-AHPAE7EN.js} +104 -55
  50. package/dist/hq-command-controller.d.ts +1 -1
  51. package/dist/hq-server/routes/system-handlers.d.ts +1 -2
  52. package/dist/hq-server/routes.d.ts +7 -7
  53. package/dist/{hq-server-S7HZG3PA.js → hq-server-KU2Z54QU.js} +2 -2
  54. package/dist/index.d.ts +1 -1
  55. package/dist/index.js +2635 -2642
  56. package/dist/mailbox-bridge-bootstrap.d.ts +2 -2
  57. package/dist/{mcp-OHPJH73U.js → mcp-E5EBGOHF.js} +6 -6
  58. package/dist/mcp-serve.d.ts +1 -1
  59. package/dist/{modeldiag-3DOK4BWW.js → modeldiag-SIVUOX2Y.js} +18 -13
  60. package/dist/{permissions-FNYLZIL4.js → permissions-2PWBL4YU.js} +5 -3
  61. package/dist/picker.d.ts +1 -1
  62. package/dist/plugin-management.d.ts +1 -1
  63. package/dist/{plugin-usage-YEVLOR33.js → plugin-usage-PTEETL3J.js} +2 -2
  64. package/dist/{plugins-K3BAUP4D.js → plugins-XRGWC3NJ.js} +3 -3
  65. package/dist/pre-launch.d.ts +2 -2
  66. package/dist/{providers-models-WEZ4EGLL.js → providers-models-VV74TRQ2.js} +86 -37
  67. package/dist/repl.d.ts +1 -1
  68. package/dist/{replay-FCBNHW3K.js → replay-WBRMEWQ5.js} +2 -2
  69. package/dist/{rewind-AOD3JIYX.js → rewind-7RE6ONIC.js} +17 -17
  70. package/dist/{sdd-runtime-AIJCJGWC.js → sdd-runtime-GFZ3NJKS.js} +2 -2
  71. package/dist/{sessions-config-XXN7267N.js → sessions-config-YX2ZPAFM.js} +36 -32
  72. package/dist/{simpleui-dist-JIFGUJO7.js → simpleui-dist-33VO3QHF.js} +9 -2
  73. package/dist/slash-commands/agents.d.ts +14 -0
  74. package/dist/slash-commands/command-context.d.ts +2 -3
  75. package/dist/slash-commands/helpers.d.ts +1 -1
  76. package/dist/slash-commands/index.d.ts +1 -1
  77. package/dist/slash-commands/intake.d.ts +10 -0
  78. package/dist/slash-commands/memory-triage.d.ts +1 -1
  79. package/dist/slash-commands/provider-status.d.ts +1 -1
  80. package/dist/subcommands/handlers/hq.d.ts +20 -0
  81. package/dist/subcommands/handlers/per-subcommand-help-data.d.ts +1 -1
  82. package/dist/{update-MV6TUACD.js → update-LTDJGAFU.js} +3 -3
  83. package/dist/{update-check-UMYTOH7Z.js → update-check-WARHSVZA.js} +2 -2
  84. package/dist/webui-server/connection-handler.d.ts +1 -1
  85. package/dist/webui-server/context-breakdown.d.ts +1 -1
  86. package/dist/webui-server/cost-helpers.d.ts +1 -1
  87. package/dist/webui-server/lifecycle.d.ts +1 -1
  88. package/dist/webui-server/prefs-seeding.d.ts +1 -1
  89. package/dist/webui-server/setup-events.d.ts +1 -1
  90. package/dist/webui-server/static-serve.d.ts +1 -1
  91. package/dist/{webui-server-NFNRGNNT.js → webui-server-E3OPEKU5.js} +18 -10
  92. package/dist/webui-server-options.d.ts +1 -1
  93. package/dist/wiring/command-host-state.d.ts +2 -2
  94. package/dist/wiring/controllers.d.ts +1 -2
  95. package/dist/wiring/dep-watcher.d.ts +1 -1
  96. package/dist/wiring/director-setup.d.ts +3 -3
  97. package/dist/wiring/eternal-command-handlers.d.ts +2 -2
  98. package/dist/wiring/management-tools.d.ts +2 -2
  99. package/dist/wiring/provider-runtime.d.ts +1 -1
  100. package/dist/wiring/provider-status.d.ts +1 -1
  101. package/dist/wiring/provider-utility-tools.d.ts +3 -3
  102. package/dist/wiring/provider.d.ts +1 -1
  103. package/dist/wiring/replay.d.ts +1 -1
  104. package/dist/wiring/runtime-controller-deps.d.ts +1 -1
  105. package/dist/wiring/runtime-dispatch-state.d.ts +1 -2
  106. package/dist/wiring/runtime-lifecycle-deps.d.ts +2 -2
  107. package/dist/wiring/runtime-picker-deps.d.ts +1 -2
  108. package/dist/wiring/sage.d.ts +1 -1
  109. package/dist/wiring/session-command-handlers.d.ts +1 -2
  110. package/dist/wiring/session.d.ts +6 -1
  111. package/dist/wiring/slash-commands.d.ts +2 -3
  112. package/package.json +23 -23
@@ -22,7 +22,7 @@
22
22
  * log a warning, REPL runs without mailbox-bridge. The user
23
23
  * can run `wstack mailbox serve` manually later.
24
24
  */
25
- import { readLiveLock, type MailboxBridgeLock } from '@wrongstack/core/coordination';
25
+ import { type MailboxBridgeLock, readLiveLock } from '@wrongstack/core/coordination';
26
26
  export declare const MAILBOX_BRIDGE_BOOTSTRAP_TIMEOUT_MS = 5000;
27
27
  export declare const MAILBOX_BRIDGE_HEALTHZ_PROBE_MS = 500;
28
28
  export interface MailboxBridgeHandle {
@@ -100,6 +100,6 @@ export type ProbeFn = (url: string, timeoutMs: number) => Promise<boolean>;
100
100
  * that prefer to log a warning over crashing the host process.
101
101
  */
102
102
  export declare function tryAcquireMailboxBridge(opts: BootstrapOptions): Promise<MailboxBridgeHandle>;
103
- export { readLiveLock, type MailboxBridgeLock };
103
+ export { type MailboxBridgeLock, readLiveLock };
104
104
  export declare function readTokenFromFile(tokenPath: string): Promise<string | null>;
105
105
  //# sourceMappingURL=mailbox-bridge-bootstrap.d.ts.map
@@ -7,25 +7,25 @@ import {
7
7
  import "./chunk-7OCVIDC7.js";
8
8
 
9
9
  // src/subcommands/handlers/mcp.ts
10
- import { expectDefined } from "@wrongstack/core/utils";
10
+ import { allServers } from "@wrongstack/core/infrastructure";
11
11
  import {
12
+ expectDefined,
12
13
  jsonObjectFileExists,
13
14
  readJsonObjectFile,
14
15
  removeJsonPath,
15
16
  setJsonPath,
16
17
  updateJsonObjectFile
17
18
  } from "@wrongstack/core/utils";
18
- import { allServers } from "@wrongstack/core/infrastructure";
19
19
 
20
20
  // src/mcp-serve.ts
21
21
  import * as fs from "node:fs/promises";
22
22
  import * as path from "node:path";
23
23
  import { pathToFileURL } from "node:url";
24
- import { AutoApprovePermissionPolicy, DefaultSecretScrubber } from "@wrongstack/core/security";
25
24
  import { Context } from "@wrongstack/core/agent";
26
- import { normalizeTokenSavingTier } from "@wrongstack/core/types";
27
- import { ToolRegistry } from "@wrongstack/core/registry";
28
25
  import { ToolExecutor } from "@wrongstack/core/execution";
26
+ import { ToolRegistry } from "@wrongstack/core/registry";
27
+ import { AutoApprovePermissionPolicy, DefaultSecretScrubber } from "@wrongstack/core/security";
28
+ import { normalizeTokenSavingTier } from "@wrongstack/core/types";
29
29
  import {
30
30
  DEFAULT_MCP_INSERTION_MAX_BYTES,
31
31
  MCPServer,
@@ -414,4 +414,4 @@ function isRecord(value) {
414
414
  export {
415
415
  mcpCmd
416
416
  };
417
- //# sourceMappingURL=mcp-OHPJH73U.js.map
417
+ //# sourceMappingURL=mcp-E5EBGOHF.js.map
@@ -1,6 +1,6 @@
1
1
  import { Context } from '@wrongstack/core/agent';
2
- import type { PermissionPolicy, Tool } from '@wrongstack/core/types';
3
2
  import { ToolRegistry } from '@wrongstack/core/registry';
3
+ import type { PermissionPolicy, Tool } from '@wrongstack/core/types';
4
4
  import { type MCPServerPrompt, type MCPServerResource } from '@wrongstack/mcp';
5
5
  import type { SubcommandDeps } from './subcommands/index.js';
6
6
  export interface SelectedMcpServeContent {
@@ -1,20 +1,19 @@
1
- import {
2
- discoverAndMergeProviders
3
- } from "./chunk-4GVH7V3S.js";
4
1
  import {
5
2
  mutateConfigProviders,
6
3
  normalizeKeys,
7
4
  writeKeysBack
8
- } from "./chunk-PJHET45A.js";
5
+ } from "./chunk-SZ42FYPT.js";
9
6
  import {
10
7
  activeProfileConfigPath
11
8
  } from "./chunk-YMXXOOFN.js";
9
+ import {
10
+ discoverAndMergeProviders
11
+ } from "./chunk-52C7PD2H.js";
12
12
  import "./chunk-7OCVIDC7.js";
13
13
 
14
14
  // src/subcommands/handlers/modeldiag.ts
15
15
  import * as fs from "node:fs/promises";
16
- import { color as color2 } from "@wrongstack/core/utils";
17
- import { toErrorMessage as toErrorMessage2 } from "@wrongstack/core/utils";
16
+ import { color as color2, toErrorMessage as toErrorMessage2 } from "@wrongstack/core/utils";
18
17
  import { makeProviderFromConfig, setOAuthTokenPersister } from "@wrongstack/providers";
19
18
 
20
19
  // src/subcommands/handlers/model-smoke-test.ts
@@ -723,7 +722,11 @@ var modeldiagCmd = async (args, deps) => {
723
722
  cacheDir: deps.paths.cacheDir
724
723
  });
725
724
  }
726
- const targets = await buildModelSmokeTargets(config, deps.modelsRegistry, smokeOptions);
725
+ const targets = await buildModelSmokeTargets(
726
+ config,
727
+ deps.modelsRegistry,
728
+ smokeOptions
729
+ );
727
730
  const byProvider = /* @__PURE__ */ new Map();
728
731
  for (const target of targets) {
729
732
  byProvider.set(target.providerId, (byProvider.get(target.providerId) ?? 0) + 1);
@@ -755,7 +758,9 @@ var modeldiagCmd = async (args, deps) => {
755
758
  if (targets.length === 0) {
756
759
  const message = "No provider/model targets matched. Check the active profile or remove filters.";
757
760
  if (smokeOptions.json) {
758
- writeLine(JSON.stringify({ results: [], summary: { passed: 0, failed: 0 }, error: message }));
761
+ writeLine(
762
+ JSON.stringify({ results: [], summary: { passed: 0, failed: 0 }, error: message })
763
+ );
759
764
  } else {
760
765
  writeLine(color2.amber(message));
761
766
  }
@@ -863,7 +868,9 @@ var modeldiagCmd = async (args, deps) => {
863
868
  {
864
869
  results,
865
870
  summary,
866
- ...oauthPersistenceError ? { warning: `OAuth token refresh worked in-memory but could not be saved: ${oauthPersistenceError}` } : {}
871
+ ...oauthPersistenceError ? {
872
+ warning: `OAuth token refresh worked in-memory but could not be saved: ${oauthPersistenceError}`
873
+ } : {}
867
874
  },
868
875
  null,
869
876
  2
@@ -875,9 +882,7 @@ var modeldiagCmd = async (args, deps) => {
875
882
  `${color2.bold("Summary:")} ${color2.green(`${passed} passed`)} \xB7 ${failed > 0 ? color2.red(`${failed} failed`) : color2.dim("0 failed")}`
876
883
  );
877
884
  if (!smokeOptions.allModels) {
878
- writeLine(
879
- color2.dim("Use --all-models to test every catalog-visible model sequentially.")
880
- );
885
+ writeLine(color2.dim("Use --all-models to test every catalog-visible model sequentially."));
881
886
  }
882
887
  if (oauthPersistenceError) {
883
888
  writeLine(
@@ -1287,4 +1292,4 @@ ${color2.dim('Enter numbers or provider IDs (comma-separated, or "all"):')}
1287
1292
  export {
1288
1293
  modeldiagCmd
1289
1294
  };
1290
- //# sourceMappingURL=modeldiag-3DOK4BWW.js.map
1295
+ //# sourceMappingURL=modeldiag-SIVUOX2Y.js.map
@@ -45,8 +45,10 @@ var permissionsCmd = async (args, deps) => {
45
45
  }
46
46
  const tool = deps.toolRegistry.get(toolName);
47
47
  if (!tool) {
48
- deps.renderer.writeError(`Unknown tool: "${toolName}". Available tools: ${deps.toolRegistry.list().map((t) => t.name).join(", ")}
49
- `);
48
+ deps.renderer.writeError(
49
+ `Unknown tool: "${toolName}". Available tools: ${deps.toolRegistry.list().map((t) => t.name).join(", ")}
50
+ `
51
+ );
50
52
  return 1;
51
53
  }
52
54
  const paths = resolveWstackPaths({ projectRoot: deps.projectRoot, userHome: deps.userHome });
@@ -112,4 +114,4 @@ Flags:
112
114
  export {
113
115
  permissionsCmd
114
116
  };
115
- //# sourceMappingURL=permissions-FNYLZIL4.js.map
117
+ //# sourceMappingURL=permissions-2PWBL4YU.js.map
package/dist/picker.d.ts CHANGED
@@ -2,7 +2,7 @@ import type { Config, ModelsRegistry, ResolvedProvider } from '@wrongstack/core/
2
2
  import type { ReadlineInputReader } from './input-reader.js';
3
3
  import type { TerminalRenderer } from './renderer.js';
4
4
  export { applyPickerKey, type ProviderPickerState } from './picker-key-state.js';
5
- export { filterModels, LIVE_PICKER_MAX_VISIBLE, renderLiveModelList } from './picker-model-picker.js';
5
+ export { filterModels, LIVE_PICKER_MAX_VISIBLE, renderLiveModelList, } from './picker-model-picker.js';
6
6
  export { codexPickerPreamble } from './picker-ui.js';
7
7
  /**
8
8
  * Filter providers by a free-text query: case-insensitive substring match
@@ -1,7 +1,7 @@
1
1
  import type { Config, PluginConfig, PluginManagerConfig } from '@wrongstack/core/types';
2
2
  import { PLUGIN_AUDIT_ENTRIES, type PluginAuditEntry } from '@wrongstack/plugins/plugin-audit-catalog';
3
- export { PLUGIN_AUDIT_ENTRIES };
4
3
  export type { PluginAuditEntry };
4
+ export { PLUGIN_AUDIT_ENTRIES };
5
5
  export declare const OFFICIAL_PLUGINS: readonly [{
6
6
  readonly alias: 'telegram';
7
7
  readonly specifier: '@wrongstack/telegram';
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runPluginManagementCommand
3
- } from "./chunk-GUHQQG63.js";
3
+ } from "./chunk-RK7E3IXT.js";
4
4
  import {
5
5
  restoreFlags
6
6
  } from "./chunk-CSAPOCBP.js";
@@ -41,4 +41,4 @@ export {
41
41
  pluginCmd,
42
42
  usageCmd
43
43
  };
44
- //# sourceMappingURL=plugin-usage-YEVLOR33.js.map
44
+ //# sourceMappingURL=plugin-usage-PTEETL3J.js.map
@@ -7,8 +7,8 @@ import {
7
7
  pluginNameFromSpec,
8
8
  setupPlugins,
9
9
  warnIfDeprecatedPluginName
10
- } from "./chunk-ZECLGUTF.js";
11
- import "./chunk-GUHQQG63.js";
10
+ } from "./chunk-KV6DNQT6.js";
11
+ import "./chunk-RK7E3IXT.js";
12
12
  import "./chunk-TYO2OVAD.js";
13
13
  import "./chunk-7OCVIDC7.js";
14
14
  export {
@@ -21,4 +21,4 @@ export {
21
21
  setupPlugins,
22
22
  warnIfDeprecatedPluginName
23
23
  };
24
- //# sourceMappingURL=plugins-K3BAUP4D.js.map
24
+ //# sourceMappingURL=plugins-XRGWC3NJ.js.map
@@ -1,3 +1,3 @@
1
- export { type ProjectKind, detectProjectKind, runProjectCheck, } from './pre-launch/project-check.js';
2
- export { type LaunchModeChoices, LaunchAbortedError, persistLaunchChoices, runLaunchPrompts, } from './pre-launch/launch-prompts.js';
1
+ export { LaunchAbortedError, type LaunchModeChoices, persistLaunchChoices, runLaunchPrompts, } from './pre-launch/launch-prompts.js';
2
+ export { detectProjectKind, type ProjectKind, runProjectCheck, } from './pre-launch/project-check.js';
3
3
  //# sourceMappingURL=pre-launch.d.ts.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  visibleModelIds
3
- } from "./chunk-ETOEGL3V.js";
3
+ } from "./chunk-3IC4IEZC.js";
4
4
  import {
5
5
  mutateConfigProviders
6
- } from "./chunk-PJHET45A.js";
6
+ } from "./chunk-SZ42FYPT.js";
7
7
  import {
8
8
  activeProfileConfigPath
9
9
  } from "./chunk-YMXXOOFN.js";
@@ -11,9 +11,11 @@ import "./chunk-7OCVIDC7.js";
11
11
 
12
12
  // src/subcommands/handlers/providers-models.ts
13
13
  import * as fs from "node:fs/promises";
14
- import { atomicWrite, color, expectDefined } from "@wrongstack/core/utils";
15
14
  import { decryptConfigSecrets, encryptConfigSecrets } from "@wrongstack/core/security";
16
- import { ConfigError } from "@wrongstack/core/types";
15
+ import {
16
+ ConfigError
17
+ } from "@wrongstack/core/types";
18
+ import { atomicWrite, color, expectDefined } from "@wrongstack/core/utils";
17
19
  var providersCmd = async (args, deps) => {
18
20
  const providerFlags = subcommandFlags(args, deps);
19
21
  const showAll = providerFlags["all"] === true || providerFlags["all"] === "true";
@@ -238,7 +240,7 @@ function aliasProviderId(configProviderId, cfg) {
238
240
  async function discoverProviderModels(deps, ids) {
239
241
  if (!("mergeOverlay" in deps.modelsRegistry)) return void 0;
240
242
  try {
241
- const { discoverAndMergeProviders } = await import("./auto-discover-providers-DRW4OZHG.js");
243
+ const { discoverAndMergeProviders } = await import("./auto-discover-providers-MHFLDSD3.js");
242
244
  await discoverAndMergeProviders({
243
245
  config: deps.config,
244
246
  registry: deps.modelsRegistry,
@@ -278,7 +280,10 @@ async function modelsHide(args, deps) {
278
280
  deps.renderer.writeError(`Provider "${providerId}" is not configured.`);
279
281
  return 1;
280
282
  }
281
- const { providerId: lookupId, provider } = await getCatalogProviderForConfigProvider(providerId, deps);
283
+ const { providerId: lookupId, provider } = await getCatalogProviderForConfigProvider(
284
+ providerId,
285
+ deps
286
+ );
282
287
  if (!provider) {
283
288
  deps.renderer.writeError(
284
289
  lookupId !== providerId ? `Alias "${providerId}" points at catalog id "${lookupId}" which is not in the cache.` : `Provider "${providerId}" not in catalog.`
@@ -292,11 +297,15 @@ async function modelsHide(args, deps) {
292
297
  return 0;
293
298
  }
294
299
  const nextVisible = visible.filter((id) => id !== modelId);
295
- await mutateConfigProviders(activeProfileConfigPath(deps.paths, deps.config), deps.vault, (providers) => {
296
- const p = providers[providerId];
297
- if (!p) return;
298
- p.models = nextVisible;
299
- });
300
+ await mutateConfigProviders(
301
+ activeProfileConfigPath(deps.paths, deps.config),
302
+ deps.vault,
303
+ (providers) => {
304
+ const p = providers[providerId];
305
+ if (!p) return;
306
+ p.models = nextVisible;
307
+ }
308
+ );
300
309
  deps.config.providers = {
301
310
  ...deps.config.providers ?? {},
302
311
  [providerId]: { ...saved, models: nextVisible }
@@ -305,7 +314,11 @@ async function modelsHide(args, deps) {
305
314
  `Hidden ${providerId}/${modelId}. Visible: ${nextVisible.length}, hidden: ${Math.max(0, knownIds.length - nextVisible.length)}.`
306
315
  );
307
316
  if (nextVisible.length === 0) {
308
- deps.renderer.write(color.dim("This provider now has no visible models. Use `wstack models show` or `wstack models reset` to restore.\n"));
317
+ deps.renderer.write(
318
+ color.dim(
319
+ "This provider now has no visible models. Use `wstack models show` or `wstack models reset` to restore.\n"
320
+ )
321
+ );
309
322
  }
310
323
  return 0;
311
324
  }
@@ -321,7 +334,10 @@ async function modelsShow(args, deps) {
321
334
  deps.renderer.writeError(`Provider "${providerId}" is not configured.`);
322
335
  return 1;
323
336
  }
324
- const { providerId: lookupId, provider } = await getCatalogProviderForConfigProvider(providerId, deps);
337
+ const { providerId: lookupId, provider } = await getCatalogProviderForConfigProvider(
338
+ providerId,
339
+ deps
340
+ );
325
341
  if (!provider) {
326
342
  deps.renderer.writeError(
327
343
  lookupId !== providerId ? `Alias "${providerId}" points at catalog id "${lookupId}" which is not in the cache.` : `Provider "${providerId}" not in catalog.`
@@ -334,11 +350,15 @@ async function modelsShow(args, deps) {
334
350
  return 0;
335
351
  }
336
352
  const nextVisible = uniqueStrings([...saved.models, modelId]);
337
- await mutateConfigProviders(activeProfileConfigPath(deps.paths, deps.config), deps.vault, (providers) => {
338
- const p = providers[providerId];
339
- if (!p) return;
340
- p.models = nextVisible;
341
- });
353
+ await mutateConfigProviders(
354
+ activeProfileConfigPath(deps.paths, deps.config),
355
+ deps.vault,
356
+ (providers) => {
357
+ const p = providers[providerId];
358
+ if (!p) return;
359
+ p.models = nextVisible;
360
+ }
361
+ );
342
362
  deps.config.providers = {
343
363
  ...deps.config.providers ?? {},
344
364
  [providerId]: { ...saved, models: nextVisible }
@@ -360,7 +380,10 @@ async function modelsHidden(args, deps) {
360
380
  deps.renderer.writeError(`Provider "${providerId}" is not configured.`);
361
381
  return 1;
362
382
  }
363
- const { providerId: lookupId, provider } = await getCatalogProviderForConfigProvider(providerId, deps);
383
+ const { providerId: lookupId, provider } = await getCatalogProviderForConfigProvider(
384
+ providerId,
385
+ deps
386
+ );
364
387
  if (!provider) {
365
388
  deps.renderer.writeError(
366
389
  lookupId !== providerId ? `Alias "${providerId}" points at catalog id "${lookupId}" which is not in the cache.` : `Provider "${providerId}" not in catalog.`
@@ -378,9 +401,11 @@ async function modelsHidden(args, deps) {
378
401
  }
379
402
  for (const id of hidden) deps.renderer.write(` ${id}
380
403
  `);
381
- deps.renderer.write(color.dim(`
404
+ deps.renderer.write(
405
+ color.dim(`
382
406
  Restore: wstack models show ${providerId} <model> \xB7 reset ${providerId}
383
- `));
407
+ `)
408
+ );
384
409
  return 0;
385
410
  }
386
411
  async function modelsReset(args, deps) {
@@ -398,18 +423,24 @@ async function modelsReset(args, deps) {
398
423
  deps.renderer.writeInfo(`${providerId} already shows the full catalog model list.`);
399
424
  return 0;
400
425
  }
401
- await mutateConfigProviders(activeProfileConfigPath(deps.paths, deps.config), deps.vault, (providers) => {
402
- const p = providers[providerId];
403
- if (!p) return;
404
- delete p.models;
405
- });
426
+ await mutateConfigProviders(
427
+ activeProfileConfigPath(deps.paths, deps.config),
428
+ deps.vault,
429
+ (providers) => {
430
+ const p = providers[providerId];
431
+ if (!p) return;
432
+ delete p.models;
433
+ }
434
+ );
406
435
  const nextProvider = { ...saved };
407
436
  delete nextProvider.models;
408
437
  deps.config.providers = {
409
438
  ...deps.config.providers ?? {},
410
439
  [providerId]: nextProvider
411
440
  };
412
- deps.renderer.writeInfo(`Reset visible model list for ${providerId} to the full catalog default.`);
441
+ deps.renderer.writeInfo(
442
+ `Reset visible model list for ${providerId} to the full catalog default.`
443
+ );
413
444
  return 0;
414
445
  }
415
446
  async function modelsCaps(args, deps) {
@@ -423,7 +454,9 @@ async function modelsCaps(args, deps) {
423
454
  const resolved = await deps.modelsRegistry.getModel(providerId, modelId);
424
455
  if (!resolved) {
425
456
  deps.renderer.writeError("Model not found in catalog: " + providerId + "/" + modelId);
426
- deps.renderer.write(color.dim("Run `wstack models refresh` or add a custom model if this is expected.\n"));
457
+ deps.renderer.write(
458
+ color.dim("Run `wstack models refresh` or add a custom model if this is expected.\n")
459
+ );
427
460
  return 1;
428
461
  }
429
462
  const caps = resolved.capabilities;
@@ -434,26 +467,42 @@ async function modelsCaps(args, deps) {
434
467
  ].filter((v) => v !== void 0);
435
468
  const rc = caps.reasoningConfig;
436
469
  const cost = resolved.cost;
437
- deps.renderer.write(color.bold("Model capabilities") + " " + color.dim(providerId + "/" + modelId) + "\n");
438
- deps.renderer.write(" context: " + (caps.maxContext ? color.yellow(String(caps.maxContext)) : color.dim("?")) + "\n");
470
+ deps.renderer.write(
471
+ color.bold("Model capabilities") + " " + color.dim(providerId + "/" + modelId) + "\n"
472
+ );
473
+ deps.renderer.write(
474
+ " context: " + (caps.maxContext ? color.yellow(String(caps.maxContext)) : color.dim("?")) + "\n"
475
+ );
439
476
  if (caps.maxOutput !== void 0) {
440
477
  deps.renderer.write(" max output: " + color.yellow(String(caps.maxOutput)) + "\n");
441
478
  }
442
479
  if (caps.knowledge) deps.renderer.write(" knowledge: " + caps.knowledge + "\n");
443
- deps.renderer.write(" flags: " + (flags.length > 0 ? flags.join(", ") : color.dim("(none)")) + "\n");
444
- deps.renderer.write(" pricing/1M: input " + fmtPrice(cost?.input) + " output " + fmtPrice(cost?.output) + " cacheR " + fmtPrice(cost?.cache_read) + "\n");
480
+ deps.renderer.write(
481
+ " flags: " + (flags.length > 0 ? flags.join(", ") : color.dim("(none)")) + "\n"
482
+ );
483
+ deps.renderer.write(
484
+ " pricing/1M: input " + fmtPrice(cost?.input) + " output " + fmtPrice(cost?.output) + " cacheR " + fmtPrice(cost?.cache_read) + "\n"
485
+ );
445
486
  if (cost?.cache_write !== void 0 || cost?.cache_write_5m !== void 0 || cost?.cache_write_1h !== void 0) {
446
487
  const cacheWrite1h = cost.cache_write_1h ?? (cost.input !== void 0 ? cost.input * 2 : void 0);
447
- deps.renderer.write(" cache write: default " + fmtPrice(cost.cache_write) + " 5m " + fmtPrice(cost.cache_write_5m ?? cost.cache_write) + " 1h " + fmtPrice(cacheWrite1h) + "\n");
488
+ deps.renderer.write(
489
+ " cache write: default " + fmtPrice(cost.cache_write) + " 5m " + fmtPrice(cost.cache_write_5m ?? cost.cache_write) + " 1h " + fmtPrice(cacheWrite1h) + "\n"
490
+ );
448
491
  }
449
492
  if (rc) {
450
493
  deps.renderer.write(" reasoning:\n");
451
494
  deps.renderer.write(" default: " + rc.default + "\n");
452
- deps.renderer.write(" disable: " + (rc.disableSupported ? "supported" : "unsupported") + "\n");
453
- deps.renderer.write(" effort: " + (rc.effortSupported ? rc.effortLevels.join(", ") : "unsupported") + "\n");
495
+ deps.renderer.write(
496
+ " disable: " + (rc.disableSupported ? "supported" : "unsupported") + "\n"
497
+ );
498
+ deps.renderer.write(
499
+ " effort: " + (rc.effortSupported ? rc.effortLevels.join(", ") : "unsupported") + "\n"
500
+ );
454
501
  deps.renderer.write(" preserve: " + rc.preserveThinking + "\n");
455
502
  } else if (caps.reasoning) {
456
- deps.renderer.write(color.dim(" reasoning: supported, but no detailed config in catalog\n"));
503
+ deps.renderer.write(
504
+ color.dim(" reasoning: supported, but no detailed config in catalog\n")
505
+ );
457
506
  }
458
507
  return 0;
459
508
  }
@@ -612,4 +661,4 @@ export {
612
661
  modelsCmd,
613
662
  providersCmd
614
663
  };
615
- //# sourceMappingURL=providers-models-WEZ4EGLL.js.map
664
+ //# sourceMappingURL=providers-models-VV74TRQ2.js.map
package/dist/repl.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { ReplOptions } from './repl-options.js';
2
- export { parseSuggestionsFromOutput, parseAutoSuggestionsFromOutput } from './repl-suggestions.js';
3
2
  export type { ReplOptions } from './repl-options.js';
3
+ export { parseAutoSuggestionsFromOutput, parseSuggestionsFromOutput } from './repl-suggestions.js';
4
4
  export declare function runRepl(opts: ReplOptions): Promise<number>;
5
5
  //# sourceMappingURL=repl.d.ts.map
@@ -4,8 +4,8 @@ import {
4
4
  import "./chunk-7OCVIDC7.js";
5
5
 
6
6
  // src/subcommands/handlers/replay.ts
7
- import { color, resolveWstackPaths } from "@wrongstack/core/utils";
8
7
  import { ReplayLogStore } from "@wrongstack/core/storage";
8
+ import { color, resolveWstackPaths } from "@wrongstack/core/utils";
9
9
  var replayCmd = async (args, deps) => {
10
10
  args = restoreFlags(args, deps, ["list", "l"]);
11
11
  const wpaths = resolveWstackPaths({
@@ -76,4 +76,4 @@ Run a session with --record first, then --replay to re-execute it.`
76
76
  export {
77
77
  replayCmd
78
78
  };
79
- //# sourceMappingURL=replay-FCBNHW3K.js.map
79
+ //# sourceMappingURL=replay-WBRMEWQ5.js.map
@@ -4,11 +4,10 @@ import {
4
4
  import "./chunk-7OCVIDC7.js";
5
5
 
6
6
  // src/subcommands/handlers/rewind.ts
7
- import * as path from "node:path";
8
7
  import {
9
8
  DefaultSessionRewinder,
10
9
  DefaultSessionStore,
11
- SessionRegistry
10
+ SessionCatalogProjectClient
12
11
  } from "@wrongstack/core/storage";
13
12
  import { color, expectDefined, resolveWstackPaths, toErrorMessage } from "@wrongstack/core/utils";
14
13
  function parseRewindFlags(args) {
@@ -75,21 +74,19 @@ var rewindCmd = async (args, deps) => {
75
74
  }
76
75
  return 0;
77
76
  }
78
- let claimedRegistry;
77
+ let maintenance;
79
78
  const claimForHistoryMutation = async () => {
80
79
  if (!flags.resume) return;
81
- const registry = new SessionRegistry(wpaths.globalRoot);
82
- await registry.register({
80
+ const client = new SessionCatalogProjectClient({
81
+ projectDir: wpaths.projectDir,
82
+ projectRoot: deps.projectRoot
83
+ });
84
+ const lease = await client.call("acquire_maintenance", {
83
85
  sessionId: targetSessionId,
84
- projectSlug: wpaths.projectSlug,
85
- projectRoot: deps.projectRoot,
86
- projectName: path.basename(deps.projectRoot),
87
- workingDir: deps.cwd,
88
- clientType: "cli",
89
- pid: process.pid,
90
- startedAt: (/* @__PURE__ */ new Date()).toISOString()
86
+ operation: "rewind",
87
+ holderId: `rewind:${process.pid}`
91
88
  });
92
- claimedRegistry = registry;
89
+ maintenance = { client, lease };
93
90
  };
94
91
  try {
95
92
  let result;
@@ -129,7 +126,7 @@ var rewindCmd = async (args, deps) => {
129
126
  if (result.revertedFiles.length === 0) {
130
127
  deps.renderer.write("No files to revert.\n");
131
128
  if (flags.resume) {
132
- const store = new DefaultSessionStore({ dir: sessionsDir });
129
+ const store = new DefaultSessionStore({ dir: sessionsDir, projectRoot: deps.projectRoot });
133
130
  const resumed = await store.resume(targetSessionId);
134
131
  const toIdx = result.toPromptIndex;
135
132
  await resumed.writer.truncateToCheckpoint(toIdx);
@@ -147,7 +144,7 @@ Reverted ${result.revertedFiles.length} file(s):
147
144
  `);
148
145
  }
149
146
  if (flags.resume) {
150
- const store = new DefaultSessionStore({ dir: sessionsDir });
147
+ const store = new DefaultSessionStore({ dir: sessionsDir, projectRoot: deps.projectRoot });
151
148
  const resumed = await store.resume(targetSessionId);
152
149
  const toIdx = result.toPromptIndex;
153
150
  const removed = await resumed.writer.truncateToCheckpoint(toIdx);
@@ -180,10 +177,13 @@ ${result.errors.length} error(s):
180
177
  deps.renderer.writeError(toErrorMessage(err));
181
178
  return 1;
182
179
  } finally {
183
- await claimedRegistry?.unregister().catch(() => void 0);
180
+ if (maintenance) {
181
+ await maintenance.client.call("release_maintenance", { lease: maintenance.lease }).catch(() => void 0);
182
+ await maintenance.client.close().catch(() => void 0);
183
+ }
184
184
  }
185
185
  };
186
186
  export {
187
187
  rewindCmd
188
188
  };
189
- //# sourceMappingURL=rewind-AOD3JIYX.js.map
189
+ //# sourceMappingURL=rewind-7RE6ONIC.js.map
@@ -23,7 +23,7 @@ import {
23
23
  trySaveImplementationPlan,
24
24
  trySaveSpecFromAIOutput,
25
25
  trySaveTasksFromAIOutput
26
- } from "./chunk-XTIXVJXP.js";
26
+ } from "./chunk-DGXNL7OT.js";
27
27
  import "./chunk-7OCVIDC7.js";
28
28
  export {
29
29
  SDDState,
@@ -51,4 +51,4 @@ export {
51
51
  trySaveSpecFromAIOutput,
52
52
  trySaveTasksFromAIOutput
53
53
  };
54
- //# sourceMappingURL=sdd-runtime-AIJCJGWC.js.map
54
+ //# sourceMappingURL=sdd-runtime-GFZ3NJKS.js.map