@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/index2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index2.js","sources":["../../src/plugins/hcs-10/HCS10Plugin.ts"],"sourcesContent":["import {\n GenericPluginContext,\n HederaTool,\n BasePlugin,\n HederaAgentKit,\n} from 'hedera-agent-kit';\nimport {\n IStateManager,\n OpenConvaiState,\n HCS10Builder,\n RegisterAgentTool,\n FindRegistrationsTool,\n InitiateConnectionTool,\n ListConnectionsTool,\n SendMessageToConnectionTool,\n CheckMessagesTool,\n ConnectionMonitorTool,\n ManageConnectionRequestsTool,\n AcceptConnectionRequestTool,\n RetrieveProfileTool,\n ListUnapprovedConnectionRequestsTool,\n} from '@hashgraphonline/standards-agent-kit';\nimport { HCS10Client } from '@hashgraphonline/standards-sdk';\n\nexport class HCS10Plugin extends BasePlugin {\n id = 'hcs-10';\n name = 'HCS-10 Plugin';\n description =\n 'HCS-10 agent tools for decentralized agent registration, connections, and messaging on Hedera';\n version = '1.0.0';\n author = 'Hashgraph Online';\n namespace = 'hcs10';\n\n private stateManager?: IStateManager;\n private tools: HederaTool[] = [];\n appConfig?: Record<string, unknown>;\n\n override async initialize(context: GenericPluginContext): Promise<void> {\n await super.initialize(context);\n\n const hederaKit = context.config.hederaKit as HederaAgentKit;\n if (!hederaKit) {\n this.context.logger.warn(\n 'HederaKit not found in context. HCS-10 tools will not be available.'\n );\n return;\n }\n\n try {\n this.stateManager =\n (context.stateManager as IStateManager) ||\n (context.config.stateManager as IStateManager) ||\n (this.appConfig?.stateManager as IStateManager) ||\n new OpenConvaiState();\n\n const accountId = hederaKit.signer.getAccountId().toString();\n let inboundTopicId = '';\n let outboundTopicId = '';\n\n try {\n const opKey = hederaKit.signer.getOperatorPrivateKey() as {\n toString?: () => string;\n toStringRaw?: () => string;\n };\n const privateKey = typeof opKey?.toStringRaw === 'function'\n ? opKey.toStringRaw()\n : typeof opKey?.toString === 'function'\n ? opKey.toString()\n : String(opKey);\n\n const hcs10Client = new HCS10Client({\n network: hederaKit.network as 'mainnet' | 'testnet',\n operatorId: accountId,\n operatorPrivateKey: privateKey,\n logLevel: 'error',\n });\n\n const profileResponse = await hcs10Client.retrieveProfile(accountId);\n if (profileResponse.success && profileResponse.topicInfo) {\n inboundTopicId = profileResponse.topicInfo.inboundTopic;\n outboundTopicId = profileResponse.topicInfo.outboundTopic;\n }\n } catch (profileError) {\n this.context.logger.warn(\n 'Could not retrieve profile topics:',\n profileError\n );\n }\n\n this.stateManager.setCurrentAgent({\n name: `Agent ${accountId}`,\n accountId: accountId,\n inboundTopicId,\n outboundTopicId,\n privateKey: ((): string => {\n const opKey = hederaKit.signer.getOperatorPrivateKey() as {\n toString?: () => string;\n toStringRaw?: () => string;\n };\n return typeof opKey?.toStringRaw === 'function'\n ? opKey.toStringRaw()\n : typeof opKey?.toString === 'function'\n ? opKey.toString()\n : String(opKey);\n })(),\n });\n\n this.context.logger.info(\n `Set current agent: ${accountId} with topics ${inboundTopicId}/${outboundTopicId}`\n );\n\n if (this.stateManager && !this.stateManager.getConnectionsManager()) {\n try {\n const opKey = hederaKit.signer.getOperatorPrivateKey() as {\n toString?: () => string;\n toStringRaw?: () => string;\n };\n const privateKey = typeof opKey?.toStringRaw === 'function'\n ? opKey.toStringRaw()\n : typeof opKey?.toString === 'function'\n ? opKey.toString()\n : String(opKey);\n const hcs10Client = new HCS10Client({\n network: hederaKit.network as 'mainnet' | 'testnet',\n operatorId: accountId,\n operatorPrivateKey: privateKey,\n logLevel: 'error',\n });\n\n this.stateManager.initializeConnectionsManager(hcs10Client as any);\n this.context.logger.info(\n 'ConnectionsManager initialized in HCS10Plugin'\n );\n } catch (cmError) {\n this.context.logger.warn('Could not initialize ConnectionsManager:', cmError);\n }\n }\n\n this.initializeTools();\n\n this.context.logger.info('HCS-10 Plugin initialized successfully');\n } catch (error) {\n this.context.logger.error('Failed to initialize HCS-10 plugin:', error);\n }\n }\n\n private initializeTools(): void {\n if (!this.stateManager) {\n throw new Error('StateManager must be initialized before creating tools');\n }\n\n const hederaKit = this.context.config.hederaKit as HederaAgentKit;\n if (!hederaKit) {\n throw new Error('HederaKit not found in context config');\n }\n\n const hcs10Builder = new HCS10Builder(hederaKit, this.stateManager);\n\n this.tools = [\n new RegisterAgentTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new FindRegistrationsTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new RetrieveProfileTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new InitiateConnectionTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new ListConnectionsTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new SendMessageToConnectionTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new CheckMessagesTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new ConnectionMonitorTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new ManageConnectionRequestsTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new AcceptConnectionRequestTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new ListUnapprovedConnectionRequestsTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n ];\n }\n\n getTools(): HederaTool[] {\n return this.tools;\n }\n\n getStateManager(): IStateManager | undefined {\n return this.stateManager;\n }\n\n override async cleanup(): Promise<void> {\n this.tools = [];\n delete this.stateManager;\n if (this.context?.logger) {\n this.context.logger.info('HCS-10 Plugin cleaned up');\n }\n }\n}\n"],"names":[],"mappings":";;;AAwBO,MAAM,oBAAoB,WAAW;AAAA,EAArC,cAAA;AAAA,UAAA,GAAA,SAAA;AACL,SAAA,KAAK;AACL,SAAA,OAAO;AACP,SAAA,cACE;AACF,SAAA,UAAU;AACV,SAAA,SAAS;AACT,SAAA,YAAY;AAGZ,SAAQ,QAAsB,CAAA;AAAA,EAAC;AAAA,EAG/B,MAAe,WAAW,SAA8C;AACtE,UAAM,MAAM,WAAW,OAAO;AAE9B,UAAM,YAAY,QAAQ,OAAO;AACjC,QAAI,CAAC,WAAW;AACd,WAAK,QAAQ,OAAO;AAAA,QAClB;AAAA,MAAA;AAEF;AAAA,IACF;AAEA,QAAI;AACF,WAAK,eACF,QAAQ,gBACR,QAAQ,OAAO,gBACf,KAAK,WAAW,gBACjB,IAAI,gBAAA;AAEN,YAAM,YAAY,UAAU,OAAO,aAAA,EAAe,SAAA;AAClD,UAAI,iBAAiB;AACrB,UAAI,kBAAkB;AAEtB,UAAI;AACF,cAAM,QAAQ,UAAU,OAAO,sBAAA;AAI/B,cAAM,aAAa,OAAO,OAAO,gBAAgB,aAC7C,MAAM,YAAA,IACN,OAAO,OAAO,aAAa,aACzB,MAAM,SAAA,IACN,OAAO,KAAK;AAElB,cAAM,cAAc,IAAI,YAAY;AAAA,UAClC,SAAS,UAAU;AAAA,UACnB,YAAY;AAAA,UACZ,oBAAoB;AAAA,UACpB,UAAU;AAAA,QAAA,CACX;AAED,cAAM,kBAAkB,MAAM,YAAY,gBAAgB,SAAS;AACnE,YAAI,gBAAgB,WAAW,gBAAgB,WAAW;AACxD,2BAAiB,gBAAgB,UAAU;AAC3C,4BAAkB,gBAAgB,UAAU;AAAA,QAC9C;AAAA,MACF,SAAS,cAAc;AACrB,aAAK,QAAQ,OAAO;AAAA,UAClB;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AAEA,WAAK,aAAa,gBAAgB;AAAA,QAChC,MAAM,SAAS,SAAS;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa,MAAc;AACzB,gBAAM,QAAQ,UAAU,OAAO,sBAAA;AAI/B,iBAAO,OAAO,OAAO,gBAAgB,aACjC,MAAM,YAAA,IACN,OAAO,OAAO,aAAa,aACzB,MAAM,SAAA,IACN,OAAO,KAAK;AAAA,QACpB,GAAA;AAAA,MAAG,CACJ;AAED,WAAK,QAAQ,OAAO;AAAA,QAClB,sBAAsB,SAAS,gBAAgB,cAAc,IAAI,eAAe;AAAA,MAAA;AAGlF,UAAI,KAAK,gBAAgB,CAAC,KAAK,aAAa,yBAAyB;AACnE,YAAI;AACF,gBAAM,QAAQ,UAAU,OAAO,sBAAA;AAI/B,gBAAM,aAAa,OAAO,OAAO,gBAAgB,aAC7C,MAAM,YAAA,IACN,OAAO,OAAO,aAAa,aACzB,MAAM,SAAA,IACN,OAAO,KAAK;AAClB,gBAAM,cAAc,IAAI,YAAY;AAAA,YAClC,SAAS,UAAU;AAAA,YACnB,YAAY;AAAA,YACZ,oBAAoB;AAAA,YACpB,UAAU;AAAA,UAAA,CACX;AAED,eAAK,aAAa,6BAA6B,WAAkB;AACjE,eAAK,QAAQ,OAAO;AAAA,YAClB;AAAA,UAAA;AAAA,QAEJ,SAAS,SAAS;AAChB,eAAK,QAAQ,OAAO,KAAK,4CAA4C,OAAO;AAAA,QAC9E;AAAA,MACF;AAEA,WAAK,gBAAA;AAEL,WAAK,QAAQ,OAAO,KAAK,wCAAwC;AAAA,IACnE,SAAS,OAAO;AACd,WAAK,QAAQ,OAAO,MAAM,uCAAuC,KAAK;AAAA,IACxE;AAAA,EACF;AAAA,EAEQ,kBAAwB;AAC9B,QAAI,CAAC,KAAK,cAAc;AACtB,YAAM,IAAI,MAAM,wDAAwD;AAAA,IAC1E;AAEA,UAAM,YAAY,KAAK,QAAQ,OAAO;AACtC,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAEA,UAAM,eAAe,IAAI,aAAa,WAAW,KAAK,YAAY;AAElE,SAAK,QAAQ;AAAA,MACX,IAAI,kBAAkB;AAAA,QACpB;AAAA,QACA;AAAA,QACA,QAAQ,KAAK,QAAQ;AAAA,MAAA,CACtB;AAAA,MACD,IAAI,sBAAsB;AAAA,QACxB;AAAA,QACA;AAAA,QACA,QAAQ,KAAK,QAAQ;AAAA,MAAA,CACtB;AAAA,MACD,IAAI,oBAAoB;AAAA,QACtB;AAAA,QACA;AAAA,QACA,QAAQ,KAAK,QAAQ;AAAA,MAAA,CACtB;AAAA,MACD,IAAI,uBAAuB;AAAA,QACzB;AAAA,QACA;AAAA,QACA,QAAQ,KAAK,QAAQ;AAAA,MAAA,CACtB;AAAA,MACD,IAAI,oBAAoB;AAAA,QACtB;AAAA,QACA;AAAA,QACA,QAAQ,KAAK,QAAQ;AAAA,MAAA,CACtB;AAAA,MACD,IAAI,4BAA4B;AAAA,QAC9B;AAAA,QACA;AAAA,QACA,QAAQ,KAAK,QAAQ;AAAA,MAAA,CACtB;AAAA,MACD,IAAI,kBAAkB;AAAA,QACpB;AAAA,QACA;AAAA,QACA,QAAQ,KAAK,QAAQ;AAAA,MAAA,CACtB;AAAA,MACD,IAAI,sBAAsB;AAAA,QACxB;AAAA,QACA;AAAA,QACA,QAAQ,KAAK,QAAQ;AAAA,MAAA,CACtB;AAAA,MACD,IAAI,6BAA6B;AAAA,QAC/B;AAAA,QACA;AAAA,QACA,QAAQ,KAAK,QAAQ;AAAA,MAAA,CACtB;AAAA,MACD,IAAI,4BAA4B;AAAA,QAC9B;AAAA,QACA;AAAA,QACA,QAAQ,KAAK,QAAQ;AAAA,MAAA,CACtB;AAAA,MACD,IAAI,qCAAqC;AAAA,QACvC;AAAA,QACA;AAAA,QACA,QAAQ,KAAK,QAAQ;AAAA,MAAA,CACtB;AAAA,IAAA;AAAA,EAEL;AAAA,EAEA,WAAyB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,kBAA6C;AAC3C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAe,UAAyB;AACtC,SAAK,QAAQ,CAAA;AACb,WAAO,KAAK;AACZ,QAAI,KAAK,SAAS,QAAQ;AACxB,WAAK,QAAQ,OAAO,KAAK,0BAA0B;AAAA,IACrD;AAAA,EACF;AACF;"}
|
|
1
|
+
{"version":3,"file":"index2.js","sources":["../../src/plugins/hcs-10/HCS10Plugin.ts"],"sourcesContent":["import {\n GenericPluginContext,\n HederaTool,\n BasePlugin,\n HederaAgentKit,\n} from 'hedera-agent-kit';\nimport {\n IStateManager,\n OpenConvaiState,\n HCS10Builder,\n RegisterAgentTool,\n FindRegistrationsTool,\n InitiateConnectionTool,\n ListConnectionsTool,\n SendMessageToConnectionTool,\n CheckMessagesTool,\n ConnectionMonitorTool,\n ManageConnectionRequestsTool,\n AcceptConnectionRequestTool,\n RetrieveProfileTool,\n ListUnapprovedConnectionRequestsTool,\n} from '@hashgraphonline/standards-agent-kit';\nimport { HCS10Client } from '@hashgraphonline/standards-sdk';\n\ninterface HCS10ClientManager {\n initializeConnectionsManager(client: HCS10Client): void;\n}\n\n/**\n * Extracts private key string from operator key\n */\nfunction extractPrivateKey(opKey: unknown): string {\n const key = opKey as {\n toString?: () => string;\n toStringRaw?: () => string;\n };\n \n if (typeof key?.toStringRaw === 'function') {\n return key.toStringRaw();\n }\n \n if (typeof key?.toString === 'function') {\n return key.toString();\n }\n \n return String(key);\n}\n\nfunction hasInitializeConnectionsManager(\n stateManager: IStateManager\n): stateManager is IStateManager & HCS10ClientManager {\n return (\n typeof stateManager === 'object' &&\n stateManager !== null &&\n 'initializeConnectionsManager' in stateManager &&\n typeof stateManager.initializeConnectionsManager === 'function'\n );\n}\n\nexport class HCS10Plugin extends BasePlugin {\n id = 'hcs-10';\n name = 'HCS-10 Plugin';\n description =\n 'HCS-10 agent tools for decentralized agent registration, connections, and messaging on Hedera';\n version = '1.0.0';\n author = 'Hashgraph Online';\n namespace = 'hcs10';\n\n private stateManager?: IStateManager;\n private tools: HederaTool[] = [];\n appConfig?: Record<string, unknown>;\n\n override async initialize(context: GenericPluginContext): Promise<void> {\n await super.initialize(context);\n\n const hederaKit = context.config.hederaKit as HederaAgentKit;\n if (!hederaKit) {\n this.context.logger.warn(\n 'HederaKit not found in context. HCS-10 tools will not be available.'\n );\n return;\n }\n\n try {\n this.stateManager =\n (context.stateManager as IStateManager) ||\n (context.config.stateManager as IStateManager) ||\n (this.appConfig?.stateManager as IStateManager) ||\n new OpenConvaiState();\n\n const accountId = hederaKit.signer.getAccountId().toString();\n let inboundTopicId = '';\n let outboundTopicId = '';\n\n try {\n const opKey = hederaKit.signer.getOperatorPrivateKey();\n const privateKey = extractPrivateKey(opKey);\n\n const hcs10Client = new HCS10Client({\n network: hederaKit.network as 'mainnet' | 'testnet',\n operatorId: accountId,\n operatorPrivateKey: privateKey,\n logLevel: 'error',\n });\n\n const profileResponse = await hcs10Client.retrieveProfile(accountId);\n if (profileResponse.success && profileResponse.topicInfo) {\n inboundTopicId = profileResponse.topicInfo.inboundTopic;\n outboundTopicId = profileResponse.topicInfo.outboundTopic;\n }\n } catch (profileError) {\n this.context.logger.warn(\n 'Could not retrieve profile topics:',\n profileError\n );\n }\n\n this.stateManager.setCurrentAgent({\n name: `Agent ${accountId}`,\n accountId: accountId,\n inboundTopicId,\n outboundTopicId,\n privateKey: ((): string => {\n const opKey = hederaKit.signer.getOperatorPrivateKey();\n return extractPrivateKey(opKey);\n })(),\n });\n\n this.context.logger.info(\n `Set current agent: ${accountId} with topics ${inboundTopicId}/${outboundTopicId}`\n );\n\n if (this.stateManager && !this.stateManager.getConnectionsManager()) {\n try {\n const opKey = hederaKit.signer.getOperatorPrivateKey();\n const privateKey = extractPrivateKey(opKey);\n const hcs10Client = new HCS10Client({\n network: hederaKit.network as 'mainnet' | 'testnet',\n operatorId: accountId,\n operatorPrivateKey: privateKey,\n logLevel: 'error',\n });\n\n if (hasInitializeConnectionsManager(this.stateManager)) {\n this.stateManager.initializeConnectionsManager(hcs10Client);\n } else {\n this.context.logger.warn('StateManager does not support connection manager initialization');\n }\n this.context.logger.info(\n 'ConnectionsManager initialized in HCS10Plugin'\n );\n } catch (cmError) {\n this.context.logger.warn('Could not initialize ConnectionsManager:', cmError);\n }\n }\n\n this.initializeTools();\n\n this.context.logger.info('HCS-10 Plugin initialized successfully');\n } catch (error) {\n this.context.logger.error('Failed to initialize HCS-10 plugin:', error);\n }\n }\n\n private initializeTools(): void {\n if (!this.stateManager) {\n throw new Error('StateManager must be initialized before creating tools');\n }\n\n const hederaKit = this.context.config.hederaKit as HederaAgentKit;\n if (!hederaKit) {\n throw new Error('HederaKit not found in context config');\n }\n\n const hcs10Builder = new HCS10Builder(hederaKit, this.stateManager);\n\n this.tools = [\n new RegisterAgentTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new FindRegistrationsTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new RetrieveProfileTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new InitiateConnectionTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new ListConnectionsTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new SendMessageToConnectionTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new CheckMessagesTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new ConnectionMonitorTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new ManageConnectionRequestsTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new AcceptConnectionRequestTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n new ListUnapprovedConnectionRequestsTool({\n hederaKit: hederaKit,\n hcs10Builder: hcs10Builder,\n logger: this.context.logger,\n }),\n ];\n }\n\n getTools(): HederaTool[] {\n return this.tools;\n }\n\n getStateManager(): IStateManager | undefined {\n return this.stateManager;\n }\n\n override async cleanup(): Promise<void> {\n this.tools = [];\n delete this.stateManager;\n if (this.context?.logger) {\n this.context.logger.info('HCS-10 Plugin cleaned up');\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/index20.js
CHANGED
|
@@ -1,117 +1,183 @@
|
|
|
1
|
-
|
|
1
|
+
import { TokenCounter } from "./index19.js";
|
|
2
|
+
const _MemoryWindow = class _MemoryWindow {
|
|
3
|
+
constructor(maxTokens = _MemoryWindow.DEFAULT_MAX_TOKENS, reserveTokens = _MemoryWindow.DEFAULT_RESERVE_TOKENS, tokenCounter) {
|
|
4
|
+
this.messages = [];
|
|
5
|
+
this.systemPrompt = "";
|
|
6
|
+
this.systemPromptTokens = 0;
|
|
7
|
+
if (reserveTokens >= maxTokens) {
|
|
8
|
+
throw new Error("Reserve tokens must be less than max tokens");
|
|
9
|
+
}
|
|
10
|
+
this.maxTokens = maxTokens;
|
|
11
|
+
this.reserveTokens = reserveTokens;
|
|
12
|
+
this.tokenCounter = tokenCounter || new TokenCounter();
|
|
13
|
+
}
|
|
2
14
|
/**
|
|
3
|
-
*
|
|
15
|
+
* Add a message to the memory window, pruning old messages if necessary
|
|
16
|
+
* @param message - The message to add
|
|
17
|
+
* @returns Result of the add operation including any pruned messages
|
|
4
18
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
19
|
+
addMessage(message) {
|
|
20
|
+
this.tokenCounter.countMessageTokens(message);
|
|
21
|
+
this.messages.push(message);
|
|
22
|
+
const currentTokens = this.getCurrentTokenCount();
|
|
23
|
+
const availableTokens = this.maxTokens - this.reserveTokens;
|
|
24
|
+
let prunedMessages = [];
|
|
25
|
+
if (currentTokens > availableTokens) {
|
|
26
|
+
this.messages.pop();
|
|
27
|
+
prunedMessages = this.pruneToFit();
|
|
28
|
+
this.messages.push(message);
|
|
8
29
|
}
|
|
9
|
-
|
|
10
|
-
|
|
30
|
+
return {
|
|
31
|
+
added: true,
|
|
32
|
+
prunedMessages,
|
|
33
|
+
currentTokenCount: this.getCurrentTokenCount(),
|
|
34
|
+
remainingCapacity: this.getRemainingTokenCapacity()
|
|
35
|
+
};
|
|
11
36
|
}
|
|
12
37
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
38
|
+
* Prune old messages to fit within token limits
|
|
39
|
+
* Removes messages in pairs to maintain conversational flow
|
|
40
|
+
* @returns Array of pruned messages
|
|
15
41
|
*/
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
if (inscription.hrl || hashLinkBlock.attributes.hrl) {
|
|
35
|
-
message += `🔗 **HRL:** ${inscription.hrl || hashLinkBlock.attributes.hrl}
|
|
36
|
-
`;
|
|
37
|
-
}
|
|
38
|
-
if (inscription.cdnUrl) {
|
|
39
|
-
message += `🌐 **CDN URL:** ${inscription.cdnUrl}
|
|
40
|
-
`;
|
|
41
|
-
}
|
|
42
|
-
if (metadata.creator) {
|
|
43
|
-
message += `👤 **Creator:** ${metadata.creator}
|
|
44
|
-
`;
|
|
42
|
+
pruneToFit() {
|
|
43
|
+
const prunedMessages = [];
|
|
44
|
+
const targetTokens = this.maxTokens - this.reserveTokens;
|
|
45
|
+
while (this.getCurrentTokenCount() > targetTokens && this.messages.length > 0) {
|
|
46
|
+
const batchSize = Math.min(
|
|
47
|
+
_MemoryWindow.PRUNING_BATCH_SIZE,
|
|
48
|
+
this.messages.length
|
|
49
|
+
);
|
|
50
|
+
for (let i = 0; i < batchSize; i++) {
|
|
51
|
+
const prunedMessage = this.messages.shift();
|
|
52
|
+
if (prunedMessage) {
|
|
53
|
+
prunedMessages.push(prunedMessage);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (prunedMessages.length > 1e3) {
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
45
59
|
}
|
|
46
|
-
|
|
47
|
-
return message.trim();
|
|
60
|
+
return prunedMessages;
|
|
48
61
|
}
|
|
49
62
|
/**
|
|
50
|
-
*
|
|
63
|
+
* Get current token count including system prompt and messages
|
|
64
|
+
* @returns Current token count
|
|
51
65
|
*/
|
|
52
|
-
|
|
53
|
-
|
|
66
|
+
getCurrentTokenCount() {
|
|
67
|
+
const messageTokens = this.tokenCounter.countMessagesTokens(this.messages);
|
|
68
|
+
return this.systemPromptTokens + messageTokens;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get remaining token capacity before hitting the reserve limit
|
|
72
|
+
* @returns Remaining tokens that can be used
|
|
73
|
+
*/
|
|
74
|
+
getRemainingTokenCapacity() {
|
|
75
|
+
return Math.max(0, this.maxTokens - this.getCurrentTokenCount());
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check if a message can be added without exceeding limits
|
|
79
|
+
* @param message - The message to check
|
|
80
|
+
* @returns True if message can be added within reserve limits
|
|
81
|
+
*/
|
|
82
|
+
canAddMessage(message) {
|
|
83
|
+
const messageTokens = this.tokenCounter.countMessageTokens(message);
|
|
84
|
+
const currentTokens = this.getCurrentTokenCount();
|
|
85
|
+
const wouldExceedReserve = currentTokens + messageTokens > this.maxTokens - this.reserveTokens;
|
|
86
|
+
if (messageTokens > this.maxTokens) {
|
|
54
87
|
return false;
|
|
55
88
|
}
|
|
56
|
-
|
|
57
|
-
return !!(responseObj.success === true && responseObj.type === "inscription" && responseObj.inscription && typeof responseObj.inscription === "object");
|
|
89
|
+
return !wouldExceedReserve || this.messages.length > 0;
|
|
58
90
|
}
|
|
59
91
|
/**
|
|
60
|
-
*
|
|
92
|
+
* Get all messages in the memory window
|
|
93
|
+
* @returns Copy of current messages array
|
|
61
94
|
*/
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
95
|
+
getMessages() {
|
|
96
|
+
return [...this.messages];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Clear all messages from the memory window
|
|
100
|
+
*/
|
|
101
|
+
clear() {
|
|
102
|
+
this.messages = [];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Set the system prompt and update token calculations
|
|
106
|
+
* @param systemPrompt - The system prompt text
|
|
107
|
+
*/
|
|
108
|
+
setSystemPrompt(systemPrompt) {
|
|
109
|
+
this.systemPrompt = systemPrompt;
|
|
110
|
+
this.systemPromptTokens = this.tokenCounter.estimateSystemPromptTokens(systemPrompt);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get the current system prompt
|
|
114
|
+
* @returns Current system prompt
|
|
115
|
+
*/
|
|
116
|
+
getSystemPrompt() {
|
|
117
|
+
return this.systemPrompt;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get current configuration
|
|
121
|
+
* @returns Memory window configuration
|
|
122
|
+
*/
|
|
123
|
+
getConfig() {
|
|
124
|
+
return {
|
|
125
|
+
maxTokens: this.maxTokens,
|
|
126
|
+
reserveTokens: this.reserveTokens,
|
|
127
|
+
currentTokens: this.getCurrentTokenCount(),
|
|
128
|
+
messageCount: this.messages.length,
|
|
129
|
+
systemPromptTokens: this.systemPromptTokens
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Update token limits
|
|
134
|
+
* @param maxTokens - New maximum token limit
|
|
135
|
+
* @param reserveTokens - New reserve token amount
|
|
136
|
+
*/
|
|
137
|
+
updateLimits(maxTokens, reserveTokens) {
|
|
138
|
+
if (reserveTokens !== void 0 && reserveTokens >= maxTokens) {
|
|
139
|
+
throw new Error("Reserve tokens must be less than max tokens");
|
|
85
140
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
141
|
+
this.maxTokens = maxTokens;
|
|
142
|
+
if (reserveTokens !== void 0) {
|
|
143
|
+
this.reserveTokens = reserveTokens;
|
|
89
144
|
}
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
`;
|
|
145
|
+
if (this.getCurrentTokenCount() > this.maxTokens - this.reserveTokens) {
|
|
146
|
+
this.pruneToFit();
|
|
93
147
|
}
|
|
94
|
-
return message.trim();
|
|
95
148
|
}
|
|
96
149
|
/**
|
|
97
|
-
*
|
|
150
|
+
* Get statistics about the memory window
|
|
151
|
+
* @returns Memory usage statistics
|
|
98
152
|
*/
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
153
|
+
getStats() {
|
|
154
|
+
const currentTokens = this.getCurrentTokenCount();
|
|
155
|
+
const capacity = this.maxTokens;
|
|
156
|
+
const usagePercentage = currentTokens / capacity * 100;
|
|
157
|
+
return {
|
|
158
|
+
totalMessages: this.messages.length,
|
|
159
|
+
currentTokens,
|
|
160
|
+
maxTokens: capacity,
|
|
161
|
+
reserveTokens: this.reserveTokens,
|
|
162
|
+
systemPromptTokens: this.systemPromptTokens,
|
|
163
|
+
usagePercentage: Math.round(usagePercentage * 100) / 100,
|
|
164
|
+
remainingCapacity: this.getRemainingTokenCapacity(),
|
|
165
|
+
canAcceptMore: this.getRemainingTokenCapacity() > this.reserveTokens
|
|
166
|
+
};
|
|
112
167
|
}
|
|
113
|
-
|
|
168
|
+
/**
|
|
169
|
+
* Clean up resources
|
|
170
|
+
*/
|
|
171
|
+
dispose() {
|
|
172
|
+
this.clear();
|
|
173
|
+
this.tokenCounter.dispose();
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
_MemoryWindow.DEFAULT_MAX_TOKENS = 8e3;
|
|
177
|
+
_MemoryWindow.DEFAULT_RESERVE_TOKENS = 1e3;
|
|
178
|
+
_MemoryWindow.PRUNING_BATCH_SIZE = 2;
|
|
179
|
+
let MemoryWindow = _MemoryWindow;
|
|
114
180
|
export {
|
|
115
|
-
|
|
181
|
+
MemoryWindow
|
|
116
182
|
};
|
|
117
183
|
//# sourceMappingURL=index20.js.map
|
package/dist/esm/index20.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index20.js","sources":["../../src/utils/ResponseFormatter.ts"],"sourcesContent":["/**\n * HCS-12 HashLink block structure for interactive content rendering\n */\ninterface HCS12BlockResult {\n blockId: string;\n hashLink: string;\n template: string;\n attributes: Record<string, unknown>;\n}\n\n/**\n * Utility class for formatting tool responses into user-friendly messages\n */\nexport class ResponseFormatter {\n /**\n * Checks if a parsed response contains HashLink block data for interactive rendering\n */\n static isHashLinkResponse(parsed: unknown): boolean {\n if (!parsed || typeof parsed !== 'object') {\n return false;\n }\n\n const responseObj = parsed as Record<string, unknown>;\n return !!(\n responseObj.success === true &&\n responseObj.type === 'inscription' &&\n responseObj.hashLinkBlock &&\n typeof responseObj.hashLinkBlock === 'object'\n );\n }\n\n /**\n * Formats HashLink block response with simple text confirmation\n * HTML template rendering is handled by HashLinkBlockRenderer component via metadata\n */\n static formatHashLinkResponse(parsed: Record<string, unknown>): string {\n const hashLinkBlock = parsed.hashLinkBlock as HCS12BlockResult;\n const metadata = parsed.metadata as Record<string, unknown> || {};\n const inscription = parsed.inscription as Record<string, unknown> || {};\n\n let message = '✅ Interactive content created successfully!\\n\\n';\n\n if (metadata.name) {\n message += `**${metadata.name}**\\n`;\n }\n\n if (metadata.description) {\n message += `${metadata.description}\\n\\n`;\n }\n\n if (inscription.topicId || hashLinkBlock.attributes.topicId) {\n message += `📍 **Topic ID:** ${inscription.topicId || hashLinkBlock.attributes.topicId}\\n`;\n }\n\n if (inscription.hrl || hashLinkBlock.attributes.hrl) {\n message += `🔗 **HRL:** ${inscription.hrl || hashLinkBlock.attributes.hrl}\\n`;\n }\n\n if (inscription.cdnUrl) {\n message += `🌐 **CDN URL:** ${inscription.cdnUrl}\\n`;\n }\n\n if (metadata.creator) {\n message += `👤 **Creator:** ${metadata.creator}\\n`;\n }\n\n message += '\\n⚡ Interactive content will load below';\n\n return message.trim();\n }\n\n /**\n * Checks if a parsed response is an inscription response that needs formatting\n */\n static isInscriptionResponse(parsed: unknown): boolean {\n if (!parsed || typeof parsed !== 'object') {\n return false;\n }\n\n const responseObj = parsed as Record<string, unknown>;\n return !!(\n responseObj.success === true &&\n responseObj.type === 'inscription' &&\n responseObj.inscription &&\n typeof responseObj.inscription === 'object'\n );\n }\n\n /**\n * Formats inscription response into user-friendly message\n */\n static formatInscriptionResponse(parsed: Record<string, unknown>): string {\n const inscription = parsed.inscription as Record<string, unknown>;\n const metadata = parsed.metadata as Record<string, unknown> || {};\n const title = parsed.title as string || 'Inscription Complete';\n\n let message = `✅ ${title}\\n\\n`;\n\n if (metadata.name) {\n message += `**${metadata.name}**\\n`;\n }\n\n if (metadata.description) {\n message += `${metadata.description}\\n\\n`;\n }\n\n if (inscription.topicId) {\n message += `📍 **Topic ID:** ${inscription.topicId}\\n`;\n }\n\n if (inscription.hrl) {\n message += `🔗 **HRL:** ${inscription.hrl}\\n`;\n }\n\n if (inscription.cdnUrl) {\n message += `🌐 **CDN URL:** ${inscription.cdnUrl}\\n`;\n }\n\n if (metadata.creator) {\n message += `👤 **Creator:** ${metadata.creator}\\n`;\n }\n\n return message.trim();\n }\n\n /**\n * Main formatting method that determines the best response format\n */\n static formatResponse(toolOutput: string): string {\n try {\n const parsed = JSON.parse(toolOutput);\n \n if (ResponseFormatter.isHashLinkResponse(parsed)) {\n return ResponseFormatter.formatHashLinkResponse(parsed);\n }\n \n if (ResponseFormatter.isInscriptionResponse(parsed)) {\n return ResponseFormatter.formatInscriptionResponse(parsed);\n }\n \n return toolOutput;\n } catch {\n return toolOutput;\n }\n }\n}"],"names":[],"mappings":"AAaO,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAI7B,OAAO,mBAAmB,QAA0B;AAClD,QAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC,aAAO;AAAA,IACT;AAEA,UAAM,cAAc;AACpB,WAAO,CAAC,EACN,YAAY,YAAY,QACxB,YAAY,SAAS,iBACrB,YAAY,iBACZ,OAAO,YAAY,kBAAkB;AAAA,EAEzC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,uBAAuB,QAAyC;AACrE,UAAM,gBAAgB,OAAO;AAC7B,UAAM,WAAW,OAAO,YAAuC,CAAA;AAC/D,UAAM,cAAc,OAAO,eAA0C,CAAA;AAErE,QAAI,UAAU;AAEd,QAAI,SAAS,MAAM;AACjB,iBAAW,KAAK,SAAS,IAAI;AAAA;AAAA,IAC/B;AAEA,QAAI,SAAS,aAAa;AACxB,iBAAW,GAAG,SAAS,WAAW;AAAA;AAAA;AAAA,IACpC;AAEA,QAAI,YAAY,WAAW,cAAc,WAAW,SAAS;AAC3D,iBAAW,oBAAoB,YAAY,WAAW,cAAc,WAAW,OAAO;AAAA;AAAA,IACxF;AAEA,QAAI,YAAY,OAAO,cAAc,WAAW,KAAK;AACnD,iBAAW,eAAe,YAAY,OAAO,cAAc,WAAW,GAAG;AAAA;AAAA,IAC3E;AAEA,QAAI,YAAY,QAAQ;AACtB,iBAAW,mBAAmB,YAAY,MAAM;AAAA;AAAA,IAClD;AAEA,QAAI,SAAS,SAAS;AACpB,iBAAW,mBAAmB,SAAS,OAAO;AAAA;AAAA,IAChD;AAEA,eAAW;AAEX,WAAO,QAAQ,KAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,sBAAsB,QAA0B;AACrD,QAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC,aAAO;AAAA,IACT;AAEA,UAAM,cAAc;AACpB,WAAO,CAAC,EACN,YAAY,YAAY,QACxB,YAAY,SAAS,iBACrB,YAAY,eACZ,OAAO,YAAY,gBAAgB;AAAA,EAEvC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,0BAA0B,QAAyC;AACxE,UAAM,cAAc,OAAO;AAC3B,UAAM,WAAW,OAAO,YAAuC,CAAA;AAC/D,UAAM,QAAQ,OAAO,SAAmB;AAExC,QAAI,UAAU,KAAK,KAAK;AAAA;AAAA;AAExB,QAAI,SAAS,MAAM;AACjB,iBAAW,KAAK,SAAS,IAAI;AAAA;AAAA,IAC/B;AAEA,QAAI,SAAS,aAAa;AACxB,iBAAW,GAAG,SAAS,WAAW;AAAA;AAAA;AAAA,IACpC;AAEA,QAAI,YAAY,SAAS;AACvB,iBAAW,oBAAoB,YAAY,OAAO;AAAA;AAAA,IACpD;AAEA,QAAI,YAAY,KAAK;AACnB,iBAAW,eAAe,YAAY,GAAG;AAAA;AAAA,IAC3C;AAEA,QAAI,YAAY,QAAQ;AACtB,iBAAW,mBAAmB,YAAY,MAAM;AAAA;AAAA,IAClD;AAEA,QAAI,SAAS,SAAS;AACpB,iBAAW,mBAAmB,SAAS,OAAO;AAAA;AAAA,IAChD;AAEA,WAAO,QAAQ,KAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,eAAe,YAA4B;AAChD,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,UAAU;AAEpC,UAAI,kBAAkB,mBAAmB,MAAM,GAAG;AAChD,eAAO,kBAAkB,uBAAuB,MAAM;AAAA,MACxD;AAEA,UAAI,kBAAkB,sBAAsB,MAAM,GAAG;AACnD,eAAO,kBAAkB,0BAA0B,MAAM;AAAA,MAC3D;AAEA,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACF;"}
|
|
1
|
+
{"version":3,"file":"index20.js","sources":["../../src/memory/memory-window.ts"],"sourcesContent":["import type { BaseMessage } from '@langchain/core/messages';\nimport { TokenCounter } from './token-counter';\n\n/**\n * Result of adding a message to the memory window\n */\nexport interface AddMessageResult {\n /** Whether the message was successfully added */\n added: boolean;\n /** Messages that were pruned to make room */\n prunedMessages: BaseMessage[];\n /** Current token count after operation */\n currentTokenCount: number;\n /** Remaining token capacity */\n remainingCapacity: number;\n}\n\n/**\n * Memory window that manages conversation history with token-based size limits\n * Automatically prunes old messages to stay within token limits while preserving conversational context\n */\nexport class MemoryWindow {\n private messages: BaseMessage[] = [];\n private maxTokens: number;\n private reserveTokens: number;\n private tokenCounter: TokenCounter;\n private systemPrompt: string = '';\n private systemPromptTokens: number = 0;\n\n public static readonly DEFAULT_MAX_TOKENS = 8000;\n public static readonly DEFAULT_RESERVE_TOKENS = 1000;\n public static readonly PRUNING_BATCH_SIZE = 2;\n\n constructor(\n maxTokens: number = MemoryWindow.DEFAULT_MAX_TOKENS,\n reserveTokens: number = MemoryWindow.DEFAULT_RESERVE_TOKENS,\n tokenCounter?: TokenCounter\n ) {\n if (reserveTokens >= maxTokens) {\n throw new Error('Reserve tokens must be less than max tokens');\n }\n\n this.maxTokens = maxTokens;\n this.reserveTokens = reserveTokens;\n this.tokenCounter = tokenCounter || new TokenCounter();\n }\n\n /**\n * Add a message to the memory window, pruning old messages if necessary\n * @param message - The message to add\n * @returns Result of the add operation including any pruned messages\n */\n addMessage(message: BaseMessage): AddMessageResult {\n this.tokenCounter.countMessageTokens(message);\n\n this.messages.push(message);\n\n const currentTokens = this.getCurrentTokenCount();\n const availableTokens = this.maxTokens - this.reserveTokens;\n\n let prunedMessages: BaseMessage[] = [];\n\n if (currentTokens > availableTokens) {\n this.messages.pop();\n\n prunedMessages = this.pruneToFit();\n\n this.messages.push(message);\n }\n\n return {\n added: true,\n prunedMessages,\n currentTokenCount: this.getCurrentTokenCount(),\n remainingCapacity: this.getRemainingTokenCapacity(),\n };\n }\n\n /**\n * Prune old messages to fit within token limits\n * Removes messages in pairs to maintain conversational flow\n * @returns Array of pruned messages\n */\n pruneToFit(): BaseMessage[] {\n const prunedMessages: BaseMessage[] = [];\n const targetTokens = this.maxTokens - this.reserveTokens;\n\n while (\n this.getCurrentTokenCount() > targetTokens &&\n this.messages.length > 0\n ) {\n const batchSize = Math.min(\n MemoryWindow.PRUNING_BATCH_SIZE,\n this.messages.length\n );\n\n for (let i = 0; i < batchSize; i++) {\n const prunedMessage = this.messages.shift();\n if (prunedMessage) {\n prunedMessages.push(prunedMessage);\n }\n }\n\n if (prunedMessages.length > 1000) {\n break;\n }\n }\n\n return prunedMessages;\n }\n\n /**\n * Get current token count including system prompt and messages\n * @returns Current token count\n */\n getCurrentTokenCount(): number {\n const messageTokens = this.tokenCounter.countMessagesTokens(this.messages);\n return this.systemPromptTokens + messageTokens;\n }\n\n /**\n * Get remaining token capacity before hitting the reserve limit\n * @returns Remaining tokens that can be used\n */\n getRemainingTokenCapacity(): number {\n return Math.max(0, this.maxTokens - this.getCurrentTokenCount());\n }\n\n /**\n * Check if a message can be added without exceeding limits\n * @param message - The message to check\n * @returns True if message can be added within reserve limits\n */\n canAddMessage(message: BaseMessage): boolean {\n const messageTokens = this.tokenCounter.countMessageTokens(message);\n const currentTokens = this.getCurrentTokenCount();\n const wouldExceedReserve =\n currentTokens + messageTokens > this.maxTokens - this.reserveTokens;\n\n if (messageTokens > this.maxTokens) {\n return false;\n }\n\n return !wouldExceedReserve || this.messages.length > 0;\n }\n\n /**\n * Get all messages in the memory window\n * @returns Copy of current messages array\n */\n getMessages(): BaseMessage[] {\n return [...this.messages];\n }\n\n /**\n * Clear all messages from the memory window\n */\n clear(): void {\n this.messages = [];\n }\n\n /**\n * Set the system prompt and update token calculations\n * @param systemPrompt - The system prompt text\n */\n setSystemPrompt(systemPrompt: string): void {\n this.systemPrompt = systemPrompt;\n this.systemPromptTokens =\n this.tokenCounter.estimateSystemPromptTokens(systemPrompt);\n }\n\n /**\n * Get the current system prompt\n * @returns Current system prompt\n */\n getSystemPrompt(): string {\n return this.systemPrompt;\n }\n\n /**\n * Get current configuration\n * @returns Memory window configuration\n */\n getConfig(): {\n maxTokens: number;\n reserveTokens: number;\n currentTokens: number;\n messageCount: number;\n systemPromptTokens: number;\n } {\n return {\n maxTokens: this.maxTokens,\n reserveTokens: this.reserveTokens,\n currentTokens: this.getCurrentTokenCount(),\n messageCount: this.messages.length,\n systemPromptTokens: this.systemPromptTokens,\n };\n }\n\n /**\n * Update token limits\n * @param maxTokens - New maximum token limit\n * @param reserveTokens - New reserve token amount\n */\n updateLimits(maxTokens: number, reserveTokens?: number): void {\n if (reserveTokens !== undefined && reserveTokens >= maxTokens) {\n throw new Error('Reserve tokens must be less than max tokens');\n }\n\n this.maxTokens = maxTokens;\n if (reserveTokens !== undefined) {\n this.reserveTokens = reserveTokens;\n }\n\n if (this.getCurrentTokenCount() > this.maxTokens - this.reserveTokens) {\n this.pruneToFit();\n }\n }\n\n /**\n * Get statistics about the memory window\n * @returns Memory usage statistics\n */\n getStats(): {\n totalMessages: number;\n currentTokens: number;\n maxTokens: number;\n reserveTokens: number;\n systemPromptTokens: number;\n usagePercentage: number;\n remainingCapacity: number;\n canAcceptMore: boolean;\n } {\n const currentTokens = this.getCurrentTokenCount();\n const capacity = this.maxTokens;\n const usagePercentage = (currentTokens / capacity) * 100;\n\n return {\n totalMessages: this.messages.length,\n currentTokens,\n maxTokens: capacity,\n reserveTokens: this.reserveTokens,\n systemPromptTokens: this.systemPromptTokens,\n usagePercentage: Math.round(usagePercentage * 100) / 100,\n remainingCapacity: this.getRemainingTokenCapacity(),\n canAcceptMore: this.getRemainingTokenCapacity() > this.reserveTokens,\n };\n }\n\n /**\n * Clean up resources\n */\n dispose(): void {\n this.clear();\n this.tokenCounter.dispose();\n }\n}\n"],"names":[],"mappings":"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"}
|