@hashgraphonline/conversational-agent 0.2.217 → 0.2.218
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/dist/esm/index11.js +1 -1
- package/dist/esm/index22.js +1 -1
- package/dist/esm/index24.js +3 -3
- package/dist/esm/index34.js +3 -3
- package/dist/esm/index43.js +26 -4
- package/dist/esm/index43.js.map +1 -1
- package/dist/esm/index45.js +64 -309
- package/dist/esm/index45.js.map +1 -1
- package/dist/esm/index46.js +61 -173
- package/dist/esm/index46.js.map +1 -1
- package/dist/esm/index47.js +54 -7
- package/dist/esm/index47.js.map +1 -1
- package/dist/esm/index48.js +73 -50
- package/dist/esm/index48.js.map +1 -1
- package/dist/esm/index49.js +44 -40
- package/dist/esm/index49.js.map +1 -1
- package/dist/esm/index50.js +48 -30
- package/dist/esm/index50.js.map +1 -1
- package/dist/esm/index51.js +95 -74
- package/dist/esm/index51.js.map +1 -1
- package/dist/esm/index52.js +24 -45
- package/dist/esm/index52.js.map +1 -1
- package/dist/esm/index53.js +58 -50
- package/dist/esm/index53.js.map +1 -1
- package/dist/esm/index54.js +77 -101
- package/dist/esm/index54.js.map +1 -1
- package/dist/esm/index55.js +90 -30
- package/dist/esm/index55.js.map +1 -1
- package/dist/esm/index56.js +75 -50
- package/dist/esm/index56.js.map +1 -1
- package/dist/esm/index57.js +5 -97
- package/dist/esm/index57.js.map +1 -1
- package/dist/esm/index58.js +309 -102
- package/dist/esm/index58.js.map +1 -1
- package/dist/esm/index59.js +170 -91
- package/dist/esm/index59.js.map +1 -1
- package/dist/esm/index6.js +12 -12
- package/dist/esm/index60.js +6 -26
- package/dist/esm/index60.js.map +1 -1
- package/package.json +2 -2
package/dist/esm/index59.js
CHANGED
|
@@ -1,108 +1,187 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
redundancyLevel: z.number().optional(),
|
|
10
|
-
postageBatchId: z.string().optional()
|
|
11
|
-
});
|
|
12
|
-
class UploadFolderTool extends BaseHederaQueryTool {
|
|
13
|
-
constructor(params) {
|
|
14
|
-
const { bee, config, ...rest } = params;
|
|
15
|
-
super(rest);
|
|
16
|
-
this.name = "swarm-upload-folder";
|
|
17
|
-
this.description = `Upload a folder to Swarm.
|
|
18
|
-
folderPath: Path to the folder to upload.
|
|
19
|
-
redundancyLevel: Redundancy level for fault tolerance (higher values provide better fault tolerance but increase storage overhead). 0 - none, 1 - medium, 2 - strong, 3 - insane, 4 - paranoid.
|
|
20
|
-
postageBatchId: The postage stamp batch ID which will be used to perform the upload, if it is provided.`;
|
|
21
|
-
this.namespace = "swarm";
|
|
22
|
-
this.specificInputSchema = UploadFolderSchema;
|
|
23
|
-
this.bee = bee;
|
|
24
|
-
this.config = config;
|
|
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" });
|
|
25
9
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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}`);
|
|
33
19
|
}
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
|
38
53
|
);
|
|
39
|
-
throw new Error(`Path is not a directory: ${folderPath}.`);
|
|
40
54
|
}
|
|
41
|
-
|
|
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();
|
|
42
68
|
try {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
69
|
+
const formSubmission = {
|
|
70
|
+
formId,
|
|
71
|
+
toolName,
|
|
72
|
+
parameters,
|
|
73
|
+
timestamp: Date.now()
|
|
74
|
+
};
|
|
75
|
+
const processedInput = await this.formEngine.processSubmission(
|
|
76
|
+
formSubmission
|
|
47
77
|
);
|
|
78
|
+
return this.execute(toolName, processedInput, sessionContext);
|
|
48
79
|
} catch (error) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
+
};
|
|
55
87
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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 };
|
|
60
96
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
let message = "Folder successfully uploaded to Swarm";
|
|
64
|
-
let tagId = void 0;
|
|
65
|
-
{
|
|
66
|
-
try {
|
|
67
|
-
const tag = await this.bee.createTag();
|
|
68
|
-
tagId = tag.uid.toString();
|
|
69
|
-
options.tag = tag.uid;
|
|
70
|
-
message = "Folder upload started in deferred mode. Use swarm-query-upload-progress to track progress.";
|
|
71
|
-
} catch (error) {
|
|
72
|
-
this.logger.error(
|
|
73
|
-
"Failed to create tag",
|
|
74
|
-
error
|
|
75
|
-
);
|
|
76
|
-
options.deferred = false;
|
|
77
|
-
}
|
|
97
|
+
if (!this.formEngine.shouldGenerateForm(context.toolEntry.tool, context.input)) {
|
|
98
|
+
return { requiresForm: false };
|
|
78
99
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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");
|
|
96
129
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
|
102
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
|
+
};
|
|
103
182
|
}
|
|
104
183
|
}
|
|
105
184
|
export {
|
|
106
|
-
|
|
185
|
+
ExecutionPipeline
|
|
107
186
|
};
|
|
108
187
|
//# sourceMappingURL=index59.js.map
|
package/dist/esm/index59.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index59.js","sources":["../../src/plugins/community/swarm/tools/UploadFolderTool.ts"],"sourcesContent":["import {\r\n BaseHederaQueryTool,\r\n HederaAgentKit,\r\n type GenericPluginContext,\r\n} from \"hedera-agent-kit\";\r\nimport { Bee, CollectionUploadOptions } from \"@ethersphere/bee-js\";\r\nimport { z } from \"zod\";\r\nimport { promisify } from \"util\";\r\nimport fs from \"fs\";\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 UploadFolderSchema = z.object({\r\n folderPath: z.string(),\r\n redundancyLevel: z.number().optional(),\r\n postageBatchId: z.string().optional(),\r\n});\r\n\r\nexport class UploadFolderTool extends BaseHederaQueryTool<typeof UploadFolderSchema> {\r\n name = \"swarm-upload-folder\";\r\n description = `Upload a folder to Swarm.\r\n folderPath: Path to the folder to upload. \r\n redundancyLevel: Redundancy level for fault tolerance (higher values provide better fault tolerance but increase storage overhead). 0 - none, 1 - medium, 2 - strong, 3 - insane, 4 - paranoid. \r\n postageBatchId: The postage stamp batch ID which will be used to perform the upload, if it is provided.`;\r\n namespace = \"swarm\";\r\n specificInputSchema = UploadFolderSchema;\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 UploadFolderSchema>\r\n ): Promise<ToolResponse | string> {\r\n const { folderPath, redundancyLevel: inputRedundancyLevel, postageBatchId: inputPostageBatchId } = input;\r\n\r\n if (!folderPath) {\r\n this.logger.error(\r\n 'Missing required parameter: folderPath.'\r\n );\r\n\r\n throw new Error('Missing required parameter: folderPath.');\r\n }\r\n\r\n // Check if folder exists\r\n const stats = await promisify(fs.stat)(folderPath);\r\n if (!stats.isDirectory()) {\r\n this.logger.error(\r\n `Path is not a directory: ${folderPath}.`\r\n );\r\n\r\n throw new Error(`Path is not a directory: ${folderPath}.`);\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 folder 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 redundancyLevel = inputRedundancyLevel;\r\n const options: CollectionUploadOptions = {};\r\n\r\n if (redundancyLevel) {\r\n options.redundancyLevel = redundancyLevel;\r\n }\r\n\r\n const deferred = true;\r\n options.deferred = deferred;\r\n let message = 'Folder successfully uploaded to Swarm';\r\n\r\n let tagId: string | undefined = undefined;\r\n\r\n if (deferred) {\r\n try {\r\n const tag = await this.bee.createTag();\r\n tagId = tag.uid.toString();\r\n options.tag = tag.uid;\r\n message =\r\n 'Folder upload started in deferred mode. Use swarm-query-upload-progress to track progress.';\r\n } catch (error) {\r\n this.logger.error(\r\n 'Failed to create tag',\r\n error\r\n );\r\n options.deferred = false;\r\n }\r\n }\r\n\r\n let result;\r\n\r\n try {\r\n // Start the deferred upload\r\n result = await this.bee.uploadFilesFromDirectory(\r\n postageBatchId,\r\n folderPath,\r\n options\r\n );\r\n } catch (error) {\r\n let errorMessage = 'Unable to upload folder.';\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 + \"/bzz/\" + result.reference.toString(),\r\n message,\r\n tagId,\r\n });\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;;AAmBA,MAAM,qBAAqB,EAAE,OAAO;AAAA,EAClC,YAAY,EAAE,OAAA;AAAA,EACd,iBAAiB,EAAE,OAAA,EAAS,SAAA;AAAA,EAC5B,gBAAgB,EAAE,OAAA,EAAS,SAAA;AAC7B,CAAC;AAEM,MAAM,yBAAyB,oBAA+C;AAAA,EAWnF,YAAY,QAKT;AACD,UAAM,EAAE,KAAK,QAAQ,GAAG,SAAS;AACjC,UAAM,IAAI;AAjBZ,SAAA,OAAO;AACP,SAAA,cAAc;AAAA;AAAA;AAAA;AAId,SAAA,YAAY;AACZ,SAAA,sBAAsB;AAYpB,SAAK,MAAM;AACX,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAgB,aACZ,OAC8B;AAChC,UAAM,EAAE,YAAY,iBAAiB,sBAAsB,gBAAgB,wBAAwB;AAEnG,QAAI,CAAC,YAAY;AACf,WAAK,OAAO;AAAA,QACV;AAAA,MAAA;AAGF,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAGA,UAAM,QAAQ,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU;AACjD,QAAI,CAAC,MAAM,eAAe;AACxB,WAAK,OAAO;AAAA,QACV,4BAA4B,UAAU;AAAA,MAAA;AAGxC,YAAM,IAAI,MAAM,4BAA4B,UAAU,GAAG;AAAA,IAC3D;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,kBAAkB;AACxB,UAAM,UAAmC,CAAA;AAEzC,QAAI,iBAAiB;AACnB,cAAQ,kBAAkB;AAAA,IAC5B;AAEA,UAAM,WAAW;AACjB,YAAQ,WAAW;AACnB,QAAI,UAAU;AAEd,QAAI,QAA4B;AAElB;AACZ,UAAI;AACF,cAAM,MAAM,MAAM,KAAK,IAAI,UAAA;AAC3B,gBAAQ,IAAI,IAAI,SAAA;AAChB,gBAAQ,MAAM,IAAI;AAClB,kBACE;AAAA,MACJ,SAAS,OAAO;AACd,aAAK,OAAO;AAAA,UACV;AAAA,UACA;AAAA,QAAA;AAEF,gBAAQ,WAAW;AAAA,MACrB;AAAA,IACF;AAEA,QAAI;AAEJ,QAAI;AAEF,eAAS,MAAM,KAAK,IAAI;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,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,MACtC,WAAW,OAAO,UAAU,SAAA;AAAA,MAC5B,KAAK,KAAK,IAAI,MAAM,UAAU,OAAO,UAAU,SAAA;AAAA,MAC/C;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH;AACF;"}
|
|
1
|
+
{"version":3,"file":"index59.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/index6.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { BasePlugin } from "hedera-agent-kit";
|
|
2
2
|
import { Bee } from "@ethersphere/bee-js";
|
|
3
|
-
import { ListPostageStampsTool } from "./
|
|
4
|
-
import { UploadDataTool } from "./
|
|
5
|
-
import { DownloadDataTool } from "./
|
|
6
|
-
import { CreatePostageStampTool } from "./
|
|
7
|
-
import { ExtendPostageStampTool } from "./
|
|
8
|
-
import { QueryUploadProgressTool } from "./
|
|
9
|
-
import { DownloadFilesTool } from "./
|
|
10
|
-
import { GetPostageStampTool } from "./
|
|
11
|
-
import { ReadFeedTool } from "./
|
|
12
|
-
import { UpdateFeedTool } from "./
|
|
13
|
-
import { UploadFileTool } from "./
|
|
14
|
-
import { UploadFolderTool } from "./
|
|
3
|
+
import { ListPostageStampsTool } from "./index45.js";
|
|
4
|
+
import { UploadDataTool } from "./index46.js";
|
|
5
|
+
import { DownloadDataTool } from "./index47.js";
|
|
6
|
+
import { CreatePostageStampTool } from "./index48.js";
|
|
7
|
+
import { ExtendPostageStampTool } from "./index49.js";
|
|
8
|
+
import { QueryUploadProgressTool } from "./index50.js";
|
|
9
|
+
import { DownloadFilesTool } from "./index51.js";
|
|
10
|
+
import { GetPostageStampTool } from "./index52.js";
|
|
11
|
+
import { ReadFeedTool } from "./index53.js";
|
|
12
|
+
import { UpdateFeedTool } from "./index54.js";
|
|
13
|
+
import { UploadFileTool } from "./index55.js";
|
|
14
|
+
import { UploadFolderTool } from "./index56.js";
|
|
15
15
|
class SwarmPlugin extends BasePlugin {
|
|
16
16
|
constructor(config) {
|
|
17
17
|
super();
|
package/dist/esm/index60.js
CHANGED
|
@@ -1,30 +1,10 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
enableAutoCleanup: true,
|
|
7
|
-
cleanupIntervalMs: 5 * 60 * 1e3,
|
|
8
|
-
enablePersistence: false,
|
|
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 }
|
|
15
|
-
}
|
|
1
|
+
const FIELD_PRIORITIES = {
|
|
2
|
+
ESSENTIAL: "essential",
|
|
3
|
+
COMMON: "common",
|
|
4
|
+
ADVANCED: "advanced",
|
|
5
|
+
EXPERT: "expert"
|
|
16
6
|
};
|
|
17
|
-
class ContentReferenceError extends Error {
|
|
18
|
-
constructor(message, type, referenceId, suggestedActions) {
|
|
19
|
-
super(message);
|
|
20
|
-
this.type = type;
|
|
21
|
-
this.referenceId = referenceId;
|
|
22
|
-
this.suggestedActions = suggestedActions;
|
|
23
|
-
this.name = "ContentReferenceError";
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
7
|
export {
|
|
27
|
-
|
|
28
|
-
DEFAULT_CONTENT_REFERENCE_CONFIG
|
|
8
|
+
FIELD_PRIORITIES
|
|
29
9
|
};
|
|
30
10
|
//# sourceMappingURL=index60.js.map
|
package/dist/esm/index60.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index60.js","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"index60.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hashgraphonline/conversational-agent",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.218",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/cjs/index.cjs",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"dependencies": {
|
|
101
101
|
"@ethereumjs/wallet": "^10.0.0",
|
|
102
102
|
"@ethersphere/bee-js": "^10.1.1",
|
|
103
|
-
"@hashgraph/sdk": "^2.
|
|
103
|
+
"@hashgraph/sdk": "^2.77.0",
|
|
104
104
|
"@hashgraphonline/hashinal-wc": "2.0.1",
|
|
105
105
|
"@hashgraphonline/standards-agent-kit": "^0.2.164",
|
|
106
106
|
"@hashgraphonline/standards-sdk": "0.1.136",
|