gaunt-sloth-assistant 0.9.8 → 0.9.10
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/.gsloth.guidelines.md +7 -0
- package/README.md +3 -4
- package/dist/cli.js +8 -11
- package/dist/cli.js.map +1 -1
- package/dist/cliUtils.d.ts +56 -0
- package/dist/cliUtils.js +72 -0
- package/dist/cliUtils.js.map +1 -0
- package/dist/config.d.ts +22 -11
- package/dist/config.js +5 -7
- package/dist/config.js.map +1 -1
- package/dist/core/GthLangChainAgent.js +3 -1
- package/dist/core/GthLangChainAgent.js.map +1 -1
- package/dist/filePathUtils.d.ts +15 -0
- package/dist/filePathUtils.js +46 -1
- package/dist/filePathUtils.js.map +1 -1
- package/dist/llmUtils.d.ts +0 -6
- package/dist/llmUtils.js +0 -38
- package/dist/llmUtils.js.map +1 -1
- package/dist/modules/interactiveSessionModule.js +3 -5
- package/dist/modules/interactiveSessionModule.js.map +1 -1
- package/dist/modules/questionAnsweringModule.js +28 -13
- package/dist/modules/questionAnsweringModule.js.map +1 -1
- package/dist/modules/reviewModule.js +27 -12
- package/dist/modules/reviewModule.js.map +1 -1
- package/dist/presets/anthropic.d.ts +8 -3
- package/dist/presets/anthropic.js +1 -1
- package/dist/presets/anthropic.js.map +1 -1
- package/package.json +14 -13
package/.gsloth.guidelines.md
CHANGED
|
@@ -141,6 +141,13 @@ vi.mock('#src/tools/OtherToolkit.js', () => {
|
|
|
141
141
|
});
|
|
142
142
|
```
|
|
143
143
|
|
|
144
|
+
### Configs in tests
|
|
145
|
+
|
|
146
|
+
When you create incomplete configs please cast them as Partial,
|
|
147
|
+
for example `Partial<RawGthConfig>`
|
|
148
|
+
and later cast them to RawGthConfig when providing them as argument to function
|
|
149
|
+
which expects full interface. Even better option is to provide all properties.
|
|
150
|
+
|
|
144
151
|
## Development Workflow
|
|
145
152
|
|
|
146
153
|
Please follow this workflow:
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Gaunt Sloth Assistant
|
|
2
2
|
[](https://github.com/Galvanized-Pukeko/gaunt-sloth-assistant/actions/workflows/unit-tests.yml) [](https://github.com/Galvanized-Pukeko/gaunt-sloth-assistant/actions/workflows/integration-tests.yml)
|
|
3
3
|
|
|
4
|
-
Gaunt Sloth Assistant is a lightweight
|
|
5
|
-
|
|
4
|
+
Gaunt Sloth Assistant is a lightweight command-line AI code review tool that also provides general-purpose AI capabilities.
|
|
5
|
+
Built with TypeScript and distributed via NPM, Gaunt Sloth maintains minimal dependencies for easy integration.
|
|
6
6
|
|
|
7
7
|

|
|
8
8
|
|
|
@@ -29,8 +29,7 @@ The promise of Gaunt Sloth:
|
|
|
29
29
|
- **No vendor lock-in**. Just BYO API keys.
|
|
30
30
|
- **Easy installation via NPM**.
|
|
31
31
|
- **All prompts are editable** via markdown files.
|
|
32
|
-
- **No UI**. Command Line only, with intent to be used as a dependency
|
|
33
|
-
Of course, you can use Gaunt Sloth as a dependency and hook your own UI.
|
|
32
|
+
- **No UI**. Command Line only, with intent to be used in build pipeline, or as a dependency to help in nodejs projects.
|
|
34
33
|
|
|
35
34
|
## What GSloth does:
|
|
36
35
|
|
package/dist/cli.js
CHANGED
|
@@ -7,6 +7,7 @@ import { chatCommand } from '#src/commands/chatCommand.js';
|
|
|
7
7
|
import { codeCommand } from '#src/commands/codeCommand.js';
|
|
8
8
|
import { getSlothVersion } from '#src/utils.js';
|
|
9
9
|
import { argv, readStdin } from '#src/systemUtils.js';
|
|
10
|
+
import { coerceBooleanOrString } from '#src/cliUtils.js';
|
|
10
11
|
const program = new Command();
|
|
11
12
|
program
|
|
12
13
|
.name('gsloth')
|
|
@@ -16,7 +17,7 @@ program
|
|
|
16
17
|
'causing LangChain/LangGraph to log many details to the console. ' +
|
|
17
18
|
'Consider using debugLog from config.ts for less intrusive debug logging.')
|
|
18
19
|
.option('-c, --config <path>', 'Path to custom configuration file')
|
|
19
|
-
.option('-w, --write-output-to-file <
|
|
20
|
+
.option('-w, --write-output-to-file <value>', 'Write output to file. Accepts true/false or a filename. Shortcuts: -wn or -w0 for false.')
|
|
20
21
|
.addOption(new Option('--nopipe').hideHelp(true));
|
|
21
22
|
const cliConfigOverrides = {};
|
|
22
23
|
// Parse global options before binding any commands
|
|
@@ -34,16 +35,12 @@ if (program.getOptionValue('config')) {
|
|
|
34
35
|
cliConfigOverrides.customConfigPath = program.getOptionValue('config');
|
|
35
36
|
}
|
|
36
37
|
const writeToFile = program.getOptionValue('writeOutputToFile');
|
|
37
|
-
// Commander does interesting thing
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
'n' === writeToFile ||
|
|
44
|
-
'no' === writeToFile) {
|
|
45
|
-
cliConfigOverrides.writeOutputToFile = false;
|
|
46
|
-
}
|
|
38
|
+
// Commander does an interesting thing: if a shortcut like -w exists,
|
|
39
|
+
// everything after this shortcut without a space becomes the value.
|
|
40
|
+
// Examples: -wn comes with value 'n', -w0 => '0', -wreview.md => 'review.md'
|
|
41
|
+
const coerced = coerceBooleanOrString(writeToFile);
|
|
42
|
+
if (coerced !== undefined) {
|
|
43
|
+
cliConfigOverrides.writeOutputToFile = coerced;
|
|
47
44
|
}
|
|
48
45
|
// Initialize all commands - they will handle their own config loading
|
|
49
46
|
initCommand(program);
|
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,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,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
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,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,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,0CAA0C,CAAC;KACvD,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,CACL,oCAAoC,EACpC,0FAA0F,CAC3F;KACA,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;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;AAEzC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cliUtils.ts
|
|
3
|
+
*
|
|
4
|
+
* Utilities for parsing CLI option values.
|
|
5
|
+
*
|
|
6
|
+
* This module provides a reusable parser for CLI flags that can accept either:
|
|
7
|
+
* - boolean-like values (true/false, 1/0, yes/no, y/n)
|
|
8
|
+
* - arbitrary string values (e.g., file paths)
|
|
9
|
+
*
|
|
10
|
+
* It is designed to work well with Commander-style short options where the value
|
|
11
|
+
* may be concatenated without a space, e.g.:
|
|
12
|
+
* -w0, -wn, -wreview.md
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Result of attempting to parse a CLI value as boolean-or-string.
|
|
16
|
+
* When kind === 'boolean', value is a boolean.
|
|
17
|
+
* When kind === 'string', value is a non-empty string.
|
|
18
|
+
* When kind === 'none', no usable value was provided (undefined/null/empty).
|
|
19
|
+
*/
|
|
20
|
+
export type BooleanOrStringParseResult = {
|
|
21
|
+
kind: 'boolean';
|
|
22
|
+
value: boolean;
|
|
23
|
+
} | {
|
|
24
|
+
kind: 'string';
|
|
25
|
+
value: string;
|
|
26
|
+
} | {
|
|
27
|
+
kind: 'none';
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Parse a CLI option value into either:
|
|
31
|
+
* - a boolean (when value looks like a true/false token),
|
|
32
|
+
* - a non-empty string (otherwise),
|
|
33
|
+
* - or none (when value is nullish or only whitespace).
|
|
34
|
+
*
|
|
35
|
+
* Recognized false-like tokens (case-insensitive): 'false', '0', 'n', 'no'
|
|
36
|
+
* Recognized true-like tokens (case-insensitive): 'true', '1', 'y', 'yes'
|
|
37
|
+
*
|
|
38
|
+
* Examples:
|
|
39
|
+
* parseBooleanOrString('n') => { kind: 'boolean', value: false }
|
|
40
|
+
* parseBooleanOrString('0') => { kind: 'boolean', value: false }
|
|
41
|
+
* parseBooleanOrString('true') => { kind: 'boolean', value: true }
|
|
42
|
+
* parseBooleanOrString('1') => { kind: 'boolean', value: true }
|
|
43
|
+
* parseBooleanOrString('review.md') => { kind: 'string', value: 'review.md' }
|
|
44
|
+
* parseBooleanOrString(' ') => { kind: 'none' }
|
|
45
|
+
* parseBooleanOrString(undefined) => { kind: 'none' }
|
|
46
|
+
*/
|
|
47
|
+
export declare function parseBooleanOrString(value: unknown): BooleanOrStringParseResult;
|
|
48
|
+
/**
|
|
49
|
+
* Convenience wrapper that returns a union directly instead of the tagged result.
|
|
50
|
+
*
|
|
51
|
+
* Returns:
|
|
52
|
+
* - boolean when the input is a boolean-like token
|
|
53
|
+
* - string when the input is non-empty and not a boolean-like token
|
|
54
|
+
* - undefined when the input is nullish or empty/whitespace
|
|
55
|
+
*/
|
|
56
|
+
export declare function coerceBooleanOrString(value: unknown): boolean | string | undefined;
|
package/dist/cliUtils.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cliUtils.ts
|
|
3
|
+
*
|
|
4
|
+
* Utilities for parsing CLI option values.
|
|
5
|
+
*
|
|
6
|
+
* This module provides a reusable parser for CLI flags that can accept either:
|
|
7
|
+
* - boolean-like values (true/false, 1/0, yes/no, y/n)
|
|
8
|
+
* - arbitrary string values (e.g., file paths)
|
|
9
|
+
*
|
|
10
|
+
* It is designed to work well with Commander-style short options where the value
|
|
11
|
+
* may be concatenated without a space, e.g.:
|
|
12
|
+
* -w0, -wn, -wreview.md
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Parse a CLI option value into either:
|
|
16
|
+
* - a boolean (when value looks like a true/false token),
|
|
17
|
+
* - a non-empty string (otherwise),
|
|
18
|
+
* - or none (when value is nullish or only whitespace).
|
|
19
|
+
*
|
|
20
|
+
* Recognized false-like tokens (case-insensitive): 'false', '0', 'n', 'no'
|
|
21
|
+
* Recognized true-like tokens (case-insensitive): 'true', '1', 'y', 'yes'
|
|
22
|
+
*
|
|
23
|
+
* Examples:
|
|
24
|
+
* parseBooleanOrString('n') => { kind: 'boolean', value: false }
|
|
25
|
+
* parseBooleanOrString('0') => { kind: 'boolean', value: false }
|
|
26
|
+
* parseBooleanOrString('true') => { kind: 'boolean', value: true }
|
|
27
|
+
* parseBooleanOrString('1') => { kind: 'boolean', value: true }
|
|
28
|
+
* parseBooleanOrString('review.md') => { kind: 'string', value: 'review.md' }
|
|
29
|
+
* parseBooleanOrString(' ') => { kind: 'none' }
|
|
30
|
+
* parseBooleanOrString(undefined) => { kind: 'none' }
|
|
31
|
+
*/
|
|
32
|
+
export function parseBooleanOrString(value) {
|
|
33
|
+
if (value === undefined || value === null) {
|
|
34
|
+
return { kind: 'none' };
|
|
35
|
+
}
|
|
36
|
+
const str = String(value);
|
|
37
|
+
const trimmed = str.trim();
|
|
38
|
+
if (trimmed.length === 0) {
|
|
39
|
+
return { kind: 'none' };
|
|
40
|
+
}
|
|
41
|
+
const lower = trimmed.toLowerCase();
|
|
42
|
+
// False-like tokens
|
|
43
|
+
if (lower === 'false' || lower === '0' || lower === 'n' || lower === 'no') {
|
|
44
|
+
return { kind: 'boolean', value: false };
|
|
45
|
+
}
|
|
46
|
+
// True-like tokens
|
|
47
|
+
if (lower === 'true' || lower === '1' || lower === 'y' || lower === 'yes') {
|
|
48
|
+
return { kind: 'boolean', value: true };
|
|
49
|
+
}
|
|
50
|
+
// Otherwise, treat as a string (e.g., filename/path)
|
|
51
|
+
return { kind: 'string', value: trimmed };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Convenience wrapper that returns a union directly instead of the tagged result.
|
|
55
|
+
*
|
|
56
|
+
* Returns:
|
|
57
|
+
* - boolean when the input is a boolean-like token
|
|
58
|
+
* - string when the input is non-empty and not a boolean-like token
|
|
59
|
+
* - undefined when the input is nullish or empty/whitespace
|
|
60
|
+
*/
|
|
61
|
+
export function coerceBooleanOrString(value) {
|
|
62
|
+
const parsed = parseBooleanOrString(value);
|
|
63
|
+
switch (parsed.kind) {
|
|
64
|
+
case 'boolean':
|
|
65
|
+
return parsed.value;
|
|
66
|
+
case 'string':
|
|
67
|
+
return parsed.value;
|
|
68
|
+
default:
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=cliUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliUtils.js","sourceRoot":"","sources":["../src/cliUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAaH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAEpC,oBAAoB;IACpB,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,mBAAmB;IACnB,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QAC1E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,qDAAqD;IACrD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
|
|
2
|
-
import type { Connection } from '@langchain/mcp-adapters';
|
|
3
|
-
import type { BaseToolkit, StructuredToolInterface } from '@langchain/core/tools';
|
|
4
|
-
import { JiraConfig } from '#src/providers/types.js';
|
|
5
|
-
import type { GthAgentInterface } from '#src/core/types.js';
|
|
6
1
|
import type { GthAgentRunner } from '#src/core/GthAgentRunner.js';
|
|
2
|
+
import type { GthAgentInterface } from '#src/core/types.js';
|
|
7
3
|
import type { Message } from '#src/modules/types.js';
|
|
4
|
+
import { JiraConfig } from '#src/providers/types.js';
|
|
5
|
+
import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
|
|
6
|
+
import { AIMessage } from '@langchain/core/messages';
|
|
8
7
|
import { RunnableConfig } from '@langchain/core/runnables';
|
|
9
|
-
import {
|
|
8
|
+
import type { BaseToolkit, StructuredToolInterface } from '@langchain/core/tools';
|
|
9
|
+
import { BinaryOperatorAggregate, Messages, StateType } from '@langchain/langgraph';
|
|
10
|
+
import type { Connection } from '@langchain/mcp-adapters';
|
|
10
11
|
/**
|
|
11
12
|
* This is a processed Gaunt Sloth config ready to be passed down into components.
|
|
12
13
|
*
|
|
@@ -57,11 +58,14 @@ export interface GthConfig {
|
|
|
57
58
|
streamOutput: boolean;
|
|
58
59
|
/**
|
|
59
60
|
* Should the output be written to md file.
|
|
60
|
-
* (e.g. gth_2025-07-26_22-59-06_REVIEW.md)
|
|
61
|
+
* (e.g. gth_2025-07-26_22-59-06_REVIEW.md).
|
|
62
|
+
* Can be set to false with `-wn` or `-w0`
|
|
63
|
+
* Can be set to a specific filename or path by passing a string (e.g. `-w review.md`)
|
|
64
|
+
* Please note the string does not accept absolute path, but allows to exit project with `..` if necessary.
|
|
61
65
|
*/
|
|
62
|
-
writeOutputToFile: boolean;
|
|
66
|
+
writeOutputToFile: boolean | string;
|
|
63
67
|
/**
|
|
64
|
-
* Use colour in
|
|
68
|
+
* Use colour in output
|
|
65
69
|
*/
|
|
66
70
|
useColour: boolean;
|
|
67
71
|
/**
|
|
@@ -111,6 +115,7 @@ export interface GthConfig {
|
|
|
111
115
|
devTools?: GthDevToolsConfig;
|
|
112
116
|
};
|
|
113
117
|
};
|
|
118
|
+
modelDisplayName?: string;
|
|
114
119
|
}
|
|
115
120
|
/**
|
|
116
121
|
* Server tools such as Anthropic Web Search.
|
|
@@ -122,7 +127,11 @@ export interface ServerTool extends Record<string, unknown> {
|
|
|
122
127
|
type: string;
|
|
123
128
|
name?: string;
|
|
124
129
|
}
|
|
125
|
-
type LangChainHook = (state: StateType<
|
|
130
|
+
type LangChainHook = (state: StateType<{
|
|
131
|
+
messages: BinaryOperatorAggregate<AIMessage[], Messages>;
|
|
132
|
+
}>) => StateType<{
|
|
133
|
+
messages: BinaryOperatorAggregate<AIMessage[], Messages>;
|
|
134
|
+
}>;
|
|
126
135
|
type RunnerHook = (runner: GthAgentRunner) => Promise<void>;
|
|
127
136
|
type BeforeMessageHook = (runner: GthAgentRunner, message: Message[], runConfig: RunnableConfig) => Promise<void>;
|
|
128
137
|
/**
|
|
@@ -190,8 +199,10 @@ export interface CommandLineConfigOverrides {
|
|
|
190
199
|
* Should the output be written to md file.
|
|
191
200
|
* (e.g. gth_2025-07-26_22-59-06_REVIEW.md).
|
|
192
201
|
* Can be set to false with `-wn` or `-w0`
|
|
202
|
+
* Can be set to a specific filename or path by passing a string (e.g. `-w review.md`)
|
|
203
|
+
* Please note the string does not accept absolute path, but allows to exit project with `..` if necessary.
|
|
193
204
|
*/
|
|
194
|
-
writeOutputToFile?: boolean;
|
|
205
|
+
writeOutputToFile?: boolean | string;
|
|
195
206
|
}
|
|
196
207
|
/**
|
|
197
208
|
* Default config
|
package/dist/config.js
CHANGED
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
* Some config params can be overriden from command line, see {@link CommandLineConfigOverrides}
|
|
10
10
|
*/
|
|
11
11
|
import { displayDebug, displayError, displayInfo, displayWarning } from '#src/consoleUtils.js';
|
|
12
|
+
import { PROJECT_GUIDELINES, PROJECT_REVIEW_INSTRUCTIONS, USER_PROJECT_CONFIG_JS, USER_PROJECT_CONFIG_JSON, USER_PROJECT_CONFIG_MJS, } from '#src/constants.js';
|
|
13
|
+
import { getGslothConfigReadPath, getGslothConfigWritePath } from '#src/filePathUtils.js';
|
|
14
|
+
import { error, exit, isTTY, setUseColour } from '#src/systemUtils.js';
|
|
12
15
|
import { importExternalFile, writeFileIfNotExistsWithMessages } from '#src/utils.js';
|
|
13
16
|
import { existsSync, readFileSync } from 'node:fs';
|
|
14
|
-
import { error, exit, isTTY, setUseColour } from '#src/systemUtils.js';
|
|
15
|
-
import { getGslothConfigReadPath, getGslothConfigWritePath } from '#src/filePathUtils.js';
|
|
16
|
-
import { PROJECT_GUIDELINES, PROJECT_REVIEW_INSTRUCTIONS, USER_PROJECT_CONFIG_JS, USER_PROJECT_CONFIG_JSON, USER_PROJECT_CONFIG_MJS, } from '#src/constants.js';
|
|
17
17
|
export const availableDefaultConfigs = [
|
|
18
18
|
'vertexai',
|
|
19
19
|
'anthropic',
|
|
@@ -281,9 +281,7 @@ function mergeConfig(partialConfig, commandLineConfigOverrides) {
|
|
|
281
281
|
* Merge raw with default config
|
|
282
282
|
*/
|
|
283
283
|
function mergeRawConfig(config, llm, commandLineConfigOverrides) {
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
}
|
|
287
|
-
return mergeConfig({ ...config, llm }, commandLineConfigOverrides);
|
|
284
|
+
const modelDisplayName = config.llm?.model;
|
|
285
|
+
return mergeConfig({ ...config, llm, modelDisplayName }, commandLineConfigOverrides);
|
|
288
286
|
}
|
|
289
287
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,6 @@ import { MultiServerMCPClient } from '@langchain/mcp-adapters';
|
|
|
11
11
|
export class GthLangChainAgent {
|
|
12
12
|
statusUpdate;
|
|
13
13
|
mcpClient = null;
|
|
14
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
14
|
agent = null;
|
|
16
15
|
config = null;
|
|
17
16
|
constructor(statusUpdate) {
|
|
@@ -29,6 +28,9 @@ export class GthLangChainAgent {
|
|
|
29
28
|
streamOutput: this.config.streamOutput,
|
|
30
29
|
debugLog: this.config.debugLog,
|
|
31
30
|
});
|
|
31
|
+
if (this.config.modelDisplayName) {
|
|
32
|
+
this.statusUpdate('info', `Model: ${this.config.modelDisplayName}`);
|
|
33
|
+
}
|
|
32
34
|
this.mcpClient = await this.getMcpClient(this.config);
|
|
33
35
|
// Get default filesystem tools (filtered based on config)
|
|
34
36
|
debugLog('Loading default tools...');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GthLangChainAgent.js","sourceRoot":"","sources":["../../src/core/GthLangChainAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AAExF,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"GthLangChainAgent.js","sourceRoot":"","sources":["../../src/core/GthLangChainAgent.ts"],"names":[],"mappings":"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"}
|
package/dist/filePathUtils.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { GthConfig } from '#src/config.js';
|
|
1
2
|
/**
|
|
2
3
|
* Checks if .gsloth directory exists in the project root
|
|
3
4
|
* @returns Boolean indicating whether .gsloth directory exists
|
|
@@ -17,6 +18,20 @@ export declare function getGslothFilePath(filename: string): string;
|
|
|
17
18
|
* @returns The resolved path where the configuration file should be written
|
|
18
19
|
*/
|
|
19
20
|
export declare function getGslothConfigWritePath(filename: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Resolve an explicit output path string to an absolute file path.
|
|
23
|
+
* Concerned only with string values:
|
|
24
|
+
* - If the string includes a path separator, resolve relative to project root and ensure parent directories exist.
|
|
25
|
+
* - If it's a bare filename, place it under .gsloth/ when present, otherwise project root.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveOutputPath(writeOutputToFile: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Returns the output file path for a given command execution based on configuration.
|
|
30
|
+
* - If writeOutputToFile is false, returns null.
|
|
31
|
+
* - If writeOutputToFile is a string, resolves it without generating a default filename.
|
|
32
|
+
* - If writeOutputToFile is true, generates a standard filename from source and resolves it under .gsloth/ (when present) or project root.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getCommandOutputFilePath(config: GthConfig, source: string): string | null;
|
|
20
35
|
/**
|
|
21
36
|
* Gets the path where gsloth should look for configuration files based on .gsloth directory existence
|
|
22
37
|
* @param filename The configuration filename to look for
|
package/dist/filePathUtils.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
|
-
import { resolve } from 'node:path';
|
|
2
|
+
import { resolve, dirname } from 'node:path';
|
|
3
3
|
import { mkdirSync } from 'node:fs';
|
|
4
4
|
import { getCurrentDir } from '#src/systemUtils.js';
|
|
5
5
|
import { GSLOTH_DIR, GSLOTH_SETTINGS_DIR } from '#src/constants.js';
|
|
6
|
+
import { generateStandardFileName } from '#src/utils.js';
|
|
6
7
|
/**
|
|
7
8
|
* Checks if .gsloth directory exists in the project root
|
|
8
9
|
* @returns Boolean indicating whether .gsloth directory exists
|
|
@@ -45,6 +46,50 @@ export function getGslothConfigWritePath(filename) {
|
|
|
45
46
|
}
|
|
46
47
|
return resolve(currentDir, filename);
|
|
47
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Resolve an explicit output path string to an absolute file path.
|
|
51
|
+
* Concerned only with string values:
|
|
52
|
+
* - If the string includes a path separator, resolve relative to project root and ensure parent directories exist.
|
|
53
|
+
* - If it's a bare filename, place it under .gsloth/ when present, otherwise project root.
|
|
54
|
+
*/
|
|
55
|
+
export function resolveOutputPath(writeOutputToFile) {
|
|
56
|
+
const currentDir = getCurrentDir();
|
|
57
|
+
const provided = String(writeOutputToFile).trim();
|
|
58
|
+
// Detect if provided path contains path separators (cross-platform)
|
|
59
|
+
const hasSeparator = provided.includes('/') || provided.includes('\\');
|
|
60
|
+
// If no separators, treat as bare filename: prefer .gsloth/ when present
|
|
61
|
+
if (!hasSeparator) {
|
|
62
|
+
return getGslothFilePath(provided);
|
|
63
|
+
}
|
|
64
|
+
// If path contains directories, respect as-is and ensure parent dirs
|
|
65
|
+
const absolutePath = resolve(currentDir, provided);
|
|
66
|
+
const parentDir = dirname(absolutePath);
|
|
67
|
+
if (!existsSync(parentDir)) {
|
|
68
|
+
mkdirSync(parentDir, { recursive: true });
|
|
69
|
+
}
|
|
70
|
+
return absolutePath;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Returns the output file path for a given command execution based on configuration.
|
|
74
|
+
* - If writeOutputToFile is false, returns null.
|
|
75
|
+
* - If writeOutputToFile is a string, resolves it without generating a default filename.
|
|
76
|
+
* - If writeOutputToFile is true, generates a standard filename from source and resolves it under .gsloth/ (when present) or project root.
|
|
77
|
+
*/
|
|
78
|
+
export function getCommandOutputFilePath(config, source) {
|
|
79
|
+
const setting = config.writeOutputToFile;
|
|
80
|
+
if (setting === false) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
if (typeof setting === 'string') {
|
|
84
|
+
const trimmed = setting.trim();
|
|
85
|
+
if (trimmed.length === 0)
|
|
86
|
+
return null;
|
|
87
|
+
return resolveOutputPath(trimmed);
|
|
88
|
+
}
|
|
89
|
+
// setting === true -> generate filename and place it using getGslothFilePath
|
|
90
|
+
const filename = generateStandardFileName(source.toUpperCase());
|
|
91
|
+
return getGslothFilePath(filename);
|
|
92
|
+
}
|
|
48
93
|
/**
|
|
49
94
|
* Gets the path where gsloth should look for configuration files based on .gsloth directory existence
|
|
50
95
|
* @param filename The configuration filename to look for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filePathUtils.js","sourceRoot":"","sources":["../src/filePathUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"filePathUtils.js","sourceRoot":"","sources":["../src/filePathUtils.ts"],"names":[],"mappings":"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"}
|
package/dist/llmUtils.d.ts
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
import type { Message } from '#src/modules/types.js';
|
|
2
|
-
import { GthConfig } from '#src/config.js';
|
|
3
1
|
import { RunnableConfig } from '@langchain/core/runnables';
|
|
4
|
-
/**
|
|
5
|
-
* @deprecated prefer using src/core/GthAgentRunner.ts directly
|
|
6
|
-
*/
|
|
7
|
-
export declare function invoke(command: 'ask' | 'pr' | 'review' | 'chat' | 'code' | undefined, messages: Message[], config: GthConfig): Promise<string>;
|
|
8
2
|
/**
|
|
9
3
|
* Creates new runnable config.
|
|
10
4
|
* configurable.thread_id is an important part of that because it helps to distinguish different chat sessions.
|
package/dist/llmUtils.js
CHANGED
|
@@ -1,42 +1,4 @@
|
|
|
1
|
-
import { display, displayError, displayInfo, displayWarning } from '#src/consoleUtils.js';
|
|
2
|
-
import { stdout } from '#src/systemUtils.js';
|
|
3
|
-
import { GthAgentRunner } from '#src/core/GthAgentRunner.js';
|
|
4
1
|
import { randomUUID } from 'crypto';
|
|
5
|
-
/**
|
|
6
|
-
* @deprecated prefer using src/core/GthAgentRunner.ts directly
|
|
7
|
-
*/
|
|
8
|
-
export async function invoke(command, messages, config) {
|
|
9
|
-
const statusUpdate = (level, message) => {
|
|
10
|
-
switch (level) {
|
|
11
|
-
case 'display':
|
|
12
|
-
display(message);
|
|
13
|
-
break;
|
|
14
|
-
case 'info':
|
|
15
|
-
displayInfo(message);
|
|
16
|
-
break;
|
|
17
|
-
case 'warning':
|
|
18
|
-
displayWarning(message);
|
|
19
|
-
break;
|
|
20
|
-
case 'error':
|
|
21
|
-
displayError(message);
|
|
22
|
-
break;
|
|
23
|
-
case 'stream':
|
|
24
|
-
stdout.write(message, 'utf-8');
|
|
25
|
-
break;
|
|
26
|
-
default:
|
|
27
|
-
display(message);
|
|
28
|
-
break;
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
const runner = new GthAgentRunner(statusUpdate);
|
|
32
|
-
try {
|
|
33
|
-
await runner.init(command, config);
|
|
34
|
-
return await runner.processMessages(messages);
|
|
35
|
-
}
|
|
36
|
-
finally {
|
|
37
|
-
await runner.cleanup();
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
2
|
/**
|
|
41
3
|
* Creates new runnable config.
|
|
42
4
|
* configurable.thread_id is an important part of that because it helps to distinguish different chat sessions.
|
package/dist/llmUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llmUtils.js","sourceRoot":"","sources":["../src/llmUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"llmUtils.js","sourceRoot":"","sources":["../src/llmUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,cAAc,EAAE,GAAG;QACnB,YAAY,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE;KAC1C,CAAC;AACJ,CAAC"}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import { initConfig } from '#src/config.js';
|
|
2
2
|
import { defaultStatusCallback, display, displayInfo, flushSessionLog, formatInputPrompt, initSessionLogging, stopSessionLogging, } from '#src/consoleUtils.js';
|
|
3
3
|
import { GthAgentRunner } from '#src/core/GthAgentRunner.js';
|
|
4
|
-
import {
|
|
4
|
+
import { getCommandOutputFilePath } from '#src/filePathUtils.js';
|
|
5
5
|
import { readBackstory, readGuidelines, readSystemPrompt } from '#src/prompt.js';
|
|
6
6
|
import { createInterface, error, exit, setRawMode, stdin as input, stdout as output, } from '#src/systemUtils.js';
|
|
7
|
-
import { appendToFile
|
|
7
|
+
import { appendToFile } from '#src/utils.js';
|
|
8
8
|
import { HumanMessage, SystemMessage } from '@langchain/core/messages';
|
|
9
9
|
import { MemorySaver } from '@langchain/langgraph';
|
|
10
10
|
export async function createInteractiveSession(sessionConfig, commandLineConfigOverrides, message) {
|
|
11
11
|
const config = { ...(await initConfig(commandLineConfigOverrides)) };
|
|
12
12
|
const checkpointSaver = new MemorySaver();
|
|
13
13
|
// Initialize Runner
|
|
14
|
-
const logFileName = config.
|
|
15
|
-
? getGslothFilePath(generateStandardFileName(sessionConfig.mode.toUpperCase()))
|
|
16
|
-
: null;
|
|
14
|
+
const logFileName = getCommandOutputFilePath(config, sessionConfig.mode);
|
|
17
15
|
if (logFileName) {
|
|
18
16
|
initSessionLogging(logFileName, config.streamSessionInferenceLog);
|
|
19
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactiveSessionModule.js","sourceRoot":"","sources":["../../src/modules/interactiveSessionModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACL,qBAAqB,EACrB,OAAO,EACP,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"interactiveSessionModule.js","sourceRoot":"","sources":["../../src/modules/interactiveSessionModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { display, displayError, displaySuccess } from '#src/consoleUtils.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { defaultStatusCallback, display, displayError, displaySuccess, flushSessionLog, initSessionLogging, stopSessionLogging, } from '#src/consoleUtils.js';
|
|
2
|
+
import { getCommandOutputFilePath } from '#src/filePathUtils.js';
|
|
3
|
+
import { ProgressIndicator, appendToFile } from '#src/utils.js';
|
|
4
|
+
import { GthAgentRunner } from '#src/core/GthAgentRunner.js';
|
|
5
|
+
import { MemorySaver } from '@langchain/langgraph';
|
|
6
6
|
import { HumanMessage, SystemMessage } from '@langchain/core/messages';
|
|
7
7
|
/**
|
|
8
8
|
* Ask a question and get an answer from the LLM
|
|
@@ -13,26 +13,41 @@ import { HumanMessage, SystemMessage } from '@langchain/core/messages';
|
|
|
13
13
|
export async function askQuestion(source, preamble, content, config) {
|
|
14
14
|
const progressIndicator = config.streamOutput ? undefined : new ProgressIndicator('Thinking.');
|
|
15
15
|
const messages = [new SystemMessage(preamble), new HumanMessage(content)];
|
|
16
|
-
|
|
16
|
+
// Resolve output path and initialize session logging if enabled
|
|
17
|
+
const filePath = getCommandOutputFilePath(config, source);
|
|
18
|
+
if (filePath) {
|
|
19
|
+
initSessionLogging(filePath, config.streamSessionInferenceLog);
|
|
20
|
+
}
|
|
21
|
+
// Run via Agent Runner (consistent with interactive session)
|
|
22
|
+
const runner = new GthAgentRunner(defaultStatusCallback);
|
|
23
|
+
let outputContent = '';
|
|
24
|
+
try {
|
|
25
|
+
await runner.init('ask', config, new MemorySaver());
|
|
26
|
+
outputContent = await runner.processMessages(messages);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
displayError(`Failed to get answer: ${err instanceof Error ? err.message : String(err)}`);
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
await runner.cleanup();
|
|
33
|
+
}
|
|
17
34
|
progressIndicator?.stop();
|
|
18
|
-
const filename = generateStandardFileName(source);
|
|
19
|
-
const filePath = getGslothFilePath(filename);
|
|
20
35
|
if (!config.streamOutput) {
|
|
21
36
|
display('\n' + outputContent);
|
|
22
37
|
}
|
|
23
|
-
if (
|
|
38
|
+
if (config.writeOutputToFile === false) {
|
|
24
39
|
display('\n'); // something going on in some terminals, they swallow last line of output
|
|
25
40
|
}
|
|
26
|
-
if (
|
|
41
|
+
if (filePath) {
|
|
27
42
|
try {
|
|
28
|
-
|
|
43
|
+
appendToFile(filePath, outputContent);
|
|
44
|
+
flushSessionLog();
|
|
45
|
+
stopSessionLogging();
|
|
29
46
|
displaySuccess(`\n\nThis report can be found in ${filePath}`);
|
|
30
47
|
}
|
|
31
48
|
catch (error) {
|
|
32
49
|
displayError(`Failed to write answer to file: ${filePath}`);
|
|
33
50
|
displayError(error instanceof Error ? error.message : String(error));
|
|
34
|
-
// TODO Consider if we want to exit or just log the error
|
|
35
|
-
// exit(1);
|
|
36
51
|
}
|
|
37
52
|
}
|
|
38
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"questionAnsweringModule.js","sourceRoot":"","sources":["../../src/modules/questionAnsweringModule.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"questionAnsweringModule.js","sourceRoot":"","sources":["../../src/modules/questionAnsweringModule.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,OAAO,EACP,YAAY,EACZ,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,QAAgB,EAChB,OAAe,EACf,MAAiB;IAEjB,MAAM,iBAAiB,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAE1E,gEAAgE;IAChE,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,IAAI,QAAQ,EAAE,CAAC;QACb,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACjE,CAAC;IAED,6DAA6D;IAC7D,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,qBAAqB,CAAC,CAAC;IACzD,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC,CAAC;QACpD,aAAa,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CAAC,yBAAyB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IAED,iBAAiB,EAAE,IAAI,EAAE,CAAC;IAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,MAAM,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,yEAAyE;IAC1F,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YACtC,eAAe,EAAE,CAAC;YAClB,kBAAkB,EAAE,CAAC;YACrB,cAAc,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;YAC5D,YAAY,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,29 +1,44 @@
|
|
|
1
|
-
import { display, displayDebug, displayError, displaySuccess } from '#src/consoleUtils.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { invoke } from '#src/llmUtils.js';
|
|
5
|
-
import { getGslothFilePath } from '#src/filePathUtils.js';
|
|
1
|
+
import { defaultStatusCallback, display, displayDebug, displayError, displaySuccess, flushSessionLog, initSessionLogging, stopSessionLogging, } from '#src/consoleUtils.js';
|
|
2
|
+
import { ProgressIndicator, appendToFile } from '#src/utils.js';
|
|
3
|
+
import { getCommandOutputFilePath } from '#src/filePathUtils.js';
|
|
6
4
|
import { HumanMessage, SystemMessage } from '@langchain/core/messages';
|
|
5
|
+
import { GthAgentRunner } from '#src/core/GthAgentRunner.js';
|
|
6
|
+
import { MemorySaver } from '@langchain/langgraph';
|
|
7
7
|
export async function review(source, preamble, diff, config, command = 'review') {
|
|
8
8
|
const progressIndicator = config.streamOutput ? undefined : new ProgressIndicator('Reviewing.');
|
|
9
9
|
const messages = [new SystemMessage(preamble), new HumanMessage(diff)];
|
|
10
|
-
|
|
10
|
+
// Prepare logging path (if enabled by config)
|
|
11
|
+
const filePath = getCommandOutputFilePath(config, source);
|
|
12
|
+
if (filePath) {
|
|
13
|
+
initSessionLogging(filePath, config.streamSessionInferenceLog);
|
|
14
|
+
}
|
|
15
|
+
const runner = new GthAgentRunner(defaultStatusCallback);
|
|
16
|
+
let outputContent = '';
|
|
17
|
+
try {
|
|
18
|
+
await runner.init(command, config, new MemorySaver());
|
|
19
|
+
outputContent = await runner.processMessages(messages);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
displayDebug(error instanceof Error ? error : String(error));
|
|
23
|
+
displayError('Failed to run review with agent.');
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
await runner.cleanup();
|
|
27
|
+
}
|
|
11
28
|
progressIndicator?.stop();
|
|
12
|
-
const filename = generateStandardFileName(source);
|
|
13
|
-
const filePath = getGslothFilePath(filename);
|
|
14
29
|
if (!config.streamOutput) {
|
|
15
30
|
display('\n' + outputContent);
|
|
16
31
|
}
|
|
17
|
-
if (
|
|
32
|
+
if (filePath) {
|
|
18
33
|
try {
|
|
19
|
-
|
|
34
|
+
appendToFile(filePath, outputContent);
|
|
35
|
+
flushSessionLog();
|
|
36
|
+
stopSessionLogging();
|
|
20
37
|
displaySuccess(`\n\nThis report can be found in ${filePath}`);
|
|
21
38
|
}
|
|
22
39
|
catch (error) {
|
|
23
40
|
displayDebug(error instanceof Error ? error : String(error));
|
|
24
41
|
displayError(`Failed to write review to file: ${filePath}`);
|
|
25
|
-
// Consider if you want to exit or just log the error
|
|
26
|
-
// exit(1);
|
|
27
42
|
}
|
|
28
43
|
}
|
|
29
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewModule.js","sourceRoot":"","sources":["../../src/modules/reviewModule.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"reviewModule.js","sourceRoot":"","sources":["../../src/modules/reviewModule.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,MAAc,EACd,QAAgB,EAChB,IAAY,EACZ,MAAiB,EACjB,UAA2B,QAAQ;IAEnC,MAAM,iBAAiB,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAChG,MAAM,QAAQ,GAAG,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvE,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,IAAI,QAAQ,EAAE,CAAC;QACb,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,qBAAqB,CAAC,CAAC;IACzD,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC,CAAC;QACtD,aAAa,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAY,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,YAAY,CAAC,kCAAkC,CAAC,CAAC;IACnD,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IAED,iBAAiB,EAAE,IAAI,EAAE,CAAC;IAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YACtC,eAAe,EAAE,CAAC;YAClB,kBAAkB,EAAE,CAAC;YACrB,cAAc,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,YAAY,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { GthConfig } from '#src/config.js';
|
|
1
2
|
import type { AnthropicInput } from '@langchain/anthropic';
|
|
2
3
|
import type { BaseChatModel, BaseChatModelParams } from '@langchain/core/language_models/chat_models';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
4
|
+
import { AIMessage } from '@langchain/core/messages';
|
|
5
|
+
import { BinaryOperatorAggregate, Messages, StateType } from '@langchain/langgraph';
|
|
5
6
|
/**
|
|
6
7
|
* Function to process JSON config and create Anthropic LLM instance
|
|
7
8
|
*/
|
|
@@ -16,4 +17,8 @@ export declare function postProcessJsonConfig(config: GthConfig): GthConfig;
|
|
|
16
17
|
* This method seems unnecessary with OpenAI, but is needed for Anthropic,
|
|
17
18
|
* OpenAI does not need a name on the tool and does not seem to return server_tool_use.
|
|
18
19
|
*/
|
|
19
|
-
export declare function postModelHook(state: StateType<
|
|
20
|
+
export declare function postModelHook(state: StateType<{
|
|
21
|
+
messages: BinaryOperatorAggregate<AIMessage[], Messages>;
|
|
22
|
+
}>): StateType<{
|
|
23
|
+
messages: BinaryOperatorAggregate<AIMessage[], Messages>;
|
|
24
|
+
}>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { displayInfo, displayWarning } from '#src/consoleUtils.js';
|
|
2
|
+
import { debugLog, debugLogError } from '#src/debugUtils.js';
|
|
2
3
|
import { env } from '#src/systemUtils.js';
|
|
3
4
|
import { writeFileIfNotExistsWithMessages } from '#src/utils.js';
|
|
4
5
|
import { isAIMessage } from '@langchain/core/messages';
|
|
5
|
-
import { debugLog, debugLogError } from '#src/debugUtils.js';
|
|
6
6
|
/**
|
|
7
7
|
* Function to process JSON config and create Anthropic LLM instance
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/presets/anthropic.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/presets/anthropic.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gaunt-sloth-assistant",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.10",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Andrew Kondratev",
|
|
@@ -20,13 +20,14 @@
|
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "tsc",
|
|
23
|
-
"test": "npm run build && vitest run",
|
|
23
|
+
"test": "npx tsc -p spec/tsconfig.json --noEmit && npm run build && vitest run",
|
|
24
24
|
"it": "npm run build && node it.js",
|
|
25
25
|
"lint": "eslint . --ext .js,.ts",
|
|
26
26
|
"lint-n-fix": "eslint . --ext .js,.ts --fix",
|
|
27
27
|
"format": "prettier --write 'src/**/*.{js,ts}'",
|
|
28
28
|
"prepare": "npm run build",
|
|
29
|
-
"typedoc": "typedoc"
|
|
29
|
+
"typedoc": "typedoc",
|
|
30
|
+
"chat": "node cli.js"
|
|
30
31
|
},
|
|
31
32
|
"bin": {
|
|
32
33
|
"gaunt-sloth-assistant": "cli.js",
|
|
@@ -35,13 +36,13 @@
|
|
|
35
36
|
"gth": "cli.js"
|
|
36
37
|
},
|
|
37
38
|
"dependencies": {
|
|
38
|
-
"@langchain/anthropic": "^0.3.
|
|
39
|
+
"@langchain/anthropic": "^0.3.25",
|
|
39
40
|
"@langchain/core": "^0.3.66",
|
|
40
41
|
"@langchain/deepseek": "^0.1.0",
|
|
41
|
-
"@langchain/google-genai": "^0.2.
|
|
42
|
-
"@langchain/google-vertexai": "^0.2.
|
|
42
|
+
"@langchain/google-genai": "^0.2.16",
|
|
43
|
+
"@langchain/google-vertexai": "^0.2.16",
|
|
43
44
|
"@langchain/groq": "^0.2.3",
|
|
44
|
-
"@langchain/langgraph": "^0.
|
|
45
|
+
"@langchain/langgraph": "^0.4.2",
|
|
45
46
|
"@langchain/mcp-adapters": "^0.6.0",
|
|
46
47
|
"@langchain/openai": "^0.6.3",
|
|
47
48
|
"@langchain/xai": "^0.1.0",
|
|
@@ -54,17 +55,17 @@
|
|
|
54
55
|
"@eslint/js": "^9.26.0",
|
|
55
56
|
"@types/diff": "^7.0.2",
|
|
56
57
|
"@types/express": "^5.0.3",
|
|
57
|
-
"@types/node": "^24.0
|
|
58
|
+
"@types/node": "^24.2.0",
|
|
58
59
|
"@types/uuid": "^10.0.0",
|
|
59
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
60
|
-
"@typescript-eslint/parser": "^8.
|
|
61
|
-
"eslint": "^9.
|
|
60
|
+
"@typescript-eslint/eslint-plugin": "^8.39.0",
|
|
61
|
+
"@typescript-eslint/parser": "^8.39.0",
|
|
62
|
+
"eslint": "^9.32.0",
|
|
62
63
|
"eslint-config-prettier": "^10.1.8",
|
|
63
64
|
"eslint-plugin-prettier": "^5.5.3",
|
|
64
65
|
"globals": "^16.3.0",
|
|
65
66
|
"prettier": "3.6.2",
|
|
66
|
-
"typedoc": "^0.28.
|
|
67
|
-
"typescript": "^5.
|
|
67
|
+
"typedoc": "^0.28.9",
|
|
68
|
+
"typescript": "^5.9.2",
|
|
68
69
|
"vitest": "^3.2.4"
|
|
69
70
|
},
|
|
70
71
|
"imports": {
|