gaunt-sloth 2.0.0-alpha.10 → 2.0.0-alpha.12

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 (53) hide show
  1. package/dist/cli.js +4 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/askCommand.d.ts +3 -2
  4. package/dist/commands/askCommand.js +5 -4
  5. package/dist/commands/askCommand.js.map +1 -1
  6. package/dist/commands/configCommand.js +14 -5
  7. package/dist/commands/configCommand.js.map +1 -1
  8. package/dist/commands/firstRunDialog.d.ts +22 -2
  9. package/dist/commands/firstRunDialog.js +45 -4
  10. package/dist/commands/firstRunDialog.js.map +1 -1
  11. package/dist/commands/historyCommand.d.ts +10 -6
  12. package/dist/commands/historyCommand.js +41 -11
  13. package/dist/commands/historyCommand.js.map +1 -1
  14. package/dist/commands/modelsCommand.d.ts +25 -0
  15. package/dist/commands/modelsCommand.js +96 -0
  16. package/dist/commands/modelsCommand.js.map +1 -0
  17. package/dist/commands/prDiscovery.d.ts +2 -2
  18. package/dist/commands/prDiscovery.js.map +1 -1
  19. package/dist/tui/components/App.js +152 -4
  20. package/dist/tui/components/App.js.map +1 -1
  21. package/dist/tui/components/DebugPanel.d.ts +16 -3
  22. package/dist/tui/components/DebugPanel.js +23 -5
  23. package/dist/tui/components/DebugPanel.js.map +1 -1
  24. package/dist/tui/components/FetchProgress.d.ts +36 -0
  25. package/dist/tui/components/FetchProgress.js +39 -0
  26. package/dist/tui/components/FetchProgress.js.map +1 -0
  27. package/dist/tui/components/LiveTurn.d.ts +22 -0
  28. package/dist/tui/components/LiveTurn.js +2 -2
  29. package/dist/tui/components/LiveTurn.js.map +1 -1
  30. package/dist/tui/components/NoticeBar.d.ts +19 -0
  31. package/dist/tui/components/NoticeBar.js +23 -0
  32. package/dist/tui/components/NoticeBar.js.map +1 -0
  33. package/dist/tui/components/SelectList.d.ts +73 -9
  34. package/dist/tui/components/SelectList.js +142 -30
  35. package/dist/tui/components/SelectList.js.map +1 -1
  36. package/dist/tui/components/Transcript.js +6 -1
  37. package/dist/tui/components/Transcript.js.map +1 -1
  38. package/dist/tui/debugRender.d.ts +26 -0
  39. package/dist/tui/debugRender.js +66 -0
  40. package/dist/tui/debugRender.js.map +1 -1
  41. package/dist/tui/debugSearch.d.ts +40 -0
  42. package/dist/tui/debugSearch.js +73 -0
  43. package/dist/tui/debugSearch.js.map +1 -0
  44. package/dist/tui/selectCancelled.d.ts +13 -0
  45. package/dist/tui/selectCancelled.js +17 -0
  46. package/dist/tui/selectCancelled.js.map +1 -0
  47. package/dist/tui/slashCommands.d.ts +52 -5
  48. package/dist/tui/slashCommands.js +102 -7
  49. package/dist/tui/slashCommands.js.map +1 -1
  50. package/dist/tui/tuiSessionModule.js +54 -18
  51. package/dist/tui/tuiSessionModule.js.map +1 -1
  52. package/dist/tui/types.d.ts +18 -2
  53. package/package.json +4 -4
package/dist/cli.js CHANGED
@@ -11,6 +11,7 @@ import { getCommand } from '#src/commands/getCommand.js';
11
11
  import { configCommand } from '#src/commands/configCommand.js';
12
12
  import { historyCommand } from '#src/commands/historyCommand.js';
13
13
  import { insightsCommand } from '#src/commands/insightsCommand.js';
14
+ import { modelsCommand } from '#src/commands/modelsCommand.js';
14
15
  import { argv, getSlothVersion, readStdin } from '@gaunt-sloth/core/utils/systemUtils.js';
15
16
  import { coerceBooleanOrString } from '@gaunt-sloth/core/utils/consoleUtils.js';
16
17
  const program = new Command();
@@ -74,5 +75,8 @@ configCommand(program, cliConfigOverrides);
74
75
  // default or --db) and do not build the LLM, so they stay decoupled from config/provider setup.
75
76
  historyCommand(program);
76
77
  insightsCommand(program);
78
+ // GS2-6 (B16) — model catalog: lists providers/models enriched with models.dev cost/limit metadata.
79
+ // Read-only; enrichment never gates what `/v1/models` reports as callable.
80
+ modelsCommand(program);
77
81
  await readStdin(program);
78
82
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAG1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAEhF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,gCAAgC,CAAC;KAC7C,OAAO,CAAC,eAAe,EAAE,CAAC;KAC1B,MAAM,CACL,WAAW,EACX,2CAA2C;IACzC,kEAAkE;IAClE,0EAA0E,CAC7E;KACA,MAAM,CAAC,qBAAqB,EAAE,mCAAmC,CAAC;KAClE,MAAM,CAAC,mCAAmC,EAAE,gDAAgD,CAAC;KAC7F,MAAM,CACL,oCAAoC,EACpC,0FAA0F,CAC3F;KACA,MAAM,CAAC,OAAO,EAAE,8EAA8E,CAAC;KAC/F,MAAM,CAAC,UAAU,EAAE,kEAAkE,CAAC;KACtF,SAAS,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAEpD,MAAM,kBAAkB,GAA+B,EAAE,CAAC;AAE1D,mDAAmD;AACnD,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC3B,IAAI,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;IACtC;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;AACpC,CAAC;AACD,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;IACrC,2BAA2B;IAC3B,kBAAkB,CAAC,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACzE,CAAC;AACD,IAAI,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,CAAC;IAC9C,kBAAkB,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;AACjF,CAAC;AAED,4FAA4F;AAC5F,4FAA4F;AAC5F,mFAAmF;AACnF,IAAI,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;IAClD,kBAAkB,CAAC,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;AAEhE,qEAAqE;AACrE,oEAAoE;AACpE,6EAA6E;AAC7E,MAAM,OAAO,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;AACnD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;IAC1B,kBAAkB,CAAC,iBAAiB,GAAG,OAAO,CAAC;AACjD,CAAC;AAED,sEAAsE;AACtE,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,aAAa,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AAC3C,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AACvC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AACxC,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AACzC,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AACzC,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AACzC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AACxC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AACxC,aAAa,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AAC3C,mGAAmG;AACnG,gGAAgG;AAChG,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,eAAe,CAAC,OAAO,CAAC,CAAC;AAEzB,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -16,8 +16,9 @@ interface AskCommandOptions {
16
16
  *
17
17
  * Filesystem mode is overridden on the per-command `commands.ask` slice (where
18
18
  * `getEffectiveConfig` reads it from), and `askWriteMode` is set so the agent's tool resolution
19
- * enables dev tools for `ask`. Dev tools reuse exec's (falling back to code's) `devTools` config
20
- * so users don't have to configure a separate `commands.ask.devTools`. Returns the config
19
+ * enables dev tools for `ask`. CFG-18: the dev/shell tools live in the unified `builtInTools`
20
+ * registry, so `ask --write` reuses exec's (falling back to code's) `builtInTools` config — copied
21
+ * onto `commands.ask.builtInTools` — rather than a separate `devTools` key. Returns the config
21
22
  * untouched when `--write` is not set.
22
23
  *
23
24
  * Exported for unit testing.
@@ -10,8 +10,9 @@ import { readMultipleFilesFromProjectDir } from '@gaunt-sloth/core/utils/fileUti
10
10
  *
11
11
  * Filesystem mode is overridden on the per-command `commands.ask` slice (where
12
12
  * `getEffectiveConfig` reads it from), and `askWriteMode` is set so the agent's tool resolution
13
- * enables dev tools for `ask`. Dev tools reuse exec's (falling back to code's) `devTools` config
14
- * so users don't have to configure a separate `commands.ask.devTools`. Returns the config
13
+ * enables dev tools for `ask`. CFG-18: the dev/shell tools live in the unified `builtInTools`
14
+ * registry, so `ask --write` reuses exec's (falling back to code's) `builtInTools` config — copied
15
+ * onto `commands.ask.builtInTools` — rather than a separate `devTools` key. Returns the config
15
16
  * untouched when `--write` is not set.
16
17
  *
17
18
  * Exported for unit testing.
@@ -21,7 +22,7 @@ export function applyAskWriteMode(config, options) {
21
22
  return config;
22
23
  }
23
24
  displayWarning('ask --write: filesystem and dev tools enabled — this run can read/write files and run commands.');
24
- const askDevTools = config.commands?.exec?.devTools ?? config.commands?.code?.devTools;
25
+ const askBuiltInTools = config.commands?.exec?.builtInTools ?? config.commands?.code?.builtInTools;
25
26
  return {
26
27
  ...config,
27
28
  askWriteMode: true,
@@ -30,7 +31,7 @@ export function applyAskWriteMode(config, options) {
30
31
  ask: {
31
32
  ...config.commands?.ask,
32
33
  filesystem: 'all',
33
- ...(askDevTools ? { devTools: askDevTools } : {}),
34
+ ...(askBuiltInTools ? { builtInTools: askBuiltInTools } : {}),
34
35
  },
35
36
  },
36
37
  };
@@ -1 +1 @@
1
- {"version":3,"file":"askCommand.js","sourceRoot":"","sources":["../../src/commands/askCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"askCommand.js","sourceRoot":"","sources":["../../src/commands/askCommand.ts"],"names":[],"mappings":"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"}
@@ -88,14 +88,23 @@ export function configCommand(program, commandLineConfigOverrides) {
88
88
  setExitCode(1);
89
89
  return;
90
90
  }
91
- for (const warning of report.warnings) {
92
- displayWarning(warning);
91
+ // GS2-29 — a run validates every layer (project + global), so the report carries a
92
+ // per-layer verdict. Prefix each warning/error with its source label so the user knows
93
+ // which file to fix.
94
+ for (const layer of report.layers) {
95
+ for (const warning of layer.warnings) {
96
+ displayWarning(`${layer.sourceLabel}: ${warning}`);
97
+ }
93
98
  }
94
- if (report.ok) {
95
- displaySuccess(`Configuration is valid: ${report.sourceLabel}`);
99
+ const invalidLayers = report.layers.filter((layer) => !layer.ok);
100
+ if (invalidLayers.length === 0) {
101
+ displaySuccess(`Configuration is valid: ${report.layers.map((layer) => layer.sourceLabel).join(', ')}`);
96
102
  return;
97
103
  }
98
- displayError(`Invalid configuration in ${report.sourceLabel}:\n${report.errorMessage ?? ''}`);
104
+ // Report EVERY failing layer, not just the first, so the user fixes all offending files.
105
+ for (const layer of invalidLayers) {
106
+ displayError(`Invalid configuration in ${layer.sourceLabel}:\n${layer.errorMessage ?? ''}`);
107
+ }
99
108
  setExitCode(1);
100
109
  }
101
110
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"configCommand.js","sourceRoot":"","sources":["../../src/commands/configCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configCommand.js","sourceRoot":"","sources":["../../src/commands/configCommand.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { detectProviders, listModels, type DetectedProvider, type ModelInfo, type ProviderId } from '@gaunt-sloth/core/providers/modelDiscovery.js';
1
+ import { detectProviders, type DetectedProvider, type ModelDiscoveryResult, type ModelInfo, type ProviderId } from '@gaunt-sloth/core/providers/modelDiscovery.js';
2
2
  import { ensureGslothDir, writeProjectReviewPreamble } from '#src/commands/configSetup.js';
3
3
  /**
4
4
  * Where the first-run dialog (CFG-2) persists the chosen provider/model config.
@@ -22,7 +22,19 @@ export type SelectFn = (title: string, options: string[], defaultIndex: number)
22
22
  */
23
23
  export interface FirstRunDialogDeps {
24
24
  detectProviders: typeof detectProviders;
25
- listModels: typeof listModels;
25
+ /**
26
+ * CFG-21 — fetches the chosen provider's model list WITH its {@link ModelDiscoveryResult}
27
+ * provenance, baking in the generous interactive timeout by default. Returns `{ models, status }`
28
+ * so the dialog can surface an honest degrade notice when a live fetch was attempted and failed
29
+ * (`status: 'fallback'`) rather than silently swapping in a by-design curated list (`'curated'`).
30
+ */
31
+ fetchModels: (providerId: ProviderId) => Promise<ModelDiscoveryResult>;
32
+ /**
33
+ * CFG-21 — runs `run` while a visible "working" indicator is shown (an Ink spinner on an
34
+ * interactive TTY, a plain printed line otherwise), clearing it when `run` settles. The model
35
+ * fetch is routed through this seam so the wait is never silent and a test can assert it fired.
36
+ */
37
+ withProgress: <T>(label: string, run: () => Promise<T>) => Promise<T>;
26
38
  ensureGslothDir: typeof ensureGslothDir;
27
39
  writeProjectReviewPreamble: typeof writeProjectReviewPreamble;
28
40
  /** Resolves the config file path for the chosen scope (does not write). */
@@ -67,6 +79,14 @@ export declare function resolveConfigWritePath(scope: ConfigScope): string;
67
79
  * `✓`/blank mark read like a selection checkbox; this spells the state out instead.
68
80
  */
69
81
  export declare function providerReadinessLabel(provider: DetectedProvider): string;
82
+ /**
83
+ * CFG-21 — the default {@link FirstRunDialogDeps.withProgress}: an Ink spinner while `run` is in
84
+ * flight when the environment can drive interactive Ink (the same activation policy as
85
+ * {@link makeDefaultSelect}), otherwise a plain printed line via {@link displayInfo} on the
86
+ * readline / non-TTY path. Either way the wait is visible, never silent. The Ink module is
87
+ * imported lazily so a readline-only run never loads React/Ink.
88
+ */
89
+ export declare function makeDefaultProgress(): <T>(label: string, run: () => Promise<T>) => Promise<T>;
70
90
  /**
71
91
  * CFG-2 — the first-run configuration dialog.
72
92
  *
@@ -1,5 +1,5 @@
1
1
  import { USER_PROJECT_CONFIG_JSON } from '@gaunt-sloth/core/constants.js';
2
- import { buildInitConfigContent, detectProviders, listModels, } from '@gaunt-sloth/core/providers/modelDiscovery.js';
2
+ import { buildInitConfigContent, detectProviders, discoverModelsWithProvenance, INTERACTIVE_MODEL_FETCH_TIMEOUT_MS, } from '@gaunt-sloth/core/providers/modelDiscovery.js';
3
3
  import { getGlobalGslothConfigWritePath } from '@gaunt-sloth/core/utils/globalConfigUtils.js';
4
4
  import { displayInfo, displaySuccess, displayWarning, } from '@gaunt-sloth/core/utils/consoleUtils.js';
5
5
  import { createInterface, env, stdin, stdout, } from '@gaunt-sloth/core/utils/systemUtils.js';
@@ -8,6 +8,7 @@ import { ensureGslothDir, writeProjectReviewPreamble } from '#src/commands/confi
8
8
  import { existsSync } from 'node:fs';
9
9
  import { shouldUseTui } from '#src/tui/shouldUseTui.js';
10
10
  import { isInkAvailable } from '#src/tui/loadInk.js';
11
+ import { SelectCancelledError } from '#src/tui/selectCancelled.js';
11
12
  /**
12
13
  * Orders providers so usable ones (API key present / Ollama running) come first,
13
14
  * preserving the registry order within each group (Array.prototype.sort is stable).
@@ -128,6 +129,23 @@ function makeDefaultSelect(ask) {
128
129
  return await promptMenu(ask, `\nChoice [${defaultIndex + 1}]: `, options.length, defaultIndex);
129
130
  };
130
131
  }
132
+ /**
133
+ * CFG-21 — the default {@link FirstRunDialogDeps.withProgress}: an Ink spinner while `run` is in
134
+ * flight when the environment can drive interactive Ink (the same activation policy as
135
+ * {@link makeDefaultSelect}), otherwise a plain printed line via {@link displayInfo} on the
136
+ * readline / non-TTY path. Either way the wait is visible, never silent. The Ink module is
137
+ * imported lazily so a readline-only run never loads React/Ink.
138
+ */
139
+ export function makeDefaultProgress() {
140
+ return async (label, run) => {
141
+ if (await canUseInkSelect()) {
142
+ const { runWithInkProgress } = await import('#src/tui/components/FetchProgress.js');
143
+ return runWithInkProgress(label, run);
144
+ }
145
+ displayInfo(label);
146
+ return run();
147
+ };
148
+ }
131
149
  /**
132
150
  * CFG-2 — the first-run configuration dialog.
133
151
  *
@@ -150,7 +168,8 @@ export async function runFirstRunDialog(overrides = {}, force = false) {
150
168
  });
151
169
  const deps = {
152
170
  detectProviders,
153
- listModels,
171
+ fetchModels: (providerId) => discoverModelsWithProvenance(providerId, { timeoutMs: INTERACTIVE_MODEL_FETCH_TIMEOUT_MS }),
172
+ withProgress: makeDefaultProgress(),
154
173
  ensureGslothDir,
155
174
  writeProjectReviewPreamble,
156
175
  resolveConfigPath: resolveConfigWritePath,
@@ -174,8 +193,11 @@ export async function runFirstRunDialog(overrides = {}, force = false) {
174
193
  ? 'complete its external authentication'
175
194
  : 'set its API key environment variable'} before running gsloth. Writing the config so you can fill in the rest.`);
176
195
  }
177
- // 2. Model.
178
- const models = await deps.listModels(provider.id);
196
+ // 2. Model. The live fetch can take a moment for a large cloud catalog (OpenRouter ~300
197
+ // models), so show a visible indicator while it runs (CFG-21) instead of a silent pause,
198
+ // and fetch with the generous interactive timeout (baked into deps.fetchModels) so a big
199
+ // list is not lost to the short 2s probe race and silently replaced by a curated stub.
200
+ const { models, status } = await deps.withProgress(`Fetching models from ${provider.label}…`, () => deps.fetchModels(provider.id));
179
201
  let model;
180
202
  if (models.length === 0) {
181
203
  displayWarning(`No models discovered for ${provider.label}.`);
@@ -186,6 +208,13 @@ export async function runFirstRunDialog(overrides = {}, force = false) {
186
208
  }
187
209
  }
188
210
  else {
211
+ // CFG-21 — when a live fetch WAS attempted and fell back to the curated stub, say so, so a
212
+ // short curated list is never mistaken for the provider's full catalog. Fires ONLY on
213
+ // `status: 'fallback'` (attempted-and-failed) — never for a by-design `curated` list
214
+ // (`kind:'none'` provider or no API key present), and never on the empty-list path above.
215
+ if (status === 'fallback') {
216
+ displayWarning(`Couldn't reach ${provider.label}; showing a short curated list.`);
217
+ }
189
218
  const fallback = defaultModelIndex(models);
190
219
  const modelOptions = models.map((m) => `${m.preferred ? '⭐ ' : ' '}${m.id}`);
191
220
  model =
@@ -222,6 +251,18 @@ export async function runFirstRunDialog(overrides = {}, force = false) {
222
251
  displayInfo('Remember to set your API key environment variable before running gsloth.');
223
252
  }
224
253
  }
254
+ catch (e) {
255
+ // CFG-20 — a Ctrl+C (any step) or an Esc on the first step aborts the whole dialog: unwind
256
+ // out of whichever `select` was open and return WITHOUT writing a config and WITHOUT the false
257
+ // "Configured … / Config written to …" success line (mirroring CFG-19's honest-skip contract).
258
+ // The caller (startSession / initCommand) sees no config was written and does not launch a
259
+ // session. Any non-abort error still propagates.
260
+ if (e instanceof SelectCancelledError) {
261
+ displayWarning('Setup cancelled. No configuration was written.');
262
+ return;
263
+ }
264
+ throw e;
265
+ }
225
266
  finally {
226
267
  rlHolder.current?.close();
227
268
  }
@@ -1 +1 @@
1
- {"version":3,"file":"firstRunDialog.js","sourceRoot":"","sources":["../../src/commands/firstRunDialog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firstRunDialog.js","sourceRoot":"","sources":["../../src/commands/firstRunDialog.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,17 @@
1
1
  import { Command } from 'commander';
2
2
  /**
3
- * GS2-7 (B20) — the `gth history` command group over the local, opt-in session store.
3
+ * GS2-7 (B20) / GS2-19 — the `gth history` command group over the local, opt-in session store.
4
4
  *
5
- * - `gth history search <query...>` — FTS5 full-text search across past sessions.
6
- * - `gth history list` — the most recent sessions.
5
+ * - `gth history search <query...>` — FTS5 full-text search across past turns; each hit shows the
6
+ * parent conversation it belongs to (GS2-19).
7
+ * - `gth history list` — the most recent conversations (grouped, with turn count + timespan), the
8
+ * top-level unit since GS2-19 (was a flat per-turn list).
9
+ * - `gth history show <id>` — print a whole conversation thread, all turns in order (GS2-19).
7
10
  *
8
- * Both are READ-ONLY and fail-soft: they open the store with `create: false`, so a missing DB
11
+ * All are READ-ONLY and fail-soft: they open the store with `create: false`, so a missing DB
9
12
  * (history never enabled) simply reports "no history yet" instead of materialising an empty file.
10
- * The DB defaults to the global `~/.gsloth/history.db`; `--db <path>` overrides it. Local only —
11
- * nothing here touches the network.
13
+ * (Opening still migrates a pre-GS2-19 DB in place — see {@link HistoryStore} migrate.) The DB
14
+ * defaults to the global `~/.gsloth/history.db`; `--db <path>` overrides it. Local only — nothing
15
+ * here touches the network.
12
16
  */
13
17
  export declare function historyCommand(program: Command): void;
@@ -1,16 +1,20 @@
1
1
  import { openHistoryStore, resolveHistoryDbPath } from '@gaunt-sloth/core/history/historyStore.js';
2
- import { formatHistoryList, formatSearchResults } from '@gaunt-sloth/core/history/historyFormat.js';
2
+ import { formatConversationList, formatConversationThread, formatSearchResults, } from '@gaunt-sloth/core/history/historyFormat.js';
3
3
  import { display, displayInfo, displayWarning } from '@gaunt-sloth/core/utils/consoleUtils.js';
4
4
  /**
5
- * GS2-7 (B20) — the `gth history` command group over the local, opt-in session store.
5
+ * GS2-7 (B20) / GS2-19 — the `gth history` command group over the local, opt-in session store.
6
6
  *
7
- * - `gth history search <query...>` — FTS5 full-text search across past sessions.
8
- * - `gth history list` — the most recent sessions.
7
+ * - `gth history search <query...>` — FTS5 full-text search across past turns; each hit shows the
8
+ * parent conversation it belongs to (GS2-19).
9
+ * - `gth history list` — the most recent conversations (grouped, with turn count + timespan), the
10
+ * top-level unit since GS2-19 (was a flat per-turn list).
11
+ * - `gth history show <id>` — print a whole conversation thread, all turns in order (GS2-19).
9
12
  *
10
- * Both are READ-ONLY and fail-soft: they open the store with `create: false`, so a missing DB
13
+ * All are READ-ONLY and fail-soft: they open the store with `create: false`, so a missing DB
11
14
  * (history never enabled) simply reports "no history yet" instead of materialising an empty file.
12
- * The DB defaults to the global `~/.gsloth/history.db`; `--db <path>` overrides it. Local only —
13
- * nothing here touches the network.
15
+ * (Opening still migrates a pre-GS2-19 DB in place — see {@link HistoryStore} migrate.) The DB
16
+ * defaults to the global `~/.gsloth/history.db`; `--db <path>` overrides it. Local only — nothing
17
+ * here touches the network.
14
18
  */
15
19
  export function historyCommand(program) {
16
20
  const history = program
@@ -41,7 +45,7 @@ export function historyCommand(program) {
41
45
  });
42
46
  history
43
47
  .command('list')
44
- .description('List the most recent recorded sessions')
48
+ .description('List the most recent recorded conversations')
45
49
  .option('--db <path>', 'path to the history DB (defaults to ~/.gsloth/history.db)')
46
50
  .option('--limit <n>', 'maximum results', '20')
47
51
  .action((options) => {
@@ -52,9 +56,35 @@ export function historyCommand(program) {
52
56
  }
53
57
  try {
54
58
  const limit = clampLimit(options.limit);
55
- const results = store.listRecent(limit);
56
- displayInfo('Recent sessions:');
57
- for (const line of formatHistoryList(results))
59
+ const conversations = store.listConversations(limit);
60
+ displayInfo('Recent conversations:');
61
+ for (const line of formatConversationList(conversations))
62
+ display(line);
63
+ }
64
+ finally {
65
+ store.close();
66
+ }
67
+ });
68
+ history
69
+ .command('show')
70
+ .description('Print a whole conversation thread (all turns in order)')
71
+ .argument('<id>', 'conversation id (from `history list` / `history search`)')
72
+ .option('--db <path>', 'path to the history DB (defaults to ~/.gsloth/history.db)')
73
+ .action((idArg, options) => {
74
+ const store = openHistoryStore(resolveHistoryDbPath(options.db), { create: false });
75
+ if (!store) {
76
+ displayWarning('No session history found. Enable it with `history.enabled: true` in your config.');
77
+ return;
78
+ }
79
+ try {
80
+ const id = Number.parseInt(idArg, 10);
81
+ if (!Number.isFinite(id) || id <= 0) {
82
+ displayWarning(`Invalid conversation id "${idArg}".`);
83
+ return;
84
+ }
85
+ const turns = store.getConversationThread(id);
86
+ displayInfo(`Conversation #${id}:`);
87
+ for (const line of formatConversationThread(turns))
58
88
  display(line);
59
89
  }
60
90
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"historyCommand.js","sourceRoot":"","sources":["../../src/commands/historyCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"historyCommand.js","sourceRoot":"","sources":["../../src/commands/historyCommand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { Command } from 'commander';
2
+ import { type ProviderId } from '@gaunt-sloth/core/providers/modelDiscovery.js';
3
+ import { type ModelCatalogEntry } from '@gaunt-sloth/core/providers/modelCatalog.js';
4
+ /**
5
+ * GS2-6 (B16) — `gth models`: list the models available on this machine, enriched with
6
+ * cost / context-limit / capability metadata from models.dev.
7
+ *
8
+ * `/v1/models` discovery stays authoritative for *what is callable* (`modelDiscovery.ts`);
9
+ * models.dev only decorates cloud model ids. A cloud model models.dev has never heard of is still
10
+ * listed (unenriched), and if models.dev is unreachable the whole list still prints — just without
11
+ * metadata. Local/self-hosted providers (ollama) get no catalog lookup at all.
12
+ *
13
+ * - `gth models` — list detected providers and their (enriched) models.
14
+ * - `gth models --refresh` — force a models.dev re-fetch past the cache TTL before listing.
15
+ * - `gth models --provider <id>` — scope the listing to a single provider.
16
+ */
17
+ export declare function modelsCommand(program: Command): void;
18
+ /**
19
+ * Render a model's catalog metadata as a compact bracketed suffix, e.g.
20
+ * `[ctx 200k · out 64k · in $5/1M · out $25/1M · tools · reasoning] *`. Returns '' when there is no
21
+ * enrichment (the model is still listed — it is simply callable-but-unenriched). Costs are US$ per
22
+ * 1M tokens (models.dev's unit); the trailing `*` ties back to the attribution footer.
23
+ */
24
+ export declare function formatEnrichment(entry: ModelCatalogEntry | undefined): string;
25
+ export type { ProviderId };
@@ -0,0 +1,96 @@
1
+ import { detectProviders, } from '@gaunt-sloth/core/providers/modelDiscovery.js';
2
+ import { enrichModels, CATALOG_ATTRIBUTION, } from '@gaunt-sloth/core/providers/modelCatalog.js';
3
+ import { display, displayInfo, displayWarning } from '@gaunt-sloth/core/utils/consoleUtils.js';
4
+ /**
5
+ * GS2-6 (B16) — `gth models`: list the models available on this machine, enriched with
6
+ * cost / context-limit / capability metadata from models.dev.
7
+ *
8
+ * `/v1/models` discovery stays authoritative for *what is callable* (`modelDiscovery.ts`);
9
+ * models.dev only decorates cloud model ids. A cloud model models.dev has never heard of is still
10
+ * listed (unenriched), and if models.dev is unreachable the whole list still prints — just without
11
+ * metadata. Local/self-hosted providers (ollama) get no catalog lookup at all.
12
+ *
13
+ * - `gth models` — list detected providers and their (enriched) models.
14
+ * - `gth models --refresh` — force a models.dev re-fetch past the cache TTL before listing.
15
+ * - `gth models --provider <id>` — scope the listing to a single provider.
16
+ */
17
+ export function modelsCommand(program) {
18
+ program
19
+ .command('models')
20
+ .description('List available models, enriched with cost/context metadata from models.dev')
21
+ .option('--refresh', 'Force a models.dev catalog re-fetch past the cache TTL')
22
+ .option('--provider <id>', 'Only list models for a single provider (e.g. anthropic, openai)')
23
+ .action(async (options) => {
24
+ const providers = await detectProviders();
25
+ const filtered = options.provider
26
+ ? providers.filter((p) => p.id === options.provider)
27
+ : providers;
28
+ if (options.provider && filtered.length === 0) {
29
+ displayWarning(`Unknown provider "${options.provider}". Known: ${providers.map((p) => p.id).join(', ')}.`);
30
+ return;
31
+ }
32
+ let anyEnriched = false;
33
+ for (const provider of filtered) {
34
+ const enriched = await enrichModels(provider.id, provider.models, {
35
+ refresh: options.refresh,
36
+ });
37
+ printProvider(provider, enriched);
38
+ if (enriched.some((m) => m.enrichment))
39
+ anyEnriched = true;
40
+ }
41
+ // Only claim attribution when we actually surfaced models.dev metadata.
42
+ if (anyEnriched) {
43
+ display('');
44
+ display(CATALOG_ATTRIBUTION);
45
+ }
46
+ });
47
+ }
48
+ /** Print one provider's header and its (enriched) model list. */
49
+ function printProvider(provider, models) {
50
+ const status = provider.available ? '' : ' (no key detected)';
51
+ displayInfo(`\n${provider.label} [${provider.id}]${status}`);
52
+ if (models.length === 0) {
53
+ display(' (no models discovered)');
54
+ return;
55
+ }
56
+ for (const model of models) {
57
+ const star = model.preferred ? '⭐ ' : ' ';
58
+ const meta = formatEnrichment(model.enrichment);
59
+ display(` ${star}${model.id}${meta ? ` ${meta}` : ''}`);
60
+ }
61
+ }
62
+ /**
63
+ * Render a model's catalog metadata as a compact bracketed suffix, e.g.
64
+ * `[ctx 200k · out 64k · in $5/1M · out $25/1M · tools · reasoning] *`. Returns '' when there is no
65
+ * enrichment (the model is still listed — it is simply callable-but-unenriched). Costs are US$ per
66
+ * 1M tokens (models.dev's unit); the trailing `*` ties back to the attribution footer.
67
+ */
68
+ export function formatEnrichment(entry) {
69
+ if (!entry)
70
+ return '';
71
+ const parts = [];
72
+ if (entry.limit?.context !== undefined)
73
+ parts.push(`ctx ${formatTokens(entry.limit.context)}`);
74
+ if (entry.limit?.output !== undefined)
75
+ parts.push(`out ${formatTokens(entry.limit.output)}`);
76
+ if (entry.cost?.input !== undefined)
77
+ parts.push(`in $${entry.cost.input}/1M`);
78
+ if (entry.cost?.output !== undefined)
79
+ parts.push(`out $${entry.cost.output}/1M`);
80
+ if (entry.toolCall)
81
+ parts.push('tools');
82
+ if (entry.reasoning)
83
+ parts.push('reasoning');
84
+ if (parts.length === 0)
85
+ return '';
86
+ return `[${parts.join(' · ')}] *`;
87
+ }
88
+ /** Human-friendly token count: 200000 → "200k", 1500000 → "1.5M". */
89
+ function formatTokens(n) {
90
+ if (n >= 1_000_000)
91
+ return `${Number((n / 1_000_000).toFixed(1))}M`;
92
+ if (n >= 1_000)
93
+ return `${Math.round(n / 1_000)}k`;
94
+ return String(n);
95
+ }
96
+ //# sourceMappingURL=modelsCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelsCommand.js","sourceRoot":"","sources":["../../src/commands/modelsCommand.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { CustomToolsConfig, GthConfig, ServerTool } from '@gaunt-sloth/core/config.js';
1
+ import type { BuiltInToolsSetting, CustomToolsConfig, GthConfig, ServerTool } from '@gaunt-sloth/core/config.js';
2
2
  import { type BaseToolkit, StructuredToolInterface } from '@langchain/core/tools';
3
3
  export declare const GSLOTH_PR_DISCOVERY_PROMPT = ".gsloth.pr-discovery.md";
4
4
  export interface PrDiscoveryConfig {
@@ -18,7 +18,7 @@ export interface PrDiscoveryConfig {
18
18
  * When omitted, the normal configured tools remain available.
19
19
  */
20
20
  filesystem?: string[] | 'all' | 'read' | 'none';
21
- builtInTools?: string[];
21
+ builtInTools?: BuiltInToolsSetting;
22
22
  customTools?: CustomToolsConfig | false;
23
23
  tools?: StructuredToolInterface[] | BaseToolkit[] | ServerTool[];
24
24
  /**