@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,668 +1,104 @@
1
- import { ReferenceIdGenerator } from "./index31.js";
2
- import { DEFAULT_CONTENT_REFERENCE_CONFIG, ContentReferenceError } from "./index32.js";
3
- const _ContentStorage = class _ContentStorage {
4
- constructor(maxStorage = _ContentStorage.DEFAULT_MAX_STORAGE, referenceConfig) {
5
- this.messages = [];
6
- this.idCounter = 0;
7
- this.contentStore = /* @__PURE__ */ new Map();
8
- this.maxStorage = maxStorage;
9
- this.referenceConfig = { ...DEFAULT_CONTENT_REFERENCE_CONFIG, ...referenceConfig };
10
- this.referenceStats = {
11
- activeReferences: 0,
12
- totalStorageBytes: 0,
13
- recentlyCleanedUp: 0,
14
- totalResolutions: 0,
15
- failedResolutions: 0,
16
- averageContentSize: 0,
17
- storageUtilization: 0,
18
- performanceMetrics: {
19
- averageCreationTimeMs: 0,
20
- averageResolutionTimeMs: 0,
21
- averageCleanupTimeMs: 0,
22
- creationTimes: [],
23
- resolutionTimes: [],
24
- cleanupTimes: []
25
- }
26
- };
27
- if (this.referenceConfig.enableAutoCleanup) {
28
- this.startReferenceCleanupTimer();
29
- }
30
- }
31
- /**
32
- * Store messages in the content storage
33
- * Automatically drops oldest messages if storage limit is exceeded
34
- * @param messages - Messages to store
35
- * @returns Result indicating how many messages were stored and dropped
36
- */
37
- storeMessages(messages) {
38
- if (messages.length === 0) {
39
- return { stored: 0, dropped: 0 };
40
- }
41
- const now = /* @__PURE__ */ new Date();
42
- let dropped = 0;
43
- const storedMessages = messages.map((message) => ({
44
- message,
45
- storedAt: now,
46
- id: this.generateId()
47
- }));
48
- this.messages.push(...storedMessages);
49
- while (this.messages.length > this.maxStorage) {
50
- this.messages.shift();
51
- dropped++;
52
- }
53
- return {
54
- stored: storedMessages.length,
55
- dropped
56
- };
57
- }
58
- /**
59
- * Get the most recent messages from storage
60
- * @param count - Number of recent messages to retrieve
61
- * @returns Array of recent messages in chronological order
62
- */
63
- getRecentMessages(count) {
64
- if (count <= 0 || this.messages.length === 0) {
65
- return [];
66
- }
67
- const startIndex = Math.max(0, this.messages.length - count);
68
- return this.messages.slice(startIndex).map((stored) => stored.message);
69
- }
70
- /**
71
- * Search for messages containing specific text or patterns
72
- * @param query - Search term or regex pattern
73
- * @param options - Search configuration options
74
- * @returns Array of matching messages
75
- */
76
- searchMessages(query, options = {}) {
77
- if (!query || this.messages.length === 0) {
78
- return [];
79
- }
80
- const {
81
- caseSensitive = false,
82
- limit,
83
- useRegex = false
84
- } = options;
85
- let matches = [];
86
- if (useRegex) {
87
- try {
88
- const regex = new RegExp(query, caseSensitive ? "g" : "gi");
89
- matches = this.messages.filter((stored) => regex.test(stored.message.content)).map((stored) => stored.message);
90
- } catch {
91
- return [];
92
- }
93
- } else {
94
- const searchTerm = caseSensitive ? query : query.toLowerCase();
95
- matches = this.messages.filter((stored) => {
96
- const content = stored.message.content;
97
- const searchContent = caseSensitive ? content : content.toLowerCase();
98
- return searchContent.includes(searchTerm);
99
- }).map((stored) => stored.message);
100
- }
101
- return limit ? matches.slice(0, limit) : matches;
102
- }
103
- /**
104
- * Get messages from a specific time range
105
- * @param startTime - Start of time range (inclusive)
106
- * @param endTime - End of time range (inclusive)
107
- * @returns Array of messages within the time range
108
- */
109
- getMessagesFromTimeRange(startTime, endTime) {
110
- if (startTime > endTime || this.messages.length === 0) {
111
- return [];
112
- }
113
- return this.messages.filter(
114
- (stored) => stored.storedAt >= startTime && stored.storedAt <= endTime
115
- ).map((stored) => stored.message);
116
- }
117
- /**
118
- * Get storage statistics and usage information
119
- * @returns Current storage statistics
120
- */
121
- getStorageStats() {
122
- const totalMessages = this.messages.length;
123
- const usagePercentage = totalMessages > 0 ? Math.round(totalMessages / this.maxStorage * 100) : 0;
124
- let oldestMessageTime;
125
- let newestMessageTime;
126
- if (totalMessages > 0) {
127
- oldestMessageTime = this.messages[0].storedAt;
128
- newestMessageTime = this.messages[totalMessages - 1].storedAt;
129
- }
130
- return {
131
- totalMessages,
132
- maxStorageLimit: this.maxStorage,
133
- usagePercentage,
134
- oldestMessageTime,
135
- newestMessageTime
136
- };
137
- }
138
- /**
139
- * Clear all stored messages
140
- */
141
- clear() {
142
- this.messages = [];
143
- this.idCounter = 0;
144
- }
145
- /**
146
- * Get total number of stored messages
147
- * @returns Number of messages currently in storage
148
- */
149
- getTotalStoredMessages() {
150
- return this.messages.length;
151
- }
152
- /**
153
- * Update the maximum storage limit
154
- * @param newLimit - New maximum storage limit
155
- */
156
- updateStorageLimit(newLimit) {
157
- if (newLimit <= 0) {
158
- throw new Error("Storage limit must be greater than 0");
159
- }
160
- this.maxStorage = newLimit;
161
- while (this.messages.length > this.maxStorage) {
162
- this.messages.shift();
163
- }
164
- }
165
- /**
166
- * Get messages by message type
167
- * @param messageType - Type of messages to retrieve ('human', 'ai', 'system', etc.)
168
- * @param limit - Maximum number of messages to return
169
- * @returns Array of messages of the specified type
170
- */
171
- getMessagesByType(messageType, limit) {
172
- const filtered = this.messages.filter((stored) => stored.message._getType() === messageType).map((stored) => stored.message);
173
- return limit ? filtered.slice(0, limit) : filtered;
174
- }
175
- /**
176
- * Get the current storage configuration
177
- * @returns Storage configuration object
178
- */
179
- getConfig() {
180
- return {
181
- maxStorage: this.maxStorage,
182
- currentUsage: this.messages.length,
183
- utilizationPercentage: this.messages.length / this.maxStorage * 100
184
- };
185
- }
186
- /**
187
- * Generate a unique ID for stored messages
188
- * @returns Unique string identifier
189
- */
190
- generateId() {
191
- return `msg_${++this.idCounter}_${Date.now()}`;
192
- }
193
- /**
194
- * Get messages stored within the last N minutes
195
- * @param minutes - Number of minutes to look back
196
- * @returns Array of messages from the last N minutes
197
- */
198
- getRecentMessagesByTime(minutes) {
199
- if (minutes <= 0 || this.messages.length === 0) {
200
- return [];
201
- }
202
- const cutoffTime = new Date(Date.now() - minutes * 60 * 1e3);
203
- return this.messages.filter((stored) => stored.storedAt >= cutoffTime).map((stored) => stored.message);
204
- }
205
- /**
206
- * Export messages to a JSON-serializable format
207
- * @returns Serializable representation of stored messages
208
- */
209
- exportMessages() {
210
- return this.messages.map((stored) => ({
211
- content: stored.message.content,
212
- type: stored.message._getType(),
213
- storedAt: stored.storedAt.toISOString(),
214
- id: stored.id
215
- }));
216
- }
217
- /**
218
- * Determine if content should be stored as a reference based on size
219
- */
220
- shouldUseReference(content) {
221
- const size = Buffer.isBuffer(content) ? content.length : Buffer.byteLength(content, "utf8");
222
- return size > this.referenceConfig.sizeThresholdBytes;
223
- }
224
- /**
225
- * Store content and return a reference if it exceeds the size threshold
226
- * Otherwise returns null to indicate direct content should be used
227
- *
228
- * Special case: Image files are ALWAYS stored as references regardless of size
229
- * because they need special handling for inscription tools
230
- */
231
- async storeContentIfLarge(content, metadata) {
232
- const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content, "utf8");
233
- const isImageFile = this.isImageContent(metadata.mimeType, metadata.fileName);
234
- if (!isImageFile && !this.shouldUseReference(buffer)) {
235
- return null;
236
- }
237
- const storeMetadata = {
238
- contentType: metadata.contentType || this.detectContentType(buffer, metadata.mimeType),
239
- sizeBytes: buffer.length,
240
- source: metadata.source,
241
- tags: []
242
- };
243
- if (metadata.mimeType !== void 0) {
244
- storeMetadata.mimeType = metadata.mimeType;
245
- }
246
- if (metadata.mcpToolName !== void 0) {
247
- storeMetadata.mcpToolName = metadata.mcpToolName;
248
- }
249
- if (metadata.fileName !== void 0) {
250
- storeMetadata.fileName = metadata.fileName;
251
- }
252
- if (metadata.tags !== void 0) {
253
- storeMetadata.tags = metadata.tags;
254
- }
255
- if (metadata.customMetadata !== void 0) {
256
- storeMetadata.customMetadata = metadata.customMetadata;
257
- }
258
- return await this.storeContent(buffer, storeMetadata);
259
- }
260
- /**
261
- * Store content and return a reference (implements ContentReferenceStore)
262
- */
263
- async storeContent(content, metadata) {
264
- const startTime = Date.now();
265
- try {
266
- const now = /* @__PURE__ */ new Date();
267
- const referenceId = ReferenceIdGenerator.generateId(content);
268
- const fullMetadata = {
269
- ...metadata,
270
- createdAt: now,
271
- lastAccessedAt: now,
272
- accessCount: 0
273
- };
274
- const storedContent = {
275
- content,
276
- metadata: fullMetadata,
277
- state: "active"
278
- };
279
- const expirationTime = this.calculateExpirationTime(metadata.source);
280
- if (expirationTime !== void 0) {
281
- storedContent.expiresAt = expirationTime;
282
- }
283
- this.contentStore.set(referenceId, storedContent);
284
- this.updateStatsAfterStore(content.length);
285
- await this.enforceReferenceStorageLimits();
286
- const preview = this.createContentPreview(content, fullMetadata.contentType);
287
- const referenceMetadata = {
288
- contentType: fullMetadata.contentType,
289
- sizeBytes: fullMetadata.sizeBytes,
290
- source: fullMetadata.source
291
- };
292
- if (fullMetadata.fileName !== void 0) {
293
- referenceMetadata.fileName = fullMetadata.fileName;
294
- }
295
- if (fullMetadata.mimeType !== void 0) {
296
- referenceMetadata.mimeType = fullMetadata.mimeType;
297
- }
298
- const reference = {
299
- referenceId,
300
- state: "active",
301
- preview,
302
- metadata: referenceMetadata,
303
- createdAt: now,
304
- format: "ref://{id}"
305
- };
306
- const duration = Date.now() - startTime;
307
- this.recordPerformanceMetric("creation", duration);
308
- return reference;
309
- } catch (error) {
310
- const duration = Date.now() - startTime;
311
- this.recordPerformanceMetric("creation", duration);
312
- throw new ContentReferenceError(
313
- `Failed to store content: ${error instanceof Error ? error.message : "Unknown error"}`,
314
- "system_error",
315
- void 0,
316
- ["Try again", "Check storage limits", "Contact administrator"]
317
- );
318
- }
319
- }
320
- /**
321
- * Resolve a reference to its content (implements ContentReferenceStore)
322
- */
323
- async resolveReference(referenceId) {
324
- const startTime = Date.now();
325
- try {
326
- if (!ReferenceIdGenerator.isValidReferenceId(referenceId)) {
327
- this.referenceStats.failedResolutions++;
328
- return {
329
- success: false,
330
- error: "Invalid reference ID format",
331
- errorType: "not_found",
332
- suggestedActions: ["Check the reference ID format", "Ensure the reference ID is complete"]
333
- };
334
- }
335
- const storedContent = this.contentStore.get(referenceId);
336
- if (!storedContent) {
337
- this.referenceStats.failedResolutions++;
338
- return {
339
- success: false,
340
- error: "Reference not found",
341
- errorType: "not_found",
342
- suggestedActions: ["Verify the reference ID", "Check if the content has expired", "Request fresh content"]
343
- };
344
- }
345
- if (storedContent.expiresAt && storedContent.expiresAt < /* @__PURE__ */ new Date()) {
346
- storedContent.state = "expired";
347
- this.referenceStats.failedResolutions++;
348
- return {
349
- success: false,
350
- error: "Reference has expired",
351
- errorType: "expired",
352
- suggestedActions: ["Request fresh content", "Use alternative content source"]
353
- };
354
- }
355
- if (storedContent.state !== "active") {
356
- this.referenceStats.failedResolutions++;
357
- return {
358
- success: false,
359
- error: `Reference is ${storedContent.state}`,
360
- errorType: storedContent.state === "expired" ? "expired" : "corrupted",
361
- suggestedActions: ["Request fresh content", "Check reference validity"]
362
- };
363
- }
364
- storedContent.metadata.lastAccessedAt = /* @__PURE__ */ new Date();
365
- storedContent.metadata.accessCount++;
366
- this.referenceStats.totalResolutions++;
367
- const duration = Date.now() - startTime;
368
- this.recordPerformanceMetric("resolution", duration);
369
- return {
370
- success: true,
371
- content: storedContent.content,
372
- metadata: storedContent.metadata
373
- };
374
- } catch (error) {
375
- const duration = Date.now() - startTime;
376
- this.recordPerformanceMetric("resolution", duration);
377
- this.referenceStats.failedResolutions++;
378
- return {
379
- success: false,
380
- error: `System error resolving reference: ${error instanceof Error ? error.message : "Unknown error"}`,
381
- errorType: "system_error",
382
- suggestedActions: ["Try again", "Contact administrator"]
383
- };
384
- }
385
- }
386
- /**
387
- * Check if a reference exists and is valid
388
- */
389
- async hasReference(referenceId) {
390
- if (!ReferenceIdGenerator.isValidReferenceId(referenceId)) {
391
- return false;
392
- }
393
- const storedContent = this.contentStore.get(referenceId);
394
- if (!storedContent) {
395
- return false;
396
- }
397
- if (storedContent.expiresAt && storedContent.expiresAt < /* @__PURE__ */ new Date()) {
398
- storedContent.state = "expired";
399
- return false;
400
- }
401
- return storedContent.state === "active";
402
- }
403
- /**
404
- * Mark a reference for cleanup
405
- */
406
- async cleanupReference(referenceId) {
407
- const storedContent = this.contentStore.get(referenceId);
408
- if (!storedContent) {
409
- return false;
410
- }
411
- this.referenceStats.totalStorageBytes -= storedContent.content.length;
412
- this.referenceStats.activeReferences--;
413
- this.referenceStats.recentlyCleanedUp++;
414
- this.contentStore.delete(referenceId);
415
- return true;
416
- }
417
- /**
418
- * Get current reference storage statistics (implements ContentReferenceStore)
419
- */
420
- async getStats() {
421
- this.updateReferenceStorageStats();
422
- return {
423
- ...this.referenceStats,
424
- performanceMetrics: {
425
- averageCreationTimeMs: this.calculateAverage(this.referenceStats.performanceMetrics.creationTimes),
426
- averageResolutionTimeMs: this.calculateAverage(this.referenceStats.performanceMetrics.resolutionTimes),
427
- averageCleanupTimeMs: this.calculateAverage(this.referenceStats.performanceMetrics.cleanupTimes)
428
- }
429
- };
430
- }
431
- /**
432
- * Update reference configuration
433
- */
434
- async updateConfig(config) {
435
- this.referenceConfig = { ...this.referenceConfig, ...config };
436
- if (this.cleanupTimer) {
437
- clearInterval(this.cleanupTimer);
438
- delete this.cleanupTimer;
439
- }
440
- if (this.referenceConfig.enableAutoCleanup) {
441
- this.startReferenceCleanupTimer();
442
- }
443
- }
444
- /**
445
- * Perform cleanup based on current policies (implements ContentReferenceStore)
446
- */
447
- async performCleanup() {
448
- const startTime = Date.now();
449
- const errors = [];
450
- let cleanedUp = 0;
451
- try {
452
- const now = /* @__PURE__ */ new Date();
453
- const toCleanup = [];
454
- for (const [referenceId, storedContent] of this.contentStore.entries()) {
455
- let shouldCleanup = false;
456
- if (storedContent.expiresAt && storedContent.expiresAt < now) {
457
- shouldCleanup = true;
458
- storedContent.state = "expired";
459
- }
460
- const ageMs = now.getTime() - storedContent.metadata.createdAt.getTime();
461
- const policy = this.getCleanupPolicy(storedContent.metadata.source);
462
- if (ageMs > policy.maxAgeMs) {
463
- shouldCleanup = true;
464
- }
465
- if (storedContent.state === "cleanup_pending") {
466
- shouldCleanup = true;
467
- }
468
- if (shouldCleanup) {
469
- toCleanup.push(referenceId);
470
- }
471
- }
472
- toCleanup.sort((a, b) => {
473
- const aContent = this.contentStore.get(a);
474
- const bContent = this.contentStore.get(b);
475
- const aPriority = this.getCleanupPolicy(aContent.metadata.source).priority;
476
- const bPriority = this.getCleanupPolicy(bContent.metadata.source).priority;
477
- return bPriority - aPriority;
478
- });
479
- for (const referenceId of toCleanup) {
480
- try {
481
- const success = await this.cleanupReference(referenceId);
482
- if (success) {
483
- cleanedUp++;
484
- }
485
- } catch (error) {
486
- errors.push(`Failed to cleanup ${referenceId}: ${error instanceof Error ? error.message : "Unknown error"}`);
487
- }
488
- }
489
- if (this.contentStore.size > this.referenceConfig.maxReferences) {
490
- const sortedByAge = Array.from(this.contentStore.entries()).sort(([, a], [, b]) => a.metadata.lastAccessedAt.getTime() - b.metadata.lastAccessedAt.getTime());
491
- const excessCount = this.contentStore.size - this.referenceConfig.maxReferences;
492
- for (let i = 0; i < excessCount && i < sortedByAge.length; i++) {
493
- const [referenceId] = sortedByAge[i];
494
- try {
495
- const success = await this.cleanupReference(referenceId);
496
- if (success) {
497
- cleanedUp++;
498
- }
499
- } catch (error) {
500
- errors.push(`Failed to cleanup excess reference ${referenceId}: ${error instanceof Error ? error.message : "Unknown error"}`);
501
- }
502
- }
503
- }
504
- const duration = Date.now() - startTime;
505
- this.recordPerformanceMetric("cleanup", duration);
506
- return { cleanedUp, errors };
507
- } catch (error) {
508
- const duration = Date.now() - startTime;
509
- this.recordPerformanceMetric("cleanup", duration);
510
- const errorMessage = `Cleanup process failed: ${error instanceof Error ? error.message : "Unknown error"}`;
511
- errors.push(errorMessage);
512
- return { cleanedUp, errors };
513
- }
514
- }
515
- /**
516
- * Get reference configuration for debugging
517
- */
518
- getReferenceConfig() {
519
- return { ...this.referenceConfig };
520
- }
521
- async enforceReferenceStorageLimits() {
522
- if (this.contentStore.size >= this.referenceConfig.maxReferences) {
523
- await this.performCleanup();
524
- }
525
- if (this.referenceStats.totalStorageBytes >= this.referenceConfig.maxTotalStorageBytes) {
526
- await this.performCleanup();
527
- }
528
- }
529
- calculateExpirationTime(source) {
530
- const policy = this.getCleanupPolicy(source);
531
- return new Date(Date.now() + policy.maxAgeMs);
532
- }
533
- getCleanupPolicy(source) {
534
- switch (source) {
535
- case "mcp_tool":
536
- return this.referenceConfig.cleanupPolicies.recent;
537
- case "user_upload":
538
- return this.referenceConfig.cleanupPolicies.userContent;
539
- case "agent_generated":
540
- return this.referenceConfig.cleanupPolicies.agentGenerated;
541
- default:
542
- return this.referenceConfig.cleanupPolicies.default;
543
- }
544
- }
545
- detectContentType(content, mimeType) {
546
- if (mimeType) {
547
- if (mimeType === "text/html") return "html";
548
- if (mimeType === "text/markdown") return "markdown";
549
- if (mimeType === "application/json") return "json";
550
- if (mimeType.startsWith("text/")) return "text";
551
- return "binary";
552
- }
553
- const contentStr = content.toString("utf8", 0, Math.min(content.length, 1e3));
554
- if (contentStr.startsWith("{") || contentStr.startsWith("[")) return "json";
555
- if (contentStr.includes("<html>") || contentStr.includes("<!DOCTYPE")) return "html";
556
- if (contentStr.includes("#") && contentStr.includes("\n")) return "markdown";
557
- return "text";
558
- }
559
- createContentPreview(content, contentType) {
560
- const maxLength = 200;
561
- let preview = content.toString("utf8", 0, Math.min(content.length, maxLength * 2));
562
- if (contentType === "html") {
563
- preview = preview.replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim();
564
- } else if (contentType === "json") {
565
- try {
566
- const parsed = JSON.parse(preview);
567
- preview = JSON.stringify(parsed, null, 0);
568
- } catch {
569
- }
570
- }
571
- preview = preview.trim();
572
- if (preview.length > maxLength) {
573
- preview = preview.substring(0, maxLength) + "...";
574
- }
575
- return preview || "[Binary content]";
576
- }
577
- updateStatsAfterStore(sizeBytes) {
578
- this.referenceStats.activeReferences++;
579
- this.referenceStats.totalStorageBytes += sizeBytes;
580
- this.updateReferenceStorageStats();
581
- }
582
- updateReferenceStorageStats() {
583
- if (this.referenceStats.activeReferences > 0) {
584
- this.referenceStats.averageContentSize = this.referenceStats.totalStorageBytes / this.referenceStats.activeReferences;
585
- }
586
- this.referenceStats.storageUtilization = this.referenceStats.totalStorageBytes / this.referenceConfig.maxTotalStorageBytes * 100;
587
- let mostAccessedId;
588
- let maxAccess = 0;
589
- for (const [referenceId, storedContent] of this.contentStore.entries()) {
590
- if (storedContent.metadata.accessCount > maxAccess) {
591
- maxAccess = storedContent.metadata.accessCount;
592
- mostAccessedId = referenceId;
593
- }
594
- }
595
- if (mostAccessedId !== void 0) {
596
- this.referenceStats.mostAccessedReferenceId = mostAccessedId;
597
- } else {
598
- delete this.referenceStats.mostAccessedReferenceId;
599
- }
600
- }
601
- /**
602
- * Check if content is an image file based on MIME type or filename
603
- */
604
- isImageContent(mimeType, fileName) {
605
- if (mimeType && mimeType.startsWith("image/")) {
606
- return true;
607
- }
608
- if (fileName) {
609
- const lowerFileName = fileName.toLowerCase();
610
- const imageExtensions = [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp", ".svg", ".tiff", ".ico"];
611
- return imageExtensions.some((ext) => lowerFileName.endsWith(ext));
612
- }
613
- return false;
614
- }
615
- recordPerformanceMetric(type, timeMs) {
616
- const metrics = this.referenceStats.performanceMetrics;
617
- const maxRecords = 100;
618
- switch (type) {
619
- case "creation":
620
- metrics.creationTimes.push(timeMs);
621
- if (metrics.creationTimes.length > maxRecords) {
622
- metrics.creationTimes.shift();
623
- }
624
- break;
625
- case "resolution":
626
- metrics.resolutionTimes.push(timeMs);
627
- if (metrics.resolutionTimes.length > maxRecords) {
628
- metrics.resolutionTimes.shift();
629
- }
630
- break;
631
- case "cleanup":
632
- metrics.cleanupTimes.push(timeMs);
633
- if (metrics.cleanupTimes.length > maxRecords) {
634
- metrics.cleanupTimes.shift();
635
- }
636
- break;
637
- }
638
- }
639
- calculateAverage(times) {
640
- if (times.length === 0) return 0;
641
- return times.reduce((sum, time) => sum + time, 0) / times.length;
642
- }
643
- startReferenceCleanupTimer() {
644
- this.cleanupTimer = setInterval(async () => {
645
- try {
646
- await this.performCleanup();
647
- } catch {
648
- }
649
- }, this.referenceConfig.cleanupIntervalMs);
650
- }
651
- /**
652
- * Clean up resources (enhanced to include reference cleanup)
653
- */
654
- async dispose() {
655
- if (this.cleanupTimer) {
656
- clearInterval(this.cleanupTimer);
657
- delete this.cleanupTimer;
658
- }
659
- this.contentStore.clear();
660
- this.clear();
661
- }
1
+ const MCPServers = {
2
+ /**
3
+ * Filesystem server for file operations
4
+ */
5
+ filesystem: (path) => ({
6
+ name: "filesystem",
7
+ command: "npx",
8
+ args: ["-y", "@modelcontextprotocol/server-filesystem", path],
9
+ transport: "stdio",
10
+ autoConnect: true,
11
+ additionalContext: "This server provides access to files and directories in the current working directory.",
12
+ toolDescriptions: {
13
+ list_directory: 'Use this tool when users ask about files in the "current directory" or "working directory".',
14
+ read_file: "Use this tool when users ask to see or check files in the current directory."
15
+ }
16
+ }),
17
+ /**
18
+ * GitHub server for repository operations
19
+ */
20
+ github: (token) => ({
21
+ name: "github",
22
+ command: "npx",
23
+ args: ["-y", "@modelcontextprotocol/server-github"],
24
+ ...token && { env: { GITHUB_TOKEN: token } },
25
+ transport: "stdio",
26
+ autoConnect: true
27
+ }),
28
+ /**
29
+ * Slack server for messaging operations
30
+ */
31
+ slack: (token) => ({
32
+ name: "slack",
33
+ command: "npx",
34
+ args: ["-y", "@modelcontextprotocol/server-slack"],
35
+ env: { SLACK_TOKEN: token },
36
+ transport: "stdio",
37
+ autoConnect: true
38
+ }),
39
+ /**
40
+ * Google Drive server for document operations
41
+ */
42
+ googleDrive: (credentials) => ({
43
+ name: "google-drive",
44
+ command: "npx",
45
+ args: ["-y", "@modelcontextprotocol/server-google-drive"],
46
+ env: { GOOGLE_CREDENTIALS: credentials },
47
+ transport: "stdio",
48
+ autoConnect: true
49
+ }),
50
+ /**
51
+ * PostgreSQL server for database operations
52
+ */
53
+ postgres: (connectionString) => ({
54
+ name: "postgres",
55
+ command: "npx",
56
+ args: ["-y", "@modelcontextprotocol/server-postgres", connectionString],
57
+ transport: "stdio",
58
+ autoConnect: true
59
+ }),
60
+ /**
61
+ * SQLite server for database operations
62
+ */
63
+ sqlite: (dbPath) => ({
64
+ name: "sqlite",
65
+ command: "npx",
66
+ args: ["-y", "@modelcontextprotocol/server-sqlite", dbPath],
67
+ transport: "stdio",
68
+ autoConnect: true
69
+ }),
70
+ /**
71
+ * Custom server configuration
72
+ */
73
+ custom: (config) => config
662
74
  };
663
- _ContentStorage.DEFAULT_MAX_STORAGE = 1e3;
664
- let ContentStorage = _ContentStorage;
75
+ function validateServerConfig(config) {
76
+ const errors = [];
77
+ if (!config.name) {
78
+ errors.push("Server name is required");
79
+ }
80
+ if (!config.command) {
81
+ errors.push("Server command is required");
82
+ }
83
+ if (!config.args || !Array.isArray(config.args)) {
84
+ errors.push("Server args must be an array");
85
+ }
86
+ if (config.transport && !["stdio", "http", "websocket"].includes(config.transport)) {
87
+ errors.push("Invalid transport type. Must be stdio, http, or websocket");
88
+ }
89
+ return errors;
90
+ }
91
+ function createMCPConfig(servers, autoConnect = true) {
92
+ return {
93
+ mcpServers: servers.map((server) => ({
94
+ ...server,
95
+ autoConnect: server.autoConnect ?? autoConnect
96
+ }))
97
+ };
98
+ }
665
99
  export {
666
- ContentStorage
100
+ MCPServers,
101
+ createMCPConfig,
102
+ validateServerConfig
667
103
  };
668
104
  //# sourceMappingURL=index14.js.map