@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.
Files changed (288) hide show
  1. package/cli/readme.md +181 -0
  2. package/dist/cjs/constants/entity-references.d.ts +18 -0
  3. package/dist/cjs/constants/form-priorities.d.ts +24 -0
  4. package/dist/cjs/constants/index.d.ts +4 -0
  5. package/dist/cjs/constants/messages.d.ts +19 -0
  6. package/dist/cjs/constants/test-constants.d.ts +42 -0
  7. package/dist/cjs/conversational-agent.d.ts +3 -8
  8. package/dist/{types/core/ToolRegistry.d.ts → cjs/core/tool-registry.d.ts} +11 -1
  9. package/dist/{types/execution/ExecutionPipeline.d.ts → cjs/execution/execution-pipeline.d.ts} +3 -3
  10. package/dist/cjs/forms/field-guidance-registry.d.ts +108 -0
  11. package/dist/cjs/forms/form-generator.d.ts +2 -7
  12. package/dist/cjs/forms/index.d.ts +3 -0
  13. package/dist/cjs/forms/types.d.ts +9 -1
  14. package/dist/cjs/index.cjs +1 -1
  15. package/dist/cjs/index.cjs.map +1 -1
  16. package/dist/cjs/index.d.ts +7 -12
  17. package/dist/cjs/langchain/external-tool-wrapper.d.ts +101 -0
  18. package/dist/{types/langchain/FormAwareAgentExecutor.d.ts → cjs/langchain/form-aware-agent-executor.d.ts} +19 -4
  19. package/dist/cjs/langchain/index.d.ts +3 -0
  20. package/dist/{types → cjs/langchain}/langchain-agent.d.ts +15 -7
  21. package/dist/cjs/mcp/adapters/index.d.ts +1 -0
  22. package/dist/cjs/mcp/adapters/langchain.d.ts +1 -1
  23. package/dist/{types/mcp/ContentProcessor.d.ts → cjs/mcp/content-processor.d.ts} +1 -1
  24. package/dist/cjs/mcp/index.d.ts +5 -0
  25. package/dist/{types/mcp/MCPClientManager.d.ts → cjs/mcp/mcp-client-manager.d.ts} +1 -1
  26. package/dist/cjs/memory/{ContentStorage.d.ts → content-storage.d.ts} +4 -4
  27. package/dist/cjs/memory/index.d.ts +5 -7
  28. package/dist/{types/memory/MemoryWindow.d.ts → cjs/memory/memory-window.d.ts} +1 -1
  29. package/dist/{types/memory/SmartMemoryManager.d.ts → cjs/memory/smart-memory-manager.d.ts} +1 -1
  30. package/dist/cjs/services/{ContentStoreManager.d.ts → content-store-manager.d.ts} +6 -6
  31. package/dist/cjs/services/context/resolution-context.d.ts +49 -0
  32. package/dist/cjs/services/entity-resolver.d.ts +58 -0
  33. package/dist/cjs/services/formatters/converters/index.d.ts +2 -0
  34. package/dist/cjs/services/formatters/converters/string-normalization-converter.d.ts +13 -0
  35. package/dist/cjs/services/formatters/converters/topic-id-to-hrl-converter.d.ts +17 -0
  36. package/dist/cjs/services/formatters/format-converter-registry.d.ts +66 -0
  37. package/dist/cjs/services/formatters/index.d.ts +3 -0
  38. package/dist/cjs/services/formatters/types.d.ts +29 -0
  39. package/dist/cjs/services/index.d.ts +3 -0
  40. package/dist/cjs/services/resolution/resolution-pipeline.d.ts +44 -0
  41. package/dist/cjs/tools/index.d.ts +1 -0
  42. package/dist/cjs/utils/index.d.ts +1 -0
  43. package/dist/esm/index.js +40 -13
  44. package/dist/esm/index.js.map +1 -1
  45. package/dist/esm/index10.js +669 -13
  46. package/dist/esm/index10.js.map +1 -1
  47. package/dist/esm/index11.js +310 -95
  48. package/dist/esm/index11.js.map +1 -1
  49. package/dist/esm/index12.js +130 -95
  50. package/dist/esm/index12.js.map +1 -1
  51. package/dist/esm/index13.js +262 -153
  52. package/dist/esm/index13.js.map +1 -1
  53. package/dist/esm/index14.js +100 -664
  54. package/dist/esm/index14.js.map +1 -1
  55. package/dist/esm/index15.js +135 -408
  56. package/dist/esm/index15.js.map +1 -1
  57. package/dist/esm/index16.js +240 -122
  58. package/dist/esm/index16.js.map +1 -1
  59. package/dist/esm/index17.js +147 -135
  60. package/dist/esm/index17.js.map +1 -1
  61. package/dist/esm/index18.js +376 -533
  62. package/dist/esm/index18.js.map +1 -1
  63. package/dist/esm/index19.js +87 -214
  64. package/dist/esm/index19.js.map +1 -1
  65. package/dist/esm/index2.js +21 -4
  66. package/dist/esm/index2.js.map +1 -1
  67. package/dist/esm/index20.js +158 -92
  68. package/dist/esm/index20.js.map +1 -1
  69. package/dist/esm/index21.js +717 -44
  70. package/dist/esm/index21.js.map +1 -1
  71. package/dist/esm/index22.js +58 -96
  72. package/dist/esm/index22.js.map +1 -1
  73. package/dist/esm/index23.js +324 -34
  74. package/dist/esm/index23.js.map +1 -1
  75. package/dist/esm/index24.js +125 -712
  76. package/dist/esm/index24.js.map +1 -1
  77. package/dist/esm/index25.js +113 -133
  78. package/dist/esm/index25.js.map +1 -1
  79. package/dist/esm/index26.js +18 -152
  80. package/dist/esm/index26.js.map +1 -1
  81. package/dist/esm/index27.js +14 -210
  82. package/dist/esm/index27.js.map +1 -1
  83. package/dist/esm/index28.js +70 -173
  84. package/dist/esm/index28.js.map +1 -1
  85. package/dist/esm/index29.js +882 -220
  86. package/dist/esm/index29.js.map +1 -1
  87. package/dist/esm/index30.js +218 -126
  88. package/dist/esm/index30.js.map +1 -1
  89. package/dist/esm/index31.js +1258 -44
  90. package/dist/esm/index31.js.map +1 -1
  91. package/dist/esm/index32.js +132 -24
  92. package/dist/esm/index32.js.map +1 -1
  93. package/dist/esm/index33.js +104 -82
  94. package/dist/esm/index33.js.map +1 -1
  95. package/dist/esm/index34.js +43 -239
  96. package/dist/esm/index34.js.map +1 -1
  97. package/dist/esm/index35.js +106 -0
  98. package/dist/esm/index35.js.map +1 -0
  99. package/dist/esm/index36.js +24 -0
  100. package/dist/esm/index36.js.map +1 -0
  101. package/dist/esm/index37.js +8 -0
  102. package/dist/esm/index37.js.map +1 -0
  103. package/dist/esm/index38.js +15 -0
  104. package/dist/esm/index38.js.map +1 -0
  105. package/dist/esm/index39.js +258 -0
  106. package/dist/esm/index39.js.map +1 -0
  107. package/dist/esm/index40.js +187 -0
  108. package/dist/esm/index40.js.map +1 -0
  109. package/dist/esm/index41.js +30 -0
  110. package/dist/esm/index41.js.map +1 -0
  111. package/dist/esm/index42.js +10 -0
  112. package/dist/esm/index42.js.map +1 -0
  113. package/dist/esm/index43.js +95 -0
  114. package/dist/esm/index43.js.map +1 -0
  115. package/dist/esm/index5.js +2 -2
  116. package/dist/esm/index5.js.map +1 -1
  117. package/dist/esm/index6.js +44 -67
  118. package/dist/esm/index6.js.map +1 -1
  119. package/dist/esm/index7.js +9 -0
  120. package/dist/esm/index7.js.map +1 -1
  121. package/dist/esm/index8.js +13 -1095
  122. package/dist/esm/index8.js.map +1 -1
  123. package/dist/esm/index9.js +17 -13
  124. package/dist/esm/index9.js.map +1 -1
  125. package/dist/types/constants/entity-references.d.ts +18 -0
  126. package/dist/types/constants/form-priorities.d.ts +24 -0
  127. package/dist/types/constants/index.d.ts +4 -0
  128. package/dist/types/constants/messages.d.ts +19 -0
  129. package/dist/types/constants/test-constants.d.ts +42 -0
  130. package/dist/types/conversational-agent.d.ts +3 -8
  131. package/dist/{cjs/core/ToolRegistry.d.ts → types/core/tool-registry.d.ts} +11 -1
  132. package/dist/{cjs/execution/ExecutionPipeline.d.ts → types/execution/execution-pipeline.d.ts} +3 -3
  133. package/dist/types/forms/field-guidance-registry.d.ts +108 -0
  134. package/dist/types/forms/form-generator.d.ts +2 -7
  135. package/dist/types/forms/index.d.ts +3 -0
  136. package/dist/types/forms/types.d.ts +9 -1
  137. package/dist/types/index.d.ts +7 -12
  138. package/dist/types/langchain/external-tool-wrapper.d.ts +101 -0
  139. package/dist/{cjs/langchain/FormAwareAgentExecutor.d.ts → types/langchain/form-aware-agent-executor.d.ts} +19 -4
  140. package/dist/types/langchain/index.d.ts +3 -0
  141. package/dist/{cjs → types/langchain}/langchain-agent.d.ts +15 -7
  142. package/dist/types/mcp/adapters/index.d.ts +1 -0
  143. package/dist/types/mcp/adapters/langchain.d.ts +1 -1
  144. package/dist/{cjs/mcp/ContentProcessor.d.ts → types/mcp/content-processor.d.ts} +1 -1
  145. package/dist/types/mcp/index.d.ts +5 -0
  146. package/dist/{cjs/mcp/MCPClientManager.d.ts → types/mcp/mcp-client-manager.d.ts} +1 -1
  147. package/dist/types/memory/{ContentStorage.d.ts → content-storage.d.ts} +4 -4
  148. package/dist/types/memory/index.d.ts +5 -7
  149. package/dist/{cjs/memory/MemoryWindow.d.ts → types/memory/memory-window.d.ts} +1 -1
  150. package/dist/{cjs/memory/SmartMemoryManager.d.ts → types/memory/smart-memory-manager.d.ts} +1 -1
  151. package/dist/types/services/{ContentStoreManager.d.ts → content-store-manager.d.ts} +6 -6
  152. package/dist/types/services/context/resolution-context.d.ts +49 -0
  153. package/dist/types/services/entity-resolver.d.ts +58 -0
  154. package/dist/types/services/formatters/converters/index.d.ts +2 -0
  155. package/dist/types/services/formatters/converters/string-normalization-converter.d.ts +13 -0
  156. package/dist/types/services/formatters/converters/topic-id-to-hrl-converter.d.ts +17 -0
  157. package/dist/types/services/formatters/format-converter-registry.d.ts +66 -0
  158. package/dist/types/services/formatters/index.d.ts +3 -0
  159. package/dist/types/services/formatters/types.d.ts +29 -0
  160. package/dist/types/services/index.d.ts +3 -0
  161. package/dist/types/services/resolution/resolution-pipeline.d.ts +44 -0
  162. package/dist/types/tools/index.d.ts +1 -0
  163. package/dist/types/utils/index.d.ts +1 -0
  164. package/package.json +30 -27
  165. package/src/agent-factory.ts +1 -1
  166. package/src/base-agent.ts +9 -0
  167. package/src/config/system-message.ts +2 -15
  168. package/src/constants/entity-references.ts +23 -0
  169. package/src/constants/form-priorities.ts +25 -0
  170. package/src/constants/index.ts +4 -0
  171. package/src/constants/messages.ts +20 -0
  172. package/src/constants/test-constants.ts +49 -0
  173. package/src/conversational-agent.ts +42 -69
  174. package/src/core/{ToolRegistry.ts → tool-registry.ts} +71 -1
  175. package/src/examples/external-tool-wrapper-example.ts +56 -0
  176. package/src/execution/{ExecutionPipeline.ts → execution-pipeline.ts} +3 -3
  177. package/src/forms/field-guidance-registry.ts +415 -0
  178. package/src/forms/field-type-registry.ts +49 -48
  179. package/src/forms/{FormEngine.ts → form-engine.ts} +66 -43
  180. package/src/forms/form-generator.ts +91 -17
  181. package/src/forms/index.ts +4 -1
  182. package/src/forms/types.ts +9 -1
  183. package/src/index.ts +7 -37
  184. package/src/langchain/external-tool-wrapper.ts +90 -0
  185. package/src/langchain/{FormAwareAgentExecutor.ts → form-aware-agent-executor.ts} +615 -231
  186. package/src/langchain/{FormValidatingToolWrapper.ts → form-validating-tool-wrapper.ts} +2 -1
  187. package/src/langchain/index.ts +3 -0
  188. package/src/{langchain-agent.ts → langchain/langchain-agent.ts} +389 -113
  189. package/src/mcp/adapters/index.ts +1 -0
  190. package/src/mcp/adapters/langchain.ts +27 -18
  191. package/src/mcp/{ContentProcessor.ts → content-processor.ts} +71 -47
  192. package/src/mcp/index.ts +5 -0
  193. package/src/mcp/{MCPClientManager.ts → mcp-client-manager.ts} +2 -2
  194. package/src/memory/{ContentStorage.ts → content-storage.ts} +263 -167
  195. package/src/memory/index.ts +5 -8
  196. package/src/memory/{MemoryWindow.ts → memory-window.ts} +47 -24
  197. package/src/memory/{SmartMemoryManager.ts → smart-memory-manager.ts} +49 -22
  198. package/src/plugins/hbar/HbarPlugin.ts +1 -1
  199. package/src/plugins/hcs-10/HCS10Plugin.ts +46 -28
  200. package/src/scripts/test-external-tool-wrapper.ts +6 -6
  201. package/src/scripts/test-inscribe-form-generation.ts +22 -21
  202. package/src/scripts/test-inscribe-wrapper-verification.ts +5 -4
  203. package/src/services/{ContentStoreManager.ts → content-store-manager.ts} +75 -33
  204. package/src/services/context/resolution-context.ts +80 -0
  205. package/src/services/entity-resolver.ts +425 -0
  206. package/src/services/formatters/converters/index.ts +2 -0
  207. package/src/services/formatters/converters/string-normalization-converter.ts +106 -0
  208. package/src/services/formatters/converters/topic-id-to-hrl-converter.ts +25 -0
  209. package/src/services/formatters/format-converter-registry.ts +229 -0
  210. package/src/services/formatters/index.ts +3 -0
  211. package/src/services/formatters/types.ts +31 -0
  212. package/src/services/index.ts +3 -0
  213. package/src/services/resolution/resolution-pipeline.ts +106 -0
  214. package/src/tools/index.ts +1 -0
  215. package/src/types/content-reference.ts +87 -60
  216. package/src/utils/index.ts +1 -0
  217. package/cli/dist/CLIApp.d.ts +0 -9
  218. package/cli/dist/CLIApp.js +0 -127
  219. package/cli/dist/LocalConversationalAgent.d.ts +0 -37
  220. package/cli/dist/LocalConversationalAgent.js +0 -58
  221. package/cli/dist/app.d.ts +0 -16
  222. package/cli/dist/app.js +0 -13
  223. package/cli/dist/cli.d.ts +0 -2
  224. package/cli/dist/cli.js +0 -51
  225. package/cli/dist/components/AppContainer.d.ts +0 -16
  226. package/cli/dist/components/AppContainer.js +0 -24
  227. package/cli/dist/components/AppScreens.d.ts +0 -2
  228. package/cli/dist/components/AppScreens.js +0 -259
  229. package/cli/dist/components/ChatScreen.d.ts +0 -15
  230. package/cli/dist/components/ChatScreen.js +0 -39
  231. package/cli/dist/components/DebugLoadingScreen.d.ts +0 -5
  232. package/cli/dist/components/DebugLoadingScreen.js +0 -31
  233. package/cli/dist/components/LoadingScreen.d.ts +0 -2
  234. package/cli/dist/components/LoadingScreen.js +0 -16
  235. package/cli/dist/components/LoadingScreenDebug.d.ts +0 -5
  236. package/cli/dist/components/LoadingScreenDebug.js +0 -27
  237. package/cli/dist/components/MCPConfigScreen.d.ts +0 -28
  238. package/cli/dist/components/MCPConfigScreen.js +0 -168
  239. package/cli/dist/components/ScreenRouter.d.ts +0 -12
  240. package/cli/dist/components/ScreenRouter.js +0 -22
  241. package/cli/dist/components/SetupScreen.d.ts +0 -15
  242. package/cli/dist/components/SetupScreen.js +0 -65
  243. package/cli/dist/components/SingleLoadingScreen.d.ts +0 -5
  244. package/cli/dist/components/SingleLoadingScreen.js +0 -27
  245. package/cli/dist/components/StatusBadge.d.ts +0 -7
  246. package/cli/dist/components/StatusBadge.js +0 -28
  247. package/cli/dist/components/TerminalWindow.d.ts +0 -8
  248. package/cli/dist/components/TerminalWindow.js +0 -24
  249. package/cli/dist/components/WelcomeScreen.d.ts +0 -11
  250. package/cli/dist/components/WelcomeScreen.js +0 -47
  251. package/cli/dist/context/AppContext.d.ts +0 -68
  252. package/cli/dist/context/AppContext.js +0 -363
  253. package/cli/dist/hooks/useInitializeAgent.d.ts +0 -19
  254. package/cli/dist/hooks/useInitializeAgent.js +0 -28
  255. package/cli/dist/hooks/useStableState.d.ts +0 -38
  256. package/cli/dist/hooks/useStableState.js +0 -68
  257. package/cli/dist/managers/AgentManager.d.ts +0 -57
  258. package/cli/dist/managers/AgentManager.js +0 -119
  259. package/cli/dist/managers/ConfigManager.d.ts +0 -53
  260. package/cli/dist/managers/ConfigManager.js +0 -173
  261. package/cli/dist/types.d.ts +0 -31
  262. package/cli/dist/types.js +0 -19
  263. package/dist/cjs/context/ReferenceContextManager.d.ts +0 -84
  264. package/dist/cjs/context/ReferenceResponseProcessor.d.ts +0 -76
  265. package/dist/cjs/services/EntityResolver.d.ts +0 -26
  266. package/dist/types/context/ReferenceContextManager.d.ts +0 -84
  267. package/dist/types/context/ReferenceResponseProcessor.d.ts +0 -76
  268. package/dist/types/services/EntityResolver.d.ts +0 -26
  269. package/src/context/ReferenceContextManager.ts +0 -350
  270. package/src/context/ReferenceResponseProcessor.ts +0 -295
  271. package/src/scripts/test-hedera-kit-wrapper.ts +0 -265
  272. package/src/services/EntityResolver.ts +0 -128
  273. /package/dist/cjs/forms/{FormEngine.d.ts → form-engine.d.ts} +0 -0
  274. /package/dist/cjs/langchain/{FormValidatingToolWrapper.d.ts → form-validating-tool-wrapper.d.ts} +0 -0
  275. /package/dist/cjs/memory/{ReferenceIdGenerator.d.ts → reference-id-generator.d.ts} +0 -0
  276. /package/dist/cjs/memory/{TokenCounter.d.ts → token-counter.d.ts} +0 -0
  277. /package/dist/cjs/tools/{EntityResolverTool.d.ts → entity-resolver-tool.d.ts} +0 -0
  278. /package/dist/cjs/utils/{ResponseFormatter.d.ts → response-formatter.d.ts} +0 -0
  279. /package/dist/types/forms/{FormEngine.d.ts → form-engine.d.ts} +0 -0
  280. /package/dist/types/langchain/{FormValidatingToolWrapper.d.ts → form-validating-tool-wrapper.d.ts} +0 -0
  281. /package/dist/types/memory/{ReferenceIdGenerator.d.ts → reference-id-generator.d.ts} +0 -0
  282. /package/dist/types/memory/{TokenCounter.d.ts → token-counter.d.ts} +0 -0
  283. /package/dist/types/tools/{EntityResolverTool.d.ts → entity-resolver-tool.d.ts} +0 -0
  284. /package/dist/types/utils/{ResponseFormatter.d.ts → response-formatter.d.ts} +0 -0
  285. /package/src/memory/{ReferenceIdGenerator.ts → reference-id-generator.ts} +0 -0
  286. /package/src/memory/{TokenCounter.ts → token-counter.ts} +0 -0
  287. /package/src/tools/{EntityResolverTool.ts → entity-resolver-tool.ts} +0 -0
  288. /package/src/utils/{ResponseFormatter.ts → response-formatter.ts} +0 -0
@@ -1,450 +1,177 @@
1
- import { Logger } from "@hashgraphonline/standards-sdk";
2
- import { MemoryWindow } from "./index13.js";
3
- import { ContentStorage } from "./index14.js";
4
- import { TokenCounter } from "./index12.js";
5
- const IS_ENTITY_ASSOCIATION_FLAG = '"isEntityAssociation":true';
6
- const _SmartMemoryManager = class _SmartMemoryManager {
7
- constructor(config = {}) {
8
- this.config = { ..._SmartMemoryManager.DEFAULT_CONFIG, ...config };
9
- this.logger = new Logger({ module: "SmartMemoryManager" });
10
- this.tokenCounter = new TokenCounter(this.config.modelName);
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
- * Get all active messages from the memory window
38
- * @returns Array of active messages in chronological order
14
+ * Connect to an MCP server and discover its tools
39
15
  */
40
- getMessages() {
41
- return this.memoryWindow.getMessages();
42
- }
43
- /**
44
- * Clear active memory window
45
- * @param clearStorage - Whether to also clear the content storage (default: false)
46
- */
47
- clear(clearStorage = false) {
48
- this.memoryWindow.clear();
49
- if (clearStorage) {
50
- this._contentStorage.clear();
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
- * Set the system prompt for the memory window
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
- searchHistory(query, options = {}) {
74
- return this._contentStorage.searchMessages(query, options);
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
- if (newConfig.storageLimit !== void 0) {
142
- this._contentStorage.updateStorageLimit(this.config.storageLimit);
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
- * Get current configuration
147
- * @returns Current configuration settings
102
+ * Disconnect all MCP servers
148
103
  */
149
- getConfig() {
150
- return { ...this.config };
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 messages from storage within a time range
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
- getHistoryFromTimeRange(startTime, endTime) {
159
- return this._contentStorage.getMessagesFromTimeRange(startTime, endTime);
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 messages from storage by message type
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
- getHistoryByType(messageType, limit) {
168
- return this._contentStorage.getMessagesByType(messageType, limit);
129
+ getServerTools(serverName) {
130
+ return this.tools.get(serverName) || [];
169
131
  }
170
132
  /**
171
- * Get recent messages from storage within the last N minutes
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
- getRecentHistoryByTime(minutes) {
176
- return this._contentStorage.getRecentMessagesByTime(minutes);
135
+ isServerConnected(serverName) {
136
+ return this.clients.has(serverName);
177
137
  }
178
138
  /**
179
- * Export the current state for persistence or analysis
180
- * @returns Serializable representation of memory state
139
+ * Get list of connected server names
181
140
  */
182
- exportState() {
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
- * Get a summary of conversation context for external use
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
- getContextSummary(includeStoredContext = false) {
202
- const activeMessages = this.getMessages();
203
- const summary = {
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
- * Perform maintenance operations
221
- * Optimizes storage and cleans up resources
152
+ * Disable content processing
222
153
  */
223
- performMaintenance() {
154
+ disableContentProcessing() {
155
+ delete this.contentProcessor;
156
+ this.logger.info("Content processing disabled for MCP responses");
224
157
  }
225
158
  /**
226
- * Store an entity association for later resolution
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
- storeEntityAssociation(entityId, entityName, entityType, transactionId) {
233
- try {
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
- * Get all entity associations, optionally filtered by type
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
- getEntityAssociations(entityType) {
379
- try {
380
- const sanitizedEntityType = entityType ? entityType.trim().toLowerCase() : void 0;
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
- SmartMemoryManager
175
+ MCPClientManager
449
176
  };
450
177
  //# sourceMappingURL=index15.js.map