gaunt-sloth-assistant 0.6.4 → 0.7.0
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/assets/release-notes/v0_6_5.md +3 -0
- package/assets/release-notes/v0_7_0.md +7 -0
- package/dist/commands/askCommand.js +1 -1
- package/dist/commands/askCommand.js.map +1 -1
- package/dist/commands/codeCommand.js +1 -1
- package/dist/commands/codeCommand.js.map +1 -1
- package/dist/commands/reviewCommand.js +1 -1
- package/dist/commands/reviewCommand.js.map +1 -1
- package/dist/config.d.ts +13 -7
- package/dist/config.js +45 -12
- package/dist/config.js.map +1 -1
- package/dist/configs/anthropic.js +4 -16
- package/dist/configs/anthropic.js.map +1 -1
- package/dist/configs/groq.js +4 -15
- package/dist/configs/groq.js.map +1 -1
- package/dist/configs/vertexai.js +4 -18
- package/dist/configs/vertexai.js.map +1 -1
- package/dist/consoleUtils.js +1 -1
- package/dist/consoleUtils.js.map +1 -1
- package/dist/core/Invocation.d.ts +6 -2
- package/dist/core/Invocation.js +49 -44
- package/dist/core/Invocation.js.map +1 -1
- package/dist/modules/interactiveSessionModule.js +5 -4
- package/dist/modules/interactiveSessionModule.js.map +1 -1
- package/dist/modules/questionAnsweringModule.js +1 -1
- package/dist/modules/questionAnsweringModule.js.map +1 -1
- package/dist/modules/reviewModule.js +1 -1
- package/dist/modules/reviewModule.js.map +1 -1
- package/dist/tools/GthFileSystemToolkit.d.ts +23 -0
- package/dist/tools/GthFileSystemToolkit.js +606 -0
- package/dist/tools/GthFileSystemToolkit.js.map +1 -0
- package/dist/tools/statusUpdate.d.ts +1 -0
- package/dist/tools/statusUpdate.js +12 -0
- package/dist/tools/statusUpdate.js.map +1 -0
- package/dist/utils.d.ts +20 -2
- package/dist/utils.js +58 -9
- package/dist/utils.js.map +1 -1
- package/docs/CONFIGURATION.md +45 -19
- package/package.json +5 -3
- package/src/commands/askCommand.ts +1 -1
- package/src/commands/codeCommand.ts +1 -1
- package/src/commands/reviewCommand.ts +1 -1
- package/src/config.ts +73 -20
- package/src/configs/anthropic.ts +4 -17
- package/src/configs/groq.ts +4 -16
- package/src/configs/vertexai.ts +4 -19
- package/src/consoleUtils.ts +1 -1
- package/src/core/Invocation.ts +55 -58
- package/src/modules/interactiveSessionModule.ts +5 -4
- package/src/modules/questionAnsweringModule.ts +1 -1
- package/src/modules/reviewModule.ts +1 -1
- package/src/tools/GthFileSystemToolkit.ts +833 -0
- package/src/tools/statusUpdate.ts +15 -0
- package/src/utils.ts +72 -10
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# v0.7.0
|
|
2
|
+
|
|
3
|
+
- Improved user experience for code command functionality
|
|
4
|
+
- Enhanced chat and code interaction experience
|
|
5
|
+
- Fixed streaming issue with Anthropic API integration
|
|
6
|
+
- Extracted tool filtering logic from Invocation to configuration layer for better modularity
|
|
7
|
+
- Replaced File System MCP with local tools implementation for better performance and reliability
|
|
@@ -23,7 +23,7 @@ export function askCommand(program) {
|
|
|
23
23
|
if (options.file) {
|
|
24
24
|
content.push(readMultipleFilesFromCurrentDir(options.file));
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
const stringFromStdin = getStringFromStdin();
|
|
27
27
|
if (stringFromStdin) {
|
|
28
28
|
content.push(stringFromStdin);
|
|
29
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"askCommand.js","sourceRoot":"","sources":["../../src/commands/askCommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAMzD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,gBAAgB,CAAC;SAC7B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;SAClC,MAAM,CACL,uBAAuB,EACvB,sEAAsE,CACvE;SACA,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,OAA0B,EAAE,EAAE;QAC5D,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,CAAC,aAAa,EAAE,EAAE,cAAc,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC7E,IAAI,YAAY,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,
|
|
1
|
+
{"version":3,"file":"askCommand.js","sourceRoot":"","sources":["../../src/commands/askCommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAMzD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,gBAAgB,CAAC;SAC7B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;SAClC,MAAM,CACL,uBAAuB,EACvB,sEAAsE,CACvE;SACA,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,OAA0B,EAAE,EAAE;QAC5D,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,CAAC,aAAa,EAAE,EAAE,cAAc,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC7E,IAAI,YAAY,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;QAC7C,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,sDAAsD;QACtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC;QAChF,MAAM,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeCommand.js","sourceRoot":"","sources":["../../src/commands/codeCommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAiB,MAAM,
|
|
1
|
+
{"version":3,"file":"codeCommand.js","sourceRoot":"","sources":["../../src/commands/codeCommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAiB,MAAM,0CAA0C,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CACV,uFAAuF,CACxF;SACA,QAAQ,CAAC,WAAW,EAAE,2CAA2C,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QAChC,MAAM,aAAa,GAAkB;YACnC,IAAI,EAAE,MAAM;YACZ,cAAc,EAAE,cAAc;YAC9B,WAAW,EACT,uFAAuF;YACzF,YAAY,EAAE,mDAAmD;YACjE,WAAW,EAAE,kDAAkD;SAChE,CAAC;QAEF,MAAM,wBAAwB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -48,7 +48,7 @@ export function reviewCommand(program) {
|
|
|
48
48
|
if (options.file) {
|
|
49
49
|
content.push(readMultipleFilesFromCurrentDir(options.file));
|
|
50
50
|
}
|
|
51
|
-
|
|
51
|
+
const stringFromStdin = getStringFromStdin();
|
|
52
52
|
if (stringFromStdin) {
|
|
53
53
|
content.push(stringFromStdin);
|
|
54
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewCommand.js","sourceRoot":"","sources":["../../src/commands/reviewCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EACL,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EAGjB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAU3B,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uCAAuC,CAAC;SACpD,QAAQ,CACP,aAAa,EACb,wEAAwE,CACzE;SACA,KAAK,CAAC,GAAG,CAAC;QACX,0DAA0D;SACzD,MAAM,CACL,uBAAuB,EACvB,2FAA2F,CAC5F;QACD,2FAA2F;SAC1F,MAAM,CAAC,mCAAmC,EAAE,+BAA+B,CAAC;SAC5E,SAAS,CACR,IAAI,MAAM,CACR,oDAAoD,EACpD,wCAAwC,CACzC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAC/C;SACA,SAAS,CACR,IAAI,MAAM,CAAC,sCAAsC,EAAE,mBAAmB,CAAC,CAAC,OAAO,CAC7E,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAC/B,CACF;SACA,MAAM,CAAC,yBAAyB,EAAE,kDAAkD,CAAC;SACrF,MAAM,CAAC,KAAK,EAAE,SAA6B,EAAE,OAA6B,EAAE,EAAE;QAC7E,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC,CAAC,4BAA4B;QAC/D,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;QACxC,MAAM,aAAa,GAAG;YACpB,aAAa,EAAE;YACf,cAAc,CAAC,MAAM,CAAC,iBAAiB,CAAC;YACxC,sBAAsB,CAAC,MAAM,CAAC,yBAAyB,CAAC;SACzD,CAAC;QACF,IAAI,YAAY,EAAE,CAAC;YACjB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;QAC5C,MAAM,oBAAoB,GACxB,OAAO,CAAC,oBAAoB;YAC3B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAA6D;YACvF,MAAM,EAAE,oBAA6D,CAAC;QACzE,MAAM,eAAe,GACnB,OAAO,CAAC,eAAe;YACtB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAmD;YAC7E,MAAM,EAAE,eAAmD,CAAC;QAE/D,0CAA0C;QAC1C,MAAM,YAAY,GAAG,MAAM,2BAA2B,CACpD,oBAAoB,EACpB,cAAc,EACd,MAAM,CACP,CAAC;QACF,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAAC,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACzF,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,
|
|
1
|
+
{"version":3,"file":"reviewCommand.js","sourceRoot":"","sources":["../../src/commands/reviewCommand.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
|
|
2
2
|
import type { Connection } from '@langchain/mcp-adapters';
|
|
3
|
+
import type { BaseToolkit, StructuredToolInterface } from '@langchain/core/tools';
|
|
3
4
|
export interface SlothConfig extends BaseSlothConfig {
|
|
4
5
|
llm: BaseChatModel;
|
|
5
6
|
contentProvider: string;
|
|
@@ -7,7 +8,8 @@ export interface SlothConfig extends BaseSlothConfig {
|
|
|
7
8
|
projectGuidelines: string;
|
|
8
9
|
projectReviewInstructions: string;
|
|
9
10
|
streamOutput: boolean;
|
|
10
|
-
filesystem: string[] | 'all' | 'none';
|
|
11
|
+
filesystem: string[] | 'all' | 'read' | 'none';
|
|
12
|
+
tools?: StructuredToolInterface[] | BaseToolkit[];
|
|
11
13
|
}
|
|
12
14
|
/**
|
|
13
15
|
* Raw, unprocessed sloth config
|
|
@@ -25,26 +27,26 @@ interface BaseSlothConfig {
|
|
|
25
27
|
projectGuidelines?: string;
|
|
26
28
|
projectReviewInstructions?: string;
|
|
27
29
|
streamOutput?: boolean;
|
|
28
|
-
filesystem?: string[] | 'all' | 'none';
|
|
30
|
+
filesystem?: string[] | 'all' | 'read' | 'none';
|
|
29
31
|
commands?: {
|
|
30
32
|
pr?: {
|
|
31
33
|
contentProvider?: string;
|
|
32
34
|
requirementsProvider?: string;
|
|
33
|
-
filesystem?: string[] | 'all' | 'none';
|
|
35
|
+
filesystem?: string[] | 'all' | 'read' | 'none';
|
|
34
36
|
};
|
|
35
37
|
review?: {
|
|
36
38
|
requirementsProvider?: string;
|
|
37
39
|
contentProvider?: string;
|
|
38
|
-
filesystem?: string[] | 'all' | 'none';
|
|
40
|
+
filesystem?: string[] | 'all' | 'read' | 'none';
|
|
39
41
|
};
|
|
40
42
|
ask?: {
|
|
41
|
-
filesystem?: string[] | 'all' | 'none';
|
|
43
|
+
filesystem?: string[] | 'all' | 'read' | 'none';
|
|
42
44
|
};
|
|
43
45
|
chat?: {
|
|
44
|
-
filesystem?: string[] | 'all' | 'none';
|
|
46
|
+
filesystem?: string[] | 'all' | 'read' | 'none';
|
|
45
47
|
};
|
|
46
48
|
code?: {
|
|
47
|
-
filesystem?: string[] | 'all' | 'none';
|
|
49
|
+
filesystem?: string[] | 'all' | 'read' | 'none';
|
|
48
50
|
};
|
|
49
51
|
};
|
|
50
52
|
requirementsProviderConfig?: Record<string, unknown>;
|
|
@@ -71,4 +73,8 @@ export declare function initConfig(): Promise<SlothConfig>;
|
|
|
71
73
|
export declare function tryJsonConfig(jsonConfig: RawSlothConfig): Promise<SlothConfig>;
|
|
72
74
|
export declare function createProjectConfig(configType: string): Promise<void>;
|
|
73
75
|
export declare function writeProjectReviewPreamble(): void;
|
|
76
|
+
/**
|
|
77
|
+
* Get default tools based on filesystem configuration
|
|
78
|
+
*/
|
|
79
|
+
export declare function getDefaultTools(filesystemConfig?: string[] | 'all' | 'read' | 'none'): StructuredToolInterface[];
|
|
74
80
|
export {};
|
package/dist/config.js
CHANGED
|
@@ -3,7 +3,9 @@ import { importExternalFile, writeFileIfNotExistsWithMessages } from '#src/utils
|
|
|
3
3
|
import { existsSync, readFileSync } from 'node:fs';
|
|
4
4
|
import { error, exit } from '#src/systemUtils.js';
|
|
5
5
|
import { getGslothConfigReadPath, getGslothConfigWritePath } from '#src/filePathUtils.js';
|
|
6
|
-
import {
|
|
6
|
+
import { PROJECT_GUIDELINES, PROJECT_REVIEW_INSTRUCTIONS, USER_PROJECT_CONFIG_JS, USER_PROJECT_CONFIG_JSON, USER_PROJECT_CONFIG_MJS, } from '#src/constants.js';
|
|
7
|
+
import { getCurrentDir } from '#src/systemUtils.js';
|
|
8
|
+
import GthFileSystemToolkit from '#src/tools/GthFileSystemToolkit.js';
|
|
7
9
|
export const availableDefaultConfigs = ['vertexai', 'anthropic', 'groq'];
|
|
8
10
|
export const DEFAULT_CONFIG = {
|
|
9
11
|
llm: undefined,
|
|
@@ -12,15 +14,7 @@ export const DEFAULT_CONFIG = {
|
|
|
12
14
|
projectGuidelines: PROJECT_GUIDELINES,
|
|
13
15
|
projectReviewInstructions: PROJECT_REVIEW_INSTRUCTIONS,
|
|
14
16
|
streamOutput: true,
|
|
15
|
-
filesystem:
|
|
16
|
-
'read_file',
|
|
17
|
-
'read_multiple_files',
|
|
18
|
-
'list_directory',
|
|
19
|
-
'directory_tree',
|
|
20
|
-
'search_files',
|
|
21
|
-
'get_file_info',
|
|
22
|
-
'list_allowed_directories',
|
|
23
|
-
],
|
|
17
|
+
filesystem: 'read',
|
|
24
18
|
commands: {
|
|
25
19
|
pr: {
|
|
26
20
|
contentProvider: 'github', // gh pr diff NN
|
|
@@ -72,7 +66,7 @@ async function tryJsConfig() {
|
|
|
72
66
|
if (existsSync(jsConfigPath)) {
|
|
73
67
|
try {
|
|
74
68
|
const i = await importExternalFile(jsConfigPath);
|
|
75
|
-
const customConfig = await i.configure(
|
|
69
|
+
const customConfig = await i.configure();
|
|
76
70
|
return mergeConfig(customConfig);
|
|
77
71
|
}
|
|
78
72
|
catch (e) {
|
|
@@ -93,7 +87,7 @@ async function tryMjsConfig() {
|
|
|
93
87
|
if (existsSync(mjsConfigPath)) {
|
|
94
88
|
try {
|
|
95
89
|
const i = await importExternalFile(mjsConfigPath);
|
|
96
|
-
const customConfig = await i.configure(
|
|
90
|
+
const customConfig = await i.configure();
|
|
97
91
|
return mergeConfig(customConfig);
|
|
98
92
|
}
|
|
99
93
|
catch (e) {
|
|
@@ -227,4 +221,43 @@ function mergeConfig(partialConfig) {
|
|
|
227
221
|
function mergeRawConfig(config, llm) {
|
|
228
222
|
return mergeConfig({ ...config, llm });
|
|
229
223
|
}
|
|
224
|
+
/**
|
|
225
|
+
* Filter filesystem tools based on configuration
|
|
226
|
+
*/
|
|
227
|
+
function filterFilesystemTools(toolkit, filesystemConfig) {
|
|
228
|
+
if (filesystemConfig === 'all') {
|
|
229
|
+
return toolkit.getTools();
|
|
230
|
+
}
|
|
231
|
+
if (filesystemConfig === 'none') {
|
|
232
|
+
return [];
|
|
233
|
+
}
|
|
234
|
+
if (filesystemConfig === 'read') {
|
|
235
|
+
// Read-only: only allow read operations
|
|
236
|
+
return toolkit.getFilteredTools(['read']);
|
|
237
|
+
}
|
|
238
|
+
if (!Array.isArray(filesystemConfig)) {
|
|
239
|
+
return toolkit.getTools();
|
|
240
|
+
}
|
|
241
|
+
if (filesystemConfig.includes('all')) {
|
|
242
|
+
return toolkit.getTools();
|
|
243
|
+
}
|
|
244
|
+
// Handle an array of specific tool names or 'read'/'all'
|
|
245
|
+
const allowedTools = filesystemConfig.includes('read')
|
|
246
|
+
? toolkit.getFilteredTools(['read'])
|
|
247
|
+
: [];
|
|
248
|
+
// Also allow specific tool names
|
|
249
|
+
const allowedToolNames = new Set(filesystemConfig.filter((name) => name !== 'read' && name !== 'all'));
|
|
250
|
+
const specificNamedTools = toolkit.getTools().filter((tool) => {
|
|
251
|
+
return tool.name && allowedToolNames.has(tool.name);
|
|
252
|
+
});
|
|
253
|
+
// Combine and deduplicate
|
|
254
|
+
const allAllowedTools = [...allowedTools, ...specificNamedTools];
|
|
255
|
+
return allAllowedTools.filter((tool, index, arr) => arr.findIndex((t) => t.name === tool.name) === index);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get default tools based on filesystem configuration
|
|
259
|
+
*/
|
|
260
|
+
export function getDefaultTools(filesystemConfig = 'none') {
|
|
261
|
+
return [...filterFilesystemTools(new GthFileSystemToolkit([getCurrentDir()]), filesystemConfig)];
|
|
262
|
+
}
|
|
230
263
|
//# 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,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAG1F,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,oBAAoB,MAAM,oCAAoC,CAAC;AA8DtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC;AAGlF,MAAM,CAAC,MAAM,cAAc,GAAyB;IAClD,GAAG,EAAE,SAAS;IACd,eAAe,EAAE,MAAM;IACvB,oBAAoB,EAAE,MAAM;IAC5B,iBAAiB,EAAE,kBAAkB;IACrC,yBAAyB,EAAE,2BAA2B;IACtD,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,MAAM;IAClB,QAAQ,EAAE;QACR,EAAE,EAAE;YACF,eAAe,EAAE,QAAQ,EAAE,gBAAgB;YAC3C,oBAAoB,EAAE,QAAQ,EAAE,mBAAmB;SACpD;QACD,IAAI,EAAE;YACJ,UAAU,EAAE,KAAK;SAClB;KACF;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,cAAc,GAAG,uBAAuB,CAAC,wBAAwB,CAAC,CAAC;IAEzE,yCAAyC;IACzC,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,oDAAoD;YACpD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAmB,CAAC;YACtF,4EAA4E;YAC5E,IAAI,UAAU,CAAC,GAAG,IAAI,OAAO,UAAU,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;gBACrF,OAAO,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,cAAc,0DAA0D,CAAC,CAAC;gBACnF,IAAI,CAAC,CAAC,CAAC,CAAC;gBACR,wCAAwC;gBACxC,iHAAiH;gBACjH,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,YAAY,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,YAAY,CACV,8BAA8B,wBAAwB,2BAA2B,CAClF,CAAC;YACF,gCAAgC;YAChC,OAAO,WAAW,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,gCAAgC;QAChC,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,2CAA2C;AAC3C,KAAK,UAAU,WAAW;IACxB,MAAM,YAAY,GAAG,uBAAuB,CAAC,sBAAsB,CAAC,CAAC;IACrE,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;YACzC,OAAO,WAAW,CAAC,YAAY,CAAgB,CAAC;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,YAAY,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,YAAY,CAAC,8BAA8B,sBAAsB,2BAA2B,CAAC,CAAC;YAC9F,gCAAgC;YAChC,OAAO,YAAY,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+BAA+B;QAC/B,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,4CAA4C;AAC5C,KAAK,UAAU,YAAY;IACzB,MAAM,aAAa,GAAG,uBAAuB,CAAC,uBAAuB,CAAC,CAAC;IACvE,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;YACzC,OAAO,WAAW,CAAC,YAAY,CAAgB,CAAC;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,YAAY,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,YAAY,CAAC,8BAA8B,uBAAuB,GAAG,CAAC,CAAC;YACvE,YAAY,CAAC,yEAAyE,CAAC,CAAC;YACxF,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;IACH,CAAC;SAAM,CAAC;QACN,wBAAwB;QACxB,YAAY,CACV,qDAAqD;YACnD,GAAG,wBAAwB,KAAK,sBAAsB,QAAQ,uBAAuB,GAAG;YACxF,4BAA4B,CAC/B,CAAC;QACF,IAAI,CAAC,CAAC,CAAC,CAAC;IACV,CAAC;IACD,iHAAiH;IACjH,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAA0B;IAC5D,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,GAAG,IAAI,OAAO,UAAU,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACzD,0EAA0E;YAC1E,MAAM,OAAO,GAAI,UAAU,CAAC,GAAiB,CAAC,IAAI,CAAC;YACnD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,YAAY,CAAC,mCAAmC,CAAC,CAAC;gBAClD,IAAI,CAAC,CAAC,CAAC,CAAC;YACV,CAAC;YAED,kDAAkD;YAClD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC;YACjC,uCAAuC;YACvC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,aAAa,OAAO,KAAK,CAAC,CAAC;YAC7D,IAAI,YAAY,CAAC,iBAAiB,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,CAAC,MAAM,YAAY,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAkB,CAAC;gBAC/E,OAAO,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,qBAAqB,OAAO,4CAA4C,CAAC,CAAC;gBACzF,IAAI,CAAC,CAAC,CAAC,CAAC;YACV,CAAC;QACH,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,uCAAuC,CAAC,CAAC;YACtD,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACnE,YAAY,CAAC,aAAc,UAAU,CAAC,GAAiB,CAAC,IAAI,kBAAkB,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,gCAAgC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,CAAC;IACV,CAAC;IACD,iHAAiH;IACjH,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAkB;IAC1D,oCAAoC;IACpC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,UAAwB,CAAC,EAAE,CAAC;QAChE,YAAY,CACV,wBAAwB,UAAU,wBAAwB,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/F,CAAC;QACF,IAAI,CAAC,CAAC,CAAC,CAAC;IACV,CAAC;IAED,WAAW,CAAC,2BAA2B,CAAC,CAAC;IACzC,0BAA0B,EAAE,CAAC;IAC7B,cAAc,CAAC,wDAAwD,kBAAkB,KAAK,CAAC,CAAC;IAEhG,WAAW,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,aAAa,UAAU,KAAK,CAAC,CAAC;IAChE,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,MAAM,cAAc,GAAG,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,wBAAwB,CAAC,2BAA2B,CAAC,CAAC;IAEzE;;;;OAIG;IACH,MAAM,kBAAkB,GAAG;;;;2EAI8C,kBAAkB;;qBAExE,kBAAkB;CACtC,CAAC;IAEA;;;;OAIG;IACH,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;CAexB,CAAC;IAEA,gCAAgC,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IACrE,gCAAgC,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,aAAmC;IACtD,MAAM,MAAM,GAAG,aAA4B,CAAC;IAC5C,OAAO;QACL,GAAG,cAAc;QACjB,GAAG,MAAM;QACT,QAAQ,EAAE,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC,EAAE;KACtE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,MAAsB,EAAE,GAAkB;IAChE,OAAO,WAAW,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,OAA6B,EAC7B,gBAAoD;IAEpD,IAAI,gBAAgB,KAAK,KAAK,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI,gBAAgB,KAAK,MAAM,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,gBAAgB,KAAK,MAAM,EAAE,CAAC;QAChC,wCAAwC;QACxC,OAAO,OAAO,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrC,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED,yDAAyD;IACzD,MAAM,YAAY,GAA8B,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC/E,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,EAAE,CAAC;IAEP,iCAAiC;IACjC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,KAAK,CAAC,CACrE,CAAC;IACF,MAAM,kBAAkB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5D,OAAO,IAAI,CAAC,IAAI,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,eAAe,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,kBAAkB,CAAC,CAAC;IACjE,OAAO,eAAe,CAAC,MAAM,CAC3B,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAC3E,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,mBAAuD,MAAM;IAE7D,OAAO,CAAC,GAAG,qBAAqB,CAAC,IAAI,oBAAoB,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACnG,CAAC"}
|
|
@@ -13,20 +13,6 @@ export async function processJsonConfig(llmConfig) {
|
|
|
13
13
|
model: llmConfig.model || 'claude-sonnet-4-20250514',
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
-
const jsContent = `/* eslint-disable */
|
|
17
|
-
export async function configure(importFunction, global) {
|
|
18
|
-
// this is going to be imported from sloth dependencies,
|
|
19
|
-
// but can potentially be pulled from global node modules or from this project
|
|
20
|
-
// At a moment only google-vertexai and anthropic packaged with Sloth, but you can install support for any other langchain llms
|
|
21
|
-
const anthropic = await importFunction('@langchain/anthropic');
|
|
22
|
-
return {
|
|
23
|
-
llm: new anthropic.ChatAnthropic({
|
|
24
|
-
apiKey: process.env.ANTHROPIC_API_KEY, // Default value, but you can provide the key in many different ways, even as literal
|
|
25
|
-
model: "claude-sonnet-4-20250514" // Don't forget to check new models availability.
|
|
26
|
-
})
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
`;
|
|
30
16
|
const jsonContent = `{
|
|
31
17
|
"llm": {
|
|
32
18
|
"type": "anthropic",
|
|
@@ -37,8 +23,10 @@ export function init(configFileName) {
|
|
|
37
23
|
const currentDir = getCurrentDir();
|
|
38
24
|
path.join(currentDir, configFileName);
|
|
39
25
|
// Determine which content to use based on file extension
|
|
40
|
-
|
|
41
|
-
|
|
26
|
+
if (!configFileName.endsWith('.json')) {
|
|
27
|
+
throw new Error('Only JSON config is supported.');
|
|
28
|
+
}
|
|
29
|
+
writeFileIfNotExistsWithMessages(configFileName, jsonContent);
|
|
42
30
|
displayWarning(`You need to update your ${configFileName} to add your Anthropic API key.`);
|
|
43
31
|
}
|
|
44
32
|
//# sourceMappingURL=anthropic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/configs/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAOjE,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAA+C;IAE/C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACvD,wEAAwE;IACxE,MAAM,eAAe,GAAG,GAAG,CAAC,iBAAiB,IAAI,SAAS,CAAC,MAAM,CAAC;IAClE,OAAO,IAAI,SAAS,CAAC,aAAa,CAAC;QACjC,GAAG,SAAS;QACZ,MAAM,EAAE,eAAe;QACvB,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,0BAA0B;KACrD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/configs/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAOjE,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAA+C;IAE/C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACvD,wEAAwE;IACxE,MAAM,eAAe,GAAG,GAAG,CAAC,iBAAiB,IAAI,SAAS,CAAC,MAAM,CAAC;IAClE,OAAO,IAAI,SAAS,CAAC,aAAa,CAAC;QACjC,GAAG,SAAS;QACZ,MAAM,EAAE,eAAe;QACvB,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,0BAA0B;KACrD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,WAAW,GAAG;;;;;EAKlB,CAAC;AAEH,MAAM,UAAU,IAAI,CAAC,cAAsB;IACzC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAEtC,yDAAyD;IACzD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,gCAAgC,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC9D,cAAc,CAAC,2BAA2B,cAAc,iCAAiC,CAAC,CAAC;AAC7F,CAAC"}
|
package/dist/configs/groq.js
CHANGED
|
@@ -13,19 +13,6 @@ export async function processJsonConfig(llmConfig) {
|
|
|
13
13
|
model: llmConfig.model || 'deepseek-r1-distill-llama-70b',
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
-
const jsContent = `/* eslint-disable */
|
|
17
|
-
export async function configure(importFunction, global) {
|
|
18
|
-
// this is going to be imported from sloth dependencies,
|
|
19
|
-
// but can potentially be pulled from global node modules or from this project
|
|
20
|
-
const groq = await importFunction('@langchain/groq');
|
|
21
|
-
return {
|
|
22
|
-
llm: new groq.ChatGroq({
|
|
23
|
-
model: "deepseek-r1-distill-llama-70b", // Check other models available
|
|
24
|
-
apiKey: process.env.GROQ_API_KEY, // Default value, but you can provide the key in many different ways, even as literal
|
|
25
|
-
})
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
`;
|
|
29
16
|
const jsonContent = `{
|
|
30
17
|
"llm": {
|
|
31
18
|
"type": "groq",
|
|
@@ -37,8 +24,10 @@ export function init(configFileName) {
|
|
|
37
24
|
const currentDir = getCurrentDir();
|
|
38
25
|
path.join(currentDir, configFileName);
|
|
39
26
|
// Determine which content to use based on file extension
|
|
40
|
-
|
|
41
|
-
|
|
27
|
+
if (!configFileName.endsWith('.json')) {
|
|
28
|
+
throw new Error('Only JSON config is supported.');
|
|
29
|
+
}
|
|
30
|
+
writeFileIfNotExistsWithMessages(configFileName, jsonContent);
|
|
42
31
|
displayInfo(`You can define GROQ_API_KEY environment variable with your Groq API key and it will work with default model.`);
|
|
43
32
|
displayWarning(`You need to edit your ${configFileName} to configure model.`);
|
|
44
33
|
}
|
package/dist/configs/groq.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groq.js","sourceRoot":"","sources":["../../src/configs/groq.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAIjE,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAwB;IAC9D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC7C,wEAAwE;IACxE,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC;IACxD,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC;QACvB,GAAG,SAAS;QACZ,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,+BAA+B;KAC1D,CAAC,CAAC;AACL,CAAC;AAED,MAAM,
|
|
1
|
+
{"version":3,"file":"groq.js","sourceRoot":"","sources":["../../src/configs/groq.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAIjE,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAwB;IAC9D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC7C,wEAAwE;IACxE,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC;IACxD,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC;QACvB,GAAG,SAAS;QACZ,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,+BAA+B;KAC1D,CAAC,CAAC;AACL,CAAC;AAED,MAAM,WAAW,GAAG;;;;;;EAMlB,CAAC;AAEH,MAAM,UAAU,IAAI,CAAC,cAAsB;IACzC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAEtC,yDAAyD;IACzD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,gCAAgC,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC9D,WAAW,CACT,8GAA8G,CAC/G,CAAC;IACF,cAAc,CAAC,yBAAyB,cAAc,sBAAsB,CAAC,CAAC;AAChF,CAAC"}
|
package/dist/configs/vertexai.js
CHANGED
|
@@ -2,22 +2,6 @@ import path from 'node:path';
|
|
|
2
2
|
import { displayWarning } from '#src/consoleUtils.js';
|
|
3
3
|
import { getCurrentDir } from '#src/systemUtils.js';
|
|
4
4
|
import { writeFileIfNotExistsWithMessages } from '#src/utils.js';
|
|
5
|
-
const jsContent = `/* eslint-disable */
|
|
6
|
-
export async function configure(importFunction, global) {
|
|
7
|
-
// this is going to be imported from sloth dependencies,
|
|
8
|
-
// but can potentially be pulled from global node modules or from this project
|
|
9
|
-
const vertexAi = await importFunction('@langchain/google-vertexai');
|
|
10
|
-
return {
|
|
11
|
-
llm: new vertexAi.ChatVertexAI({
|
|
12
|
-
model: "gemini-2.5-pro-preview-05-06", // Consider checking for latest recommended model versions
|
|
13
|
-
// temperature: 0,
|
|
14
|
-
// Other parameters might be relevant depending on Vertex AI API updates
|
|
15
|
-
// The project is not in the interface, but it is in documentation
|
|
16
|
-
// project: 'your-cool-gcloud-project'
|
|
17
|
-
})
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
`;
|
|
21
5
|
const jsonContent = `{
|
|
22
6
|
"llm": {
|
|
23
7
|
"type": "vertexai",
|
|
@@ -29,8 +13,10 @@ export function init(configFileName) {
|
|
|
29
13
|
const currentDir = getCurrentDir();
|
|
30
14
|
path.join(currentDir, configFileName);
|
|
31
15
|
// Determine which content to use based on file extension
|
|
32
|
-
|
|
33
|
-
|
|
16
|
+
if (!configFileName.endsWith('.json')) {
|
|
17
|
+
throw new Error('Only JSON config is supported.');
|
|
18
|
+
}
|
|
19
|
+
writeFileIfNotExistsWithMessages(configFileName, jsonContent);
|
|
34
20
|
displayWarning('For Google VertexAI you likely to need to do `gcloud auth login` and `gcloud auth application-default login`.');
|
|
35
21
|
}
|
|
36
22
|
// Function to process JSON config and create VertexAI LLM instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertexai.js","sourceRoot":"","sources":["../../src/configs/vertexai.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAIjE,MAAM,
|
|
1
|
+
{"version":3,"file":"vertexai.js","sourceRoot":"","sources":["../../src/configs/vertexai.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAIjE,MAAM,WAAW,GAAG;;;;;;EAMlB,CAAC;AAEH,MAAM,UAAU,IAAI,CAAC,cAAsB;IACzC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAEtC,yDAAyD;IACzD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,gCAAgC,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC9D,cAAc,CACZ,+GAA+G,CAChH,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAA4B;IAClE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAC5D,OAAO,IAAI,QAAQ,CAAC,YAAY,CAAC;QAC/B,GAAG,SAAS;QACZ,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,8BAA8B;KACzD,CAAC,CAAC;AACL,CAAC"}
|
package/dist/consoleUtils.js
CHANGED
package/dist/consoleUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consoleUtils.js","sourceRoot":"","sources":["../src/consoleUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,KAAK,IAAI,WAAW,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAItF,kGAAkG;AAElG,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,WAAW,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"consoleUtils.js","sourceRoot":"","sources":["../src/consoleUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,KAAK,IAAI,WAAW,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAItF,kGAAkG;AAElG,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,GAAG,CAAC,OAAO,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAmC;IAC9D,oCAAoC;IACpC,IAAI,OAAO,YAAY,KAAK,EAAE,CAAC;QAC7B,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,WAAW,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,gCAAgC;AAChC,MAAM,CAAC,MAAM,sBAAsB,GAAyB,CAC1D,KAAkB,EAClB,OAAe,EACf,EAAE;IACF,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM;YACT,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM;QACR,KAAK,SAAS;YACZ,cAAc,CAAC,OAAO,CAAC,CAAC;YACxB,MAAM;QACR,KAAK,OAAO;YACV,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM;QACR,KAAK,SAAS;YACZ,cAAc,CAAC,OAAO,CAAC,CAAC;YACxB,MAAM;QACR,KAAK,OAAO;YACV,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM;QACR,KAAK,SAAS;YACZ,OAAO,CAAC,OAAO,CAAC,CAAC;YACjB,MAAM;QACR,KAAK,QAAQ;YACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM;IACV,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Message } from '#src/modules/types.js';
|
|
2
2
|
import { SlothConfig } from '#src/config.js';
|
|
3
|
+
import type { Connection } from '@langchain/mcp-adapters';
|
|
3
4
|
import { MultiServerMCPClient } from '@langchain/mcp-adapters';
|
|
4
5
|
import { BaseCheckpointSaver } from '@langchain/langgraph';
|
|
5
|
-
import type { StructuredToolInterface } from '@langchain/core/tools';
|
|
6
6
|
import { type RunnableConfig } from '@langchain/core/runnables';
|
|
7
7
|
import { StatusLevel } from '#src/core/types.js';
|
|
8
8
|
export type StatusUpdateCallback = (level: StatusLevel, message: string) => void;
|
|
@@ -17,6 +17,10 @@ export declare class Invocation {
|
|
|
17
17
|
init(command: 'ask' | 'pr' | 'review' | 'chat' | 'code' | undefined, config: SlothConfig, checkpointSaver?: BaseCheckpointSaver | undefined): Promise<void>;
|
|
18
18
|
invoke(messages: Message[], runConfig?: RunnableConfig): Promise<string>;
|
|
19
19
|
cleanup(): Promise<void>;
|
|
20
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Extract and flatten tools from toolkits
|
|
22
|
+
*/
|
|
23
|
+
private extractAndFlattenTools;
|
|
24
|
+
protected getDefaultMcpServers(): Record<string, Connection>;
|
|
21
25
|
protected getMcpClient(config: SlothConfig): MultiServerMCPClient | null;
|
|
22
26
|
}
|
package/dist/core/Invocation.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { isAIMessage } from '@langchain/core/messages';
|
|
2
2
|
import { MultiServerMCPClient } from '@langchain/mcp-adapters';
|
|
3
3
|
import { createReactAgent } from '@langchain/langgraph/prebuilt';
|
|
4
|
-
import { getCurrentDir } from '#src/systemUtils.js';
|
|
5
4
|
import { ProgressIndicator } from '#src/utils.js';
|
|
5
|
+
import { formatToolCalls } from '#src/utils.js';
|
|
6
|
+
import { getDefaultTools } from '#src/config.js';
|
|
6
7
|
export class Invocation {
|
|
7
8
|
statusUpdate;
|
|
8
9
|
verbose = false;
|
|
@@ -17,13 +18,6 @@ export class Invocation {
|
|
|
17
18
|
this.verbose = verbose;
|
|
18
19
|
}
|
|
19
20
|
async init(command, config, checkpointSaver) {
|
|
20
|
-
try {
|
|
21
|
-
if (config.streamOutput && config.llm._llmType() === 'anthropic') {
|
|
22
|
-
this.statusUpdate('warning', 'To avoid known bug with Anthropic forcing streamOutput to false');
|
|
23
|
-
config.streamOutput = false;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
catch { }
|
|
27
21
|
if (this.verbose) {
|
|
28
22
|
config.llm.verbose = true;
|
|
29
23
|
}
|
|
@@ -37,10 +31,21 @@ export class Invocation {
|
|
|
37
31
|
}
|
|
38
32
|
this.config = effectiveConfig;
|
|
39
33
|
this.mcpClient = this.getMcpClient(effectiveConfig);
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
34
|
+
// Get default filesystem tools (filtered based on config)
|
|
35
|
+
const defaultTools = getDefaultTools(effectiveConfig.filesystem || 'none');
|
|
36
|
+
// Get user config tools
|
|
37
|
+
const configTools = effectiveConfig.tools || [];
|
|
38
|
+
const flattenedConfigTools = this.extractAndFlattenTools(configTools);
|
|
39
|
+
// Get MCP tools
|
|
40
|
+
const mcpTools = (await this.mcpClient?.getTools()) ?? [];
|
|
41
|
+
// Combine all tools
|
|
42
|
+
const tools = [...defaultTools, ...flattenedConfigTools, ...mcpTools];
|
|
43
|
+
if (tools.length > 0) {
|
|
44
|
+
const toolNames = tools
|
|
45
|
+
.map((tool) => tool.name)
|
|
46
|
+
.filter((name) => name)
|
|
47
|
+
.join(', ');
|
|
48
|
+
this.statusUpdate('info', `Loaded tools: ${toolNames}`);
|
|
44
49
|
}
|
|
45
50
|
// Create the React agent
|
|
46
51
|
this.agent = createReactAgent({
|
|
@@ -55,18 +60,18 @@ export class Invocation {
|
|
|
55
60
|
}
|
|
56
61
|
// Run the agent
|
|
57
62
|
try {
|
|
58
|
-
this.statusUpdate('stream', `Thinking`);
|
|
59
63
|
const output = { aiMessage: '' };
|
|
60
64
|
if (!this.config.streamOutput) {
|
|
61
|
-
const progress = new ProgressIndicator('.');
|
|
65
|
+
const progress = new ProgressIndicator('Thinking.');
|
|
62
66
|
try {
|
|
63
67
|
const response = await this.agent.invoke({ messages }, runConfig);
|
|
64
68
|
output.aiMessage = response.messages[response.messages.length - 1].content;
|
|
65
|
-
const
|
|
69
|
+
const toolCalls = response.messages
|
|
66
70
|
.filter((msg) => msg.tool_calls && msg.tool_calls.length > 0)
|
|
67
|
-
.flatMap((msg) => msg.tool_calls
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
.flatMap((msg) => msg.tool_calls ?? [])
|
|
72
|
+
.filter((tc) => tc.name);
|
|
73
|
+
if (toolCalls.length > 0) {
|
|
74
|
+
this.statusUpdate('info', `\nUsed tools: ${formatToolCalls(toolCalls)}`);
|
|
70
75
|
}
|
|
71
76
|
}
|
|
72
77
|
catch (e) {
|
|
@@ -78,16 +83,15 @@ export class Invocation {
|
|
|
78
83
|
this.statusUpdate('display', output.aiMessage);
|
|
79
84
|
}
|
|
80
85
|
else {
|
|
86
|
+
this.statusUpdate('info', '\nThinking...\n');
|
|
81
87
|
const stream = await this.agent.stream({ messages }, { ...runConfig, streamMode: 'messages' });
|
|
82
88
|
for await (const [chunk, _metadata] of stream) {
|
|
83
89
|
if (isAIMessage(chunk)) {
|
|
84
|
-
this.statusUpdate('stream', chunk.
|
|
85
|
-
output.aiMessage += chunk.
|
|
86
|
-
|
|
90
|
+
this.statusUpdate('stream', chunk.text);
|
|
91
|
+
output.aiMessage += chunk.text;
|
|
92
|
+
const toolCalls = chunk.tool_calls?.filter((tc) => tc.name);
|
|
87
93
|
if (toolCalls && toolCalls.length > 0) {
|
|
88
|
-
|
|
89
|
-
const toolCallsString = toolCalls.map((t) => t?.name).join(', ');
|
|
90
|
-
this.statusUpdate('info', `Using tool${suffix} ${toolCallsString}`);
|
|
94
|
+
this.statusUpdate('info', `Used tools: ${formatToolCalls(toolCalls)}`);
|
|
91
95
|
}
|
|
92
96
|
}
|
|
93
97
|
}
|
|
@@ -97,7 +101,7 @@ export class Invocation {
|
|
|
97
101
|
catch (error) {
|
|
98
102
|
if (error instanceof Error) {
|
|
99
103
|
if (error?.name === 'ToolException') {
|
|
100
|
-
this.statusUpdate('error', `Tool execution failed: ${error
|
|
104
|
+
this.statusUpdate('error', `Tool execution failed: ${error?.message}`);
|
|
101
105
|
}
|
|
102
106
|
}
|
|
103
107
|
throw error;
|
|
@@ -111,28 +115,29 @@ export class Invocation {
|
|
|
111
115
|
this.agent = null;
|
|
112
116
|
this.config = null;
|
|
113
117
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
118
|
+
/**
|
|
119
|
+
* Extract and flatten tools from toolkits
|
|
120
|
+
*/
|
|
121
|
+
extractAndFlattenTools(tools) {
|
|
122
|
+
const flattenedTools = [];
|
|
123
|
+
for (const toolOrToolkit of tools) {
|
|
124
|
+
// eslint-disable-next-line
|
|
125
|
+
if (toolOrToolkit['getTools'] instanceof Function) {
|
|
126
|
+
// This is a toolkit
|
|
127
|
+
flattenedTools.push(...toolOrToolkit.getTools());
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// This is a regular tool
|
|
131
|
+
flattenedTools.push(toolOrToolkit);
|
|
132
|
+
}
|
|
117
133
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
return !tool.name.startsWith('mcp__filesystem__') || allowedToolNames.has(tool.name);
|
|
123
|
-
});
|
|
134
|
+
return flattenedTools;
|
|
135
|
+
}
|
|
136
|
+
getDefaultMcpServers() {
|
|
137
|
+
return {};
|
|
124
138
|
}
|
|
125
139
|
getMcpClient(config) {
|
|
126
|
-
const defaultServers =
|
|
127
|
-
// Add filesystem server if configured
|
|
128
|
-
if (config.filesystem && config.filesystem !== 'none') {
|
|
129
|
-
const filesystemConfig = {
|
|
130
|
-
transport: 'stdio',
|
|
131
|
-
command: 'npx',
|
|
132
|
-
args: ['-y', '@modelcontextprotocol/server-filesystem', getCurrentDir()],
|
|
133
|
-
};
|
|
134
|
-
defaultServers.filesystem = filesystemConfig;
|
|
135
|
-
}
|
|
140
|
+
const defaultServers = this.getDefaultMcpServers();
|
|
136
141
|
// Merge with user's mcpServers
|
|
137
142
|
const mcpServers = { ...defaultServers, ...(config.mcpServers || {}) };
|
|
138
143
|
// If user provided their own filesystem config, it overrides default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Invocation.js","sourceRoot":"","sources":["../../src/core/Invocation.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Invocation.js","sourceRoot":"","sources":["../../src/core/Invocation.ts"],"names":[],"mappings":"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"}
|