gaunt-sloth 2.0.0-alpha.2 → 2.0.0-alpha.21
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/README.md +55 -5
- package/cli.js +43 -10
- package/dist/cli.js +33 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/adkEvalRunner.d.ts +66 -0
- package/dist/commands/adkEvalRunner.js +69 -0
- package/dist/commands/adkEvalRunner.js.map +1 -0
- package/dist/commands/agUiEvalRunner.d.ts +73 -0
- package/dist/commands/agUiEvalRunner.js +216 -0
- package/dist/commands/agUiEvalRunner.js.map +1 -0
- package/dist/commands/askCommand.d.ts +3 -2
- package/dist/commands/askCommand.js +26 -7
- package/dist/commands/askCommand.js.map +1 -1
- package/dist/commands/batchCommand.d.ts +78 -0
- package/dist/commands/batchCommand.js +245 -0
- package/dist/commands/batchCommand.js.map +1 -0
- package/dist/commands/cliOptionParsers.d.ts +12 -0
- package/dist/commands/cliOptionParsers.js +18 -0
- package/dist/commands/cliOptionParsers.js.map +1 -0
- package/dist/commands/commandIntrospection.d.ts +6 -6
- package/dist/commands/commandIntrospection.js +12 -12
- package/dist/commands/commandIntrospection.js.map +1 -1
- package/dist/commands/commandUtils.d.ts +16 -16
- package/dist/commands/commandUtils.js +20 -20
- package/dist/commands/commandUtils.js.map +1 -1
- package/dist/commands/configCommand.d.ts +24 -0
- package/dist/commands/configCommand.js +117 -0
- package/dist/commands/configCommand.js.map +1 -0
- package/dist/commands/configSetup.d.ts +1 -1
- package/dist/commands/configSetup.js +17 -2
- package/dist/commands/configSetup.js.map +1 -1
- package/dist/commands/evalCommand.d.ts +41 -0
- package/dist/commands/evalCommand.js +483 -0
- package/dist/commands/evalCommand.js.map +1 -0
- package/dist/commands/execCommand.js +4 -1
- package/dist/commands/execCommand.js.map +1 -1
- package/dist/commands/firstRunDialog.d.ts +39 -5
- package/dist/commands/firstRunDialog.js +72 -10
- package/dist/commands/firstRunDialog.js.map +1 -1
- package/dist/commands/getCommand.js +7 -7
- package/dist/commands/getCommand.js.map +1 -1
- package/dist/commands/historyCommand.d.ts +17 -0
- package/dist/commands/historyCommand.js +102 -0
- package/dist/commands/historyCommand.js.map +1 -0
- package/dist/commands/initCommand.d.ts +3 -0
- package/dist/commands/initCommand.js +9 -4
- package/dist/commands/initCommand.js.map +1 -1
- package/dist/commands/insightsCommand.d.ts +8 -0
- package/dist/commands/insightsCommand.js +32 -0
- package/dist/commands/insightsCommand.js.map +1 -0
- 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/prCommand.js +14 -15
- package/dist/commands/prCommand.js.map +1 -1
- package/dist/commands/prDiscovery.d.ts +2 -2
- package/dist/commands/prDiscovery.js +27 -29
- package/dist/commands/prDiscovery.js.map +1 -1
- package/dist/commands/reviewCommand.js +15 -10
- package/dist/commands/reviewCommand.js.map +1 -1
- package/dist/commands/workflowCommand.d.ts +19 -0
- package/dist/commands/workflowCommand.js +77 -0
- package/dist/commands/workflowCommand.js.map +1 -0
- package/dist/helpers/jira/jiraLogWork.js.map +1 -1
- package/dist/modules/startSession.js +9 -7
- package/dist/modules/startSession.js.map +1 -1
- package/dist/tools/gthJiraLogWorkTool.js +3 -3
- package/dist/tools/gthJiraLogWorkTool.js.map +1 -1
- package/dist/tui/components/App.js +321 -21
- package/dist/tui/components/App.js.map +1 -1
- package/dist/tui/components/ApprovalPrompt.d.ts +18 -0
- package/dist/tui/components/ApprovalPrompt.js +26 -0
- package/dist/tui/components/ApprovalPrompt.js.map +1 -0
- package/dist/tui/components/DebugPanel.d.ts +29 -9
- package/dist/tui/components/DebugPanel.js +46 -23
- 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 +26 -4
- package/dist/tui/components/LiveTurn.js +104 -18
- package/dist/tui/components/LiveTurn.js.map +1 -1
- package/dist/tui/components/NoticeBar.d.ts +32 -0
- package/dist/tui/components/NoticeBar.js +39 -0
- package/dist/tui/components/NoticeBar.js.map +1 -0
- package/dist/tui/components/PromptInput.d.ts +26 -1
- package/dist/tui/components/PromptInput.js +93 -7
- package/dist/tui/components/PromptInput.js.map +1 -1
- package/dist/tui/components/Rule.js.map +1 -1
- package/dist/tui/components/SelectList.d.ts +98 -9
- package/dist/tui/components/SelectList.js +209 -26
- package/dist/tui/components/SelectList.js.map +1 -1
- package/dist/tui/components/SlashCommandMenu.d.ts +20 -0
- package/dist/tui/components/SlashCommandMenu.js +28 -0
- package/dist/tui/components/SlashCommandMenu.js.map +1 -0
- package/dist/tui/components/StatusBar.d.ts +7 -1
- package/dist/tui/components/StatusBar.js +7 -3
- package/dist/tui/components/StatusBar.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 +41 -6
- package/dist/tui/debugRender.js +126 -12
- 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/markdown.js +0 -0
- package/dist/tui/markdown.js.map +1 -1
- package/dist/tui/pasteParser.d.ts +21 -0
- package/dist/tui/pasteParser.js +24 -0
- package/dist/tui/pasteParser.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 +220 -1
- package/dist/tui/slashCommands.js +408 -1
- package/dist/tui/slashCommands.js.map +1 -1
- package/dist/tui/tuiSessionModule.js +249 -24
- package/dist/tui/tuiSessionModule.js.map +1 -1
- package/dist/tui/types.d.ts +96 -7
- package/dist/tui/viewModel.d.ts +34 -0
- package/dist/tui/viewModel.js +67 -0
- package/dist/tui/viewModel.js.map +1 -1
- package/dist/utils/stdinPolicy.d.ts +31 -0
- package/dist/utils/stdinPolicy.js +37 -0
- package/dist/utils/stdinPolicy.js.map +1 -0
- package/package.json +21 -17
package/dist/tui/viewModel.js
CHANGED
|
@@ -65,8 +65,35 @@ export function foldEvents(state, event) {
|
|
|
65
65
|
...tc,
|
|
66
66
|
status: 'done',
|
|
67
67
|
result: event.content,
|
|
68
|
+
isError: event.isError,
|
|
68
69
|
})),
|
|
69
70
|
};
|
|
71
|
+
case 'tool_output': {
|
|
72
|
+
// TUI-C17 — live output streamed while the tool executes. Chunks normally arrive BEFORE the
|
|
73
|
+
// call's `tool_start` (the agent stream only flushes tool_start when the round's ToolMessage
|
|
74
|
+
// lands), so upsertTool's placeholder path is the common case: seed the name from the event
|
|
75
|
+
// so the panel is labelled while running.
|
|
76
|
+
// Without an id (defensive: the invoking framework supplied no tool call), fall back to the
|
|
77
|
+
// most recent running call with the same name, else a synthetic per-name bucket — output is
|
|
78
|
+
// never silently dropped (mirrors the defensive posture above).
|
|
79
|
+
// TUI-C30 — notices accumulate on the SEPARATE `notice` field (newline-joined; they carry
|
|
80
|
+
// no trailing newline of their own) so the output preview counts only real child output.
|
|
81
|
+
const fallbackId = [...state.toolCalls]
|
|
82
|
+
.reverse()
|
|
83
|
+
.find((tc) => tc.name === event.name && tc.status === 'running')?.id ??
|
|
84
|
+
`${event.name}#live`;
|
|
85
|
+
const id = event.id ?? fallbackId;
|
|
86
|
+
return {
|
|
87
|
+
...state,
|
|
88
|
+
toolCalls: upsertTool(state.toolCalls, id, (tc) => ({
|
|
89
|
+
...tc,
|
|
90
|
+
name: tc.name || event.name,
|
|
91
|
+
...(event.isNotice
|
|
92
|
+
? { notice: tc.notice ? `${tc.notice}\n${event.chunk}` : event.chunk }
|
|
93
|
+
: { output: (tc.output ?? '') + event.chunk }),
|
|
94
|
+
})),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
70
97
|
default: {
|
|
71
98
|
// Exhaustiveness guard: a new AgentStreamEvent variant fails the build here.
|
|
72
99
|
const _never = event;
|
|
@@ -181,4 +208,44 @@ export function foldSubagentTree(events, state = initialSubagentTree()) {
|
|
|
181
208
|
const buffers = new Map();
|
|
182
209
|
return events.reduce((acc, ev) => foldSubagentEvents(acc, ev, buffers), state);
|
|
183
210
|
}
|
|
211
|
+
/* ------------------------------------------------------------------------- *
|
|
212
|
+
* Checklist tool (`gth_checklist`) *
|
|
213
|
+
* ------------------------------------------------------------------------- *
|
|
214
|
+
* The lean agent's planning tool takes `{ items: [{ content, status }] }`. When the TUI sees a
|
|
215
|
+
* tool call for this name it renders the streamed args as a live checkbox panel instead of a
|
|
216
|
+
* generic tool card. The name is kept as a local literal (like SUBAGENT_TOOL_NAME) so the TUI
|
|
217
|
+
* stays decoupled from the agent package. */
|
|
218
|
+
/** The tool name the lean agent uses to record its checklist. Matches `gthChecklistTool.ts`. */
|
|
219
|
+
export const CHECKLIST_TOOL_NAME = 'gth_checklist';
|
|
220
|
+
/**
|
|
221
|
+
* Best-effort parse of a (possibly partial) streamed `gth_checklist` args JSON into rows. Mirrors
|
|
222
|
+
* {@link parseTaskArgs}: a half-streamed or malformed buffer never throws — it returns `null` so
|
|
223
|
+
* the renderer keeps showing the last good state (or falls back to the generic tool panel).
|
|
224
|
+
*/
|
|
225
|
+
export function parseChecklistArgs(argsText) {
|
|
226
|
+
if (!argsText.trim())
|
|
227
|
+
return null;
|
|
228
|
+
let parsed;
|
|
229
|
+
try {
|
|
230
|
+
parsed = JSON.parse(argsText);
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
const items = parsed?.items;
|
|
236
|
+
if (!Array.isArray(items))
|
|
237
|
+
return null;
|
|
238
|
+
const rows = [];
|
|
239
|
+
for (const raw of items) {
|
|
240
|
+
if (!raw || typeof raw !== 'object')
|
|
241
|
+
continue;
|
|
242
|
+
const content = raw.content;
|
|
243
|
+
const status = raw.status;
|
|
244
|
+
if (typeof content === 'string' &&
|
|
245
|
+
(status === 'pending' || status === 'in_progress' || status === 'completed')) {
|
|
246
|
+
rows.push({ content, status });
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return rows.length ? rows : null;
|
|
250
|
+
}
|
|
184
251
|
//# sourceMappingURL=viewModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewModel.js","sourceRoot":"","sources":["../../src/tui/viewModel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"viewModel.js","sourceRoot":"","sources":["../../src/tui/viewModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BATCH-11 (gaunt-sloth #405 gotcha #5) — which subcommands must NOT block on STDIN.
|
|
3
|
+
*
|
|
4
|
+
* The CLI reads piped STDIN (a diff) before dispatch for commands like `ask`/`review`/`pr`. On a
|
|
5
|
+
* non-TTY, non-closing stdin — exactly a scripted/CI invocation — that read waits for EOF, so a
|
|
6
|
+
* command that never consumes stdin would hang until the parent closed it (or the user added
|
|
7
|
+
* `</dev/null`). `eval` and `batch` never read piped stdin, so they must take the same fast path as
|
|
8
|
+
* `--no-pipe` and dispatch immediately.
|
|
9
|
+
*
|
|
10
|
+
* This module owns the small, pure policy so `cli.ts` stays a thin wiring layer and the decision is
|
|
11
|
+
* unit-testable without importing the CLI entry point (which runs on import).
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Subcommands whose runs never consume piped stdin — the CLI implies the `--no-pipe` fast path for
|
|
15
|
+
* these so they don't block waiting for stdin EOF. Keep this list narrow: only add a command here
|
|
16
|
+
* once it's certain it never reads a piped diff/document.
|
|
17
|
+
*/
|
|
18
|
+
export declare const NON_STDIN_COMMANDS: readonly string[];
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the invoked subcommand name from commander's parsed operands.
|
|
21
|
+
*
|
|
22
|
+
* `operands` is `Command.parseOptions(argv).operands` — the non-option tokens, with global option
|
|
23
|
+
* *values* (e.g. the `<path>` of `-c <path>`) already consumed, so they can't be mistaken for the
|
|
24
|
+
* command. Returns the first operand that matches a registered command name; a positional argument
|
|
25
|
+
* that merely happens to equal a command name (e.g. a suite file literally named `eval`) can't win
|
|
26
|
+
* because the real subcommand always precedes its own arguments. Returns `undefined` when no
|
|
27
|
+
* subcommand was given (the default-command / bare-`gth` case).
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveInvokedCommandName(commandNames: Iterable<string>, operands: readonly string[]): string | undefined;
|
|
30
|
+
/** Whether the given resolved subcommand name must skip the piped-stdin wait. */
|
|
31
|
+
export declare function commandSkipsStdin(commandName: string | undefined): boolean;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BATCH-11 (gaunt-sloth #405 gotcha #5) — which subcommands must NOT block on STDIN.
|
|
3
|
+
*
|
|
4
|
+
* The CLI reads piped STDIN (a diff) before dispatch for commands like `ask`/`review`/`pr`. On a
|
|
5
|
+
* non-TTY, non-closing stdin — exactly a scripted/CI invocation — that read waits for EOF, so a
|
|
6
|
+
* command that never consumes stdin would hang until the parent closed it (or the user added
|
|
7
|
+
* `</dev/null`). `eval` and `batch` never read piped stdin, so they must take the same fast path as
|
|
8
|
+
* `--no-pipe` and dispatch immediately.
|
|
9
|
+
*
|
|
10
|
+
* This module owns the small, pure policy so `cli.ts` stays a thin wiring layer and the decision is
|
|
11
|
+
* unit-testable without importing the CLI entry point (which runs on import).
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Subcommands whose runs never consume piped stdin — the CLI implies the `--no-pipe` fast path for
|
|
15
|
+
* these so they don't block waiting for stdin EOF. Keep this list narrow: only add a command here
|
|
16
|
+
* once it's certain it never reads a piped diff/document.
|
|
17
|
+
*/
|
|
18
|
+
export const NON_STDIN_COMMANDS = ['eval', 'batch'];
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the invoked subcommand name from commander's parsed operands.
|
|
21
|
+
*
|
|
22
|
+
* `operands` is `Command.parseOptions(argv).operands` — the non-option tokens, with global option
|
|
23
|
+
* *values* (e.g. the `<path>` of `-c <path>`) already consumed, so they can't be mistaken for the
|
|
24
|
+
* command. Returns the first operand that matches a registered command name; a positional argument
|
|
25
|
+
* that merely happens to equal a command name (e.g. a suite file literally named `eval`) can't win
|
|
26
|
+
* because the real subcommand always precedes its own arguments. Returns `undefined` when no
|
|
27
|
+
* subcommand was given (the default-command / bare-`gth` case).
|
|
28
|
+
*/
|
|
29
|
+
export function resolveInvokedCommandName(commandNames, operands) {
|
|
30
|
+
const names = new Set(commandNames);
|
|
31
|
+
return operands.find((token) => names.has(token));
|
|
32
|
+
}
|
|
33
|
+
/** Whether the given resolved subcommand name must skip the piped-stdin wait. */
|
|
34
|
+
export function commandSkipsStdin(commandName) {
|
|
35
|
+
return commandName !== undefined && NON_STDIN_COMMANDS.includes(commandName);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=stdinPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdinPolicy.js","sourceRoot":"","sources":["../../src/utils/stdinPolicy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEvE;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CACvC,YAA8B,EAC9B,QAA2B;IAE3B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IACpC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,WAA+B;IAC/D,OAAO,WAAW,KAAK,SAAS,IAAI,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC/E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gaunt-sloth",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.21",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Andrew Kondratev",
|
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
"main": "dist/cli.js",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
|
-
"url": "git+https://github.com/
|
|
11
|
+
"url": "git+https://github.com/pukeko-robotics/gaunt-sloth.git",
|
|
12
12
|
"directory": "packages/app"
|
|
13
13
|
},
|
|
14
14
|
"bugs": {
|
|
15
|
-
"url": "https://github.com/
|
|
15
|
+
"url": "https://github.com/pukeko-robotics/gaunt-sloth/issues"
|
|
16
16
|
},
|
|
17
|
-
"homepage": "https://github.com/
|
|
17
|
+
"homepage": "https://github.com/pukeko-robotics/gaunt-sloth#readme",
|
|
18
18
|
"keywords": [
|
|
19
19
|
"ai",
|
|
20
20
|
"agent",
|
|
@@ -33,19 +33,23 @@
|
|
|
33
33
|
"gth": "cli.js"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@
|
|
37
|
-
"@langchain/
|
|
38
|
-
"@langchain/
|
|
39
|
-
"@langchain/
|
|
40
|
-
"@langchain/
|
|
41
|
-
"@langchain/
|
|
42
|
-
"@langchain/
|
|
43
|
-
"@langchain/
|
|
36
|
+
"@ag-ui/core": "^0.0.57",
|
|
37
|
+
"@langchain/anthropic": "^1.5.1",
|
|
38
|
+
"@langchain/core": "^1.2.3",
|
|
39
|
+
"@langchain/deepseek": "^1.1.5",
|
|
40
|
+
"@langchain/google": "^0.2.1",
|
|
41
|
+
"@langchain/groq": "^1.3.1",
|
|
42
|
+
"@langchain/langgraph": "^1.4.8",
|
|
43
|
+
"@langchain/ollama": "^1.3.0",
|
|
44
|
+
"@langchain/openai": "^1.5.5",
|
|
45
|
+
"@langchain/xai": "^1.4.5",
|
|
44
46
|
"commander": "^15.0.0",
|
|
45
|
-
"zod": "^
|
|
46
|
-
"@gaunt-sloth/agent": "2.0.0-alpha.
|
|
47
|
-
"@gaunt-sloth/
|
|
48
|
-
"@gaunt-sloth/core": "2.0.0-alpha.
|
|
47
|
+
"zod": "^4.4.3",
|
|
48
|
+
"@gaunt-sloth/agent": "2.0.0-alpha.21",
|
|
49
|
+
"@gaunt-sloth/batch": "2.0.0-alpha.21",
|
|
50
|
+
"@gaunt-sloth/core": "2.0.0-alpha.21",
|
|
51
|
+
"@gaunt-sloth/review": "2.0.0-alpha.21",
|
|
52
|
+
"@gaunt-sloth/eval-reporter-junit": "0.1.0"
|
|
49
53
|
},
|
|
50
54
|
"optionalDependencies": {
|
|
51
55
|
"chalk": "^5.6.2",
|
|
@@ -56,7 +60,7 @@
|
|
|
56
60
|
},
|
|
57
61
|
"devDependencies": {
|
|
58
62
|
"@microsoft/tui-test": "^0.0.4",
|
|
59
|
-
"@types/react": "^19.2.
|
|
63
|
+
"@types/react": "^19.2.17",
|
|
60
64
|
"ink-testing-library": "^4.0.0"
|
|
61
65
|
},
|
|
62
66
|
"imports": {
|