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.
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/askCommand.d.ts +3 -2
- package/dist/commands/askCommand.js +5 -4
- package/dist/commands/askCommand.js.map +1 -1
- package/dist/commands/configCommand.js +14 -5
- package/dist/commands/configCommand.js.map +1 -1
- package/dist/commands/firstRunDialog.d.ts +22 -2
- package/dist/commands/firstRunDialog.js +45 -4
- package/dist/commands/firstRunDialog.js.map +1 -1
- package/dist/commands/historyCommand.d.ts +10 -6
- package/dist/commands/historyCommand.js +41 -11
- package/dist/commands/historyCommand.js.map +1 -1
- package/dist/commands/modelsCommand.d.ts +25 -0
- package/dist/commands/modelsCommand.js +96 -0
- package/dist/commands/modelsCommand.js.map +1 -0
- package/dist/commands/prDiscovery.d.ts +2 -2
- package/dist/commands/prDiscovery.js.map +1 -1
- package/dist/tui/components/App.js +152 -4
- package/dist/tui/components/App.js.map +1 -1
- package/dist/tui/components/DebugPanel.d.ts +16 -3
- package/dist/tui/components/DebugPanel.js +23 -5
- package/dist/tui/components/DebugPanel.js.map +1 -1
- package/dist/tui/components/FetchProgress.d.ts +36 -0
- package/dist/tui/components/FetchProgress.js +39 -0
- package/dist/tui/components/FetchProgress.js.map +1 -0
- package/dist/tui/components/LiveTurn.d.ts +22 -0
- package/dist/tui/components/LiveTurn.js +2 -2
- package/dist/tui/components/LiveTurn.js.map +1 -1
- package/dist/tui/components/NoticeBar.d.ts +19 -0
- package/dist/tui/components/NoticeBar.js +23 -0
- package/dist/tui/components/NoticeBar.js.map +1 -0
- package/dist/tui/components/SelectList.d.ts +73 -9
- package/dist/tui/components/SelectList.js +142 -30
- package/dist/tui/components/SelectList.js.map +1 -1
- package/dist/tui/components/Transcript.js +6 -1
- package/dist/tui/components/Transcript.js.map +1 -1
- package/dist/tui/debugRender.d.ts +26 -0
- package/dist/tui/debugRender.js +66 -0
- package/dist/tui/debugRender.js.map +1 -1
- package/dist/tui/debugSearch.d.ts +40 -0
- package/dist/tui/debugSearch.js +73 -0
- package/dist/tui/debugSearch.js.map +1 -0
- package/dist/tui/selectCancelled.d.ts +13 -0
- package/dist/tui/selectCancelled.js +17 -0
- package/dist/tui/selectCancelled.js.map +1 -0
- package/dist/tui/slashCommands.d.ts +52 -5
- package/dist/tui/slashCommands.js +102 -7
- package/dist/tui/slashCommands.js.map +1 -1
- package/dist/tui/tuiSessionModule.js +54 -18
- package/dist/tui/tuiSessionModule.js.map +1 -1
- package/dist/tui/types.d.ts +18 -2
- 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":"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
|
|
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`.
|
|
20
|
-
* so
|
|
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`.
|
|
14
|
-
* so
|
|
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
|
|
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
|
-
...(
|
|
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":"AACA,OAAO,EAA8B,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAErF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAElE,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAYvF
|
|
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
|
-
|
|
92
|
-
|
|
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
|
-
|
|
95
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,
|
|
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
|
|
6
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
11
|
-
*
|
|
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 {
|
|
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
|
|
8
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
13
|
-
*
|
|
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
|
|
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
|
|
56
|
-
displayInfo('Recent
|
|
57
|
-
for (const line of
|
|
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":"AACA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACnG,OAAO,
|
|
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?:
|
|
21
|
+
builtInTools?: BuiltInToolsSetting;
|
|
22
22
|
customTools?: CustomToolsConfig | false;
|
|
23
23
|
tools?: StructuredToolInterface[] | BaseToolkit[] | ServerTool[];
|
|
24
24
|
/**
|