@hashgraphonline/conversational-agent 0.1.217 → 0.1.219
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/cli/readme.md +181 -0
- package/dist/cjs/constants/entity-references.d.ts +18 -0
- package/dist/cjs/constants/form-priorities.d.ts +24 -0
- package/dist/cjs/constants/index.d.ts +4 -0
- package/dist/cjs/constants/messages.d.ts +19 -0
- package/dist/cjs/constants/test-constants.d.ts +42 -0
- package/dist/cjs/conversational-agent.d.ts +3 -8
- package/dist/{types/core/ToolRegistry.d.ts → cjs/core/tool-registry.d.ts} +11 -1
- package/dist/{types/execution/ExecutionPipeline.d.ts → cjs/execution/execution-pipeline.d.ts} +3 -3
- package/dist/cjs/forms/field-guidance-registry.d.ts +108 -0
- package/dist/cjs/forms/form-generator.d.ts +2 -7
- package/dist/cjs/forms/index.d.ts +3 -0
- package/dist/cjs/forms/types.d.ts +9 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.ts +7 -12
- package/dist/cjs/langchain/external-tool-wrapper.d.ts +101 -0
- package/dist/{types/langchain/FormAwareAgentExecutor.d.ts → cjs/langchain/form-aware-agent-executor.d.ts} +19 -4
- package/dist/cjs/langchain/index.d.ts +3 -0
- package/dist/{types → cjs/langchain}/langchain-agent.d.ts +15 -7
- package/dist/cjs/mcp/adapters/index.d.ts +1 -0
- package/dist/cjs/mcp/adapters/langchain.d.ts +1 -1
- package/dist/{types/mcp/ContentProcessor.d.ts → cjs/mcp/content-processor.d.ts} +1 -1
- package/dist/cjs/mcp/index.d.ts +5 -0
- package/dist/{types/mcp/MCPClientManager.d.ts → cjs/mcp/mcp-client-manager.d.ts} +1 -1
- package/dist/cjs/memory/{ContentStorage.d.ts → content-storage.d.ts} +4 -4
- package/dist/cjs/memory/index.d.ts +5 -7
- package/dist/{types/memory/MemoryWindow.d.ts → cjs/memory/memory-window.d.ts} +1 -1
- package/dist/{types/memory/SmartMemoryManager.d.ts → cjs/memory/smart-memory-manager.d.ts} +1 -1
- package/dist/cjs/services/{ContentStoreManager.d.ts → content-store-manager.d.ts} +6 -6
- package/dist/cjs/services/context/resolution-context.d.ts +49 -0
- package/dist/cjs/services/entity-resolver.d.ts +58 -0
- package/dist/cjs/services/formatters/converters/index.d.ts +2 -0
- package/dist/cjs/services/formatters/converters/string-normalization-converter.d.ts +13 -0
- package/dist/cjs/services/formatters/converters/topic-id-to-hrl-converter.d.ts +17 -0
- package/dist/cjs/services/formatters/format-converter-registry.d.ts +66 -0
- package/dist/cjs/services/formatters/index.d.ts +3 -0
- package/dist/cjs/services/formatters/types.d.ts +29 -0
- package/dist/cjs/services/index.d.ts +3 -0
- package/dist/cjs/services/resolution/resolution-pipeline.d.ts +44 -0
- package/dist/cjs/tools/index.d.ts +1 -0
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/esm/index.js +40 -13
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index10.js +669 -13
- package/dist/esm/index10.js.map +1 -1
- package/dist/esm/index11.js +310 -95
- package/dist/esm/index11.js.map +1 -1
- package/dist/esm/index12.js +130 -95
- package/dist/esm/index12.js.map +1 -1
- package/dist/esm/index13.js +262 -153
- package/dist/esm/index13.js.map +1 -1
- package/dist/esm/index14.js +100 -664
- package/dist/esm/index14.js.map +1 -1
- package/dist/esm/index15.js +135 -408
- package/dist/esm/index15.js.map +1 -1
- package/dist/esm/index16.js +240 -122
- package/dist/esm/index16.js.map +1 -1
- package/dist/esm/index17.js +147 -135
- package/dist/esm/index17.js.map +1 -1
- package/dist/esm/index18.js +376 -533
- package/dist/esm/index18.js.map +1 -1
- package/dist/esm/index19.js +87 -214
- package/dist/esm/index19.js.map +1 -1
- package/dist/esm/index2.js +21 -4
- package/dist/esm/index2.js.map +1 -1
- package/dist/esm/index20.js +158 -92
- package/dist/esm/index20.js.map +1 -1
- package/dist/esm/index21.js +717 -44
- package/dist/esm/index21.js.map +1 -1
- package/dist/esm/index22.js +58 -96
- package/dist/esm/index22.js.map +1 -1
- package/dist/esm/index23.js +324 -34
- package/dist/esm/index23.js.map +1 -1
- package/dist/esm/index24.js +125 -712
- package/dist/esm/index24.js.map +1 -1
- package/dist/esm/index25.js +113 -133
- package/dist/esm/index25.js.map +1 -1
- package/dist/esm/index26.js +18 -152
- package/dist/esm/index26.js.map +1 -1
- package/dist/esm/index27.js +14 -210
- package/dist/esm/index27.js.map +1 -1
- package/dist/esm/index28.js +70 -173
- package/dist/esm/index28.js.map +1 -1
- package/dist/esm/index29.js +882 -220
- package/dist/esm/index29.js.map +1 -1
- package/dist/esm/index30.js +218 -126
- package/dist/esm/index30.js.map +1 -1
- package/dist/esm/index31.js +1258 -44
- package/dist/esm/index31.js.map +1 -1
- package/dist/esm/index32.js +132 -24
- package/dist/esm/index32.js.map +1 -1
- package/dist/esm/index33.js +104 -82
- package/dist/esm/index33.js.map +1 -1
- package/dist/esm/index34.js +43 -239
- package/dist/esm/index34.js.map +1 -1
- package/dist/esm/index35.js +106 -0
- package/dist/esm/index35.js.map +1 -0
- package/dist/esm/index36.js +24 -0
- package/dist/esm/index36.js.map +1 -0
- package/dist/esm/index37.js +8 -0
- package/dist/esm/index37.js.map +1 -0
- package/dist/esm/index38.js +15 -0
- package/dist/esm/index38.js.map +1 -0
- package/dist/esm/index39.js +258 -0
- package/dist/esm/index39.js.map +1 -0
- package/dist/esm/index40.js +187 -0
- package/dist/esm/index40.js.map +1 -0
- package/dist/esm/index41.js +30 -0
- package/dist/esm/index41.js.map +1 -0
- package/dist/esm/index42.js +10 -0
- package/dist/esm/index42.js.map +1 -0
- package/dist/esm/index43.js +95 -0
- package/dist/esm/index43.js.map +1 -0
- package/dist/esm/index5.js +2 -2
- package/dist/esm/index5.js.map +1 -1
- package/dist/esm/index6.js +44 -67
- package/dist/esm/index6.js.map +1 -1
- package/dist/esm/index7.js +9 -0
- package/dist/esm/index7.js.map +1 -1
- package/dist/esm/index8.js +13 -1095
- package/dist/esm/index8.js.map +1 -1
- package/dist/esm/index9.js +17 -13
- package/dist/esm/index9.js.map +1 -1
- package/dist/types/constants/entity-references.d.ts +18 -0
- package/dist/types/constants/form-priorities.d.ts +24 -0
- package/dist/types/constants/index.d.ts +4 -0
- package/dist/types/constants/messages.d.ts +19 -0
- package/dist/types/constants/test-constants.d.ts +42 -0
- package/dist/types/conversational-agent.d.ts +3 -8
- package/dist/{cjs/core/ToolRegistry.d.ts → types/core/tool-registry.d.ts} +11 -1
- package/dist/{cjs/execution/ExecutionPipeline.d.ts → types/execution/execution-pipeline.d.ts} +3 -3
- package/dist/types/forms/field-guidance-registry.d.ts +108 -0
- package/dist/types/forms/form-generator.d.ts +2 -7
- package/dist/types/forms/index.d.ts +3 -0
- package/dist/types/forms/types.d.ts +9 -1
- package/dist/types/index.d.ts +7 -12
- package/dist/types/langchain/external-tool-wrapper.d.ts +101 -0
- package/dist/{cjs/langchain/FormAwareAgentExecutor.d.ts → types/langchain/form-aware-agent-executor.d.ts} +19 -4
- package/dist/types/langchain/index.d.ts +3 -0
- package/dist/{cjs → types/langchain}/langchain-agent.d.ts +15 -7
- package/dist/types/mcp/adapters/index.d.ts +1 -0
- package/dist/types/mcp/adapters/langchain.d.ts +1 -1
- package/dist/{cjs/mcp/ContentProcessor.d.ts → types/mcp/content-processor.d.ts} +1 -1
- package/dist/types/mcp/index.d.ts +5 -0
- package/dist/{cjs/mcp/MCPClientManager.d.ts → types/mcp/mcp-client-manager.d.ts} +1 -1
- package/dist/types/memory/{ContentStorage.d.ts → content-storage.d.ts} +4 -4
- package/dist/types/memory/index.d.ts +5 -7
- package/dist/{cjs/memory/MemoryWindow.d.ts → types/memory/memory-window.d.ts} +1 -1
- package/dist/{cjs/memory/SmartMemoryManager.d.ts → types/memory/smart-memory-manager.d.ts} +1 -1
- package/dist/types/services/{ContentStoreManager.d.ts → content-store-manager.d.ts} +6 -6
- package/dist/types/services/context/resolution-context.d.ts +49 -0
- package/dist/types/services/entity-resolver.d.ts +58 -0
- package/dist/types/services/formatters/converters/index.d.ts +2 -0
- package/dist/types/services/formatters/converters/string-normalization-converter.d.ts +13 -0
- package/dist/types/services/formatters/converters/topic-id-to-hrl-converter.d.ts +17 -0
- package/dist/types/services/formatters/format-converter-registry.d.ts +66 -0
- package/dist/types/services/formatters/index.d.ts +3 -0
- package/dist/types/services/formatters/types.d.ts +29 -0
- package/dist/types/services/index.d.ts +3 -0
- package/dist/types/services/resolution/resolution-pipeline.d.ts +44 -0
- package/dist/types/tools/index.d.ts +1 -0
- package/dist/types/utils/index.d.ts +1 -0
- package/package.json +30 -27
- package/src/agent-factory.ts +1 -1
- package/src/base-agent.ts +9 -0
- package/src/config/system-message.ts +2 -15
- package/src/constants/entity-references.ts +23 -0
- package/src/constants/form-priorities.ts +25 -0
- package/src/constants/index.ts +4 -0
- package/src/constants/messages.ts +20 -0
- package/src/constants/test-constants.ts +49 -0
- package/src/conversational-agent.ts +42 -69
- package/src/core/{ToolRegistry.ts → tool-registry.ts} +71 -1
- package/src/examples/external-tool-wrapper-example.ts +56 -0
- package/src/execution/{ExecutionPipeline.ts → execution-pipeline.ts} +3 -3
- package/src/forms/field-guidance-registry.ts +415 -0
- package/src/forms/field-type-registry.ts +49 -48
- package/src/forms/{FormEngine.ts → form-engine.ts} +66 -43
- package/src/forms/form-generator.ts +91 -17
- package/src/forms/index.ts +4 -1
- package/src/forms/types.ts +9 -1
- package/src/index.ts +7 -37
- package/src/langchain/external-tool-wrapper.ts +90 -0
- package/src/langchain/{FormAwareAgentExecutor.ts → form-aware-agent-executor.ts} +615 -231
- package/src/langchain/{FormValidatingToolWrapper.ts → form-validating-tool-wrapper.ts} +2 -1
- package/src/langchain/index.ts +3 -0
- package/src/{langchain-agent.ts → langchain/langchain-agent.ts} +389 -113
- package/src/mcp/adapters/index.ts +1 -0
- package/src/mcp/adapters/langchain.ts +27 -18
- package/src/mcp/{ContentProcessor.ts → content-processor.ts} +71 -47
- package/src/mcp/index.ts +5 -0
- package/src/mcp/{MCPClientManager.ts → mcp-client-manager.ts} +2 -2
- package/src/memory/{ContentStorage.ts → content-storage.ts} +263 -167
- package/src/memory/index.ts +5 -8
- package/src/memory/{MemoryWindow.ts → memory-window.ts} +47 -24
- package/src/memory/{SmartMemoryManager.ts → smart-memory-manager.ts} +49 -22
- package/src/plugins/hbar/HbarPlugin.ts +1 -1
- package/src/plugins/hcs-10/HCS10Plugin.ts +46 -28
- package/src/scripts/test-external-tool-wrapper.ts +6 -6
- package/src/scripts/test-inscribe-form-generation.ts +22 -21
- package/src/scripts/test-inscribe-wrapper-verification.ts +5 -4
- package/src/services/{ContentStoreManager.ts → content-store-manager.ts} +75 -33
- package/src/services/context/resolution-context.ts +80 -0
- package/src/services/entity-resolver.ts +425 -0
- package/src/services/formatters/converters/index.ts +2 -0
- package/src/services/formatters/converters/string-normalization-converter.ts +106 -0
- package/src/services/formatters/converters/topic-id-to-hrl-converter.ts +25 -0
- package/src/services/formatters/format-converter-registry.ts +229 -0
- package/src/services/formatters/index.ts +3 -0
- package/src/services/formatters/types.ts +31 -0
- package/src/services/index.ts +3 -0
- package/src/services/resolution/resolution-pipeline.ts +106 -0
- package/src/tools/index.ts +1 -0
- package/src/types/content-reference.ts +87 -60
- package/src/utils/index.ts +1 -0
- package/cli/dist/CLIApp.d.ts +0 -9
- package/cli/dist/CLIApp.js +0 -127
- package/cli/dist/LocalConversationalAgent.d.ts +0 -37
- package/cli/dist/LocalConversationalAgent.js +0 -58
- package/cli/dist/app.d.ts +0 -16
- package/cli/dist/app.js +0 -13
- package/cli/dist/cli.d.ts +0 -2
- package/cli/dist/cli.js +0 -51
- package/cli/dist/components/AppContainer.d.ts +0 -16
- package/cli/dist/components/AppContainer.js +0 -24
- package/cli/dist/components/AppScreens.d.ts +0 -2
- package/cli/dist/components/AppScreens.js +0 -259
- package/cli/dist/components/ChatScreen.d.ts +0 -15
- package/cli/dist/components/ChatScreen.js +0 -39
- package/cli/dist/components/DebugLoadingScreen.d.ts +0 -5
- package/cli/dist/components/DebugLoadingScreen.js +0 -31
- package/cli/dist/components/LoadingScreen.d.ts +0 -2
- package/cli/dist/components/LoadingScreen.js +0 -16
- package/cli/dist/components/LoadingScreenDebug.d.ts +0 -5
- package/cli/dist/components/LoadingScreenDebug.js +0 -27
- package/cli/dist/components/MCPConfigScreen.d.ts +0 -28
- package/cli/dist/components/MCPConfigScreen.js +0 -168
- package/cli/dist/components/ScreenRouter.d.ts +0 -12
- package/cli/dist/components/ScreenRouter.js +0 -22
- package/cli/dist/components/SetupScreen.d.ts +0 -15
- package/cli/dist/components/SetupScreen.js +0 -65
- package/cli/dist/components/SingleLoadingScreen.d.ts +0 -5
- package/cli/dist/components/SingleLoadingScreen.js +0 -27
- package/cli/dist/components/StatusBadge.d.ts +0 -7
- package/cli/dist/components/StatusBadge.js +0 -28
- package/cli/dist/components/TerminalWindow.d.ts +0 -8
- package/cli/dist/components/TerminalWindow.js +0 -24
- package/cli/dist/components/WelcomeScreen.d.ts +0 -11
- package/cli/dist/components/WelcomeScreen.js +0 -47
- package/cli/dist/context/AppContext.d.ts +0 -68
- package/cli/dist/context/AppContext.js +0 -363
- package/cli/dist/hooks/useInitializeAgent.d.ts +0 -19
- package/cli/dist/hooks/useInitializeAgent.js +0 -28
- package/cli/dist/hooks/useStableState.d.ts +0 -38
- package/cli/dist/hooks/useStableState.js +0 -68
- package/cli/dist/managers/AgentManager.d.ts +0 -57
- package/cli/dist/managers/AgentManager.js +0 -119
- package/cli/dist/managers/ConfigManager.d.ts +0 -53
- package/cli/dist/managers/ConfigManager.js +0 -173
- package/cli/dist/types.d.ts +0 -31
- package/cli/dist/types.js +0 -19
- package/dist/cjs/context/ReferenceContextManager.d.ts +0 -84
- package/dist/cjs/context/ReferenceResponseProcessor.d.ts +0 -76
- package/dist/cjs/services/EntityResolver.d.ts +0 -26
- package/dist/types/context/ReferenceContextManager.d.ts +0 -84
- package/dist/types/context/ReferenceResponseProcessor.d.ts +0 -76
- package/dist/types/services/EntityResolver.d.ts +0 -26
- package/src/context/ReferenceContextManager.ts +0 -350
- package/src/context/ReferenceResponseProcessor.ts +0 -295
- package/src/scripts/test-hedera-kit-wrapper.ts +0 -265
- package/src/services/EntityResolver.ts +0 -128
- /package/dist/cjs/forms/{FormEngine.d.ts → form-engine.d.ts} +0 -0
- /package/dist/cjs/langchain/{FormValidatingToolWrapper.d.ts → form-validating-tool-wrapper.d.ts} +0 -0
- /package/dist/cjs/memory/{ReferenceIdGenerator.d.ts → reference-id-generator.d.ts} +0 -0
- /package/dist/cjs/memory/{TokenCounter.d.ts → token-counter.d.ts} +0 -0
- /package/dist/cjs/tools/{EntityResolverTool.d.ts → entity-resolver-tool.d.ts} +0 -0
- /package/dist/cjs/utils/{ResponseFormatter.d.ts → response-formatter.d.ts} +0 -0
- /package/dist/types/forms/{FormEngine.d.ts → form-engine.d.ts} +0 -0
- /package/dist/types/langchain/{FormValidatingToolWrapper.d.ts → form-validating-tool-wrapper.d.ts} +0 -0
- /package/dist/types/memory/{ReferenceIdGenerator.d.ts → reference-id-generator.d.ts} +0 -0
- /package/dist/types/memory/{TokenCounter.d.ts → token-counter.d.ts} +0 -0
- /package/dist/types/tools/{EntityResolverTool.d.ts → entity-resolver-tool.d.ts} +0 -0
- /package/dist/types/utils/{ResponseFormatter.d.ts → response-formatter.d.ts} +0 -0
- /package/src/memory/{ReferenceIdGenerator.ts → reference-id-generator.ts} +0 -0
- /package/src/memory/{TokenCounter.ts → token-counter.ts} +0 -0
- /package/src/tools/{EntityResolverTool.ts → entity-resolver-tool.ts} +0 -0
- /package/src/utils/{ResponseFormatter.ts → response-formatter.ts} +0 -0
package/dist/esm/index15.js
CHANGED
|
@@ -1,450 +1,177 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
this.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
this._contentStorage = new ContentStorage(this.config.storageLimit);
|
|
12
|
-
this.memoryWindow = new MemoryWindow(
|
|
13
|
-
this.config.maxTokens,
|
|
14
|
-
this.config.reserveTokens,
|
|
15
|
-
this.tokenCounter
|
|
16
|
-
);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Get the content storage instance for file/content reference operations
|
|
20
|
-
* @returns ContentStorage instance
|
|
21
|
-
*/
|
|
22
|
-
get contentStorage() {
|
|
23
|
-
return this._contentStorage;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Add a message to the active memory window
|
|
27
|
-
* Automatically handles pruning and storage of displaced messages
|
|
28
|
-
* @param message - Message to add
|
|
29
|
-
*/
|
|
30
|
-
addMessage(message) {
|
|
31
|
-
const result = this.memoryWindow.addMessage(message);
|
|
32
|
-
if (result.prunedMessages.length > 0) {
|
|
33
|
-
this._contentStorage.storeMessages(result.prunedMessages);
|
|
1
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
|
+
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
3
|
+
import { MCPContentProcessor } from "./index16.js";
|
|
4
|
+
class MCPClientManager {
|
|
5
|
+
constructor(logger, contentStorage) {
|
|
6
|
+
this.clients = /* @__PURE__ */ new Map();
|
|
7
|
+
this.tools = /* @__PURE__ */ new Map();
|
|
8
|
+
this.logger = logger;
|
|
9
|
+
if (contentStorage) {
|
|
10
|
+
this.contentProcessor = new MCPContentProcessor(contentStorage, logger);
|
|
34
11
|
}
|
|
35
12
|
}
|
|
36
13
|
/**
|
|
37
|
-
*
|
|
38
|
-
* @returns Array of active messages in chronological order
|
|
14
|
+
* Connect to an MCP server and discover its tools
|
|
39
15
|
*/
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
16
|
+
async connectServer(config) {
|
|
17
|
+
try {
|
|
18
|
+
if (this.isServerConnected(config.name)) {
|
|
19
|
+
return {
|
|
20
|
+
serverName: config.name,
|
|
21
|
+
connected: false,
|
|
22
|
+
error: `Server ${config.name} is already connected`,
|
|
23
|
+
tools: []
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (config.transport && config.transport !== "stdio") {
|
|
27
|
+
throw new Error(`Transport ${config.transport} not yet supported`);
|
|
28
|
+
}
|
|
29
|
+
const transport = new StdioClientTransport({
|
|
30
|
+
command: config.command,
|
|
31
|
+
args: config.args,
|
|
32
|
+
...config.env && { env: config.env }
|
|
33
|
+
});
|
|
34
|
+
const client = new Client({
|
|
35
|
+
name: `conversational-agent-${config.name}`,
|
|
36
|
+
version: "1.0.0"
|
|
37
|
+
}, {
|
|
38
|
+
capabilities: {}
|
|
39
|
+
});
|
|
40
|
+
await client.connect(transport);
|
|
41
|
+
this.clients.set(config.name, client);
|
|
42
|
+
const toolsResponse = await client.listTools();
|
|
43
|
+
const toolsWithServer = toolsResponse.tools.map((tool) => ({
|
|
44
|
+
...tool,
|
|
45
|
+
serverName: config.name
|
|
46
|
+
}));
|
|
47
|
+
this.tools.set(config.name, toolsWithServer);
|
|
48
|
+
this.logger.info(`Connected to MCP server ${config.name} with ${toolsWithServer.length} tools`);
|
|
49
|
+
return {
|
|
50
|
+
serverName: config.name,
|
|
51
|
+
connected: true,
|
|
52
|
+
tools: toolsWithServer
|
|
53
|
+
};
|
|
54
|
+
} catch (error) {
|
|
55
|
+
this.logger.error(`Failed to connect to MCP server ${config.name}:`, error);
|
|
56
|
+
return {
|
|
57
|
+
serverName: config.name,
|
|
58
|
+
connected: false,
|
|
59
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
60
|
+
tools: []
|
|
61
|
+
};
|
|
51
62
|
}
|
|
52
63
|
}
|
|
53
64
|
/**
|
|
54
|
-
*
|
|
55
|
-
* @param systemPrompt - System prompt text
|
|
56
|
-
*/
|
|
57
|
-
setSystemPrompt(systemPrompt) {
|
|
58
|
-
this.memoryWindow.setSystemPrompt(systemPrompt);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Get the current system prompt
|
|
62
|
-
* @returns Current system prompt text
|
|
63
|
-
*/
|
|
64
|
-
getSystemPrompt() {
|
|
65
|
-
return this.memoryWindow.getSystemPrompt();
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Search through stored message history
|
|
69
|
-
* @param query - Search term or pattern
|
|
70
|
-
* @param options - Search configuration
|
|
71
|
-
* @returns Array of matching messages from history
|
|
65
|
+
* Execute a tool on a specific MCP server
|
|
72
66
|
*/
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
* Get recent messages from storage history
|
|
78
|
-
* @param count - Number of recent messages to retrieve
|
|
79
|
-
* @returns Array of recent messages from storage
|
|
80
|
-
*/
|
|
81
|
-
getRecentHistory(count) {
|
|
82
|
-
return this._contentStorage.getRecentMessages(count);
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Check if a message can be added without exceeding limits
|
|
86
|
-
* @param message - Message to test
|
|
87
|
-
* @returns True if message can be added
|
|
88
|
-
*/
|
|
89
|
-
canAddMessage(message) {
|
|
90
|
-
return this.memoryWindow.canAddMessage(message);
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Get statistics about the active memory window
|
|
94
|
-
* @returns Memory usage statistics
|
|
95
|
-
*/
|
|
96
|
-
getMemoryStats() {
|
|
97
|
-
const windowStats = this.memoryWindow.getStats();
|
|
98
|
-
return {
|
|
99
|
-
totalActiveMessages: windowStats.totalMessages,
|
|
100
|
-
currentTokenCount: windowStats.currentTokens,
|
|
101
|
-
maxTokens: windowStats.maxTokens,
|
|
102
|
-
remainingCapacity: windowStats.remainingCapacity,
|
|
103
|
-
systemPromptTokens: windowStats.systemPromptTokens,
|
|
104
|
-
usagePercentage: windowStats.usagePercentage
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Get statistics about the content storage
|
|
109
|
-
* @returns Storage usage statistics
|
|
110
|
-
*/
|
|
111
|
-
getStorageStats() {
|
|
112
|
-
return this._contentStorage.getStorageStats();
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Get combined statistics for both active memory and storage
|
|
116
|
-
* @returns Combined memory and storage statistics
|
|
117
|
-
*/
|
|
118
|
-
getOverallStats() {
|
|
119
|
-
const memoryStats = this.getMemoryStats();
|
|
120
|
-
const storageStats = this.getStorageStats();
|
|
121
|
-
return {
|
|
122
|
-
activeMemory: memoryStats,
|
|
123
|
-
storage: storageStats,
|
|
124
|
-
totalMessagesManaged: memoryStats.totalActiveMessages + storageStats.totalMessages,
|
|
125
|
-
activeMemoryUtilization: memoryStats.usagePercentage,
|
|
126
|
-
storageUtilization: storageStats.usagePercentage
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Update the configuration and apply changes
|
|
131
|
-
* @param newConfig - New configuration options
|
|
132
|
-
*/
|
|
133
|
-
updateConfig(newConfig) {
|
|
134
|
-
this.config = { ...this.config, ...newConfig };
|
|
135
|
-
if (newConfig.maxTokens !== void 0 || newConfig.reserveTokens !== void 0) {
|
|
136
|
-
this.memoryWindow.updateLimits(
|
|
137
|
-
this.config.maxTokens,
|
|
138
|
-
this.config.reserveTokens
|
|
139
|
-
);
|
|
67
|
+
async executeTool(serverName, toolName, args) {
|
|
68
|
+
const client = this.clients.get(serverName);
|
|
69
|
+
if (!client) {
|
|
70
|
+
throw new Error(`MCP server ${serverName} not connected`);
|
|
140
71
|
}
|
|
141
|
-
|
|
142
|
-
|
|
72
|
+
this.logger.debug(`Executing MCP tool ${toolName} on server ${serverName}`, args);
|
|
73
|
+
try {
|
|
74
|
+
const result = await client.callTool({
|
|
75
|
+
name: toolName,
|
|
76
|
+
arguments: args
|
|
77
|
+
});
|
|
78
|
+
if (this.contentProcessor) {
|
|
79
|
+
const processed = await this.contentProcessor.processResponse(result, serverName, toolName);
|
|
80
|
+
if (processed.wasProcessed) {
|
|
81
|
+
this.logger.debug(
|
|
82
|
+
`Processed MCP response from ${serverName}::${toolName}`,
|
|
83
|
+
{
|
|
84
|
+
referenceCreated: processed.referenceCreated,
|
|
85
|
+
originalSize: processed.originalSize,
|
|
86
|
+
errors: processed.errors
|
|
87
|
+
}
|
|
88
|
+
);
|
|
89
|
+
if (processed.errors && processed.errors.length > 0) {
|
|
90
|
+
this.logger.warn(`Content processing warnings for ${serverName}::${toolName}:`, processed.errors);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return processed.content;
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
} catch (error) {
|
|
97
|
+
this.logger.error(`Error executing MCP tool ${toolName}:`, error);
|
|
98
|
+
throw error;
|
|
143
99
|
}
|
|
144
100
|
}
|
|
145
101
|
/**
|
|
146
|
-
*
|
|
147
|
-
* @returns Current configuration settings
|
|
102
|
+
* Disconnect all MCP servers
|
|
148
103
|
*/
|
|
149
|
-
|
|
150
|
-
|
|
104
|
+
async disconnectAll() {
|
|
105
|
+
for (const [name, client] of this.clients) {
|
|
106
|
+
try {
|
|
107
|
+
await client.close();
|
|
108
|
+
this.logger.info(`Disconnected from MCP server ${name}`);
|
|
109
|
+
} catch (error) {
|
|
110
|
+
this.logger.error(`Error disconnecting MCP server ${name}:`, error);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
this.clients.clear();
|
|
114
|
+
this.tools.clear();
|
|
151
115
|
}
|
|
152
116
|
/**
|
|
153
|
-
* Get
|
|
154
|
-
* @param startTime - Start of time range
|
|
155
|
-
* @param endTime - End of time range
|
|
156
|
-
* @returns Messages within the specified time range
|
|
117
|
+
* Get all discovered tools from all connected servers
|
|
157
118
|
*/
|
|
158
|
-
|
|
159
|
-
|
|
119
|
+
getAllTools() {
|
|
120
|
+
const allTools = [];
|
|
121
|
+
for (const tools of this.tools.values()) {
|
|
122
|
+
allTools.push(...tools);
|
|
123
|
+
}
|
|
124
|
+
return allTools;
|
|
160
125
|
}
|
|
161
126
|
/**
|
|
162
|
-
* Get
|
|
163
|
-
* @param messageType - Type of messages to retrieve ('human', 'ai', 'system', etc.)
|
|
164
|
-
* @param limit - Maximum number of messages to return
|
|
165
|
-
* @returns Messages of the specified type
|
|
127
|
+
* Get tools from a specific server
|
|
166
128
|
*/
|
|
167
|
-
|
|
168
|
-
return this.
|
|
129
|
+
getServerTools(serverName) {
|
|
130
|
+
return this.tools.get(serverName) || [];
|
|
169
131
|
}
|
|
170
132
|
/**
|
|
171
|
-
*
|
|
172
|
-
* @param minutes - Number of minutes to look back
|
|
173
|
-
* @returns Messages from the last N minutes
|
|
133
|
+
* Check if a server is connected
|
|
174
134
|
*/
|
|
175
|
-
|
|
176
|
-
return this.
|
|
135
|
+
isServerConnected(serverName) {
|
|
136
|
+
return this.clients.has(serverName);
|
|
177
137
|
}
|
|
178
138
|
/**
|
|
179
|
-
*
|
|
180
|
-
* @returns Serializable representation of memory state
|
|
139
|
+
* Get list of connected server names
|
|
181
140
|
*/
|
|
182
|
-
|
|
183
|
-
return
|
|
184
|
-
config: this.config,
|
|
185
|
-
activeMessages: this.memoryWindow.getMessages().map((msg) => ({
|
|
186
|
-
content: msg.content,
|
|
187
|
-
type: msg._getType()
|
|
188
|
-
})),
|
|
189
|
-
systemPrompt: this.memoryWindow.getSystemPrompt(),
|
|
190
|
-
memoryStats: this.getMemoryStats(),
|
|
191
|
-
storageStats: this.getStorageStats(),
|
|
192
|
-
storedMessages: this._contentStorage.exportMessages()
|
|
193
|
-
};
|
|
141
|
+
getConnectedServers() {
|
|
142
|
+
return Array.from(this.clients.keys());
|
|
194
143
|
}
|
|
195
144
|
/**
|
|
196
|
-
*
|
|
197
|
-
* Useful for providing context to other systems or for logging
|
|
198
|
-
* @param includeStoredContext - Whether to include recent stored messages
|
|
199
|
-
* @returns Context summary object
|
|
145
|
+
* Enable content processing with content storage
|
|
200
146
|
*/
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
activeMessageCount: activeMessages.length,
|
|
205
|
-
systemPrompt: this.getSystemPrompt(),
|
|
206
|
-
recentMessages: activeMessages.slice(-5),
|
|
207
|
-
memoryUtilization: this.getMemoryStats().usagePercentage,
|
|
208
|
-
hasStoredHistory: this.getStorageStats().totalMessages > 0
|
|
209
|
-
};
|
|
210
|
-
if (includeStoredContext) {
|
|
211
|
-
return {
|
|
212
|
-
...summary,
|
|
213
|
-
recentStoredMessages: this.getRecentHistory(10),
|
|
214
|
-
storageStats: this.getStorageStats()
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
return summary;
|
|
147
|
+
enableContentProcessing(contentStorage) {
|
|
148
|
+
this.contentProcessor = new MCPContentProcessor(contentStorage, this.logger);
|
|
149
|
+
this.logger.info("Content processing enabled for MCP responses");
|
|
218
150
|
}
|
|
219
151
|
/**
|
|
220
|
-
*
|
|
221
|
-
* Optimizes storage and cleans up resources
|
|
152
|
+
* Disable content processing
|
|
222
153
|
*/
|
|
223
|
-
|
|
154
|
+
disableContentProcessing() {
|
|
155
|
+
delete this.contentProcessor;
|
|
156
|
+
this.logger.info("Content processing disabled for MCP responses");
|
|
224
157
|
}
|
|
225
158
|
/**
|
|
226
|
-
*
|
|
227
|
-
* @param entityId - The blockchain entity ID
|
|
228
|
-
* @param entityName - User-provided or derived friendly name
|
|
229
|
-
* @param entityType - Type of entity (token, account, topic, etc.)
|
|
230
|
-
* @param transactionId - Optional transaction ID that created this entity
|
|
159
|
+
* Check if content processing is enabled
|
|
231
160
|
*/
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
if (!entityId || typeof entityId !== "string" || entityId.trim().length === 0) {
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
if (!entityName || typeof entityName !== "string" || entityName.trim().length === 0) {
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
|
-
if (!entityType || typeof entityType !== "string" || entityType.trim().length === 0) {
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
const sanitizedEntityId = entityId.trim();
|
|
244
|
-
const sanitizedEntityName = entityName.trim().substring(0, 100);
|
|
245
|
-
const sanitizedEntityType = entityType.trim().toLowerCase();
|
|
246
|
-
const association = {
|
|
247
|
-
entityId: sanitizedEntityId,
|
|
248
|
-
entityName: sanitizedEntityName,
|
|
249
|
-
entityType: sanitizedEntityType,
|
|
250
|
-
createdAt: /* @__PURE__ */ new Date(),
|
|
251
|
-
isEntityAssociation: true,
|
|
252
|
-
...transactionId !== void 0 && transactionId !== null && transactionId.trim() !== "" ? { transactionId: transactionId.trim() } : {}
|
|
253
|
-
};
|
|
254
|
-
const content = JSON.stringify(association);
|
|
255
|
-
const entityMessage = {
|
|
256
|
-
_getType: () => "system",
|
|
257
|
-
content,
|
|
258
|
-
id: `entity_${sanitizedEntityId}_${Date.now()}`,
|
|
259
|
-
name: "entity_association",
|
|
260
|
-
additional_kwargs: {
|
|
261
|
-
entityId: sanitizedEntityId,
|
|
262
|
-
entityName: sanitizedEntityName,
|
|
263
|
-
entityType: sanitizedEntityType,
|
|
264
|
-
isEntityAssociation: true
|
|
265
|
-
}
|
|
266
|
-
};
|
|
267
|
-
this._contentStorage.storeMessages([entityMessage]);
|
|
268
|
-
} catch (error) {
|
|
269
|
-
this.logger.error("Failed to store entity association", {
|
|
270
|
-
entityId,
|
|
271
|
-
entityName,
|
|
272
|
-
entityType,
|
|
273
|
-
error: error instanceof Error ? error.message : String(error)
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* Resolve entity references from natural language queries
|
|
279
|
-
* @param query - Search query (entity name or natural language reference)
|
|
280
|
-
* @param options - Resolution options for filtering and fuzzy matching
|
|
281
|
-
* @returns Array of matching entity associations
|
|
282
|
-
*/
|
|
283
|
-
resolveEntityReference(query, options = {}) {
|
|
284
|
-
try {
|
|
285
|
-
if (!query || typeof query !== "string") {
|
|
286
|
-
return [];
|
|
287
|
-
}
|
|
288
|
-
const sanitizedQuery = query.trim();
|
|
289
|
-
if (sanitizedQuery.length === 0) {
|
|
290
|
-
return [];
|
|
291
|
-
}
|
|
292
|
-
if (sanitizedQuery.length > 200) {
|
|
293
|
-
}
|
|
294
|
-
const { entityType, limit = 10, fuzzyMatch = true } = options;
|
|
295
|
-
const safeLimit = Math.max(1, Math.min(limit || 10, 100));
|
|
296
|
-
const isEntityIdQuery = /^0\.0\.\d+$/.test(sanitizedQuery);
|
|
297
|
-
const searchResults = this._contentStorage.searchMessages(
|
|
298
|
-
sanitizedQuery.substring(0, 200),
|
|
299
|
-
{
|
|
300
|
-
caseSensitive: false,
|
|
301
|
-
limit: safeLimit * 2
|
|
302
|
-
}
|
|
303
|
-
);
|
|
304
|
-
const associations = [];
|
|
305
|
-
for (const message of searchResults) {
|
|
306
|
-
try {
|
|
307
|
-
const content = message.content;
|
|
308
|
-
if (content.includes(IS_ENTITY_ASSOCIATION_FLAG) || content.includes("entityId")) {
|
|
309
|
-
const parsed = JSON.parse(content);
|
|
310
|
-
if (parsed.entityId && parsed.entityName && parsed.entityType) {
|
|
311
|
-
if (entityType && parsed.entityType !== entityType) {
|
|
312
|
-
continue;
|
|
313
|
-
}
|
|
314
|
-
if (isEntityIdQuery) {
|
|
315
|
-
if (parsed.entityId !== sanitizedQuery) {
|
|
316
|
-
continue;
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
associations.push(parsed);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
} catch {
|
|
323
|
-
continue;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
if (fuzzyMatch && associations.length === 0 && !isEntityIdQuery) {
|
|
327
|
-
const fuzzyQueries = [
|
|
328
|
-
query.toLowerCase(),
|
|
329
|
-
`token`,
|
|
330
|
-
`account`,
|
|
331
|
-
entityType || ""
|
|
332
|
-
].filter(Boolean);
|
|
333
|
-
for (const fuzzyQuery of fuzzyQueries) {
|
|
334
|
-
if (fuzzyQuery === query.toLowerCase()) continue;
|
|
335
|
-
const fuzzyResults = this._contentStorage.searchMessages(fuzzyQuery, {
|
|
336
|
-
caseSensitive: false,
|
|
337
|
-
limit
|
|
338
|
-
});
|
|
339
|
-
for (const message of fuzzyResults) {
|
|
340
|
-
try {
|
|
341
|
-
const content = message.content;
|
|
342
|
-
if (content.includes(IS_ENTITY_ASSOCIATION_FLAG)) {
|
|
343
|
-
const parsed = JSON.parse(content);
|
|
344
|
-
if (parsed.entityId && parsed.entityName && parsed.entityType) {
|
|
345
|
-
if (entityType && parsed.entityType !== entityType) {
|
|
346
|
-
continue;
|
|
347
|
-
}
|
|
348
|
-
associations.push(parsed);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
} catch {
|
|
352
|
-
continue;
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
const uniqueAssociations = associations.filter(
|
|
358
|
-
(assoc, index, arr) => arr.findIndex((a) => a.entityId === assoc.entityId) === index
|
|
359
|
-
).sort(
|
|
360
|
-
(a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()
|
|
361
|
-
);
|
|
362
|
-
const results = uniqueAssociations.slice(0, safeLimit);
|
|
363
|
-
return results;
|
|
364
|
-
} catch (error) {
|
|
365
|
-
this.logger.error("Failed to resolve entity reference", {
|
|
366
|
-
query,
|
|
367
|
-
options,
|
|
368
|
-
error: error instanceof Error ? error.message : String(error)
|
|
369
|
-
});
|
|
370
|
-
return [];
|
|
371
|
-
}
|
|
161
|
+
isContentProcessingEnabled() {
|
|
162
|
+
return this.contentProcessor !== void 0;
|
|
372
163
|
}
|
|
373
164
|
/**
|
|
374
|
-
*
|
|
375
|
-
* @param entityType - Optional filter by entity type
|
|
376
|
-
* @returns Array of entity associations
|
|
165
|
+
* Analyze a response without processing it (for testing/debugging)
|
|
377
166
|
*/
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
if (entityType && (!sanitizedEntityType || sanitizedEntityType.length === 0)) {
|
|
382
|
-
return [];
|
|
383
|
-
}
|
|
384
|
-
const SEARCH_ANY_ENTITY = "entityId";
|
|
385
|
-
const searchQuery = sanitizedEntityType || SEARCH_ANY_ENTITY;
|
|
386
|
-
const searchResults = this._contentStorage.searchMessages(searchQuery, {
|
|
387
|
-
caseSensitive: false,
|
|
388
|
-
limit: 100
|
|
389
|
-
});
|
|
390
|
-
const associations = [];
|
|
391
|
-
for (const message of searchResults) {
|
|
392
|
-
try {
|
|
393
|
-
const content = message.content;
|
|
394
|
-
if (content.includes(IS_ENTITY_ASSOCIATION_FLAG)) {
|
|
395
|
-
const parsed = JSON.parse(content);
|
|
396
|
-
if (parsed.entityId && parsed.entityName && parsed.entityType) {
|
|
397
|
-
if (sanitizedEntityType && parsed.entityType !== sanitizedEntityType) {
|
|
398
|
-
continue;
|
|
399
|
-
}
|
|
400
|
-
if (parsed.createdAt && typeof parsed.createdAt === "string") {
|
|
401
|
-
parsed.createdAt = new Date(parsed.createdAt);
|
|
402
|
-
}
|
|
403
|
-
associations.push(parsed);
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
} catch (parseError) {
|
|
407
|
-
this.logger.warn("Failed to parse entity association from message", {
|
|
408
|
-
messageContent: typeof message.content === "string" ? message.content.substring(0, 100) : "non-string",
|
|
409
|
-
error: parseError instanceof Error ? parseError.message : String(parseError)
|
|
410
|
-
});
|
|
411
|
-
continue;
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
const results = associations.filter(
|
|
415
|
-
(assoc, index, arr) => arr.findIndex((a) => a.entityId === assoc.entityId) === index
|
|
416
|
-
).sort((a, b) => {
|
|
417
|
-
const getTime = (d) => d instanceof Date ? d.getTime() : new Date(d).getTime();
|
|
418
|
-
const aTime = getTime(a.createdAt);
|
|
419
|
-
const bTime = getTime(b.createdAt);
|
|
420
|
-
return bTime - aTime;
|
|
421
|
-
});
|
|
422
|
-
return results;
|
|
423
|
-
} catch (error) {
|
|
424
|
-
this.logger.error("Failed to get entity associations", {
|
|
425
|
-
entityType,
|
|
426
|
-
error: error instanceof Error ? error.message : String(error)
|
|
427
|
-
});
|
|
428
|
-
return [];
|
|
167
|
+
analyzeResponseContent(response) {
|
|
168
|
+
if (!this.contentProcessor) {
|
|
169
|
+
throw new Error("Content processing is not enabled");
|
|
429
170
|
}
|
|
171
|
+
return this.contentProcessor.analyzeResponse(response);
|
|
430
172
|
}
|
|
431
|
-
|
|
432
|
-
* Clean up resources and dispose of components
|
|
433
|
-
*/
|
|
434
|
-
dispose() {
|
|
435
|
-
this.memoryWindow.dispose();
|
|
436
|
-
this._contentStorage.dispose();
|
|
437
|
-
this.tokenCounter.dispose();
|
|
438
|
-
}
|
|
439
|
-
};
|
|
440
|
-
_SmartMemoryManager.DEFAULT_CONFIG = {
|
|
441
|
-
maxTokens: 8e3,
|
|
442
|
-
reserveTokens: 1e3,
|
|
443
|
-
modelName: "gpt-4o",
|
|
444
|
-
storageLimit: 1e3
|
|
445
|
-
};
|
|
446
|
-
let SmartMemoryManager = _SmartMemoryManager;
|
|
173
|
+
}
|
|
447
174
|
export {
|
|
448
|
-
|
|
175
|
+
MCPClientManager
|
|
449
176
|
};
|
|
450
177
|
//# sourceMappingURL=index15.js.map
|