gaunt-sloth-assistant 0.9.21 → 1.0.0-alpha.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/.gsloth.guidelines.md +26 -0
- package/dist/config.d.ts +32 -44
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/GthAgentRunner.js +2 -14
- package/dist/core/GthAgentRunner.js.map +1 -1
- package/dist/core/GthLangChainAgent.d.ts +1 -1
- package/dist/core/GthLangChainAgent.js +22 -23
- package/dist/core/GthLangChainAgent.js.map +1 -1
- package/dist/middleware/registry.d.ts +37 -0
- package/dist/middleware/registry.js +100 -0
- package/dist/middleware/registry.js.map +1 -0
- package/dist/middleware/types.d.ts +62 -0
- package/dist/middleware/types.js +9 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/presets/anthropic.d.ts +0 -17
- package/dist/presets/anthropic.js +2 -44
- package/dist/presets/anthropic.js.map +1 -1
- package/package.json +22 -21
package/.gsloth.guidelines.md
CHANGED
|
@@ -50,6 +50,32 @@ process.env, process.stdout, etc.
|
|
|
50
50
|
|
|
51
51
|
Use [llmUtils.ts](src/llmUtils.ts) to access LLM.
|
|
52
52
|
|
|
53
|
+
### Middleware
|
|
54
|
+
|
|
55
|
+
Starting with v1.0.0, Gaunt Sloth uses LangChain middleware pattern instead of hooks.
|
|
56
|
+
|
|
57
|
+
Middleware provides hooks to intercept and control agent execution at critical points:
|
|
58
|
+
- `beforeModel`: Called before model invocation
|
|
59
|
+
- `afterModel`: Called after model response
|
|
60
|
+
- `beforeAgent`: Called before agent initialization
|
|
61
|
+
- `afterAgent`: Called after agent completion
|
|
62
|
+
- `wrapModelCall`: Wrap model calls with full control
|
|
63
|
+
- `wrapToolCall`: Wrap tool calls with full control
|
|
64
|
+
|
|
65
|
+
**Predefined Middleware:**
|
|
66
|
+
- `anthropic-prompt-caching`: Reduces API costs by caching prompts (Anthropic only)
|
|
67
|
+
- `summarization`: Condenses conversation history when approaching token limits
|
|
68
|
+
|
|
69
|
+
**Configuration:**
|
|
70
|
+
- Middleware is configured in the `middleware` array in config
|
|
71
|
+
- JSON configs support predefined middleware (string or config object)
|
|
72
|
+
- JS configs support both predefined and custom middleware objects
|
|
73
|
+
|
|
74
|
+
**Implementation:**
|
|
75
|
+
- Middleware registry is in [src/middleware/registry.ts](src/middleware/registry.ts)
|
|
76
|
+
- Middleware types are in [src/middleware/types.ts](src/middleware/types.ts)
|
|
77
|
+
- Provider-specific middleware can be auto-injected via `postProcessJsonConfig()` in preset files
|
|
78
|
+
|
|
53
79
|
## Testing (Important)
|
|
54
80
|
|
|
55
81
|
Tests are located in `spec/`. Integration tests are located in `integration-tests/`.
|
package/dist/config.d.ts
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { GthAgentInterface } from '#src/core/types.js';
|
|
3
|
-
import type { Message } from '#src/modules/types.js';
|
|
1
|
+
import type { MiddlewareConfig } from '#src/middleware/types.js';
|
|
4
2
|
import { JiraConfig } from '#src/providers/types.js';
|
|
5
3
|
import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
|
|
6
|
-
import { AIMessage } from '@langchain/core/messages';
|
|
7
|
-
import { RunnableConfig } from '@langchain/core/runnables';
|
|
8
4
|
import type { BaseToolkit, StructuredToolInterface } from '@langchain/core/tools';
|
|
9
|
-
import { BinaryOperatorAggregate, Messages, StateType } from '@langchain/langgraph';
|
|
10
5
|
import type { Connection } from '@langchain/mcp-adapters';
|
|
11
6
|
/**
|
|
12
7
|
* This is a processed Gaunt Sloth config ready to be passed down into components.
|
|
@@ -56,35 +51,38 @@ export interface GthConfig {
|
|
|
56
51
|
builtInTools?: string[];
|
|
57
52
|
tools?: StructuredToolInterface[] | BaseToolkit[] | ServerTool[];
|
|
58
53
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
54
|
+
* Middleware configuration for LangChain v1.
|
|
55
|
+
* Middleware provides hooks to intercept and control agent execution at critical points.
|
|
56
|
+
*
|
|
57
|
+
* Middleware can be:
|
|
58
|
+
* - Predefined middleware (string or config object) - works in both JSON and JS configs
|
|
59
|
+
* - Custom middleware objects - only available in JS configs
|
|
60
|
+
*
|
|
61
|
+
* Example (JSON config):
|
|
62
|
+
* ```json
|
|
63
|
+
* {
|
|
64
|
+
* "middleware": [
|
|
65
|
+
* "summarization",
|
|
66
|
+
* { "name": "anthropic-prompt-caching", "ttl": "5m" }
|
|
67
|
+
* ]
|
|
68
|
+
* }
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* Example (JS config):
|
|
72
|
+
* ```js
|
|
73
|
+
* {
|
|
74
|
+
* middleware: [
|
|
75
|
+
* "summarization",
|
|
76
|
+
* { beforeModel: (state) => { /* custom logic *\/ return state; } }
|
|
77
|
+
* ]
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* Available predefined middleware:
|
|
82
|
+
* - `anthropic-prompt-caching`: Reduces API costs by caching prompts (Anthropic only)
|
|
83
|
+
* - `summarization`: Condenses conversation history when approaching token limits
|
|
65
84
|
*/
|
|
66
|
-
|
|
67
|
-
createRunnableConfig?: (config: GthConfig) => Promise<RunnableConfig>;
|
|
68
|
-
createAgent?: (config: GthConfig) => Promise<GthAgentInterface>;
|
|
69
|
-
beforeAgentInit?: RunnerHook | RunnerHook[];
|
|
70
|
-
/**
|
|
71
|
-
* After agent init.
|
|
72
|
-
*/
|
|
73
|
-
afterAgentInit?: RunnerHook | RunnerHook[];
|
|
74
|
-
beforeProcessMessages?: BeforeMessageHook | BeforeMessageHook[];
|
|
75
|
-
/**
|
|
76
|
-
* LangGraph preModelHook
|
|
77
|
-
* Provide 'skip' if you don't need default hook.
|
|
78
|
-
* @deprecated Will be removed in v1.0.0. Will be replaced with middleware pattern in Gaunt Sloth Assistant v1.0.0.
|
|
79
|
-
*/
|
|
80
|
-
preModelHook?: LangChainHook;
|
|
81
|
-
/**
|
|
82
|
-
* LangGraph postModelHook
|
|
83
|
-
* Provide 'skip' if you don't need default hook.
|
|
84
|
-
* @deprecated Will be removed in v1.0.0. Will be replaced with middleware pattern in Gaunt Sloth Assistant v1.0.0.
|
|
85
|
-
*/
|
|
86
|
-
postModelHook?: LangChainHook;
|
|
87
|
-
};
|
|
85
|
+
middleware?: MiddlewareConfig[];
|
|
88
86
|
/**
|
|
89
87
|
* Stream output. Some models do not support streaming. Set value to `false` for them.
|
|
90
88
|
*
|
|
@@ -162,20 +160,11 @@ export interface ServerTool extends Record<string, unknown> {
|
|
|
162
160
|
type: string;
|
|
163
161
|
name?: string;
|
|
164
162
|
}
|
|
165
|
-
type LangChainHook = (state: StateType<{
|
|
166
|
-
messages: BinaryOperatorAggregate<AIMessage[], Messages>;
|
|
167
|
-
}>) => StateType<{
|
|
168
|
-
messages: BinaryOperatorAggregate<AIMessage[], Messages>;
|
|
169
|
-
}>;
|
|
170
|
-
type RunnerHook = (runner: GthAgentRunner) => Promise<void>;
|
|
171
|
-
type BeforeMessageHook = (runner: GthAgentRunner, message: Message[], runConfig: RunnableConfig) => Promise<void>;
|
|
172
163
|
/**
|
|
173
164
|
* Raw, unprocessed Gaunt Sloth config.
|
|
174
165
|
*/
|
|
175
166
|
export interface RawGthConfig extends Omit<GthConfig, 'llm'> {
|
|
176
167
|
llm: LLMConfig;
|
|
177
|
-
preModelHook?: LangChainHook | 'skip';
|
|
178
|
-
postModelHook?: LangChainHook | 'skip';
|
|
179
168
|
}
|
|
180
169
|
export type CustomToolsConfig = Record<string, object>;
|
|
181
170
|
export type BuiltInToolsConfig = {
|
|
@@ -307,4 +296,3 @@ export declare function initConfig(commandLineConfigOverrides: CommandLineConfig
|
|
|
307
296
|
export declare function tryJsonConfig(jsonConfig: RawGthConfig, commandLineConfigOverrides: CommandLineConfigOverrides): Promise<GthConfig>;
|
|
308
297
|
export declare function createProjectConfig(configType: string): Promise<void>;
|
|
309
298
|
export declare function writeProjectReviewPreamble(): void;
|
|
310
|
-
export {};
|
package/dist/config.js
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Some config params can be overriden from command line, see {@link CommandLineConfigOverrides}
|
|
10
10
|
*/
|
|
11
|
-
import { displayDebug, displayError, displayInfo, displayWarning, } from '#src/utils/consoleUtils.js';
|
|
12
11
|
import { PROJECT_GUIDELINES, PROJECT_REVIEW_INSTRUCTIONS, USER_PROJECT_CONFIG_JS, USER_PROJECT_CONFIG_JSON, USER_PROJECT_CONFIG_MJS, } from '#src/constants.js';
|
|
12
|
+
import { displayDebug, displayError, displayInfo, displayWarning, } from '#src/utils/consoleUtils.js';
|
|
13
13
|
import { getGslothConfigReadPath, getGslothConfigWritePath, importExternalFile, writeFileIfNotExistsWithMessages, } from '#src/utils/fileUtils.js';
|
|
14
14
|
import { error, exit, isTTY, setUseColour } from '#src/utils/systemUtils.js';
|
|
15
15
|
import { existsSync, readFileSync } from 'node:fs';
|
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,EACL,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { GthLangChainAgent } from '#src/core/GthLangChainAgent.js';
|
|
2
|
-
import { executeHooks } from '#src/utils/llmUtils.js';
|
|
3
2
|
import { getNewRunnableConfig } from '#src/utils/llmUtils.js';
|
|
4
3
|
import { initDebugLogging, debugLog, debugLogError, debugLogObject, } from '#src/utils/debugUtils.js';
|
|
5
4
|
/**
|
|
@@ -24,22 +23,12 @@ export class GthAgentRunner {
|
|
|
24
23
|
// Initialize debug logging
|
|
25
24
|
initDebugLogging(configIn.debugLog ?? false);
|
|
26
25
|
debugLog(`Initializing GthAgentRunner with command: ${command || 'default'}`);
|
|
27
|
-
this.runConfig =
|
|
28
|
-
? await this.config.hooks.createRunnableConfig(this.config)
|
|
29
|
-
: getNewRunnableConfig();
|
|
26
|
+
this.runConfig = getNewRunnableConfig();
|
|
30
27
|
debugLogObject('Runnable Config', this.runConfig);
|
|
31
|
-
this.agent = this.
|
|
32
|
-
? await this.config.hooks?.createAgent(this.config)
|
|
33
|
-
: new GthLangChainAgent(this.statusUpdate);
|
|
34
|
-
// Call before init hook
|
|
35
|
-
debugLog('Executing beforeAgentInit hooks...');
|
|
36
|
-
await executeHooks(this.config.hooks?.beforeAgentInit, this);
|
|
28
|
+
this.agent = new GthLangChainAgent(this.statusUpdate);
|
|
37
29
|
// Initialize the agent
|
|
38
30
|
debugLog('Initializing agent...');
|
|
39
31
|
await this.agent.init(command, configIn, checkpointSaver);
|
|
40
|
-
// Call after init hook
|
|
41
|
-
debugLog('Executing afterAgentInit hooks...');
|
|
42
|
-
await executeHooks(this.config.hooks?.afterAgentInit, this);
|
|
43
32
|
debugLog('Agent initialization complete');
|
|
44
33
|
}
|
|
45
34
|
/**
|
|
@@ -51,7 +40,6 @@ export class GthAgentRunner {
|
|
|
51
40
|
}
|
|
52
41
|
debugLog('Processing messages...');
|
|
53
42
|
debugLogObject('Input Messages', messages);
|
|
54
|
-
await executeHooks(this.config.hooks?.beforeProcessMessages, this, messages, this.runConfig);
|
|
55
43
|
try {
|
|
56
44
|
// Decision: Use streaming or non-streaming based on config
|
|
57
45
|
if (this.config.streamOutput) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GthAgentRunner.js","sourceRoot":"","sources":["../../src/core/GthAgentRunner.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAwB,MAAM,gCAAgC,CAAC;AAEzF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"GthAgentRunner.js","sourceRoot":"","sources":["../../src/core/GthAgentRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export declare class GthLangChainAgent implements GthAgentInterface {
|
|
|
13
13
|
private agent;
|
|
14
14
|
private config;
|
|
15
15
|
constructor(statusUpdate: StatusUpdateCallback);
|
|
16
|
-
init(command: GthCommand | undefined, configIn: GthConfig,
|
|
16
|
+
init(command: GthCommand | undefined, configIn: GthConfig, checkpointer?: BaseCheckpointSaver | undefined): Promise<void>;
|
|
17
17
|
/**
|
|
18
18
|
* Invoke LLM with a message and runnable config.
|
|
19
19
|
* For streaming use {@link #stream} method, streaming is preferred if model API supports it.
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { getDefaultTools } from '#src/builtInToolsConfig.js';
|
|
2
|
+
import { createAuthProviderAndAuthenticate } from '#src/mcp/OAuthClientProviderImpl.js';
|
|
3
|
+
import { resolveMiddleware } from '#src/middleware/registry.js';
|
|
2
4
|
import { displayInfo } from '#src/utils/consoleUtils.js';
|
|
3
5
|
import { debugLog, debugLogError, debugLogObject } from '#src/utils/debugUtils.js';
|
|
4
|
-
import {
|
|
6
|
+
import { formatToolCalls } from '#src/utils/llmUtils.js';
|
|
7
|
+
import { ProgressIndicator } from '#src/utils/ProgressIndicator.js';
|
|
5
8
|
import { stopWaitingForEscape, waitForEscape } from '#src/utils/systemUtils.js';
|
|
6
9
|
import { isAIMessage } from '@langchain/core/messages';
|
|
7
10
|
import { IterableReadableStream } from '@langchain/core/utils/stream';
|
|
8
|
-
import { createReactAgent } from '@langchain/langgraph/prebuilt';
|
|
9
11
|
import { MultiServerMCPClient } from '@langchain/mcp-adapters';
|
|
10
|
-
import {
|
|
11
|
-
import { ProgressIndicator } from '#src/utils/ProgressIndicator.js';
|
|
12
|
+
import { createAgent } from 'langchain';
|
|
12
13
|
export class GthLangChainAgent {
|
|
13
14
|
statusUpdate;
|
|
14
15
|
mcpClient = null;
|
|
@@ -19,7 +20,7 @@ export class GthLangChainAgent {
|
|
|
19
20
|
statusUpdate(level, message);
|
|
20
21
|
};
|
|
21
22
|
}
|
|
22
|
-
async init(command, configIn,
|
|
23
|
+
async init(command, configIn, checkpointer) {
|
|
23
24
|
debugLog(`GthLangChainAgent.init called with command: ${command || 'default'}`);
|
|
24
25
|
// Merge command-specific filesystem config if provided
|
|
25
26
|
this.config = this.getEffectiveConfig(configIn, command);
|
|
@@ -54,22 +55,15 @@ export class GthLangChainAgent {
|
|
|
54
55
|
debugLog(`Total tools available: ${tools.length}`);
|
|
55
56
|
debugLogObject('All Tools', toolNames.split(', '));
|
|
56
57
|
}
|
|
57
|
-
// Warn about deprecated hooks
|
|
58
|
-
if (configIn.hooks?.preModelHook) {
|
|
59
|
-
this.statusUpdate('warning', 'Warning: preModelHook is deprecated and will be removed in v1.0.0. Will be replaced with middleware in Gaunt Sloth Assistant v1.0.0.');
|
|
60
|
-
debugLog('Warning: preModelHook is deprecated');
|
|
61
|
-
}
|
|
62
|
-
if (configIn.hooks?.postModelHook) {
|
|
63
|
-
this.statusUpdate('warning', 'Warning: postModelHook is deprecated and will be removed in v1.0.0. Will be replaced with middleware in Gaunt Sloth Assistant v1.0.0.');
|
|
64
|
-
debugLog('Warning: postModelHook is deprecated');
|
|
65
|
-
}
|
|
66
58
|
// Create the React agent
|
|
67
59
|
debugLog('Creating React agent...');
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
60
|
+
// Resolve middleware from config
|
|
61
|
+
const configuredMiddleware = await resolveMiddleware(this.config.middleware, this.config);
|
|
62
|
+
// Add tool call status update middleware
|
|
63
|
+
const toolCallStatusMiddleware = {
|
|
64
|
+
name: 'GthMiddlewareToolCallStatusUpdate',
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
66
|
+
afterModel: (state) => {
|
|
73
67
|
debugLogObject('postModel state', state);
|
|
74
68
|
const lastMessage = state.messages[state.messages.length - 1];
|
|
75
69
|
if (isAIMessage(lastMessage) &&
|
|
@@ -77,12 +71,17 @@ export class GthLangChainAgent {
|
|
|
77
71
|
lastMessage.tool_calls?.length > 0) {
|
|
78
72
|
this.statusUpdate('info', `\nRequested tools: ${formatToolCalls(lastMessage.tool_calls)}\n`);
|
|
79
73
|
}
|
|
80
|
-
if (configIn.hooks?.postModelHook) {
|
|
81
|
-
return configIn.hooks.postModelHook(state);
|
|
82
|
-
}
|
|
83
74
|
return state;
|
|
84
75
|
},
|
|
85
|
-
|
|
76
|
+
};
|
|
77
|
+
// Combine all middleware
|
|
78
|
+
const middleware = [...configuredMiddleware, toolCallStatusMiddleware];
|
|
79
|
+
this.statusUpdate('info', `Loaded middleware: ${middleware.map((m) => m.name).join(', ')}`);
|
|
80
|
+
this.agent = createAgent({
|
|
81
|
+
model: this.config.llm,
|
|
82
|
+
tools,
|
|
83
|
+
middleware,
|
|
84
|
+
checkpointer,
|
|
86
85
|
});
|
|
87
86
|
debugLog('React agent created successfully');
|
|
88
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GthLangChainAgent.js","sourceRoot":"","sources":["../../src/core/GthLangChainAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"GthLangChainAgent.js","sourceRoot":"","sources":["../../src/core/GthLangChainAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
* Middleware registry for Gaunt Sloth Assistant.
|
|
4
|
+
*
|
|
5
|
+
* This module provides factory functions for creating predefined middleware instances
|
|
6
|
+
* and a resolver to convert middleware configurations into middleware objects.
|
|
7
|
+
*/
|
|
8
|
+
import type { GthConfig } from '#src/config.js';
|
|
9
|
+
import type { AnthropicPromptCachingConfig, MiddlewareConfig, SummarizationConfig } from '#src/middleware/types.js';
|
|
10
|
+
import { type AgentMiddleware } from 'langchain';
|
|
11
|
+
/**
|
|
12
|
+
* Create Anthropic prompt caching middleware.
|
|
13
|
+
* This middleware adds cache control headers to reduce API costs.
|
|
14
|
+
*
|
|
15
|
+
* @param config - Configuration for the middleware
|
|
16
|
+
* @param gthConfig - Full Gaunt Sloth configuration
|
|
17
|
+
* @returns Middleware object
|
|
18
|
+
*/
|
|
19
|
+
export declare function createAnthropicPromptCachingMiddleware(config: AnthropicPromptCachingConfig, _: GthConfig): Promise<AgentMiddleware>;
|
|
20
|
+
/**
|
|
21
|
+
* Create summarization middleware.
|
|
22
|
+
* This middleware automatically condenses conversation history when approaching token limits.
|
|
23
|
+
*
|
|
24
|
+
* @param config - Configuration for the middleware
|
|
25
|
+
* @param gthConfig - Full Gaunt Sloth configuration
|
|
26
|
+
* @returns Middleware object
|
|
27
|
+
*/
|
|
28
|
+
export declare function createSummarizationMiddleware(config: SummarizationConfig, gthConfig: GthConfig): Promise<AgentMiddleware>;
|
|
29
|
+
/**
|
|
30
|
+
* Resolve middleware configuration into middleware instances.
|
|
31
|
+
* Converts string identifiers and config objects into actual middleware.
|
|
32
|
+
*
|
|
33
|
+
* @param configs - Array of middleware configurations
|
|
34
|
+
* @param gthConfig - Full Gaunt Sloth configuration
|
|
35
|
+
* @returns Array of middleware instances
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveMiddleware(configs: MiddlewareConfig[] | undefined, gthConfig: GthConfig): Promise<AgentMiddleware[]>;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
* Middleware registry for Gaunt Sloth Assistant.
|
|
4
|
+
*
|
|
5
|
+
* This module provides factory functions for creating predefined middleware instances
|
|
6
|
+
* and a resolver to convert middleware configurations into middleware objects.
|
|
7
|
+
*/
|
|
8
|
+
import { displayWarning } from '#src/utils/consoleUtils.js';
|
|
9
|
+
import { debugLog } from '#src/utils/debugUtils.js';
|
|
10
|
+
import { anthropicPromptCachingMiddleware, summarizationMiddleware, } from 'langchain';
|
|
11
|
+
/**
|
|
12
|
+
* Create Anthropic prompt caching middleware.
|
|
13
|
+
* This middleware adds cache control headers to reduce API costs.
|
|
14
|
+
*
|
|
15
|
+
* @param config - Configuration for the middleware
|
|
16
|
+
* @param gthConfig - Full Gaunt Sloth configuration
|
|
17
|
+
* @returns Middleware object
|
|
18
|
+
*/
|
|
19
|
+
export async function createAnthropicPromptCachingMiddleware(config, _) {
|
|
20
|
+
debugLog(`Creating Anthropic prompt caching middleware with TTL: ${config.ttl || 'default'}`);
|
|
21
|
+
// Dynamic import for async initialization
|
|
22
|
+
return Promise.resolve(anthropicPromptCachingMiddleware({ ttl: config.ttl }));
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create summarization middleware.
|
|
26
|
+
* This middleware automatically condenses conversation history when approaching token limits.
|
|
27
|
+
*
|
|
28
|
+
* @param config - Configuration for the middleware
|
|
29
|
+
* @param gthConfig - Full Gaunt Sloth configuration
|
|
30
|
+
* @returns Middleware object
|
|
31
|
+
*/
|
|
32
|
+
export async function createSummarizationMiddleware(config, gthConfig) {
|
|
33
|
+
debugLog('Creating summarization middleware');
|
|
34
|
+
return Promise.resolve(summarizationMiddleware({
|
|
35
|
+
model: config.model || gthConfig.llm,
|
|
36
|
+
maxTokensBeforeSummary: config.maxTokensBeforeSummary || 10000,
|
|
37
|
+
messagesToKeep: config.messagesToKeep,
|
|
38
|
+
summaryPrompt: config.summaryPrompt,
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolve middleware configuration into middleware instances.
|
|
43
|
+
* Converts string identifiers and config objects into actual middleware.
|
|
44
|
+
*
|
|
45
|
+
* @param configs - Array of middleware configurations
|
|
46
|
+
* @param gthConfig - Full Gaunt Sloth configuration
|
|
47
|
+
* @returns Array of middleware instances
|
|
48
|
+
*/
|
|
49
|
+
export async function resolveMiddleware(configs, gthConfig) {
|
|
50
|
+
if (!configs || configs.length === 0) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
const middleware = [];
|
|
54
|
+
// List of predefined middleware names
|
|
55
|
+
const predefinedNames = ['anthropic-prompt-caching', 'summarization'];
|
|
56
|
+
for (const config of configs) {
|
|
57
|
+
try {
|
|
58
|
+
// Handle string configuration (predefined middleware with defaults)
|
|
59
|
+
if (typeof config === 'string') {
|
|
60
|
+
middleware.push(await createPredefinedMiddleware(config, {}, gthConfig));
|
|
61
|
+
}
|
|
62
|
+
// Handle predefined middleware with custom settings
|
|
63
|
+
else if (typeof config === 'object' &&
|
|
64
|
+
'name' in config &&
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
66
|
+
predefinedNames.includes(config.name)) {
|
|
67
|
+
const { name, ...settings } = config;
|
|
68
|
+
middleware.push(await createPredefinedMiddleware(name, settings, gthConfig));
|
|
69
|
+
}
|
|
70
|
+
// Handle custom middleware object (JS config only)
|
|
71
|
+
else {
|
|
72
|
+
debugLog('Adding custom middleware');
|
|
73
|
+
middleware.push(config);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
displayWarning(`Failed to create middleware: ${error instanceof Error ? error.message : String(error)}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return middleware;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Create a predefined middleware instance by name.
|
|
84
|
+
*
|
|
85
|
+
* @param name - Name of the predefined middleware
|
|
86
|
+
* @param settings - Configuration settings for the middleware
|
|
87
|
+
* @param gthConfig - Full Gaunt Sloth configuration
|
|
88
|
+
* @returns Middleware instance
|
|
89
|
+
*/
|
|
90
|
+
async function createPredefinedMiddleware(name, settings, gthConfig) {
|
|
91
|
+
switch (name) {
|
|
92
|
+
case 'anthropic-prompt-caching':
|
|
93
|
+
return createAnthropicPromptCachingMiddleware(settings, gthConfig);
|
|
94
|
+
case 'summarization':
|
|
95
|
+
return createSummarizationMiddleware(settings, gthConfig);
|
|
96
|
+
default:
|
|
97
|
+
throw new Error(`Unknown predefined middleware: ${name}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/middleware/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
* Type definitions for middleware configuration in Gaunt Sloth Assistant.
|
|
4
|
+
*
|
|
5
|
+
* Middleware provides hooks to intercept and control agent execution at critical points.
|
|
6
|
+
* This module defines the configuration interfaces for both predefined and custom middleware.
|
|
7
|
+
*/
|
|
8
|
+
import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
|
|
9
|
+
import { AgentMiddleware } from 'langchain';
|
|
10
|
+
/**
|
|
11
|
+
* Predefined middleware types that can be configured via JSON config.
|
|
12
|
+
*/
|
|
13
|
+
export type PredefinedMiddlewareName = 'anthropic-prompt-caching' | 'summarization';
|
|
14
|
+
/**
|
|
15
|
+
* Configuration for Anthropic prompt caching middleware.
|
|
16
|
+
*/
|
|
17
|
+
export interface AnthropicPromptCachingConfig {
|
|
18
|
+
/**
|
|
19
|
+
* Cache TTL (time to live).
|
|
20
|
+
* Examples: "5m" for 5 minutes, "1h" for 1 hour
|
|
21
|
+
*/
|
|
22
|
+
ttl?: '5m' | '1h';
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Configuration for summarization middleware.
|
|
26
|
+
*/
|
|
27
|
+
export interface SummarizationConfig {
|
|
28
|
+
/**
|
|
29
|
+
* Model to use for summarization.
|
|
30
|
+
* If not provided, uses the main LLM from config.
|
|
31
|
+
*/
|
|
32
|
+
model?: BaseChatModel;
|
|
33
|
+
/**
|
|
34
|
+
* Maximum tokens before triggering summarization.
|
|
35
|
+
* This parameter is not required, but without it summarization will not happen.
|
|
36
|
+
* Gaunt Sloth default value is 10000.
|
|
37
|
+
*/
|
|
38
|
+
maxTokensBeforeSummary?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Number of recent messages to keep after summarization.
|
|
41
|
+
*/
|
|
42
|
+
messagesToKeep?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Custom prompt template for summarization.
|
|
45
|
+
*/
|
|
46
|
+
summaryPrompt?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Union type of all predefined middleware configurations.
|
|
50
|
+
*/
|
|
51
|
+
export type PredefinedMiddlewareConfig = ({
|
|
52
|
+
name: 'anthropic-prompt-caching';
|
|
53
|
+
} & AnthropicPromptCachingConfig) | ({
|
|
54
|
+
name: 'summarization';
|
|
55
|
+
} & SummarizationConfig);
|
|
56
|
+
/**
|
|
57
|
+
* Middleware configuration that can be specified in JSON or JS config.
|
|
58
|
+
* - String: Name of predefined middleware with default settings
|
|
59
|
+
* - PredefinedMiddlewareConfig: Predefined middleware with custom settings (JSON compatible)
|
|
60
|
+
* - CustomMiddleware: Custom middleware object (JS config only)
|
|
61
|
+
*/
|
|
62
|
+
export type MiddlewareConfig = string | PredefinedMiddlewareConfig | AgentMiddleware;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
* Type definitions for middleware configuration in Gaunt Sloth Assistant.
|
|
4
|
+
*
|
|
5
|
+
* Middleware provides hooks to intercept and control agent execution at critical points.
|
|
6
|
+
* This module defines the configuration interfaces for both predefined and custom middleware.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/middleware/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -1,24 +1,7 @@
|
|
|
1
|
-
import { GthConfig } from '#src/config.js';
|
|
2
1
|
import type { AnthropicInput } from '@langchain/anthropic';
|
|
3
2
|
import type { BaseChatModel, BaseChatModelParams } from '@langchain/core/language_models/chat_models';
|
|
4
|
-
import { AIMessage } from '@langchain/core/messages';
|
|
5
|
-
import { BinaryOperatorAggregate, Messages, StateType } from '@langchain/langgraph';
|
|
6
3
|
/**
|
|
7
4
|
* Function to process JSON config and create Anthropic LLM instance
|
|
8
5
|
*/
|
|
9
6
|
export declare function processJsonConfig(llmConfig: AnthropicInput & BaseChatModelParams): Promise<BaseChatModel>;
|
|
10
7
|
export declare function init(configFileName: string): void;
|
|
11
|
-
export declare function postProcessJsonConfig(config: GthConfig): GthConfig;
|
|
12
|
-
/**
|
|
13
|
-
* There's something off with calling server tools with ReAct agent,
|
|
14
|
-
* the tool is not added in react_agent_executor because it is not Runnable,
|
|
15
|
-
* but the tool_node explodes because LLM reports calling non-existing tool.
|
|
16
|
-
* This method removes tool calls from messages, leaving the resulting content.
|
|
17
|
-
* This method seems unnecessary with OpenAI, but is needed for Anthropic,
|
|
18
|
-
* OpenAI does not need a name on the tool and does not seem to return server_tool_use.
|
|
19
|
-
*/
|
|
20
|
-
export declare function postModelHook(state: StateType<{
|
|
21
|
-
messages: BinaryOperatorAggregate<AIMessage[], Messages>;
|
|
22
|
-
}>): StateType<{
|
|
23
|
-
messages: BinaryOperatorAggregate<AIMessage[], Messages>;
|
|
24
|
-
}>;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { debugLog, debugLogError } from '#src/utils/debugUtils.js';
|
|
3
|
-
import { env } from '#src/utils/systemUtils.js';
|
|
4
|
-
import { isAIMessage } from '@langchain/core/messages';
|
|
1
|
+
import { displayWarning } from '#src/utils/consoleUtils.js';
|
|
5
2
|
import { writeFileIfNotExistsWithMessages } from '#src/utils/fileUtils.js';
|
|
3
|
+
import { env } from '#src/utils/systemUtils.js';
|
|
6
4
|
/**
|
|
7
5
|
* Function to process JSON config and create Anthropic LLM instance
|
|
8
6
|
*/
|
|
@@ -33,44 +31,4 @@ export function init(configFileName) {
|
|
|
33
31
|
displayWarning(`You need to update your ${configFileName} to add your Anthropic API key, ` +
|
|
34
32
|
'or define ANTHROPIC_API_KEY environment variable.');
|
|
35
33
|
}
|
|
36
|
-
// noinspection JSUnusedGlobalSymbols
|
|
37
|
-
export function postProcessJsonConfig(config) {
|
|
38
|
-
// eslint-disable-next-line
|
|
39
|
-
if (config.hooks?.postModelHook === 'skip') {
|
|
40
|
-
return {
|
|
41
|
-
...config,
|
|
42
|
-
hooks: { ...config.hooks, postModelHook: undefined },
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
displayInfo('Applying Anthropic post-processing to config.');
|
|
46
|
-
return {
|
|
47
|
-
...config,
|
|
48
|
-
hooks: { ...config.hooks, postModelHook: config.hooks?.postModelHook || postModelHook },
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* There's something off with calling server tools with ReAct agent,
|
|
53
|
-
* the tool is not added in react_agent_executor because it is not Runnable,
|
|
54
|
-
* but the tool_node explodes because LLM reports calling non-existing tool.
|
|
55
|
-
* This method removes tool calls from messages, leaving the resulting content.
|
|
56
|
-
* This method seems unnecessary with OpenAI, but is needed for Anthropic,
|
|
57
|
-
* OpenAI does not need a name on the tool and does not seem to return server_tool_use.
|
|
58
|
-
*/
|
|
59
|
-
export function postModelHook(state) {
|
|
60
|
-
try {
|
|
61
|
-
const lastMessage = state.messages[state.messages.length - 1];
|
|
62
|
-
if (isAIMessage(lastMessage) && lastMessage.tool_calls && Array.isArray(lastMessage.content)) {
|
|
63
|
-
const serverToolsCalled = lastMessage.content
|
|
64
|
-
.filter((content) => content.type == 'server_tool_use' && content.name)
|
|
65
|
-
.map((content) => content.name);
|
|
66
|
-
debugLog('found server tool calls ' + serverToolsCalled.join(','));
|
|
67
|
-
lastMessage.tool_calls = lastMessage.tool_calls.filter((tc) => !serverToolsCalled.includes(tc.name));
|
|
68
|
-
}
|
|
69
|
-
return state;
|
|
70
|
-
}
|
|
71
|
-
catch (e) {
|
|
72
|
-
debugLogError('removeServerToolCalls error', e);
|
|
73
|
-
return state;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
34
|
//# sourceMappingURL=anthropic.js.map
|
|
@@ -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":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAOhD;;GAEG;AACH,qCAAqC;AACrC,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,SAAS,CAAC,MAAM,IAAI,GAAG,CAAC,iBAAiB,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,qCAAqC;AACrC,MAAM,UAAU,IAAI,CAAC,cAAsB;IACzC,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,2BAA2B,cAAc,kCAAkC;QACzE,mDAAmD,CACtD,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gaunt-sloth-assistant",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-alpha.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Andrew Kondratev",
|
|
@@ -37,35 +37,36 @@
|
|
|
37
37
|
"gth": "cli.js"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@langchain/anthropic": "^0.
|
|
41
|
-
"@langchain/core": "^0.
|
|
42
|
-
"@langchain/deepseek": "^
|
|
43
|
-
"@langchain/google-genai": "^0.
|
|
44
|
-
"@langchain/google-vertexai": "^0.
|
|
45
|
-
"@langchain/groq": "^0.
|
|
46
|
-
"@langchain/langgraph": "^0.
|
|
47
|
-
"@langchain/mcp-adapters": "^0.
|
|
48
|
-
"@langchain/openai": "^0.
|
|
49
|
-
"@langchain/xai": "^
|
|
50
|
-
"commander": "^14.0.
|
|
40
|
+
"@langchain/anthropic": "^1.0.0",
|
|
41
|
+
"@langchain/core": "^1.0.2",
|
|
42
|
+
"@langchain/deepseek": "^1.0.0",
|
|
43
|
+
"@langchain/google-genai": "^1.0.0",
|
|
44
|
+
"@langchain/google-vertexai": "^1.0.0",
|
|
45
|
+
"@langchain/groq": "^1.0.0",
|
|
46
|
+
"@langchain/langgraph": "^1.0.1",
|
|
47
|
+
"@langchain/mcp-adapters": "^1.0.0",
|
|
48
|
+
"@langchain/openai": "^1.0.0",
|
|
49
|
+
"@langchain/xai": "^1.0.0",
|
|
50
|
+
"commander": "^14.0.2",
|
|
51
51
|
"diff": "^8.0.2",
|
|
52
52
|
"express": "^5.1.0",
|
|
53
|
-
"
|
|
53
|
+
"langchain": "^1.0.2",
|
|
54
|
+
"minimatch": "^10.1.1"
|
|
54
55
|
},
|
|
55
56
|
"devDependencies": {
|
|
56
57
|
"@eslint/js": "^9.34.0",
|
|
57
|
-
"@types/express": "^5.0.
|
|
58
|
-
"@types/node": "^24.
|
|
58
|
+
"@types/express": "^5.0.5",
|
|
59
|
+
"@types/node": "^24.9.2",
|
|
59
60
|
"@types/uuid": "^10.0.0",
|
|
60
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
61
|
-
"@typescript-eslint/parser": "^8.
|
|
62
|
-
"eslint": "^9.
|
|
61
|
+
"@typescript-eslint/eslint-plugin": "^8.46.2",
|
|
62
|
+
"@typescript-eslint/parser": "^8.46.2",
|
|
63
|
+
"eslint": "^9.39.0",
|
|
63
64
|
"eslint-config-prettier": "^10.1.8",
|
|
64
65
|
"eslint-plugin-prettier": "^5.5.4",
|
|
65
|
-
"globals": "^16.
|
|
66
|
+
"globals": "^16.5.0",
|
|
66
67
|
"prettier": "^3.6.2",
|
|
67
|
-
"typedoc": "^0.28.
|
|
68
|
-
"typescript": "^5.9.
|
|
68
|
+
"typedoc": "^0.28.14",
|
|
69
|
+
"typescript": "^5.9.3",
|
|
69
70
|
"vitest": "^3.2.4"
|
|
70
71
|
},
|
|
71
72
|
"imports": {
|