@wrongstack/cli 0.305.1 → 0.306.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.
@@ -1,3 +1,6 @@
1
+ import {
2
+ discoverAndMergeProviders
3
+ } from "./chunk-52C7PD2H.js";
1
4
  import {
2
5
  mutateConfigProviders,
3
6
  normalizeKeys,
@@ -6,9 +9,6 @@ import {
6
9
  import {
7
10
  activeProfileConfigPath
8
11
  } 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
@@ -1292,4 +1292,4 @@ ${color2.dim('Enter numbers or provider IDs (comma-separated, or "all"):')}
1292
1292
  export {
1293
1293
  modeldiagCmd
1294
1294
  };
1295
- //# sourceMappingURL=modeldiag-SIVUOX2Y.js.map
1295
+ //# sourceMappingURL=modeldiag-6VS5KDP5.js.map
@@ -49,11 +49,7 @@ export declare function hasApiKey(provider: ResolvedProvider, config?: Config):
49
49
  * Models are inlined from the catalog (or from `cfg.models` for custom
50
50
  * entries) so the picker can show a real selection.
51
51
  */
52
- export declare function buildPickableProviders(modelsRegistry: ModelsRegistry, config: Config): Promise<Array<{
53
- id: string;
54
- family: string;
55
- models: string[];
56
- }>>;
52
+ export declare function buildPickableProviders(modelsRegistry: ModelsRegistry, config: Config): Promise<Array<import('@wrongstack/tui').ProviderOption>>;
57
53
  /**
58
54
  * Resolve a provider id that may be an alias. When the user has
59
55
  * `providers[id].type` pointing at a different catalog entry, return
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  visibleModelIds
3
- } from "./chunk-3IC4IEZC.js";
3
+ } from "./chunk-VUVOMXWP.js";
4
4
  import {
5
5
  mutateConfigProviders
6
6
  } from "./chunk-SZ42FYPT.js";
@@ -661,4 +661,4 @@ export {
661
661
  modelsCmd,
662
662
  providersCmd
663
663
  };
664
- //# sourceMappingURL=providers-models-VV74TRQ2.js.map
664
+ //# sourceMappingURL=providers-models-HQN3AT3K.js.map
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Run a `git` subcommand and capture its output.
3
+ *
4
+ * Lives in `services/` rather than beside the `/git` slash command because it
5
+ * is shared infrastructure, not command logic: it has no `SlashCommandContext`
6
+ * and no rendering. The TUI resource menus need the same child process, and a
7
+ * non-command module importing `slash-commands/git.ts` is exactly the boundary
8
+ * the architecture check rejects.
9
+ *
10
+ * Never rejects on a non-zero exit — the caller inspects `code`. It rejects
11
+ * only when git could not be spawned at all, or when the 30s timeout fires.
12
+ */
13
+ export declare function runGit(args: string[], cwd: string): Promise<{
14
+ stdout: string;
15
+ stderr: string;
16
+ code: number;
17
+ }>;
18
+ //# sourceMappingURL=run-git.d.ts.map
@@ -1,10 +1,5 @@
1
1
  import type { SlashCommand } from '@wrongstack/core/types';
2
2
  import type { SlashCommandContext } from './command-context.js';
3
- export declare function runGit(args: string[], cwd: string): Promise<{
4
- stdout: string;
5
- stderr: string;
6
- code: number;
7
- }>;
8
3
  /**
9
4
  * Read-only operational Git command. Mutating workflows remain on `/commit`,
10
5
  * `/push`, and the permission-gated `git` tool.
@@ -1,5 +1,37 @@
1
1
  import type { InputReader, SlashCommand } from '@wrongstack/core/types';
2
2
  import type { SlashCommandContext } from './command-context.js';
3
+ /**
4
+ * Windowed slice of the theme list for the raw-terminal picker — mirrors the
5
+ * math in the TUI's `useWindowedPicker` (same centering + marker rules) so
6
+ * both pickers agree on how many presets fit and which rows are visible.
7
+ * `rows` is the raw terminal height; the picker reserves its chrome (header,
8
+ * hint, blanks) plus worst-case marker rows up front, so a 24-row terminal
9
+ * never renders all 40 presets.
10
+ *
11
+ * Exported for direct unit testing (packages/cli/tests/slash-theme.test.ts);
12
+ * the picker itself treats it as private.
13
+ */
14
+ export declare function computeWindow(total: number, selected: number, rows: number): {
15
+ start: number;
16
+ end: number;
17
+ hasAbove: boolean;
18
+ hasBelow: boolean;
19
+ };
20
+ /**
21
+ * Truncate an option's description so the rendered row never wraps on a
22
+ * narrow terminal. `computeWindow` budgets ONE terminal row per option; a
23
+ * description that wrapped onto a second physical line would silently break
24
+ * that budget and re-introduce the vertical overflow this picker was fixed
25
+ * to avoid. The description is plain text here (color-wrapped by the caller
26
+ * AFTER truncation), so measuring its length is ANSI-safe.
27
+ *
28
+ * Fixed chrome per row: 2 indent + 2 cursor + 21 name + 1 gap = 26 columns,
29
+ * plus the ` [active]` mark (9 columns) when the option is the active preset.
30
+ *
31
+ * Exported for direct unit testing (packages/cli/tests/slash-theme.test.ts);
32
+ * the picker itself treats it as private.
33
+ */
34
+ export declare function truncateDesc(desc: string, columns: number, active: boolean): string;
3
35
  export declare function buildThemeCommand(opts: SlashCommandContext & {
4
36
  inputReader?: InputReader | undefined;
5
37
  }): SlashCommand;
@@ -0,0 +1,13 @@
1
+ import type { ProviderModelStatusTracker } from '@wrongstack/core/coordination';
2
+ import type { ConfigStore, MemoryPort } from '@wrongstack/core/types';
3
+ import type { WstackPaths } from '@wrongstack/core/utils';
4
+ import type { ResourceMenuId, ResourceMenuSnapshot } from '@wrongstack/tui';
5
+ export interface TuiResourceMenuContext {
6
+ configStore: ConfigStore;
7
+ paths: WstackPaths;
8
+ memoryStore?: MemoryPort | undefined;
9
+ statusTracker?: ProviderModelStatusTracker | undefined;
10
+ projectRoot: string;
11
+ }
12
+ export declare function createTuiResourceMenuGetter(ctx: TuiResourceMenuContext): (id: ResourceMenuId) => Promise<ResourceMenuSnapshot>;
13
+ //# sourceMappingURL=tui-resource-menus.d.ts.map
@@ -17,7 +17,14 @@ export interface RegisterCliManagementToolsDeps {
17
17
  * starts null and is filled once wiring completes.
18
18
  */
19
19
  getHookRunner?: (() => PluginManagerHookRunner | null) | undefined;
20
+ /**
21
+ * Late-bound live provider/model switch for leader_model_set. Like the hook
22
+ * runner, cli-main creates switchProviderAndModel AFTER the management tools
23
+ * register (it needs the provider runtime), so it passes a ref-backed getter
24
+ * that starts null and is filled once provider wiring completes.
25
+ */
26
+ getSwitchProviderAndModel?: (() => ((providerId: string, modelId: string) => Promise<string | null>) | null) | undefined;
20
27
  }
21
- export declare function registerCliManagementTools({ toolRegistry, configStore, profileConfigPath, stdinInteractive, getHookRunner, }: RegisterCliManagementToolsDeps): void;
28
+ export declare function registerCliManagementTools({ toolRegistry, configStore, profileConfigPath, stdinInteractive, getHookRunner, getSwitchProviderAndModel, }: RegisterCliManagementToolsDeps): void;
22
29
  export {};
23
30
  //# sourceMappingURL=management-tools.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrongstack/cli",
3
- "version": "0.305.1",
3
+ "version": "0.306.2",
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": [
@@ -42,31 +42,31 @@
42
42
  ],
43
43
  "dependencies": {
44
44
  "ws": "^8.21.1",
45
- "@wrongstack/core": "0.305.1",
46
- "@wrongstack/mcp": "0.305.1",
47
- "@wrongstack/acp": "0.305.1",
48
- "@wrongstack/bench": "0.305.1",
49
- "@wrongstack/persistence": "0.305.1",
50
- "@wrongstack/kanban": "0.305.1",
51
- "@wrongstack/plugins": "0.305.1",
52
- "@wrongstack/providers": "0.305.1",
53
- "@wrongstack/plug-lsp": "0.305.1",
54
- "@wrongstack/sage": "0.305.1",
55
- "@wrongstack/runtime": "0.305.1",
56
- "@wrongstack/requirement-intake": "0.305.1",
57
- "@wrongstack/simpleui": "0.305.1",
58
- "@wrongstack/sdd": "0.305.1",
59
- "@wrongstack/security-scanner": "0.305.1",
60
- "@wrongstack/telegram": "0.305.1",
61
- "@wrongstack/techstack": "0.305.1",
62
- "@wrongstack/tools": "0.305.1",
63
- "@wrongstack/tui": "0.305.1",
64
- "@wrongstack/webui-hq": "0.305.1",
65
- "@wrongstack/webui": "0.305.1",
66
- "@wrongstack/webui-server": "0.305.1"
45
+ "@wrongstack/acp": "0.306.2",
46
+ "@wrongstack/mcp": "0.306.2",
47
+ "@wrongstack/kanban": "0.306.2",
48
+ "@wrongstack/core": "0.306.2",
49
+ "@wrongstack/providers": "0.306.2",
50
+ "@wrongstack/bench": "0.306.2",
51
+ "@wrongstack/plug-lsp": "0.306.2",
52
+ "@wrongstack/persistence": "0.306.2",
53
+ "@wrongstack/requirement-intake": "0.306.2",
54
+ "@wrongstack/plugins": "0.306.2",
55
+ "@wrongstack/sdd": "0.306.2",
56
+ "@wrongstack/security-scanner": "0.306.2",
57
+ "@wrongstack/sage": "0.306.2",
58
+ "@wrongstack/runtime": "0.306.2",
59
+ "@wrongstack/telegram": "0.306.2",
60
+ "@wrongstack/simpleui": "0.306.2",
61
+ "@wrongstack/techstack": "0.306.2",
62
+ "@wrongstack/webui-hq": "0.306.2",
63
+ "@wrongstack/webui": "0.306.2",
64
+ "@wrongstack/tui": "0.306.2",
65
+ "@wrongstack/webui-server": "0.306.2",
66
+ "@wrongstack/tools": "0.306.2"
67
67
  },
68
68
  "optionalDependencies": {
69
- "@wrongstack/desktop": "0.305.1"
69
+ "@wrongstack/desktop": "0.306.2"
70
70
  },
71
71
  "devDependencies": {
72
72
  "@types/node": "^26.1.2",