gaunt-sloth-assistant 0.7.3 → 0.8.1
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.backstory.md +16 -3
- package/.gsloth.config_.mjs +18 -0
- package/.gsloth.guidelines.md +64 -36
- package/README.md +8 -1
- package/assets/release-notes/v0_8_0.md +13 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.js +6 -2
- package/dist/config.js.map +1 -1
- package/dist/consoleUtils.d.ts +1 -0
- package/dist/consoleUtils.js +27 -10
- package/dist/consoleUtils.js.map +1 -1
- package/dist/constants.d.ts +3 -0
- package/dist/constants.js +3 -0
- package/dist/constants.js.map +1 -1
- package/dist/core/Invocation.d.ts +2 -2
- package/dist/core/Invocation.js +26 -11
- package/dist/core/Invocation.js.map +1 -1
- package/dist/filePathUtils.js +1 -2
- package/dist/filePathUtils.js.map +1 -1
- package/dist/globalConfigUtils.d.ts +28 -0
- package/dist/globalConfigUtils.js +61 -0
- package/dist/globalConfigUtils.js.map +1 -0
- package/dist/mcp/OAuthClientProviderImpl.d.ts +36 -0
- package/dist/mcp/OAuthClientProviderImpl.js +197 -0
- package/dist/mcp/OAuthClientProviderImpl.js.map +1 -0
- package/dist/modules/interactiveSessionModule.js +5 -6
- package/dist/modules/interactiveSessionModule.js.map +1 -1
- package/dist/systemUtils.d.ts +8 -0
- package/dist/systemUtils.js +13 -0
- package/dist/systemUtils.js.map +1 -1
- package/dist/tools/gthStatusUpdateTool.js +2 -3
- package/dist/tools/gthStatusUpdateTool.js.map +1 -1
- package/docs/CONFIGURATION.md +37 -2
- package/eslint.config.js +7 -1
- package/package.json +9 -8
- package/src/config.ts +10 -2
- package/src/consoleUtils.ts +29 -10
- package/src/constants.ts +3 -0
- package/src/core/Invocation.ts +27 -13
- package/src/filePathUtils.ts +1 -3
- package/src/globalConfigUtils.ts +71 -0
- package/src/mcp/OAuthClientProviderImpl.ts +236 -0
- package/src/modules/interactiveSessionModule.ts +10 -6
- package/src/systemUtils.ts +14 -0
- package/src/tools/gthStatusUpdateTool.ts +2 -3
package/.gsloth.backstory.md
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
Your name is Gaunt Sloth,
|
|
2
|
-
|
|
1
|
+
Your name is Gaunt Sloth, a programmer with comprehensive expertise across programming languages. Maintain a
|
|
2
|
+
professional, direct communication style. Begin responses with substance, not pleasantries or self-promotion.
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
Your priority is code correctness and bug prevention over social niceties, though you remain courteous in all
|
|
5
|
+
interactions. Focus on technical accuracy and practical solutions.
|
|
6
|
+
|
|
7
|
+
Use visual indicators when providing feedback:
|
|
8
|
+
|
|
9
|
+
- ✅ for correct implementations (and approvals)
|
|
10
|
+
- ⚠️ for potential issues or areas needing attention
|
|
11
|
+
- ❌ for errors or problematic approaches (and rejections)
|
|
12
|
+
|
|
13
|
+
You may enhance communication with relevant emojis throughout your responses to improve clarity and readability,
|
|
14
|
+
but do not include foolish smiley faces.
|
|
15
|
+
|
|
16
|
+
Never include decorative emojis within code snippets — only use them in code when they're part of the actual
|
|
17
|
+
logic, string literals, or were present in the original code being discussed.
|
package/.gsloth.config_.mjs
CHANGED
|
@@ -13,3 +13,21 @@ export async function configure() {
|
|
|
13
13
|
]
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
"jira": {
|
|
19
|
+
"url": "https://mcp.atlassian.com/v1/sse",
|
|
20
|
+
"authProvider": "OAuth",
|
|
21
|
+
"transport": "sse"
|
|
22
|
+
}
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/*
|
|
26
|
+
"jira": {
|
|
27
|
+
"command": "npx",
|
|
28
|
+
"args": [
|
|
29
|
+
"mcp-remote",
|
|
30
|
+
"https://mcp.atlassian.com/v1/sse"
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
*/
|
package/.gsloth.guidelines.md
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Gaunt Sloth Assistant is a command-line Node.js utility helping developers to access LLM from the command line.
|
|
4
4
|
|
|
5
5
|
## Technologies Used
|
|
6
|
+
|
|
6
7
|
- NodeJS 22 (LTS)
|
|
7
8
|
- Vitest 3 for tests
|
|
8
9
|
- Typescript 5
|
|
@@ -21,12 +22,14 @@ Please abstain from using relative imports, only use them when no other choices
|
|
|
21
22
|
(currently the only exception is entry point index.js)
|
|
22
23
|
|
|
23
24
|
### Architecture and Flow
|
|
25
|
+
|
|
24
26
|
- Make sure proper separation of LangChain components (LLMs, chains, agents, tools)
|
|
25
27
|
- Check for clear data flow between components
|
|
26
28
|
- Ensure proper state management in LangGraph workflows
|
|
27
29
|
- Validate error handling and fallback mechanisms
|
|
28
30
|
|
|
29
31
|
### Security
|
|
32
|
+
|
|
30
33
|
- Make sure API key handling and environment variables
|
|
31
34
|
- Make sure no personal data is present in code
|
|
32
35
|
- ** Make sure that API keys are accidentally not included into diff.**
|
|
@@ -53,7 +56,8 @@ Use [llmUtils.ts](src/llmUtils.ts) to access LLM.
|
|
|
53
56
|
- Always import the tested file dynamically within the test.
|
|
54
57
|
- Mocks are hoisted, so it is better to simply place them at the top of the file to avoid confusion.
|
|
55
58
|
- Make sure that beforeEach is always present and always calls vi.resetAllMocks(); as a first thing.
|
|
56
|
-
- Create variables with vi.fn() without adding implementations to them, then apply these functions with vi.mock outside
|
|
59
|
+
- Create variables with vi.fn() without adding implementations to them, then apply these functions with vi.mock outside
|
|
60
|
+
of the describe.
|
|
57
61
|
- Apply mock implementations and return values to mocks within individual tests.
|
|
58
62
|
- When mock implementations are common for all test cases, apply them in beforeEach.
|
|
59
63
|
- Make sure test actually testing a function, rather than simply testing the mock.
|
|
@@ -65,49 +69,73 @@ import {beforeEach, describe, expect, it, vi} from 'vitest';
|
|
|
65
69
|
import {writeFileSync} from "node:fs";
|
|
66
70
|
|
|
67
71
|
const consoleUtilsMock = {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
display: vi.fn(),
|
|
73
|
+
displayError: vi.fn(),
|
|
74
|
+
displayInfo: vi.fn(),
|
|
75
|
+
displayWarning: vi.fn(),
|
|
76
|
+
displaySuccess: vi.fn(),
|
|
77
|
+
displayDebug: vi.fn(),
|
|
74
78
|
};
|
|
75
79
|
vi.mock('#src/consoleUtils.js', () => consoleUtilsMock);
|
|
76
80
|
|
|
77
81
|
let fsUtilsMock = {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
82
|
+
existsSync: vi.fn(),
|
|
83
|
+
readFileSync: vi.fn(),
|
|
84
|
+
writeFileSync: vi.fn(),
|
|
81
85
|
};
|
|
82
86
|
vi.mock('node:fs', () => fsUtilsMock);
|
|
83
87
|
|
|
84
88
|
describe('specialUtil', () => {
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
beforeEach(() => {
|
|
90
|
+
vi.resetAllMocks(); // Always reset all mocks in beforeEach
|
|
91
|
+
|
|
92
|
+
// Set up default mock values
|
|
93
|
+
fsUtilsMock.existsSync.mockImplementation(() => true);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it('specialFunction should eventually write test contents to a file', async () => {
|
|
97
|
+
fsMock.readFileSync.mockImplementation((path: string) => {
|
|
98
|
+
if (path.includes('inputFile.txt')) return 'TEST CONTENT';
|
|
99
|
+
return '';
|
|
100
|
+
});
|
|
87
101
|
|
|
88
|
-
|
|
89
|
-
fsUtilsMock.existsSync.mockImplementation(() => true);
|
|
90
|
-
});
|
|
102
|
+
const {specialFunction} = await import('#src/specialUtil.js'); // Always import tested file within the test
|
|
91
103
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
104
|
+
// Function under test
|
|
105
|
+
specialFunction();
|
|
106
|
+
|
|
107
|
+
expect(fsUtilsMock.writeFileSync).toHaveBeenCalledWith('outputFile.txt', 'TEST CONTENT\nEXTRA CONTENT');
|
|
108
|
+
expect(consoleUtilsMock.displayDebug).not.toHaveBeenCalled();
|
|
109
|
+
expect(consoleUtilsMock.displayWarning).not.toHaveBeenCalled();
|
|
110
|
+
expect(consoleUtilsMock.display).not.toHaveBeenCalled();
|
|
111
|
+
expect(consoleUtilsMock.displayError).not.toHaveBeenCalled();
|
|
112
|
+
expect(consoleUtilsMock.displayInfo).not.toHaveBeenCalled();
|
|
113
|
+
expect(consoleUtilsMock.displaySuccess).toHaveBeenCalledWith('Successfully transferred to outputFile.txt');
|
|
96
114
|
});
|
|
115
|
+
});
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
When mocking class constructors follow this pattern:
|
|
119
|
+
|
|
120
|
+
```javascript
|
|
121
|
+
// With export default
|
|
122
|
+
const gthFileSystemToolkitGetToolsMock = vi.fn();
|
|
123
|
+
vi.mock('#src/tools/GthFileSystemToolkit.js', () => {
|
|
124
|
+
const GthFileSystemToolkit = vi.fn();
|
|
125
|
+
GthFileSystemToolkit.prototype.getTools = gthFileSystemToolkitGetToolsMock;
|
|
126
|
+
return {
|
|
127
|
+
default: GthFileSystemToolkit,
|
|
128
|
+
};
|
|
129
|
+
});
|
|
97
130
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
expect(consoleUtilsMock.display).not.toHaveBeenCalled();
|
|
107
|
-
expect(consoleUtilsMock.displayError).not.toHaveBeenCalled();
|
|
108
|
-
expect(consoleUtilsMock.displayInfo).not.toHaveBeenCalled();
|
|
109
|
-
expect(consoleUtilsMock.displaySuccess).toHaveBeenCalledWith('Successfully transferred to outputFile.txt');
|
|
110
|
-
});
|
|
131
|
+
// With named exports
|
|
132
|
+
const otherToolkitMock = vi.fn();
|
|
133
|
+
vi.mock('#src/tools/OtherToolkit.js', () => {
|
|
134
|
+
const OtherToolkit = vi.fn();
|
|
135
|
+
OtherToolkit.prototype.getTools = otherToolkitMock;
|
|
136
|
+
return {
|
|
137
|
+
OtherToolkit,
|
|
138
|
+
};
|
|
111
139
|
});
|
|
112
140
|
```
|
|
113
141
|
|
|
@@ -118,10 +146,10 @@ Please follow this workflow:
|
|
|
118
146
|
- Analyze requirements.
|
|
119
147
|
- Develop changes.
|
|
120
148
|
- Make sure all tests pass `npm run test` and fix if possible.
|
|
121
|
-
|
|
149
|
+
- Request relevant documentation if some of the test failures are unclear.
|
|
122
150
|
- Once all tests are green check lint with `npm run lint`.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
151
|
+
- If any lint failures are present try fixing them with `npm run lint -- --fix`.
|
|
152
|
+
- If autofix didn't help, try fixing them yourself.
|
|
153
|
+
- Prefer testing all user outputs, including testing absence of unexpected outputs.
|
|
126
154
|
|
|
127
155
|
---
|
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Gaunt Sloth Assistant
|
|
2
|
-
[](https://github.com/andruhon/gaunt-sloth-assistant/actions/workflows/ci.yml) [](https://github.com/andruhon/gaunt-sloth-assistant/actions/workflows/ci.yml) [](https://github.com/andruhon/gaunt-sloth-assistant/actions/workflows/it.yml)
|
|
3
3
|
|
|
4
4
|
Gaunt GSloth Assistant is a lightweight **command line AI assistant**
|
|
5
5
|
built with TypeScript (JavaScript) and distributed via NPM with minimum dependencies.
|
|
@@ -151,6 +151,13 @@ It is recommended to obtain API key from DeepSeek official website rather than f
|
|
|
151
151
|
### Other AI providers
|
|
152
152
|
Any other AI provider supported by Langchain.js can be configured with js [Config](./docs/CONFIGURATION.md).
|
|
153
153
|
|
|
154
|
+
## MCP (Model Context Protocol) Servers
|
|
155
|
+
|
|
156
|
+
Gaunt Sloth supports connecting to MCP servers, including those requiring OAuth authentication.
|
|
157
|
+
|
|
158
|
+
This has been tested with the Atlassian Jira MCP server.
|
|
159
|
+
See the [MCP configuration section](./docs/CONFIGURATION.md#model-context-protocol-mcp) for detailed setup instructions.
|
|
160
|
+
|
|
154
161
|
## Contributing
|
|
155
162
|
Contributors are needed! Feel free to create a PR.
|
|
156
163
|
If you are not sure where to start, look for issues with a "good first issue" label.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# v0.8.0 OAuth Support for MCP Servers
|
|
2
|
+
|
|
3
|
+
## New Features
|
|
4
|
+
|
|
5
|
+
### OAuth Authentication for MCP Servers
|
|
6
|
+
Gaunt Sloth Assistant now supports OAuth authentication for MCP (Model Context Protocol) servers!
|
|
7
|
+
This feature enables secure connections to remote MCP servers that require OAuth authentication,
|
|
8
|
+
such as the Atlassian Jira MCP server.
|
|
9
|
+
|
|
10
|
+
- OAuth tokens are stored in JSON files under `~/.gsloth/.gsloth-auth/`
|
|
11
|
+
- Each server's tokens are stored in a separate file named after the server URL
|
|
12
|
+
- Support for authorization code flow with PKCE
|
|
13
|
+
erver and provides a foundation for connecting to any OAuth-enabled MCP server.
|
package/dist/config.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export interface SlothConfig extends BaseSlothConfig {
|
|
|
9
9
|
projectGuidelines: string;
|
|
10
10
|
projectReviewInstructions: string;
|
|
11
11
|
streamOutput: boolean;
|
|
12
|
+
useColour: boolean;
|
|
12
13
|
filesystem: string[] | 'all' | 'read' | 'none';
|
|
13
14
|
builtInTools?: string[];
|
|
14
15
|
tools?: StructuredToolInterface[] | BaseToolkit[];
|
|
@@ -29,6 +30,7 @@ interface BaseSlothConfig {
|
|
|
29
30
|
projectGuidelines?: string;
|
|
30
31
|
projectReviewInstructions?: string;
|
|
31
32
|
streamOutput?: boolean;
|
|
33
|
+
useColour?: boolean;
|
|
32
34
|
filesystem?: string[] | 'all' | 'read' | 'none';
|
|
33
35
|
prebuiltToolsConfig?: PreBuiltToolsConfig;
|
|
34
36
|
customToolsConfig?: CustomToolsConfig;
|
package/dist/config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { displayDebug, displayError, displayInfo, displayWarning } from '#src/consoleUtils.js';
|
|
2
2
|
import { importExternalFile, writeFileIfNotExistsWithMessages } from '#src/utils.js';
|
|
3
3
|
import { existsSync, readFileSync } from 'node:fs';
|
|
4
|
-
import { error, exit } from '#src/systemUtils.js';
|
|
4
|
+
import { error, exit, setUseColour } from '#src/systemUtils.js';
|
|
5
5
|
import { getGslothConfigReadPath, getGslothConfigWritePath } from '#src/filePathUtils.js';
|
|
6
6
|
import { PROJECT_GUIDELINES, PROJECT_REVIEW_INSTRUCTIONS, USER_PROJECT_CONFIG_JS, USER_PROJECT_CONFIG_JSON, USER_PROJECT_CONFIG_MJS, } from '#src/constants.js';
|
|
7
7
|
export const availableDefaultConfigs = ['vertexai', 'anthropic', 'groq', 'deepseek'];
|
|
@@ -12,6 +12,7 @@ export const DEFAULT_CONFIG = {
|
|
|
12
12
|
projectGuidelines: PROJECT_GUIDELINES,
|
|
13
13
|
projectReviewInstructions: PROJECT_REVIEW_INSTRUCTIONS,
|
|
14
14
|
streamOutput: true,
|
|
15
|
+
useColour: true,
|
|
15
16
|
filesystem: 'read',
|
|
16
17
|
commands: {
|
|
17
18
|
pr: {
|
|
@@ -208,11 +209,14 @@ Important! You are likely to be dealing with git diff below, please don't confus
|
|
|
208
209
|
*/
|
|
209
210
|
function mergeConfig(partialConfig) {
|
|
210
211
|
const config = partialConfig;
|
|
211
|
-
|
|
212
|
+
const mergedConfig = {
|
|
212
213
|
...DEFAULT_CONFIG,
|
|
213
214
|
...config,
|
|
214
215
|
commands: { ...DEFAULT_CONFIG.commands, ...(config?.commands ?? {}) },
|
|
215
216
|
};
|
|
217
|
+
// Set the useColour value in systemUtils
|
|
218
|
+
setUseColour(mergedConfig.useColour);
|
|
219
|
+
return mergedConfig;
|
|
216
220
|
}
|
|
217
221
|
/**
|
|
218
222
|
* Merge raw with default config
|
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;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/consoleUtils.d.ts
CHANGED
|
@@ -4,5 +4,6 @@ export declare function displayWarning(message: string): void;
|
|
|
4
4
|
export declare function displaySuccess(message: string): void;
|
|
5
5
|
export declare function displayInfo(message: string): void;
|
|
6
6
|
export declare function display(message: string): void;
|
|
7
|
+
export declare function formatInputPrompt(message: string): string;
|
|
7
8
|
export declare function displayDebug(message: string | Error | undefined): void;
|
|
8
9
|
export declare const defaultStatusCallbacks: StatusUpdateCallback;
|
package/dist/consoleUtils.js
CHANGED
|
@@ -1,28 +1,45 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import * as su from '#src/systemUtils.js';
|
|
2
|
+
// ANSI color codes
|
|
3
|
+
const ANSI_COLORS = {
|
|
4
|
+
red: '\x1b[31m',
|
|
5
|
+
yellow: '\x1b[33m',
|
|
6
|
+
green: '\x1b[32m',
|
|
7
|
+
magenta: '\x1b[35m',
|
|
8
|
+
dim: '\x1b[2m',
|
|
9
|
+
reset: '\x1b[0m',
|
|
10
|
+
};
|
|
11
|
+
// Helper functions for ANSI coloring
|
|
12
|
+
function colorText(text, color) {
|
|
13
|
+
if (!su.getUseColour()) {
|
|
14
|
+
return text;
|
|
15
|
+
}
|
|
16
|
+
return `${ANSI_COLORS[color]}${text}${ANSI_COLORS.reset}`;
|
|
17
|
+
}
|
|
4
18
|
export function displayError(message) {
|
|
5
|
-
|
|
19
|
+
su.log(colorText(message, 'red'));
|
|
6
20
|
}
|
|
7
21
|
export function displayWarning(message) {
|
|
8
|
-
|
|
22
|
+
su.warn(colorText(message, 'yellow'));
|
|
9
23
|
}
|
|
10
24
|
export function displaySuccess(message) {
|
|
11
|
-
|
|
25
|
+
su.log(colorText(message, 'green'));
|
|
12
26
|
}
|
|
13
27
|
export function displayInfo(message) {
|
|
14
|
-
|
|
28
|
+
su.info(colorText(message, 'dim'));
|
|
15
29
|
}
|
|
16
30
|
export function display(message) {
|
|
17
|
-
log(message);
|
|
31
|
+
su.log(message);
|
|
32
|
+
}
|
|
33
|
+
export function formatInputPrompt(message) {
|
|
34
|
+
return colorText(message, 'magenta');
|
|
18
35
|
}
|
|
19
36
|
export function displayDebug(message) {
|
|
20
37
|
// TODO make it controlled by config
|
|
21
38
|
if (message instanceof Error) {
|
|
22
|
-
|
|
39
|
+
su.debug(message.stack || '');
|
|
23
40
|
}
|
|
24
41
|
else if (message !== undefined) {
|
|
25
|
-
|
|
42
|
+
su.debug(message);
|
|
26
43
|
}
|
|
27
44
|
}
|
|
28
45
|
// Create status update callback
|
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,
|
|
1
|
+
{"version":3,"file":"consoleUtils.js","sourceRoot":"","sources":["../src/consoleUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAI1C,mBAAmB;AACnB,MAAM,WAAW,GAAG;IAClB,GAAG,EAAE,UAAU;IACf,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,UAAU;IACjB,OAAO,EAAE,UAAU;IACnB,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,SAAS;CACjB,CAAC;AAEF,qCAAqC;AACrC,SAAS,SAAS,CAAC,IAAY,EAAE,KAA+B;IAC9D,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAmC;IAC9D,oCAAoC;IACpC,IAAI,OAAO,YAAY,KAAK,EAAE,CAAC;QAC7B,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpB,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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export declare const GSLOTH_DIR = ".gsloth";
|
|
2
|
+
export declare const GSLOTH_SETTINGS_DIR = ".gsloth-settings";
|
|
3
|
+
export declare const GSLOTH_AUTH = ".gsloth-auth";
|
|
1
4
|
export declare const USER_PROJECT_CONFIG_JS = ".gsloth.config.js";
|
|
2
5
|
export declare const USER_PROJECT_CONFIG_JSON = ".gsloth.config.json";
|
|
3
6
|
export declare const USER_PROJECT_CONFIG_MJS = ".gsloth.config.mjs";
|
package/dist/constants.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export const GSLOTH_DIR = '.gsloth';
|
|
2
|
+
export const GSLOTH_SETTINGS_DIR = '.gsloth-settings';
|
|
3
|
+
export const GSLOTH_AUTH = '.gsloth-auth';
|
|
1
4
|
export const USER_PROJECT_CONFIG_JS = '.gsloth.config.js';
|
|
2
5
|
export const USER_PROJECT_CONFIG_JSON = '.gsloth.config.json';
|
|
3
6
|
export const USER_PROJECT_CONFIG_MJS = '.gsloth.config.mjs';
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAC1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAC9D,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAC1D,MAAM,CAAC,MAAM,2BAA2B,GAAG,mBAAmB,CAAC;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AACxD,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AACpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AACpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CAAC;AAC1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAC1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAC9D,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAC1D,MAAM,CAAC,MAAM,2BAA2B,GAAG,mBAAmB,CAAC;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AACxD,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AACpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC"}
|
|
@@ -14,7 +14,7 @@ export declare class Invocation {
|
|
|
14
14
|
private config;
|
|
15
15
|
constructor(statusUpdate: StatusUpdateCallback);
|
|
16
16
|
setVerbose(verbose: boolean): void;
|
|
17
|
-
init(command: GthCommand | undefined,
|
|
17
|
+
init(command: GthCommand | undefined, configIn: SlothConfig, checkpointSaver?: BaseCheckpointSaver | undefined): Promise<void>;
|
|
18
18
|
getEffectiveConfig(config: SlothConfig, command: GthCommand | undefined): SlothConfig;
|
|
19
19
|
invoke(messages: Message[], runConfig?: RunnableConfig): Promise<string>;
|
|
20
20
|
cleanup(): Promise<void>;
|
|
@@ -23,5 +23,5 @@ export declare class Invocation {
|
|
|
23
23
|
*/
|
|
24
24
|
private extractAndFlattenTools;
|
|
25
25
|
protected getDefaultMcpServers(): Record<string, Connection>;
|
|
26
|
-
protected getMcpClient(config: SlothConfig): MultiServerMCPClient | null
|
|
26
|
+
protected getMcpClient(config: SlothConfig): Promise<MultiServerMCPClient | null>;
|
|
27
27
|
}
|
package/dist/core/Invocation.js
CHANGED
|
@@ -3,6 +3,8 @@ import { MultiServerMCPClient } from '@langchain/mcp-adapters';
|
|
|
3
3
|
import { createReactAgent } from '@langchain/langgraph/prebuilt';
|
|
4
4
|
import { formatToolCalls, ProgressIndicator } from '#src/utils.js';
|
|
5
5
|
import { getDefaultTools } from '#src/builtInToolsConfig.js';
|
|
6
|
+
import { createAuthProviderAndAuthenticate } from '#src/mcp/OAuthClientProviderImpl.js';
|
|
7
|
+
import { displayInfo } from '#src/consoleUtils.js';
|
|
6
8
|
export class Invocation {
|
|
7
9
|
statusUpdate;
|
|
8
10
|
verbose = false;
|
|
@@ -16,15 +18,15 @@ export class Invocation {
|
|
|
16
18
|
setVerbose(verbose) {
|
|
17
19
|
this.verbose = verbose;
|
|
18
20
|
}
|
|
19
|
-
async init(command,
|
|
21
|
+
async init(command, configIn, checkpointSaver) {
|
|
20
22
|
if (this.verbose) {
|
|
21
|
-
|
|
23
|
+
configIn.llm.verbose = true;
|
|
22
24
|
}
|
|
23
25
|
// Merge command-specific filesystem config if provided
|
|
24
|
-
this.config = this.getEffectiveConfig(
|
|
25
|
-
this.mcpClient = this.getMcpClient(this.config);
|
|
26
|
+
this.config = this.getEffectiveConfig(configIn, command);
|
|
27
|
+
this.mcpClient = await this.getMcpClient(this.config);
|
|
26
28
|
// Get default filesystem tools (filtered based on config)
|
|
27
|
-
const defaultTools = await getDefaultTools(config);
|
|
29
|
+
const defaultTools = await getDefaultTools(this.config);
|
|
28
30
|
// Get user config tools
|
|
29
31
|
const flattenedConfigTools = this.extractAndFlattenTools(this.config.tools || []);
|
|
30
32
|
// Get MCP tools
|
|
@@ -144,20 +146,33 @@ export class Invocation {
|
|
|
144
146
|
getDefaultMcpServers() {
|
|
145
147
|
return {};
|
|
146
148
|
}
|
|
147
|
-
getMcpClient(config) {
|
|
149
|
+
async getMcpClient(config) {
|
|
148
150
|
const defaultServers = this.getDefaultMcpServers();
|
|
149
151
|
// Merge with user's mcpServers
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
const rawMcpServers = { ...defaultServers, ...(config.mcpServers || {}) };
|
|
153
|
+
const mcpServers = {};
|
|
154
|
+
for (const serverName of Object.keys(rawMcpServers)) {
|
|
155
|
+
const server = rawMcpServers[serverName];
|
|
156
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
157
|
+
if (server.url && server && server.authProvider === 'OAuth') {
|
|
158
|
+
displayInfo(`Starting OAuth for for ${server.url}`);
|
|
159
|
+
const authProvider = await createAuthProviderAndAuthenticate(server);
|
|
160
|
+
mcpServers[serverName] = {
|
|
161
|
+
...server,
|
|
162
|
+
authProvider,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
// Add non-OAuth servers as-is
|
|
167
|
+
mcpServers[serverName] = server;
|
|
168
|
+
}
|
|
154
169
|
}
|
|
155
170
|
if (Object.keys(mcpServers).length > 0) {
|
|
156
171
|
return new MultiServerMCPClient({
|
|
157
172
|
throwOnLoadError: true,
|
|
158
173
|
prefixToolNameWithServerName: true,
|
|
159
174
|
additionalToolNamePrefix: 'mcp',
|
|
160
|
-
mcpServers,
|
|
175
|
+
mcpServers: mcpServers,
|
|
161
176
|
});
|
|
162
177
|
}
|
|
163
178
|
else {
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"Invocation.js","sourceRoot":"","sources":["../../src/core/Invocation.ts"],"names":[],"mappings":"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"}
|
package/dist/filePathUtils.js
CHANGED
|
@@ -2,8 +2,7 @@ import { existsSync } from 'node:fs';
|
|
|
2
2
|
import { resolve } from 'node:path';
|
|
3
3
|
import { mkdirSync } from 'node:fs';
|
|
4
4
|
import { getCurrentDir } from '#src/systemUtils.js';
|
|
5
|
-
|
|
6
|
-
const GSLOTH_SETTINGS_DIR = '.gsloth-settings';
|
|
5
|
+
import { GSLOTH_DIR, GSLOTH_SETTINGS_DIR } from '#src/constants.js';
|
|
7
6
|
/**
|
|
8
7
|
* Checks if .gsloth directory exists in the project root
|
|
9
8
|
* @returns Boolean indicating whether .gsloth directory exists
|
|
@@ -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;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
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;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEpE;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtD,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,IAAI,eAAe,EAAE,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACtD,OAAO,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACvD,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,IAAI,eAAe,EAAE,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACtD,MAAM,kBAAkB,GAAG,OAAO,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QAEvE,wDAAwD;QACxD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACpC,SAAS,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,IAAI,eAAe,EAAE,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACtD,MAAM,kBAAkB,GAAG,OAAO,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAEzD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gets the global .gsloth directory path in the user's home directory
|
|
3
|
+
* @returns The resolved path to the global .gsloth directory
|
|
4
|
+
*/
|
|
5
|
+
export declare function getGlobalGslothDir(): string;
|
|
6
|
+
/**
|
|
7
|
+
* Ensures the global .gsloth directory exists in the user's home directory
|
|
8
|
+
* Creates it if it doesn't exist
|
|
9
|
+
* @returns The resolved path to the global .gsloth directory
|
|
10
|
+
*/
|
|
11
|
+
export declare function ensureGlobalGslothDir(): string;
|
|
12
|
+
/**
|
|
13
|
+
* Gets the global auth directory path
|
|
14
|
+
* @returns The resolved path to the global auth directory
|
|
15
|
+
*/
|
|
16
|
+
export declare function getGlobalAuthDir(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Ensures the global auth directory exists
|
|
19
|
+
* Creates it if it doesn't exist
|
|
20
|
+
* @returns The resolved path to the global auth directory
|
|
21
|
+
*/
|
|
22
|
+
export declare function ensureGlobalAuthDir(): string;
|
|
23
|
+
/**
|
|
24
|
+
* Gets the path for a specific OAuth provider's storage file
|
|
25
|
+
* @param serverUrl The server URL or identifier for the OAuth provider
|
|
26
|
+
* @returns The resolved path where the OAuth data should be stored
|
|
27
|
+
*/
|
|
28
|
+
export declare function getOAuthStoragePath(serverUrl: string): string;
|