@hashgraphonline/conversational-agent 0.2.216 → 0.2.217
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/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/SwarmPlugin.d.ts +17 -0
- package/dist/cjs/plugins/community/swarm/__tests__/SwarmPlugin.mocks.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/__tests__/SwarmPlugin.test.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/__tests__/tools/CreatePostageStampTool.test.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/__tests__/tools/DownloadDataTool.test.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/__tests__/tools/DownloadFilesTool.test.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/__tests__/tools/ExtendPostageStampTool.test.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/__tests__/tools/GetPostageStampTool.test.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/__tests__/tools/ListPostageStampsTool.test.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/__tests__/tools/QueryUploadProgressTool.test.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/__tests__/tools/ReadFeedTool.test.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/__tests__/tools/SwarmTool.mocks.d.ts +14 -0
- package/dist/cjs/plugins/community/swarm/__tests__/tools/UpdateFeedTool.test.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/__tests__/tools/UploadDataTool.test.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/__tests__/tools/UploadFileTool.test.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/__tests__/tools/UploadFolderTool.test.d.ts +1 -0
- package/dist/cjs/plugins/community/swarm/config.d.ts +6 -0
- package/dist/cjs/plugins/community/swarm/constants.d.ts +8 -0
- package/dist/cjs/plugins/community/swarm/index.d.ts +2 -0
- package/dist/cjs/plugins/community/swarm/model.d.ts +23 -0
- package/dist/cjs/plugins/community/swarm/tools/CreatePostageStampTool.d.ts +47 -0
- package/dist/cjs/plugins/community/swarm/tools/DownloadDataTool.d.ts +35 -0
- package/dist/cjs/plugins/community/swarm/tools/DownloadFilesTool.d.ts +41 -0
- package/dist/cjs/plugins/community/swarm/tools/ExtendPostageStampTool.d.ts +47 -0
- package/dist/cjs/plugins/community/swarm/tools/GetPostageStampTool.d.ts +35 -0
- package/dist/cjs/plugins/community/swarm/tools/ListPostageStampsTool.d.ts +53 -0
- package/dist/cjs/plugins/community/swarm/tools/QueryUploadProgressTool.d.ts +35 -0
- package/dist/cjs/plugins/community/swarm/tools/ReadFeedTool.d.ts +41 -0
- package/dist/cjs/plugins/community/swarm/tools/UpdateFeedTool.d.ts +47 -0
- package/dist/cjs/plugins/community/swarm/tools/UploadDataTool.d.ts +47 -0
- package/dist/cjs/plugins/community/swarm/tools/UploadFileTool.d.ts +53 -0
- package/dist/cjs/plugins/community/swarm/tools/UploadFolderTool.d.ts +47 -0
- package/dist/cjs/plugins/community/swarm/utils.d.ts +22 -0
- package/dist/cjs/plugins/index.d.ts +1 -0
- package/dist/esm/index.js +33 -31
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index10.js +13 -677
- package/dist/esm/index10.js.map +1 -1
- package/dist/esm/index11.js +601 -234
- package/dist/esm/index11.js.map +1 -1
- package/dist/esm/index12.js +296 -136
- package/dist/esm/index12.js.map +1 -1
- package/dist/esm/index13.js +127 -235
- package/dist/esm/index13.js.map +1 -1
- package/dist/esm/index14.js +247 -84
- package/dist/esm/index14.js.map +1 -1
- package/dist/esm/index15.js +81 -159
- package/dist/esm/index15.js.map +1 -1
- package/dist/esm/index16.js +155 -229
- package/dist/esm/index16.js.map +1 -1
- package/dist/esm/index17.js +238 -140
- package/dist/esm/index17.js.map +1 -1
- package/dist/esm/index18.js +139 -493
- package/dist/esm/index18.js.map +1 -1
- package/dist/esm/index19.js +479 -91
- package/dist/esm/index19.js.map +1 -1
- package/dist/esm/index20.js +88 -147
- package/dist/esm/index20.js.map +1 -1
- package/dist/esm/index21.js +127 -666
- package/dist/esm/index21.js.map +1 -1
- package/dist/esm/index22.js +698 -44
- package/dist/esm/index22.js.map +1 -1
- package/dist/esm/index23.js +45 -304
- package/dist/esm/index23.js.map +1 -1
- package/dist/esm/index24.js +303 -153
- package/dist/esm/index24.js.map +1 -1
- package/dist/esm/index25.js +150 -117
- package/dist/esm/index25.js.map +1 -1
- package/dist/esm/index26.js +154 -18
- package/dist/esm/index26.js.map +1 -1
- package/dist/esm/index27.js +18 -22
- package/dist/esm/index27.js.map +1 -1
- package/dist/esm/index28.js +15 -74
- package/dist/esm/index28.js.map +1 -1
- package/dist/esm/index29.js +70 -295
- package/dist/esm/index29.js.map +1 -1
- package/dist/esm/index30.js +279 -100
- package/dist/esm/index30.js.map +1 -1
- package/dist/esm/index31.js +86 -922
- package/dist/esm/index31.js.map +1 -1
- package/dist/esm/index32.js +904 -189
- package/dist/esm/index32.js.map +1 -1
- package/dist/esm/index33.js +185 -1169
- package/dist/esm/index33.js.map +1 -1
- package/dist/esm/index34.js +1218 -112
- package/dist/esm/index34.js.map +1 -1
- package/dist/esm/index35.js +111 -99
- package/dist/esm/index35.js.map +1 -1
- package/dist/esm/index36.js +113 -8
- package/dist/esm/index36.js.map +1 -1
- package/dist/esm/index37.js +8 -45
- package/dist/esm/index37.js.map +1 -1
- package/dist/esm/index38.js +41 -102
- package/dist/esm/index38.js.map +1 -1
- package/dist/esm/index39.js +96 -55
- package/dist/esm/index39.js.map +1 -1
- package/dist/esm/index4.js +1 -1
- package/dist/esm/index40.js +58 -71
- package/dist/esm/index40.js.map +1 -1
- package/dist/esm/index41.js +79 -21
- package/dist/esm/index41.js.map +1 -1
- package/dist/esm/index42.js +21 -5
- package/dist/esm/index42.js.map +1 -1
- package/dist/esm/index43.js +4 -11
- package/dist/esm/index43.js.map +1 -1
- package/dist/esm/index44.js +12 -322
- package/dist/esm/index44.js.map +1 -1
- package/dist/esm/index45.js +280 -142
- package/dist/esm/index45.js.map +1 -1
- package/dist/esm/index46.js +181 -24
- package/dist/esm/index46.js.map +1 -1
- package/dist/esm/index47.js +7 -95
- package/dist/esm/index47.js.map +1 -1
- package/dist/esm/index48.js +77 -7
- package/dist/esm/index48.js.map +1 -1
- package/dist/esm/index49.js +75 -0
- package/dist/esm/index49.js.map +1 -0
- package/dist/esm/index5.js +2 -2
- package/dist/esm/index50.js +57 -0
- package/dist/esm/index50.js.map +1 -0
- package/dist/esm/index51.js +103 -0
- package/dist/esm/index51.js.map +1 -0
- package/dist/esm/index52.js +79 -0
- package/dist/esm/index52.js.map +1 -0
- package/dist/esm/index53.js +75 -0
- package/dist/esm/index53.js.map +1 -0
- package/dist/esm/index54.js +124 -0
- package/dist/esm/index54.js.map +1 -0
- package/dist/esm/index55.js +58 -0
- package/dist/esm/index55.js.map +1 -0
- package/dist/esm/index56.js +83 -0
- package/dist/esm/index56.js.map +1 -0
- package/dist/esm/index57.js +100 -0
- package/dist/esm/index57.js.map +1 -0
- package/dist/esm/index58.js +118 -0
- package/dist/esm/index58.js.map +1 -0
- package/dist/esm/index59.js +108 -0
- package/dist/esm/index59.js.map +1 -0
- package/dist/esm/index6.js +132 -833
- package/dist/esm/index6.js.map +1 -1
- package/dist/esm/index60.js +30 -0
- package/dist/esm/index60.js.map +1 -0
- package/dist/esm/index61.js +98 -0
- package/dist/esm/index61.js.map +1 -0
- package/dist/esm/index62.js +131 -0
- package/dist/esm/index62.js.map +1 -0
- package/dist/esm/index63.js +19 -0
- package/dist/esm/index63.js.map +1 -0
- package/dist/esm/index7.js +826 -75
- package/dist/esm/index7.js.map +1 -1
- package/dist/esm/index8.js +91 -13
- package/dist/esm/index8.js.map +1 -1
- package/dist/esm/index9.js +13 -17
- package/dist/esm/index9.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/plugins/community/swarm/SwarmPlugin.d.ts +17 -0
- package/dist/types/plugins/community/swarm/__tests__/SwarmPlugin.mocks.d.ts +1 -0
- package/dist/types/plugins/community/swarm/__tests__/SwarmPlugin.test.d.ts +1 -0
- package/dist/types/plugins/community/swarm/__tests__/tools/CreatePostageStampTool.test.d.ts +1 -0
- package/dist/types/plugins/community/swarm/__tests__/tools/DownloadDataTool.test.d.ts +1 -0
- package/dist/types/plugins/community/swarm/__tests__/tools/DownloadFilesTool.test.d.ts +1 -0
- package/dist/types/plugins/community/swarm/__tests__/tools/ExtendPostageStampTool.test.d.ts +1 -0
- package/dist/types/plugins/community/swarm/__tests__/tools/GetPostageStampTool.test.d.ts +1 -0
- package/dist/types/plugins/community/swarm/__tests__/tools/ListPostageStampsTool.test.d.ts +1 -0
- package/dist/types/plugins/community/swarm/__tests__/tools/QueryUploadProgressTool.test.d.ts +1 -0
- package/dist/types/plugins/community/swarm/__tests__/tools/ReadFeedTool.test.d.ts +1 -0
- package/dist/types/plugins/community/swarm/__tests__/tools/SwarmTool.mocks.d.ts +14 -0
- package/dist/types/plugins/community/swarm/__tests__/tools/UpdateFeedTool.test.d.ts +1 -0
- package/dist/types/plugins/community/swarm/__tests__/tools/UploadDataTool.test.d.ts +1 -0
- package/dist/types/plugins/community/swarm/__tests__/tools/UploadFileTool.test.d.ts +1 -0
- package/dist/types/plugins/community/swarm/__tests__/tools/UploadFolderTool.test.d.ts +1 -0
- package/dist/types/plugins/community/swarm/config.d.ts +6 -0
- package/dist/types/plugins/community/swarm/constants.d.ts +8 -0
- package/dist/types/plugins/community/swarm/index.d.ts +2 -0
- package/dist/types/plugins/community/swarm/model.d.ts +23 -0
- package/dist/types/plugins/community/swarm/tools/CreatePostageStampTool.d.ts +47 -0
- package/dist/types/plugins/community/swarm/tools/DownloadDataTool.d.ts +35 -0
- package/dist/types/plugins/community/swarm/tools/DownloadFilesTool.d.ts +41 -0
- package/dist/types/plugins/community/swarm/tools/ExtendPostageStampTool.d.ts +47 -0
- package/dist/types/plugins/community/swarm/tools/GetPostageStampTool.d.ts +35 -0
- package/dist/types/plugins/community/swarm/tools/ListPostageStampsTool.d.ts +53 -0
- package/dist/types/plugins/community/swarm/tools/QueryUploadProgressTool.d.ts +35 -0
- package/dist/types/plugins/community/swarm/tools/ReadFeedTool.d.ts +41 -0
- package/dist/types/plugins/community/swarm/tools/UpdateFeedTool.d.ts +47 -0
- package/dist/types/plugins/community/swarm/tools/UploadDataTool.d.ts +47 -0
- package/dist/types/plugins/community/swarm/tools/UploadFileTool.d.ts +53 -0
- package/dist/types/plugins/community/swarm/tools/UploadFolderTool.d.ts +47 -0
- package/dist/types/plugins/community/swarm/utils.d.ts +22 -0
- package/dist/types/plugins/index.d.ts +1 -0
- package/package.json +36 -26
- package/src/index.ts +1 -0
- package/src/plugins/community/swarm/README.md +279 -0
- package/src/plugins/community/swarm/SwarmPlugin.ts +178 -0
- package/src/plugins/community/swarm/__tests__/SwarmPlugin.mocks.ts +105 -0
- package/src/plugins/community/swarm/__tests__/SwarmPlugin.test.ts +93 -0
- package/src/plugins/community/swarm/__tests__/tools/CreatePostageStampTool.test.ts +152 -0
- package/src/plugins/community/swarm/__tests__/tools/DownloadDataTool.test.ts +93 -0
- package/src/plugins/community/swarm/__tests__/tools/DownloadFilesTool.test.ts +163 -0
- package/src/plugins/community/swarm/__tests__/tools/ExtendPostageStampTool.test.ts +132 -0
- package/src/plugins/community/swarm/__tests__/tools/GetPostageStampTool.test.ts +83 -0
- package/src/plugins/community/swarm/__tests__/tools/ListPostageStampsTool.test.ts +219 -0
- package/src/plugins/community/swarm/__tests__/tools/QueryUploadProgressTool.test.ts +169 -0
- package/src/plugins/community/swarm/__tests__/tools/ReadFeedTool.test.ts +133 -0
- package/src/plugins/community/swarm/__tests__/tools/SwarmTool.mocks.ts +67 -0
- package/src/plugins/community/swarm/__tests__/tools/UpdateFeedTool.test.ts +148 -0
- package/src/plugins/community/swarm/__tests__/tools/UploadDataTool.test.ts +125 -0
- package/src/plugins/community/swarm/__tests__/tools/UploadFileTool.test.ts +194 -0
- package/src/plugins/community/swarm/__tests__/tools/UploadFolderTool.test.ts +118 -0
- package/src/plugins/community/swarm/config.ts +6 -0
- package/src/plugins/community/swarm/constants.ts +12 -0
- package/src/plugins/community/swarm/index.ts +2 -0
- package/src/plugins/community/swarm/model.ts +23 -0
- package/src/plugins/community/swarm/tools/CreatePostageStampTool.ts +137 -0
- package/src/plugins/community/swarm/tools/DownloadDataTool.ts +79 -0
- package/src/plugins/community/swarm/tools/DownloadFilesTool.ts +155 -0
- package/src/plugins/community/swarm/tools/ExtendPostageStampTool.ts +112 -0
- package/src/plugins/community/swarm/tools/GetPostageStampTool.ts +92 -0
- package/src/plugins/community/swarm/tools/ListPostageStampsTool.ts +124 -0
- package/src/plugins/community/swarm/tools/QueryUploadProgressTool.ts +109 -0
- package/src/plugins/community/swarm/tools/ReadFeedTool.ts +110 -0
- package/src/plugins/community/swarm/tools/UpdateFeedTool.ts +149 -0
- package/src/plugins/community/swarm/tools/UploadDataTool.ts +109 -0
- package/src/plugins/community/swarm/tools/UploadFileTool.ts +163 -0
- package/src/plugins/community/swarm/tools/UploadFolderTool.ts +150 -0
- package/src/plugins/community/swarm/utils.ts +172 -0
- package/src/plugins/index.ts +1 -0
- package/cli/dist/CLIApp.d.ts +0 -11
- package/cli/dist/CLIApp.d.ts.map +0 -1
- package/cli/dist/CLIApp.js +0 -128
- package/cli/dist/CLIApp.js.map +0 -1
- package/cli/dist/LocalConversationalAgent.d.ts +0 -37
- package/cli/dist/LocalConversationalAgent.js +0 -58
- package/cli/dist/app.d.ts +0 -18
- package/cli/dist/app.d.ts.map +0 -1
- package/cli/dist/app.js +0 -14
- package/cli/dist/app.js.map +0 -1
- package/cli/dist/cli.d.ts +0 -3
- package/cli/dist/cli.d.ts.map +0 -1
- package/cli/dist/cli.js +0 -87
- package/cli/dist/cli.js.map +0 -1
- 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 -21
- package/cli/dist/components/ChatScreen.d.ts.map +0 -1
- package/cli/dist/components/ChatScreen.js +0 -40
- package/cli/dist/components/ChatScreen.js.map +0 -1
- 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 -3
- package/cli/dist/components/LoadingScreen.d.ts.map +0 -1
- package/cli/dist/components/LoadingScreen.js +0 -17
- package/cli/dist/components/LoadingScreen.js.map +0 -1
- 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.d.ts.map +0 -1
- package/cli/dist/components/MCPConfigScreen.js +0 -186
- package/cli/dist/components/MCPConfigScreen.js.map +0 -1
- package/cli/dist/components/ScreenRouter.d.ts +0 -13
- package/cli/dist/components/ScreenRouter.d.ts.map +0 -1
- package/cli/dist/components/ScreenRouter.js +0 -23
- package/cli/dist/components/ScreenRouter.js.map +0 -1
- package/cli/dist/components/SetupScreen.d.ts +0 -16
- package/cli/dist/components/SetupScreen.d.ts.map +0 -1
- package/cli/dist/components/SetupScreen.js +0 -67
- package/cli/dist/components/SetupScreen.js.map +0 -1
- 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 -10
- package/cli/dist/components/StatusBadge.d.ts.map +0 -1
- package/cli/dist/components/StatusBadge.js +0 -24
- package/cli/dist/components/StatusBadge.js.map +0 -1
- package/cli/dist/components/TerminalWindow.d.ts +0 -9
- package/cli/dist/components/TerminalWindow.d.ts.map +0 -1
- package/cli/dist/components/TerminalWindow.js +0 -19
- package/cli/dist/components/TerminalWindow.js.map +0 -1
- package/cli/dist/components/WelcomeScreen.d.ts +0 -12
- package/cli/dist/components/WelcomeScreen.d.ts.map +0 -1
- package/cli/dist/components/WelcomeScreen.js +0 -47
- package/cli/dist/components/WelcomeScreen.js.map +0 -1
- package/cli/dist/context/AppContext.d.ts +0 -68
- package/cli/dist/context/AppContext.js +0 -363
- package/cli/dist/headless-runner.d.ts +0 -17
- package/cli/dist/headless-runner.d.ts.map +0 -1
- package/cli/dist/headless-runner.js +0 -128
- package/cli/dist/headless-runner.js.map +0 -1
- package/cli/dist/hooks/useInitializeAgent.d.ts +0 -19
- package/cli/dist/hooks/useInitializeAgent.d.ts.map +0 -1
- package/cli/dist/hooks/useInitializeAgent.js +0 -29
- package/cli/dist/hooks/useInitializeAgent.js.map +0 -1
- package/cli/dist/hooks/useStableState.d.ts +0 -38
- package/cli/dist/hooks/useStableState.d.ts.map +0 -1
- package/cli/dist/hooks/useStableState.js +0 -69
- package/cli/dist/hooks/useStableState.js.map +0 -1
- package/cli/dist/managers/AgentManager.d.ts +0 -58
- package/cli/dist/managers/AgentManager.d.ts.map +0 -1
- package/cli/dist/managers/AgentManager.js +0 -121
- package/cli/dist/managers/AgentManager.js.map +0 -1
- package/cli/dist/managers/ConfigManager.d.ts +0 -54
- package/cli/dist/managers/ConfigManager.d.ts.map +0 -1
- package/cli/dist/managers/ConfigManager.js +0 -188
- package/cli/dist/managers/ConfigManager.js.map +0 -1
- package/cli/dist/types.d.ts +0 -52
- package/cli/dist/types.d.ts.map +0 -1
- package/cli/dist/types.js +0 -34
- package/cli/dist/types.js.map +0 -1
package/dist/esm/index46.js
CHANGED
|
@@ -1,30 +1,187 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
storageBackend: "memory",
|
|
10
|
-
cleanupPolicies: {
|
|
11
|
-
recent: { maxAgeMs: 30 * 60 * 1e3, priority: 1 },
|
|
12
|
-
userContent: { maxAgeMs: 2 * 60 * 60 * 1e3, priority: 2 },
|
|
13
|
-
agentGenerated: { maxAgeMs: 60 * 60 * 1e3, priority: 3 },
|
|
14
|
-
default: { maxAgeMs: 60 * 60 * 1e3, priority: 4 }
|
|
1
|
+
import { ZodError } from "zod";
|
|
2
|
+
import { Logger } from "@hashgraphonline/standards-sdk";
|
|
3
|
+
class ExecutionPipeline {
|
|
4
|
+
constructor(toolRegistry, formEngine, memory, logger) {
|
|
5
|
+
this.toolRegistry = toolRegistry;
|
|
6
|
+
this.formEngine = formEngine;
|
|
7
|
+
this.memory = memory;
|
|
8
|
+
this.logger = logger || new Logger({ module: "ExecutionPipeline" });
|
|
15
9
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Execute a tool through the pipeline
|
|
12
|
+
*/
|
|
13
|
+
async execute(toolName, input, sessionContext) {
|
|
14
|
+
const traceId = `trace-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
15
|
+
const startTime = Date.now();
|
|
16
|
+
const toolEntry = this.toolRegistry.getTool(toolName);
|
|
17
|
+
if (!toolEntry) {
|
|
18
|
+
throw new Error(`Tool not found in registry: ${toolName}`);
|
|
19
|
+
}
|
|
20
|
+
const context = {
|
|
21
|
+
toolName,
|
|
22
|
+
input,
|
|
23
|
+
session: sessionContext || this.buildDefaultSession(),
|
|
24
|
+
memory: this.memory,
|
|
25
|
+
traceId,
|
|
26
|
+
toolEntry
|
|
27
|
+
};
|
|
28
|
+
try {
|
|
29
|
+
const shouldGenerateForm = await this.checkFormGeneration(context);
|
|
30
|
+
if (shouldGenerateForm.requiresForm && shouldGenerateForm.formMessage) {
|
|
31
|
+
return {
|
|
32
|
+
success: false,
|
|
33
|
+
output: "Form generation required",
|
|
34
|
+
requiresForm: true,
|
|
35
|
+
formMessage: shouldGenerateForm.formMessage,
|
|
36
|
+
traceId,
|
|
37
|
+
executionTime: Date.now() - startTime
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const result = await this.executeToolDirect(context);
|
|
41
|
+
return {
|
|
42
|
+
success: true,
|
|
43
|
+
output: result,
|
|
44
|
+
traceId,
|
|
45
|
+
executionTime: Date.now() - startTime
|
|
46
|
+
};
|
|
47
|
+
} catch (error) {
|
|
48
|
+
return this.handleExecutionError(
|
|
49
|
+
error,
|
|
50
|
+
context,
|
|
51
|
+
traceId,
|
|
52
|
+
Date.now() - startTime
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Execute tool with validation
|
|
58
|
+
*/
|
|
59
|
+
async executeWithValidation(toolName, input, sessionContext) {
|
|
60
|
+
return this.execute(toolName, input, sessionContext);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Process form submission
|
|
64
|
+
*/
|
|
65
|
+
async processFormSubmission(toolName, formId, parameters, sessionContext) {
|
|
66
|
+
const traceId = `form-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
67
|
+
const startTime = Date.now();
|
|
68
|
+
try {
|
|
69
|
+
const formSubmission = {
|
|
70
|
+
formId,
|
|
71
|
+
toolName,
|
|
72
|
+
parameters,
|
|
73
|
+
timestamp: Date.now()
|
|
74
|
+
};
|
|
75
|
+
const processedInput = await this.formEngine.processSubmission(
|
|
76
|
+
formSubmission
|
|
77
|
+
);
|
|
78
|
+
return this.execute(toolName, processedInput, sessionContext);
|
|
79
|
+
} catch (error) {
|
|
80
|
+
return {
|
|
81
|
+
success: false,
|
|
82
|
+
output: "Form submission processing failed",
|
|
83
|
+
error: error instanceof Error ? error.message : String(error),
|
|
84
|
+
traceId,
|
|
85
|
+
executionTime: Date.now() - startTime
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Check if form generation is required
|
|
91
|
+
*/
|
|
92
|
+
async checkFormGeneration(context) {
|
|
93
|
+
const inputRecord = context.input;
|
|
94
|
+
if (inputRecord?.__fromForm === true || inputRecord?.renderForm === false) {
|
|
95
|
+
return { requiresForm: false };
|
|
96
|
+
}
|
|
97
|
+
if (!this.formEngine.shouldGenerateForm(context.toolEntry.tool, context.input)) {
|
|
98
|
+
return { requiresForm: false };
|
|
99
|
+
}
|
|
100
|
+
const formMessage = await this.formEngine.generateForm(
|
|
101
|
+
context.toolName,
|
|
102
|
+
context.toolEntry.tool,
|
|
103
|
+
context.input
|
|
104
|
+
);
|
|
105
|
+
if (formMessage) {
|
|
106
|
+
return { requiresForm: true, formMessage };
|
|
107
|
+
}
|
|
108
|
+
return { requiresForm: false };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Execute tool directly
|
|
112
|
+
*/
|
|
113
|
+
async executeToolDirect(context) {
|
|
114
|
+
const { toolEntry, input } = context;
|
|
115
|
+
const parameters = input || {};
|
|
116
|
+
const mergedArgs = { ...parameters, renderForm: false };
|
|
117
|
+
if (toolEntry.wrapper) {
|
|
118
|
+
return this.executeWrappedTool(toolEntry, mergedArgs);
|
|
119
|
+
}
|
|
120
|
+
return await toolEntry.tool.call(mergedArgs);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Execute wrapped tool
|
|
124
|
+
*/
|
|
125
|
+
async executeWrappedTool(toolEntry, mergedArgs) {
|
|
126
|
+
const wrapper = toolEntry.wrapper;
|
|
127
|
+
if (!wrapper) {
|
|
128
|
+
throw new Error("Tool wrapper not found");
|
|
129
|
+
}
|
|
130
|
+
const wrapperAsAny = wrapper;
|
|
131
|
+
if (wrapperAsAny.executeOriginal) {
|
|
132
|
+
return await wrapperAsAny.executeOriginal(mergedArgs);
|
|
133
|
+
}
|
|
134
|
+
if (wrapperAsAny.originalTool?.call) {
|
|
135
|
+
return await wrapperAsAny.originalTool.call(mergedArgs);
|
|
136
|
+
}
|
|
137
|
+
return await toolEntry.originalTool.call(mergedArgs);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Handle execution error
|
|
141
|
+
*/
|
|
142
|
+
handleExecutionError(error, context, traceId, executionTime) {
|
|
143
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
144
|
+
if (error instanceof ZodError) {
|
|
145
|
+
return {
|
|
146
|
+
success: false,
|
|
147
|
+
output: "Validation error occurred",
|
|
148
|
+
error: errorMessage,
|
|
149
|
+
traceId,
|
|
150
|
+
executionTime
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
this.logger.error(`Tool execution failed: ${context.toolName}`, {
|
|
154
|
+
traceId,
|
|
155
|
+
error: errorMessage
|
|
156
|
+
});
|
|
157
|
+
return {
|
|
158
|
+
success: false,
|
|
159
|
+
output: "Tool execution failed",
|
|
160
|
+
error: errorMessage,
|
|
161
|
+
traceId,
|
|
162
|
+
executionTime
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Build default session context
|
|
167
|
+
*/
|
|
168
|
+
buildDefaultSession() {
|
|
169
|
+
return {
|
|
170
|
+
sessionId: `session-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
171
|
+
timestamp: Date.now()
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get statistics about the pipeline
|
|
176
|
+
*/
|
|
177
|
+
getStatistics() {
|
|
178
|
+
return {
|
|
179
|
+
totalMiddleware: 0,
|
|
180
|
+
registeredMiddleware: []
|
|
181
|
+
};
|
|
24
182
|
}
|
|
25
183
|
}
|
|
26
184
|
export {
|
|
27
|
-
|
|
28
|
-
DEFAULT_CONTENT_REFERENCE_CONFIG
|
|
185
|
+
ExecutionPipeline
|
|
29
186
|
};
|
|
30
187
|
//# sourceMappingURL=index46.js.map
|
package/dist/esm/index46.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index46.js","sources":["../../src/types/content-reference.ts"],"sourcesContent":["/**\n * Content Reference System Types\n *\n * Shared interfaces for the Reference-Based Content System that handles\n * large content storage with unique reference IDs to optimize context window usage.\n */\n\n/**\n * Unique identifier for stored content references\n * Format: Cryptographically secure 32-byte identifier with base64url encoding\n */\nexport type ReferenceId = string;\n\n/**\n * Lifecycle state of a content reference\n */\nexport type ReferenceLifecycleState =\n | 'active'\n | 'expired'\n | 'cleanup_pending'\n | 'invalid';\n\n/**\n * Content types supported by the reference system\n */\nexport type ContentType =\n | 'text'\n | 'json'\n | 'html'\n | 'markdown'\n | 'binary'\n | 'unknown';\n\n/**\n * Sources that created the content reference\n */\nexport type ContentSource =\n | 'mcp_tool'\n | 'user_upload'\n | 'agent_generated'\n | 'system';\n\n/**\n * Metadata associated with stored content\n */\nexport interface ContentMetadata {\n /** Content type classification */\n contentType: ContentType;\n\n /** MIME type of the original content */\n mimeType?: string;\n\n /** Size in bytes of the stored content */\n sizeBytes: number;\n\n /** When the content was originally stored */\n createdAt: Date;\n\n /** Last time the content was accessed via reference resolution */\n lastAccessedAt: Date;\n\n /** Source that created this content reference */\n source: ContentSource;\n\n /** Name of the MCP tool that generated the content (if applicable) */\n mcpToolName?: string;\n\n /** Original filename or suggested name for the content */\n fileName?: string;\n\n /** Number of times this reference has been resolved */\n accessCount: number;\n\n /** Tags for categorization and cleanup policies */\n tags?: string[];\n\n /** Custom metadata from the source */\n customMetadata?: Record<string, unknown>;\n}\n\n/**\n * Core content reference object passed through agent context\n * Designed to be lightweight (<100 tokens) while providing enough\n * information for agent decision-making\n */\nexport interface ContentReference {\n /** Unique identifier for resolving the content */\n referenceId: ReferenceId;\n\n /** Current lifecycle state */\n state: ReferenceLifecycleState;\n\n /** Brief description or preview of the content (max 200 chars) */\n preview: string;\n\n /** Essential metadata for agent decision-making */\n metadata: Pick<\n ContentMetadata,\n 'contentType' | 'sizeBytes' | 'source' | 'fileName' | 'mimeType'\n >;\n\n /** When this reference was created */\n createdAt: Date;\n\n /** Special format indicator for reference IDs in content */\n readonly format: 'ref://{id}';\n}\n\n/**\n * Result of attempting to resolve a content reference\n */\nexport interface ReferenceResolutionResult {\n /** Whether the resolution was successful */\n success: boolean;\n\n /** The resolved content if successful */\n content?: Buffer;\n\n /** Complete metadata if successful */\n metadata?: ContentMetadata;\n\n /** Error message if resolution failed */\n error?: string;\n\n /** Specific error type for targeted error handling */\n errorType?:\n | 'not_found'\n | 'expired'\n | 'corrupted'\n | 'access_denied'\n | 'system_error';\n\n /** Suggested actions for recovery */\n suggestedActions?: string[];\n}\n\n/**\n * Configuration for content reference storage and lifecycle\n */\nexport interface ContentReferenceConfig {\n /** Size threshold above which content should be stored as references (default: 10KB) */\n sizeThresholdBytes: number;\n\n /** Maximum age for unused references before cleanup (default: 1 hour) */\n maxAgeMs: number;\n\n /** Maximum number of references to store simultaneously */\n maxReferences: number;\n\n /** Maximum total storage size for all references */\n maxTotalStorageBytes: number;\n\n /** Whether to enable automatic cleanup */\n enableAutoCleanup: boolean;\n\n /** Interval for cleanup checks in milliseconds */\n cleanupIntervalMs: number;\n\n /** Whether to persist references across restarts */\n enablePersistence: boolean;\n\n /** Storage backend configuration */\n storageBackend: 'memory' | 'filesystem' | 'hybrid';\n\n /** Cleanup policies for different content types */\n cleanupPolicies: {\n /** Policy for content marked as \"recent\" from MCP tools */\n recent: { maxAgeMs: number; priority: number };\n\n /** Policy for user-uploaded content */\n userContent: { maxAgeMs: number; priority: number };\n\n /** Policy for agent-generated content */\n agentGenerated: { maxAgeMs: number; priority: number };\n\n /** Default policy for other content */\n default: { maxAgeMs: number; priority: number };\n };\n}\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONTENT_REFERENCE_CONFIG: ContentReferenceConfig = {\n sizeThresholdBytes: 10 * 1024,\n maxAgeMs: 60 * 60 * 1000,\n maxReferences: 100,\n maxTotalStorageBytes: 100 * 1024 * 1024,\n enableAutoCleanup: true,\n cleanupIntervalMs: 5 * 60 * 1000,\n enablePersistence: false,\n storageBackend: 'memory',\n cleanupPolicies: {\n recent: { maxAgeMs: 30 * 60 * 1000, priority: 1 },\n userContent: { maxAgeMs: 2 * 60 * 60 * 1000, priority: 2 },\n agentGenerated: { maxAgeMs: 60 * 60 * 1000, priority: 3 },\n default: { maxAgeMs: 60 * 60 * 1000, priority: 4 },\n },\n};\n\n/**\n * Statistics about content reference usage and storage\n */\nexport interface ContentReferenceStats {\n /** Total number of active references */\n activeReferences: number;\n\n /** Total storage used by all references in bytes */\n totalStorageBytes: number;\n\n /** Number of references cleaned up in last cleanup cycle */\n recentlyCleanedUp: number;\n\n /** Number of successful reference resolutions since startup */\n totalResolutions: number;\n\n /** Number of failed resolution attempts */\n failedResolutions: number;\n\n /** Average content size in bytes */\n averageContentSize: number;\n\n /** Most frequently accessed reference ID */\n mostAccessedReferenceId?: ReferenceId;\n\n /** Storage utilization percentage */\n storageUtilization: number;\n\n /** Performance metrics */\n performanceMetrics: {\n /** Average time to create a reference in milliseconds */\n averageCreationTimeMs: number;\n\n /** Average time to resolve a reference in milliseconds */\n averageResolutionTimeMs: number;\n\n /** Average cleanup time in milliseconds */\n averageCleanupTimeMs: number;\n };\n}\n\n/**\n * Error types for content reference operations\n */\nexport class ContentReferenceError extends Error {\n constructor(\n message: string,\n public readonly type: ReferenceResolutionResult['errorType'],\n public readonly referenceId?: ReferenceId,\n public readonly suggestedActions?: string[]\n ) {\n super(message);\n this.name = 'ContentReferenceError';\n }\n}\n\n/**\n * Interface for content reference storage implementations\n */\nexport interface ContentReferenceStore {\n /**\n * Store content and return a reference\n */\n storeContent(\n content: Buffer,\n metadata: Omit<\n ContentMetadata,\n 'createdAt' | 'lastAccessedAt' | 'accessCount'\n >\n ): Promise<ContentReference>;\n\n /**\n * Resolve a reference to its content\n */\n resolveReference(\n referenceId: ReferenceId\n ): Promise<ReferenceResolutionResult>;\n\n /**\n * Check if a reference exists and is valid\n */\n hasReference(referenceId: ReferenceId): Promise<boolean>;\n\n /**\n * Mark a reference for cleanup\n */\n cleanupReference(referenceId: ReferenceId): Promise<boolean>;\n\n /**\n * Get current storage statistics\n */\n getStats(): Promise<ContentReferenceStats>;\n\n /**\n * Update configuration\n */\n updateConfig(config: Partial<ContentReferenceConfig>): Promise<void>;\n\n /**\n * Perform cleanup based on current policies\n */\n performCleanup(): Promise<{ cleanedUp: number; errors: string[] }>;\n\n /**\n * Dispose of resources\n */\n dispose(): Promise<void>;\n}\n"],"names":[],"mappings":"AAuLO,MAAM,mCAA2D;AAAA,EACtE,oBAAoB,KAAK;AAAA,EACzB,UAAU,KAAK,KAAK;AAAA,EACpB,eAAe;AAAA,EACf,sBAAsB,MAAM,OAAO;AAAA,EACnC,mBAAmB;AAAA,EACnB,mBAAmB,IAAI,KAAK;AAAA,EAC5B,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,IACf,QAAQ,EAAE,UAAU,KAAK,KAAK,KAAM,UAAU,EAAA;AAAA,IAC9C,aAAa,EAAE,UAAU,IAAI,KAAK,KAAK,KAAM,UAAU,EAAA;AAAA,IACvD,gBAAgB,EAAE,UAAU,KAAK,KAAK,KAAM,UAAU,EAAA;AAAA,IACtD,SAAS,EAAE,UAAU,KAAK,KAAK,KAAM,UAAU,EAAA;AAAA,EAAE;AAErD;AA8CO,MAAM,8BAA8B,MAAM;AAAA,EAC/C,YACE,SACgB,MACA,aACA,kBAChB;AACA,UAAM,OAAO;AAJG,SAAA,OAAA;AACA,SAAA,cAAA;AACA,SAAA,mBAAA;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;"}
|
|
1
|
+
{"version":3,"file":"index46.js","sources":["../../src/execution/execution-pipeline.ts"],"sourcesContent":["import { ZodError } from 'zod';\nimport { Logger } from '@hashgraphonline/standards-sdk';\nimport { SmartMemoryManager } from '../memory/smart-memory-manager';\nimport { FormEngine, ToolExecutionResult } from '../forms/form-engine';\nimport type { FormMessage, FormSubmission } from '../forms/types';\nimport type { ToolRegistry, ToolRegistryEntry } from '../core/tool-registry';\n\n/**\n * Session context for tool execution\n */\nexport interface SessionContext {\n sessionId: string;\n userId?: string;\n timestamp: number;\n conversationId?: string;\n}\n\n/**\n * Context passed through execution pipeline\n */\nexport interface ExecutionContext {\n toolName: string;\n input: unknown;\n session: SessionContext;\n memory: SmartMemoryManager;\n traceId: string;\n toolEntry: ToolRegistryEntry;\n}\n\n/**\n * Result of tool execution with metadata\n */\nexport interface ExecutionResult extends ToolExecutionResult {\n traceId: string;\n executionTime: number;\n}\n\n/**\n * ExecutionPipeline handles tool execution coordination\n */\nexport class ExecutionPipeline {\n private logger: Logger;\n private toolRegistry: ToolRegistry;\n private formEngine: FormEngine;\n private memory: SmartMemoryManager;\n\n constructor(\n toolRegistry: ToolRegistry,\n formEngine: FormEngine,\n memory: SmartMemoryManager,\n logger?: Logger\n ) {\n this.toolRegistry = toolRegistry;\n this.formEngine = formEngine;\n this.memory = memory;\n this.logger = logger || new Logger({ module: 'ExecutionPipeline' });\n }\n\n /**\n * Execute a tool through the pipeline\n */\n async execute(\n toolName: string,\n input: unknown,\n sessionContext?: SessionContext\n ): Promise<ExecutionResult> {\n const traceId = `trace-${Date.now()}-${Math.random()\n .toString(36)\n .substr(2, 9)}`;\n const startTime = Date.now();\n\n const toolEntry = this.toolRegistry.getTool(toolName);\n if (!toolEntry) {\n throw new Error(`Tool not found in registry: ${toolName}`);\n }\n\n const context: ExecutionContext = {\n toolName,\n input,\n session: sessionContext || this.buildDefaultSession(),\n memory: this.memory,\n traceId,\n toolEntry,\n };\n\n try {\n const shouldGenerateForm = await this.checkFormGeneration(context);\n if (shouldGenerateForm.requiresForm && shouldGenerateForm.formMessage) {\n return {\n success: false,\n output: 'Form generation required',\n requiresForm: true,\n formMessage: shouldGenerateForm.formMessage,\n traceId,\n executionTime: Date.now() - startTime,\n };\n }\n\n const result = await this.executeToolDirect(context);\n\n return {\n success: true,\n output: result,\n traceId,\n executionTime: Date.now() - startTime,\n };\n } catch (error) {\n return this.handleExecutionError(\n error,\n context,\n traceId,\n Date.now() - startTime\n );\n }\n }\n\n /**\n * Execute tool with validation\n */\n async executeWithValidation(\n toolName: string,\n input: unknown,\n sessionContext?: SessionContext\n ): Promise<ExecutionResult> {\n return this.execute(toolName, input, sessionContext);\n }\n\n /**\n * Process form submission\n */\n async processFormSubmission(\n toolName: string,\n formId: string,\n parameters: Record<string, unknown>,\n sessionContext?: SessionContext\n ): Promise<ExecutionResult> {\n const traceId = `form-${Date.now()}-${Math.random()\n .toString(36)\n .substr(2, 9)}`;\n const startTime = Date.now();\n\n try {\n const formSubmission: FormSubmission = {\n formId,\n toolName,\n parameters,\n timestamp: Date.now(),\n };\n\n const processedInput = await this.formEngine.processSubmission(\n formSubmission\n );\n\n return this.execute(toolName, processedInput, sessionContext);\n } catch (error) {\n return {\n success: false,\n output: 'Form submission processing failed',\n error: error instanceof Error ? error.message : String(error),\n traceId,\n executionTime: Date.now() - startTime,\n };\n }\n }\n\n /**\n * Check if form generation is required\n */\n private async checkFormGeneration(context: ExecutionContext): Promise<{\n requiresForm: boolean;\n formMessage?: FormMessage;\n }> {\n const inputRecord = context.input as Record<string, unknown>;\n if (inputRecord?.__fromForm === true || inputRecord?.renderForm === false) {\n return { requiresForm: false };\n }\n\n if (\n !this.formEngine.shouldGenerateForm(context.toolEntry.tool, context.input)\n ) {\n return { requiresForm: false };\n }\n\n const formMessage = await this.formEngine.generateForm(\n context.toolName,\n context.toolEntry.tool,\n context.input\n );\n\n if (formMessage) {\n return { requiresForm: true, formMessage };\n }\n\n return { requiresForm: false };\n }\n\n /**\n * Execute tool directly\n */\n private async executeToolDirect(context: ExecutionContext): Promise<string> {\n const { toolEntry, input } = context;\n const parameters = (input as Record<string, unknown>) || {};\n const mergedArgs = { ...parameters, renderForm: false };\n\n if (toolEntry.wrapper) {\n return this.executeWrappedTool(toolEntry, mergedArgs);\n }\n\n return await toolEntry.tool.call(mergedArgs);\n }\n\n /**\n * Execute wrapped tool\n */\n private async executeWrappedTool(\n toolEntry: ToolRegistryEntry,\n mergedArgs: Record<string, unknown>\n ): Promise<string> {\n const wrapper = toolEntry.wrapper;\n if (!wrapper) {\n throw new Error('Tool wrapper not found');\n }\n\n const wrapperAsAny = wrapper as unknown as {\n executeOriginal?: (args: Record<string, unknown>) => Promise<string>;\n originalTool?: {\n call?: (args: Record<string, unknown>) => Promise<string>;\n };\n };\n\n if (wrapperAsAny.executeOriginal) {\n return await wrapperAsAny.executeOriginal(mergedArgs);\n }\n\n if (wrapperAsAny.originalTool?.call) {\n return await wrapperAsAny.originalTool.call(mergedArgs);\n }\n\n return await toolEntry.originalTool.call(mergedArgs);\n }\n\n /**\n * Handle execution error\n */\n private handleExecutionError(\n error: unknown,\n context: ExecutionContext,\n traceId: string,\n executionTime: number\n ): ExecutionResult {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n if (error instanceof ZodError) {\n return {\n success: false,\n output: 'Validation error occurred',\n error: errorMessage,\n traceId,\n executionTime,\n };\n }\n\n this.logger.error(`Tool execution failed: ${context.toolName}`, {\n traceId,\n error: errorMessage,\n });\n\n return {\n success: false,\n output: 'Tool execution failed',\n error: errorMessage,\n traceId,\n executionTime,\n };\n }\n\n /**\n * Build default session context\n */\n private buildDefaultSession(): SessionContext {\n return {\n sessionId: `session-${Date.now()}-${Math.random()\n .toString(36)\n .substr(2, 9)}`,\n timestamp: Date.now(),\n };\n }\n\n /**\n * Get statistics about the pipeline\n */\n getStatistics(): {\n totalMiddleware: number;\n registeredMiddleware: string[];\n } {\n return {\n totalMiddleware: 0,\n registeredMiddleware: [],\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/index47.js
CHANGED
|
@@ -1,98 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Transfers HBAR between accounts with proper decimal handling
|
|
10
|
-
*/
|
|
11
|
-
transferHbar(params, isUserInitiated = true) {
|
|
12
|
-
this.clearNotes();
|
|
13
|
-
const transaction = new TransferTransaction();
|
|
14
|
-
if (!params.transfers || params.transfers.length === 0) {
|
|
15
|
-
throw new Error("HbarTransferParams must include at least one transfer.");
|
|
16
|
-
}
|
|
17
|
-
let netZeroInTinybars = new BigNumber(0);
|
|
18
|
-
let userTransferProcessedForScheduling = false;
|
|
19
|
-
if (isUserInitiated && this.kit.userAccountId && this.kit.operationalMode === "provideBytes" && params.transfers.length === 1) {
|
|
20
|
-
const receiverTransfer = params.transfers[0];
|
|
21
|
-
const amountValue = typeof receiverTransfer.amount === "string" || typeof receiverTransfer.amount === "number" ? receiverTransfer.amount : receiverTransfer.amount.toString();
|
|
22
|
-
const amountBigNum = new BigNumber(amountValue);
|
|
23
|
-
if (amountBigNum.isPositive()) {
|
|
24
|
-
const recipientAccountId = typeof receiverTransfer.accountId === "string" ? AccountId.fromString(receiverTransfer.accountId) : receiverTransfer.accountId;
|
|
25
|
-
const roundedAmount = amountBigNum.toFixed(8, BigNumber.ROUND_DOWN);
|
|
26
|
-
const sdkHbarAmount = Hbar.fromString(roundedAmount);
|
|
27
|
-
this.logger.info(
|
|
28
|
-
`[AccountBuilder.transferHbar] Configuring user-initiated scheduled transfer: ${sdkHbarAmount.toString()} from ${this.kit.userAccountId} to ${recipientAccountId.toString()}`
|
|
29
|
-
);
|
|
30
|
-
this.addNote(
|
|
31
|
-
`Configured HBAR transfer from your account (${this.kit.userAccountId}) to ${recipientAccountId.toString()} for ${sdkHbarAmount.toString()}.`
|
|
32
|
-
);
|
|
33
|
-
transaction.addHbarTransfer(recipientAccountId, sdkHbarAmount);
|
|
34
|
-
transaction.addHbarTransfer(
|
|
35
|
-
AccountId.fromString(this.kit.userAccountId),
|
|
36
|
-
sdkHbarAmount.negated()
|
|
37
|
-
);
|
|
38
|
-
userTransferProcessedForScheduling = true;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
if (!userTransferProcessedForScheduling) {
|
|
42
|
-
const processedTransfers = [];
|
|
43
|
-
for (const transferInput of params.transfers) {
|
|
44
|
-
const accountId = typeof transferInput.accountId === "string" ? AccountId.fromString(transferInput.accountId) : transferInput.accountId;
|
|
45
|
-
const amountValue = typeof transferInput.amount === "string" || typeof transferInput.amount === "number" ? transferInput.amount : transferInput.amount.toString();
|
|
46
|
-
const amountBigNum = new BigNumber(amountValue);
|
|
47
|
-
const roundedAmount = amountBigNum.toFixed(8, BigNumber.ROUND_DOWN);
|
|
48
|
-
this.logger.info(
|
|
49
|
-
`Processing transfer: ${amountValue} HBAR (rounded to ${roundedAmount}) for account ${accountId.toString()}`
|
|
50
|
-
);
|
|
51
|
-
const sdkHbarAmount = Hbar.fromString(roundedAmount);
|
|
52
|
-
processedTransfers.push({
|
|
53
|
-
accountId,
|
|
54
|
-
amount: amountBigNum,
|
|
55
|
-
hbar: sdkHbarAmount
|
|
56
|
-
});
|
|
57
|
-
const tinybarsContribution = sdkHbarAmount.toTinybars();
|
|
58
|
-
netZeroInTinybars = netZeroInTinybars.plus(
|
|
59
|
-
tinybarsContribution.toString()
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
if (!netZeroInTinybars.isZero()) {
|
|
63
|
-
this.logger.warn(
|
|
64
|
-
`Transfer sum not zero: ${netZeroInTinybars.toString()} tinybars off. Adjusting last transfer.`
|
|
65
|
-
);
|
|
66
|
-
if (processedTransfers.length > 0) {
|
|
67
|
-
const lastTransfer = processedTransfers[processedTransfers.length - 1];
|
|
68
|
-
const adjustment = netZeroInTinybars.dividedBy(-1e8);
|
|
69
|
-
const adjustedAmount = lastTransfer.amount.plus(adjustment);
|
|
70
|
-
const adjustedRounded = adjustedAmount.toFixed(
|
|
71
|
-
8,
|
|
72
|
-
BigNumber.ROUND_DOWN
|
|
73
|
-
);
|
|
74
|
-
lastTransfer.hbar = Hbar.fromString(adjustedRounded);
|
|
75
|
-
this.logger.info(
|
|
76
|
-
`Adjusted last transfer for ${lastTransfer.accountId.toString()} to ${adjustedRounded} HBAR`
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
for (const transfer of processedTransfers) {
|
|
81
|
-
transaction.addHbarTransfer(transfer.accountId, transfer.hbar);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (typeof params.memo !== "undefined") {
|
|
85
|
-
if (params.memo === null) {
|
|
86
|
-
this.logger.warn("Received null for memo in transferHbar.");
|
|
87
|
-
} else {
|
|
88
|
-
transaction.setTransactionMemo(params.memo);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
this.setCurrentTransaction(transaction);
|
|
92
|
-
return this;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
1
|
+
const FIELD_PRIORITIES = {
|
|
2
|
+
ESSENTIAL: "essential",
|
|
3
|
+
COMMON: "common",
|
|
4
|
+
ADVANCED: "advanced",
|
|
5
|
+
EXPERT: "expert"
|
|
6
|
+
};
|
|
95
7
|
export {
|
|
96
|
-
|
|
8
|
+
FIELD_PRIORITIES
|
|
97
9
|
};
|
|
98
10
|
//# sourceMappingURL=index47.js.map
|
package/dist/esm/index47.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index47.js","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"index47.js","sources":["../../src/constants/form-priorities.ts"],"sourcesContent":["/**\n * Form field priorities for progressive disclosure\n */\nexport const FIELD_PRIORITIES = {\n ESSENTIAL: 'essential',\n COMMON: 'common', \n ADVANCED: 'advanced',\n EXPERT: 'expert'\n} as const;\n\n/**\n * Form field types\n */\nexport const FORM_FIELD_TYPES = {\n TEXT: 'text',\n NUMBER: 'number',\n SELECT: 'select',\n CHECKBOX: 'checkbox',\n TEXTAREA: 'textarea',\n FILE: 'file',\n ARRAY: 'array',\n OBJECT: 'object',\n CURRENCY: 'currency',\n PERCENTAGE: 'percentage',\n} as const;"],"names":[],"mappings":"AAGO,MAAM,mBAAmB;AAAA,EAC9B,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AACV;"}
|
package/dist/esm/index48.js
CHANGED
|
@@ -1,10 +1,80 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { BaseHederaQueryTool } from "hedera-agent-kit";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { errorHasStatus, getBatchSummary, getResponseWithStructuredContent } from "./index62.js";
|
|
4
|
+
import { NOT_FOUND_STATUS, GATEWAY_STAMP_ERROR_MESSAGE } from "./index63.js";
|
|
5
|
+
const ListPostageStampsSchema = z.object({
|
|
6
|
+
leastUsed: z.boolean().optional(),
|
|
7
|
+
limit: z.number().optional(),
|
|
8
|
+
minUsage: z.number().optional(),
|
|
9
|
+
maxUsage: z.number().optional()
|
|
10
|
+
});
|
|
11
|
+
class ListPostageStampsTool extends BaseHederaQueryTool {
|
|
12
|
+
constructor(params) {
|
|
13
|
+
const { bee, config, ...rest } = params;
|
|
14
|
+
super(rest);
|
|
15
|
+
this.name = "swarm-list-postage-stamps";
|
|
16
|
+
this.description = `
|
|
17
|
+
List the available postage stamps.
|
|
18
|
+
leastUsed: A boolean value that tells if stamps are sorted so least used comes first.
|
|
19
|
+
limit: Limit is the maximum number of returned stamps.
|
|
20
|
+
minUsage: Only list stamps with at least this usage percentage.
|
|
21
|
+
maxUsage: Only list stamps with at most this usage percentage.
|
|
22
|
+
`;
|
|
23
|
+
this.namespace = "swarm";
|
|
24
|
+
this.specificInputSchema = ListPostageStampsSchema;
|
|
25
|
+
this.bee = bee;
|
|
26
|
+
this.config = config;
|
|
27
|
+
}
|
|
28
|
+
async executeQuery(input) {
|
|
29
|
+
const { leastUsed, limit, minUsage, maxUsage } = input;
|
|
30
|
+
let rawPostageBatches;
|
|
31
|
+
try {
|
|
32
|
+
rawPostageBatches = await this.bee.getPostageBatches();
|
|
33
|
+
} catch (error) {
|
|
34
|
+
let errorMessage = "Retrieval of postage batches failed.";
|
|
35
|
+
if (errorHasStatus(error, NOT_FOUND_STATUS)) {
|
|
36
|
+
errorMessage = GATEWAY_STAMP_ERROR_MESSAGE;
|
|
37
|
+
}
|
|
38
|
+
this.logger.error(
|
|
39
|
+
errorMessage,
|
|
40
|
+
error
|
|
41
|
+
);
|
|
42
|
+
throw new Error(errorMessage);
|
|
43
|
+
}
|
|
44
|
+
const batches = rawPostageBatches.map((batch) => ({
|
|
45
|
+
...batch,
|
|
46
|
+
batchID: batch.batchID.toHex()
|
|
47
|
+
}));
|
|
48
|
+
let filteredPostageBatches = batches.filter((batch) => {
|
|
49
|
+
if (!batch.usable) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const usagePercentage = batch.usage * 100;
|
|
53
|
+
if (minUsage !== void 0 && usagePercentage < minUsage) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
if (maxUsage !== void 0 && usagePercentage > maxUsage) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
});
|
|
61
|
+
if (Boolean(leastUsed) && filteredPostageBatches.length) {
|
|
62
|
+
filteredPostageBatches = filteredPostageBatches.sort(
|
|
63
|
+
(batch1, batch2) => batch1.usage - batch2.usage
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
if (limit !== void 0 && limit < filteredPostageBatches.length) {
|
|
67
|
+
filteredPostageBatches = filteredPostageBatches.slice(0, limit);
|
|
68
|
+
}
|
|
69
|
+
const computedPostageBatches = filteredPostageBatches.map((batch) => getBatchSummary(batch));
|
|
70
|
+
const content = {
|
|
71
|
+
raw: filteredPostageBatches,
|
|
72
|
+
summary: computedPostageBatches
|
|
73
|
+
};
|
|
74
|
+
return getResponseWithStructuredContent(content);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
7
77
|
export {
|
|
8
|
-
|
|
78
|
+
ListPostageStampsTool
|
|
9
79
|
};
|
|
10
80
|
//# sourceMappingURL=index48.js.map
|
package/dist/esm/index48.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index48.js","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"index48.js","sources":["../../src/plugins/community/swarm/tools/ListPostageStampsTool.ts"],"sourcesContent":["import {\r\n type GenericPluginContext,\r\n BaseHederaQueryTool,\r\n type HederaAgentKit,\r\n} from \"hedera-agent-kit\";\r\nimport { Bee } from \"@ethersphere/bee-js\";\r\nimport { z } from \"zod\";\r\nimport {\r\n PostageBatchCurated,\r\n PostageBatchSummary,\r\n ResponseContent,\r\n} from \"../model\";\r\nimport {\r\n errorHasStatus,\r\n getBatchSummary,\r\n getResponseWithStructuredContent,\r\n ToolResponse,\r\n} from \"../utils\";\r\nimport { GATEWAY_STAMP_ERROR_MESSAGE, NOT_FOUND_STATUS } from \"../constants\";\r\nimport { SwarmConfig } from \"../config\";\r\n\r\nconst ListPostageStampsSchema = z.object({\r\n leastUsed: z.boolean().optional(),\r\n limit: z.number().optional(),\r\n minUsage: z.number().optional(),\r\n maxUsage: z.number().optional(),\r\n});\r\n\r\nexport class ListPostageStampsTool extends BaseHederaQueryTool<typeof ListPostageStampsSchema> {\r\n name = \"swarm-list-postage-stamps\";\r\n description =`\r\n List the available postage stamps.\r\n leastUsed: A boolean value that tells if stamps are sorted so least used comes first.\r\n limit: Limit is the maximum number of returned stamps.\r\n minUsage: Only list stamps with at least this usage percentage.\r\n maxUsage: Only list stamps with at most this usage percentage. \r\n `;\r\n namespace = \"swarm\";\r\n specificInputSchema = ListPostageStampsSchema;\r\n bee: Bee;\r\n config: SwarmConfig;\r\n \r\n constructor(params: {\r\n hederaKit: HederaAgentKit;\r\n config: SwarmConfig;\r\n logger?: GenericPluginContext['logger'];\r\n bee: Bee;\r\n }) {\r\n const { bee, config, ...rest } = params;\r\n super(rest);\r\n this.bee = bee;\r\n this.config = config;\r\n }\r\n\r\n protected async executeQuery(\r\n input: z.infer<typeof ListPostageStampsSchema>\r\n ): Promise<ToolResponse | string> {\r\n const { leastUsed, limit, minUsage, maxUsage } = input;\r\n\r\n let rawPostageBatches;\r\n\r\n try {\r\n rawPostageBatches = await this.bee.getPostageBatches();\r\n } catch (error) {\r\n let errorMessage = 'Retrieval of postage batches failed.';\r\n\r\n if (errorHasStatus(error, NOT_FOUND_STATUS)) {\r\n errorMessage = GATEWAY_STAMP_ERROR_MESSAGE;\r\n }\r\n \r\n this.logger.error(\r\n errorMessage,\r\n error\r\n );\r\n \r\n throw new Error(errorMessage);\r\n }\r\n\r\n const batches: PostageBatchCurated[] = rawPostageBatches.map((batch) => ({\r\n ...batch,\r\n batchID: batch.batchID.toHex(),\r\n }));\r\n let filteredPostageBatches = batches.filter((batch) => {\r\n if (!batch.usable) {\r\n return false;\r\n }\r\n\r\n const usagePercentage = batch.usage * 100;\r\n\r\n if (minUsage !== undefined && usagePercentage < minUsage) {\r\n return false;\r\n }\r\n\r\n if (maxUsage !== undefined && usagePercentage > maxUsage) {\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n if (Boolean(leastUsed) && filteredPostageBatches.length) {\r\n filteredPostageBatches = filteredPostageBatches.sort(\r\n (batch1, batch2) => batch1.usage - batch2.usage\r\n );\r\n }\r\n\r\n if (limit !== undefined && limit < filteredPostageBatches.length) {\r\n filteredPostageBatches = filteredPostageBatches.slice(0, limit);\r\n }\r\n\r\n const computedPostageBatches: PostageBatchSummary[] =\r\n filteredPostageBatches.map((batch) => getBatchSummary(batch));\r\n\r\n const content: ResponseContent<\r\n PostageBatchCurated[],\r\n PostageBatchSummary[]\r\n > = {\r\n raw: filteredPostageBatches,\r\n summary: computedPostageBatches,\r\n };\r\n\r\n return getResponseWithStructuredContent(content);\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;AAqBA,MAAM,0BAA0B,EAAE,OAAO;AAAA,EACvC,WAAW,EAAE,QAAA,EAAU,SAAA;AAAA,EACvB,OAAO,EAAE,OAAA,EAAS,SAAA;AAAA,EAClB,UAAU,EAAE,OAAA,EAAS,SAAA;AAAA,EACrB,UAAU,EAAE,OAAA,EAAS,SAAA;AACvB,CAAC;AAEM,MAAM,8BAA8B,oBAAoD;AAAA,EAc7F,YAAY,QAKT;AACD,UAAM,EAAE,KAAK,QAAQ,GAAG,SAAS;AACjC,UAAM,IAAI;AApBZ,SAAA,OAAO;AACP,SAAA,cAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOb,SAAA,YAAY;AACZ,SAAA,sBAAsB;AAYpB,SAAK,MAAM;AACX,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAgB,aACZ,OAC8B;AAChC,UAAM,EAAE,WAAW,OAAO,UAAU,aAAa;AAEjD,QAAI;AAEJ,QAAI;AACF,0BAAoB,MAAM,KAAK,IAAI,kBAAA;AAAA,IACrC,SAAS,OAAO;AACd,UAAI,eAAe;AAEnB,UAAI,eAAe,OAAO,gBAAgB,GAAG;AAC3C,uBAAe;AAAA,MACjB;AAEA,WAAK,OAAO;AAAA,QACV;AAAA,QACA;AAAA,MAAA;AAGF,YAAM,IAAI,MAAM,YAAY;AAAA,IAC9B;AAEA,UAAM,UAAiC,kBAAkB,IAAI,CAAC,WAAW;AAAA,MACvE,GAAG;AAAA,MACH,SAAS,MAAM,QAAQ,MAAA;AAAA,IAAM,EAC7B;AACF,QAAI,yBAAyB,QAAQ,OAAO,CAAC,UAAU;AACrD,UAAI,CAAC,MAAM,QAAQ;AACjB,eAAO;AAAA,MACT;AAEA,YAAM,kBAAkB,MAAM,QAAQ;AAEtC,UAAI,aAAa,UAAa,kBAAkB,UAAU;AACxD,eAAO;AAAA,MACT;AAEA,UAAI,aAAa,UAAa,kBAAkB,UAAU;AACxD,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT,CAAC;AAED,QAAI,QAAQ,SAAS,KAAK,uBAAuB,QAAQ;AACvD,+BAAyB,uBAAuB;AAAA,QAC9C,CAAC,QAAQ,WAAW,OAAO,QAAQ,OAAO;AAAA,MAAA;AAAA,IAE9C;AAEA,QAAI,UAAU,UAAa,QAAQ,uBAAuB,QAAQ;AAChE,+BAAyB,uBAAuB,MAAM,GAAG,KAAK;AAAA,IAChE;AAEA,UAAM,yBACJ,uBAAuB,IAAI,CAAC,UAAU,gBAAgB,KAAK,CAAC;AAE9D,UAAM,UAGF;AAAA,MACF,KAAK;AAAA,MACL,SAAS;AAAA,IAAA;AAGX,WAAO,iCAAiC,OAAO;AAAA,EACjD;AACF;"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { BaseHederaQueryTool } from "hedera-agent-kit";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { getUploadPostageBatchId, errorHasStatus, getErrorMessage, getResponseWithStructuredContent } from "./index62.js";
|
|
4
|
+
import { BAD_REQUEST_STATUS } from "./index63.js";
|
|
5
|
+
const UploadDataSchema = z.object({
|
|
6
|
+
data: z.string(),
|
|
7
|
+
redundancyLevel: z.number().optional(),
|
|
8
|
+
postageBatchId: z.string().optional()
|
|
9
|
+
});
|
|
10
|
+
class UploadDataTool extends BaseHederaQueryTool {
|
|
11
|
+
constructor(params) {
|
|
12
|
+
const { bee, config, ...rest } = params;
|
|
13
|
+
super(rest);
|
|
14
|
+
this.name = "swarm-upload-data";
|
|
15
|
+
this.description = `
|
|
16
|
+
Upload text data to Swarm.
|
|
17
|
+
data: Arbitrary string to upload.
|
|
18
|
+
redundancyLevel: Redundancy level for fault tolerance: 0 - none, 1 - medium, 2 - strong, 3 - insane, 4 - paranoid (higher values provide better fault tolerance but increase storage overhead). Optional, value is 0 if not requested.
|
|
19
|
+
postageBatchId: The postage stamp batch ID which will be used to perform the upload, if it is provided.
|
|
20
|
+
`;
|
|
21
|
+
this.namespace = "swarm";
|
|
22
|
+
this.specificInputSchema = UploadDataSchema;
|
|
23
|
+
this.bee = bee;
|
|
24
|
+
this.config = config;
|
|
25
|
+
}
|
|
26
|
+
async executeQuery(input) {
|
|
27
|
+
const { data, redundancyLevel, postageBatchId: inputPostageBatchId } = input;
|
|
28
|
+
if (!data) {
|
|
29
|
+
this.logger.error(
|
|
30
|
+
"Missing required parameter: data."
|
|
31
|
+
);
|
|
32
|
+
throw new Error("Missing required parameter: data.");
|
|
33
|
+
}
|
|
34
|
+
let postageBatchId = "";
|
|
35
|
+
try {
|
|
36
|
+
postageBatchId = await getUploadPostageBatchId(
|
|
37
|
+
inputPostageBatchId,
|
|
38
|
+
this.bee,
|
|
39
|
+
this.config
|
|
40
|
+
);
|
|
41
|
+
} catch (error) {
|
|
42
|
+
let errorMessage = "Upload data failed.";
|
|
43
|
+
if (error instanceof Error) {
|
|
44
|
+
errorMessage = error.message;
|
|
45
|
+
}
|
|
46
|
+
this.logger.error(errorMessage);
|
|
47
|
+
throw new Error(errorMessage);
|
|
48
|
+
}
|
|
49
|
+
const binaryData = Buffer.from(data);
|
|
50
|
+
const options = redundancyLevel ? { redundancyLevel } : void 0;
|
|
51
|
+
let result;
|
|
52
|
+
try {
|
|
53
|
+
result = await this.bee.uploadData(postageBatchId, binaryData, options);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
let errorMessage = "Unable to upload data.";
|
|
56
|
+
if (errorHasStatus(error, BAD_REQUEST_STATUS)) {
|
|
57
|
+
errorMessage = getErrorMessage(error);
|
|
58
|
+
}
|
|
59
|
+
this.logger.error(
|
|
60
|
+
errorMessage,
|
|
61
|
+
error
|
|
62
|
+
);
|
|
63
|
+
throw new Error(errorMessage);
|
|
64
|
+
}
|
|
65
|
+
return getResponseWithStructuredContent({
|
|
66
|
+
reference: result.reference.toString(),
|
|
67
|
+
url: this.bee.url + "/bytes/" + result.reference.toString(),
|
|
68
|
+
message: "Data successfully uploaded to Swarm"
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export {
|
|
73
|
+
UploadDataTool
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=index49.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index49.js","sources":["../../src/plugins/community/swarm/tools/UploadDataTool.ts"],"sourcesContent":["import {\r\n BaseHederaQueryTool,\r\n HederaAgentKit,\r\n type GenericPluginContext,\r\n} from \"hedera-agent-kit\";\r\nimport { Bee } from \"@ethersphere/bee-js\";\r\nimport { z } from \"zod\";\r\nimport {\r\n errorHasStatus,\r\n getErrorMessage,\r\n getResponseWithStructuredContent,\r\n getUploadPostageBatchId,\r\n ToolResponse,\r\n} from \"../utils\";\r\nimport { BAD_REQUEST_STATUS } from \"../constants\";\r\nimport { SwarmConfig } from \"../config\";\r\n\r\nconst UploadDataSchema = z.object({\r\n data: z.string(),\r\n redundancyLevel: z.number().optional(),\r\n postageBatchId: z.string().optional(),\r\n});\r\n\r\nexport class UploadDataTool extends BaseHederaQueryTool<typeof UploadDataSchema> {\r\n name = \"swarm-upload-data\";\r\n description = `\r\n Upload text data to Swarm.\r\n data: Arbitrary string to upload.\r\n redundancyLevel: Redundancy level for fault tolerance: 0 - none, 1 - medium, 2 - strong, 3 - insane, 4 - paranoid (higher values provide better fault tolerance but increase storage overhead). Optional, value is 0 if not requested.\r\n postageBatchId: The postage stamp batch ID which will be used to perform the upload, if it is provided.\r\n `;\r\n namespace = \"swarm\";\r\n specificInputSchema = UploadDataSchema;\r\n bee: Bee;\r\n config: SwarmConfig;\r\n \r\n constructor(params: {\r\n hederaKit: HederaAgentKit;\r\n config: SwarmConfig;\r\n logger?: GenericPluginContext['logger'];\r\n bee: Bee;\r\n }) {\r\n const { bee, config, ...rest } = params;\r\n super(rest);\r\n this.bee = bee;\r\n this.config = config;\r\n }\r\n \r\n protected async executeQuery(\r\n input: z.infer<typeof UploadDataSchema>\r\n ): Promise<ToolResponse | string> {\r\n const { data, redundancyLevel, postageBatchId: inputPostageBatchId } = input;\r\n\r\n if (!data) {\r\n this.logger.error(\r\n 'Missing required parameter: data.'\r\n );\r\n\r\n throw new Error('Missing required parameter: data.');\r\n }\r\n\r\n let postageBatchId = \"\";\r\n\r\n try {\r\n postageBatchId = await getUploadPostageBatchId(\r\n inputPostageBatchId,\r\n this.bee,\r\n this.config,\r\n );\r\n } catch (error) {\r\n let errorMessage = 'Upload data failed.';\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n }\r\n this.logger.error(errorMessage);\r\n\r\n throw new Error(errorMessage);\r\n }\r\n\r\n const binaryData = Buffer.from(data);\r\n\r\n const options = redundancyLevel ? { redundancyLevel } : undefined;\r\n\r\n let result;\r\n\r\n try {\r\n result = await this.bee.uploadData(postageBatchId, binaryData, options);\r\n } catch (error) {\r\n let errorMessage = 'Unable to upload data.';\r\n\r\n if (errorHasStatus(error, BAD_REQUEST_STATUS)) {\r\n errorMessage = getErrorMessage(error);\r\n }\r\n\r\n this.logger.error(\r\n errorMessage,\r\n error\r\n );\r\n \r\n throw new Error(errorMessage);\r\n }\r\n\r\n return getResponseWithStructuredContent({\r\n reference: result.reference.toString(),\r\n url: this.bee.url + \"/bytes/\" + result.reference.toString(),\r\n message: 'Data successfully uploaded to Swarm',\r\n });\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;AAiBA,MAAM,mBAAmB,EAAE,OAAO;AAAA,EAChC,MAAM,EAAE,OAAA;AAAA,EACR,iBAAiB,EAAE,OAAA,EAAS,SAAA;AAAA,EAC5B,gBAAgB,EAAE,OAAA,EAAS,SAAA;AAC7B,CAAC;AAEM,MAAM,uBAAuB,oBAA6C;AAAA,EAa/E,YAAY,QAKT;AACD,UAAM,EAAE,KAAK,QAAQ,GAAG,SAAS;AACjC,UAAM,IAAI;AAnBZ,SAAA,OAAO;AACP,SAAA,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAMd,SAAA,YAAY;AACZ,SAAA,sBAAsB;AAYpB,SAAK,MAAM;AACX,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAgB,aACZ,OAC8B;AAChC,UAAM,EAAE,MAAM,iBAAiB,gBAAgB,wBAAwB;AAEvE,QAAI,CAAC,MAAM;AACT,WAAK,OAAO;AAAA,QACV;AAAA,MAAA;AAGF,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AAEA,QAAI,iBAAiB;AAErB,QAAI;AACF,uBAAiB,MAAM;AAAA,QACrB;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,MAAA;AAAA,IAET,SAAS,OAAO;AACd,UAAI,eAAe;AACnB,UAAI,iBAAiB,OAAO;AAC1B,uBAAe,MAAM;AAAA,MACvB;AACA,WAAK,OAAO,MAAM,YAAY;AAE9B,YAAM,IAAI,MAAM,YAAY;AAAA,IAC9B;AAEA,UAAM,aAAa,OAAO,KAAK,IAAI;AAEnC,UAAM,UAAU,kBAAkB,EAAE,gBAAA,IAAoB;AAExD,QAAI;AAEJ,QAAI;AACF,eAAS,MAAM,KAAK,IAAI,WAAW,gBAAgB,YAAY,OAAO;AAAA,IACxE,SAAS,OAAO;AACd,UAAI,eAAe;AAEnB,UAAI,eAAe,OAAO,kBAAkB,GAAG;AAC7C,uBAAe,gBAAgB,KAAK;AAAA,MACtC;AAEA,WAAK,OAAO;AAAA,QACV;AAAA,QACA;AAAA,MAAA;AAGF,YAAM,IAAI,MAAM,YAAY;AAAA,IAC9B;AAEA,WAAO,iCAAiC;AAAA,MACpC,WAAW,OAAO,UAAU,SAAA;AAAA,MAC5B,KAAK,KAAK,IAAI,MAAM,YAAY,OAAO,UAAU,SAAA;AAAA,MACjD,SAAS;AAAA,IAAA,CACV;AAAA,EACL;AACF;"}
|
package/dist/esm/index5.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BasePlugin, HederaAirdropTokenTool } from "hedera-agent-kit";
|
|
2
|
-
import { TransferHbarTool } from "./
|
|
3
|
-
import { AirdropToolWrapper } from "./
|
|
2
|
+
import { TransferHbarTool } from "./index38.js";
|
|
3
|
+
import { AirdropToolWrapper } from "./index39.js";
|
|
4
4
|
class HbarPlugin extends BasePlugin {
|
|
5
5
|
constructor() {
|
|
6
6
|
super(...arguments);
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { errorHasStatus, getErrorMessage, getResponseWithStructuredContent } from "./index62.js";
|
|
3
|
+
import { BaseHederaQueryTool } from "hedera-agent-kit";
|
|
4
|
+
import { BAD_REQUEST_STATUS } from "./index63.js";
|
|
5
|
+
const DownloadDataSchema = z.object({
|
|
6
|
+
reference: z.string()
|
|
7
|
+
});
|
|
8
|
+
class DownloadDataTool extends BaseHederaQueryTool {
|
|
9
|
+
constructor(params) {
|
|
10
|
+
const { bee, config, ...rest } = params;
|
|
11
|
+
super(rest);
|
|
12
|
+
this.name = "swarm-download-data";
|
|
13
|
+
this.description = `
|
|
14
|
+
Downloads immutable data from a Swarm content address hash.
|
|
15
|
+
reference: Swarm reference hash.
|
|
16
|
+
`;
|
|
17
|
+
this.namespace = "swarm";
|
|
18
|
+
this.specificInputSchema = DownloadDataSchema;
|
|
19
|
+
this.bee = bee;
|
|
20
|
+
this.config = config;
|
|
21
|
+
}
|
|
22
|
+
async executeQuery(input) {
|
|
23
|
+
const { reference } = input;
|
|
24
|
+
if (!reference) {
|
|
25
|
+
this.logger.error(
|
|
26
|
+
"Missing required parameter: reference."
|
|
27
|
+
);
|
|
28
|
+
throw new Error("Missing required parameter: reference.");
|
|
29
|
+
}
|
|
30
|
+
const isRefNotSwarmHash = reference.length !== 64 && reference.length !== 66;
|
|
31
|
+
if (isRefNotSwarmHash) {
|
|
32
|
+
this.logger.error(
|
|
33
|
+
"Invalid Swarm content address hash value for reference."
|
|
34
|
+
);
|
|
35
|
+
throw new Error("Invalid Swarm content address hash value for reference.");
|
|
36
|
+
}
|
|
37
|
+
let data;
|
|
38
|
+
try {
|
|
39
|
+
data = await this.bee.downloadData(reference);
|
|
40
|
+
} catch (error) {
|
|
41
|
+
let errorMessage = "Downloading data failed.";
|
|
42
|
+
if (errorHasStatus(error, BAD_REQUEST_STATUS)) {
|
|
43
|
+
errorMessage = getErrorMessage(error);
|
|
44
|
+
}
|
|
45
|
+
this.logger.error(errorMessage, error);
|
|
46
|
+
throw new Error(errorMessage);
|
|
47
|
+
}
|
|
48
|
+
const textData = data.toUtf8();
|
|
49
|
+
return getResponseWithStructuredContent({
|
|
50
|
+
textData
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
DownloadDataTool
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=index50.js.map
|