@hashgraphonline/conversational-agent 0.2.213 → 0.2.214

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.
@@ -1,325 +1,187 @@
1
- import { z } from "zod";
1
+ import { ZodError } from "zod";
2
2
  import { Logger } from "@hashgraphonline/standards-sdk";
3
- import { wrapToolWithFormValidation } from "./index32.js";
4
- import { FormGenerator } from "./index10.js";
5
- import { fieldGuidanceRegistry } from "./index13.js";
6
- import { isFormValidatable } from "@hashgraphonline/standards-agent-kit";
7
- class ToolRegistry {
8
- constructor(logger) {
9
- this.tools = /* @__PURE__ */ new Map();
10
- this.formGenerator = new FormGenerator();
11
- this.logger = logger || new Logger({ module: "ToolRegistry" });
12
- }
13
- /**
14
- * Register a tool with the registry
15
- */
16
- registerTool(tool, options = {}) {
17
- const capabilities = this.analyzeToolCapabilities(tool);
18
- const metadata = {
19
- name: tool.name,
20
- version: "1.0.0",
21
- category: options.metadata?.category || "core",
22
- description: tool.description,
23
- capabilities,
24
- dependencies: [],
25
- schema: tool.schema,
26
- ...options.metadata
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" });
9
+ }
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
27
  };
28
28
  try {
29
- if (!metadata.entityResolutionPreferences) {
30
- const schemaRecord = tool.schema;
31
- const rawPrefs = schemaRecord && typeof schemaRecord === "object" && schemaRecord["_entityResolutionPreferences"];
32
- if (rawPrefs && typeof rawPrefs === "object") {
33
- metadata.entityResolutionPreferences = rawPrefs;
34
- }
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
+ };
35
39
  }
36
- } catch {
37
- }
38
- try {
39
- const schemaRecord = tool.schema;
40
- const schemaDef = schemaRecord && schemaRecord._def;
41
- if (schemaDef?.typeName === "ZodObject") {
42
- const shape = typeof schemaDef.shape === "function" ? schemaDef.shape?.() || {} : schemaDef.shape || {};
43
- const metadataField = shape["metadata"];
44
- const isStringArray = !!metadataField && metadataField._def?.typeName === "ZodArray" && metadataField._def?.type?._def?.typeName === "ZodString";
45
- if (isStringArray && typeof tool.description === "string") {
46
- if (!metadata.entityResolutionPreferences) {
47
- metadata.entityResolutionPreferences = {
48
- inscription: "hrl"
49
- };
50
- }
51
- const note = " NOTE: When referencing inscriptions or media, provide canonical Hashlink Resource Locators (e.g., hcs://<standard>/<topicId>) rather than external URLs or embedded JSON.";
52
- if (!tool.description.includes("Hashlink Resource Locators")) {
53
- tool.description = `${tool.description}${note}`;
54
- }
55
- }
56
- }
57
- } catch {
58
- }
59
- let finalTool = tool;
60
- let wrapper;
61
- if (this.shouldWrapTool(tool, capabilities, options)) {
62
- wrapper = wrapToolWithFormValidation(
63
- tool,
64
- this.formGenerator,
65
- {
66
- requireAllFields: false,
67
- skipFields: ["metaOptions"],
68
- ...options.wrapperConfig
69
- }
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
70
53
  );
71
- finalTool = wrapper;
72
- }
73
- try {
74
- if (metadata.entityResolutionPreferences) {
75
- finalTool["entityResolutionPreferences"] = metadata.entityResolutionPreferences;
76
- }
77
- } catch {
78
- }
79
- const entry = {
80
- tool: finalTool,
81
- metadata,
82
- wrapper,
83
- originalTool: tool,
84
- options: {
85
- priority: capabilities.priority,
86
- capability: "basic",
87
- // Default capability
88
- enabled: true,
89
- // All tools are enabled by default
90
- namespace: metadata.category
91
- }
92
- };
93
- this.tools.set(tool.name, entry);
94
- try {
95
- const metaFG = metadata.fieldGuidance;
96
- if (metaFG) {
97
- fieldGuidanceRegistry.registerToolConfiguration(metaFG);
98
- }
99
- const provider = metadata.fieldGuidanceProvider;
100
- if (provider) {
101
- const pattern = metaFG?.toolPattern ?? tool.name;
102
- fieldGuidanceRegistry.registerToolProvider(pattern, provider, {
103
- id: `${tool.name}:field-guidance-provider`,
104
- priority: 0
105
- });
106
- }
107
- } catch {
108
54
  }
109
55
  }
110
56
  /**
111
- * Get a tool by name
57
+ * Execute tool with validation
112
58
  */
113
- getTool(name) {
114
- return this.tools.get(name) || null;
59
+ async executeWithValidation(toolName, input, sessionContext) {
60
+ return this.execute(toolName, input, sessionContext);
115
61
  }
116
62
  /**
117
- * Get tools by capability
63
+ * Process form submission
118
64
  */
119
- getToolsByCapability(capability, value) {
120
- const results = [];
121
- for (const entry of this.tools.values()) {
122
- if (value !== void 0) {
123
- if (entry.metadata.capabilities[capability] === value) {
124
- results.push(entry);
125
- }
126
- } else if (entry.metadata.capabilities[capability]) {
127
- results.push(entry);
128
- }
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
+ };
129
87
  }
130
- return results;
131
88
  }
132
89
  /**
133
- * Get tools by query
90
+ * Check if form generation is required
134
91
  */
135
- getToolsByQuery(query) {
136
- const results = [];
137
- for (const entry of this.tools.values()) {
138
- let matches = true;
139
- if (query.name && entry.metadata.name !== query.name) {
140
- matches = false;
141
- }
142
- if (query.category && entry.metadata.category !== query.category) {
143
- matches = false;
144
- }
145
- if (query.capabilities) {
146
- for (const [key, value] of Object.entries(query.capabilities)) {
147
- if (entry.metadata.capabilities[key] !== value) {
148
- matches = false;
149
- break;
150
- }
151
- }
152
- }
153
- if (matches) {
154
- results.push(entry);
155
- }
92
+ async checkFormGeneration(context) {
93
+ const inputRecord = context.input;
94
+ if (inputRecord?.__fromForm === true || inputRecord?.renderForm === false) {
95
+ return { requiresForm: false };
156
96
  }
157
- return results;
158
- }
159
- /**
160
- * Get all registered tools
161
- */
162
- getAllTools() {
163
- return Array.from(this.tools.values()).map((entry) => entry.tool);
164
- }
165
- /**
166
- * Get all registry entries
167
- */
168
- getAllRegistryEntries() {
169
- return Array.from(this.tools.values());
170
- }
171
- /**
172
- * Get all tool names
173
- */
174
- getToolNames() {
175
- return Array.from(this.tools.keys());
176
- }
177
- /**
178
- * Get tools by priority
179
- */
180
- getToolsByPriority(priority) {
181
- return this.getToolsByCapability("priority", priority);
182
- }
183
- /**
184
- * Get enabled tools (all tools are considered enabled by default)
185
- */
186
- getEnabledTools() {
187
- return this.getAllRegistryEntries();
188
- }
189
- /**
190
- * Get tools by namespace/category
191
- */
192
- getToolsByNamespace(namespace) {
193
- if (!namespace) {
194
- return this.getAllRegistryEntries();
97
+ if (!this.formEngine.shouldGenerateForm(context.toolEntry.tool, context.input)) {
98
+ return { requiresForm: false };
195
99
  }
196
- return this.getToolsByQuery({ category: namespace });
197
- }
198
- /**
199
- * Check if registry has capability
200
- */
201
- hasCapability(capability) {
202
- for (const entry of this.tools.values()) {
203
- if (entry.metadata.capabilities[capability]) {
204
- return true;
205
- }
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 };
206
107
  }
207
- return false;
108
+ return { requiresForm: false };
208
109
  }
209
110
  /**
210
- * Update tool options (metadata)
111
+ * Execute tool directly
211
112
  */
212
- updateToolOptions(name, options) {
213
- const entry = this.tools.get(name);
214
- if (!entry) {
215
- return false;
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);
216
119
  }
217
- entry.metadata = { ...entry.metadata, ...options };
218
- return true;
219
- }
220
- /**
221
- * Check if a tool is registered
222
- */
223
- hasTool(name) {
224
- return this.tools.has(name);
225
- }
226
- /**
227
- * Unregister a tool
228
- */
229
- unregisterTool(name) {
230
- return this.tools.delete(name);
231
- }
232
- /**
233
- * Clear all tools
234
- */
235
- clear() {
236
- this.tools.clear();
120
+ return await toolEntry.tool.call(mergedArgs);
237
121
  }
238
122
  /**
239
- * Analyze tool capabilities
123
+ * Execute wrapped tool
240
124
  */
241
- analyzeToolCapabilities(tool) {
242
- const implementsFormValidatable = isFormValidatable(tool);
243
- const hasRenderConfig = this.hasRenderConfig(tool);
244
- const isZodObjectLike = this.isZodObjectLike(tool.schema);
245
- const supportsFormValidation = implementsFormValidatable || hasRenderConfig;
246
- const requiresWrapper = supportsFormValidation && isZodObjectLike;
247
- let priority = "medium";
248
- let category = "core";
249
- if (supportsFormValidation && requiresWrapper) {
250
- priority = "critical";
251
- } else if (supportsFormValidation) {
252
- priority = "high";
253
- } else if (tool.description?.toLowerCase().includes("query") || tool.description?.toLowerCase().includes("search")) {
254
- priority = "low";
125
+ async executeWrappedTool(toolEntry, mergedArgs) {
126
+ const wrapper = toolEntry.wrapper;
127
+ if (!wrapper) {
128
+ throw new Error("Tool wrapper not found");
255
129
  }
256
- const toolAsAny = tool;
257
- if (tool.constructor.name.includes("MCP") || toolAsAny.isMCPTool) {
258
- category = "mcp";
259
- } else if (toolAsAny.isExtension || tool.constructor.name.includes("Extension")) {
260
- category = "extension";
130
+ const wrapperAsAny = wrapper;
131
+ if (wrapperAsAny.executeOriginal) {
132
+ return await wrapperAsAny.executeOriginal(mergedArgs);
261
133
  }
262
- return {
263
- supportsFormValidation,
264
- requiresWrapper,
265
- priority,
266
- category
267
- };
268
- }
269
- /**
270
- * Check if tool has render configuration
271
- */
272
- hasRenderConfig(tool) {
273
- const schema = tool.schema;
274
- return !!(schema && schema._renderConfig);
134
+ if (wrapperAsAny.originalTool?.call) {
135
+ return await wrapperAsAny.originalTool.call(mergedArgs);
136
+ }
137
+ return await toolEntry.originalTool.call(mergedArgs);
275
138
  }
276
139
  /**
277
- * Determine if tool should be wrapped
140
+ * Handle execution error
278
141
  */
279
- shouldWrapTool(tool, capabilities, options) {
280
- if (options.skipWrapper) {
281
- return false;
282
- }
283
- if (options.forceWrapper) {
284
- return true;
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
+ };
285
152
  }
286
- return capabilities.requiresWrapper;
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
+ };
287
164
  }
288
165
  /**
289
- * Check if schema is ZodObject-like
166
+ * Build default session context
290
167
  */
291
- isZodObjectLike(schema) {
292
- if (!schema || typeof schema !== "object") {
293
- return false;
294
- }
295
- const schemaRecord = schema;
296
- const schemaDef = schemaRecord._def;
297
- return schema instanceof z.ZodObject || schemaDef?.typeName === "ZodObject" || "shape" in schemaRecord && typeof schemaRecord.shape === "object";
168
+ buildDefaultSession() {
169
+ return {
170
+ sessionId: `session-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
171
+ timestamp: Date.now()
172
+ };
298
173
  }
299
174
  /**
300
- * Get statistics about the registry
175
+ * Get statistics about the pipeline
301
176
  */
302
177
  getStatistics() {
303
- const stats = {
304
- totalTools: this.tools.size,
305
- wrappedTools: 0,
306
- unwrappedTools: 0,
307
- categoryCounts: { core: 0, extension: 0, mcp: 0 },
308
- priorityCounts: { low: 0, medium: 0, high: 0, critical: 0 }
178
+ return {
179
+ totalMiddleware: 0,
180
+ registeredMiddleware: []
309
181
  };
310
- for (const entry of this.tools.values()) {
311
- if (entry.wrapper) {
312
- stats.wrappedTools++;
313
- } else {
314
- stats.unwrappedTools++;
315
- }
316
- stats.categoryCounts[entry.metadata.category]++;
317
- stats.priorityCounts[entry.metadata.capabilities.priority]++;
318
- }
319
- return stats;
320
182
  }
321
183
  }
322
184
  export {
323
- ToolRegistry
185
+ ExecutionPipeline
324
186
  };
325
187
  //# sourceMappingURL=index45.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index45.js","sources":["../../src/core/tool-registry.ts"],"sourcesContent":["import { StructuredTool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { Logger } from '@hashgraphonline/standards-sdk';\nimport {\n FormValidatingToolWrapper,\n wrapToolWithFormValidation,\n} from '../langchain/form-validating-tool-wrapper';\nimport { FormGenerator } from '../forms/form-generator';\nimport {\n fieldGuidanceRegistry,\n} from '../forms/field-guidance-registry';\nimport type {\n ToolFieldConfiguration as FG_ToolFieldConfiguration,\n FieldGuidanceProvider as FG_FieldGuidanceProvider,\n} from '../forms/field-guidance-registry';\nimport { isFormValidatable } from '@hashgraphonline/standards-agent-kit';\n\n/**\n * Tool capabilities configuration for registry entries\n */\nexport interface ToolCapabilities {\n supportsFormValidation: boolean;\n requiresWrapper: boolean;\n priority: 'low' | 'medium' | 'high' | 'critical';\n category: 'core' | 'extension' | 'mcp';\n}\n\n/**\n * Entity resolution format preferences for tools\n */\nexport interface EntityResolutionPreferences {\n inscription?: 'hrl' | 'topicId' | 'metadata' | 'any';\n token?: 'tokenId' | 'address' | 'symbol' | 'any';\n nft?: 'serialNumber' | 'metadata' | 'hrl' | 'any';\n account?: 'accountId' | 'alias' | 'evmAddress' | 'any';\n}\n\n/**\n * Tool metadata for comprehensive tool information\n */\nexport interface ToolMetadata {\n name: string;\n version: string;\n category: ToolCapabilities['category'];\n description: string;\n capabilities: ToolCapabilities;\n dependencies: string[];\n schema: unknown;\n entityResolutionPreferences?: EntityResolutionPreferences;\n fieldGuidance?: FG_ToolFieldConfiguration;\n fieldGuidanceProvider?: FG_FieldGuidanceProvider;\n}\n\n/**\n * Registry entry containing tool instance and metadata\n */\nexport interface ToolRegistryEntry {\n tool: StructuredTool;\n metadata: ToolMetadata;\n wrapper?: FormValidatingToolWrapper<z.ZodObject<z.ZodRawShape>> | undefined;\n originalTool: StructuredTool;\n options?: {\n priority?: ToolCapabilities['priority'];\n capability?: string;\n enabled?: boolean;\n namespace?: string;\n };\n}\n\n/**\n * Options for tool registration\n */\nexport interface ToolRegistrationOptions {\n forceWrapper?: boolean;\n skipWrapper?: boolean;\n wrapperConfig?: {\n requireAllFields?: boolean;\n skipFields?: string[];\n };\n metadata?: Partial<ToolMetadata>;\n}\n\n/**\n * Query interface for finding tools\n */\nexport interface ToolQuery {\n name?: string;\n category?: ToolMetadata['category'];\n capabilities?: Partial<ToolCapabilities>;\n}\n\n/**\n * Centralized tool registry for managing tool lifecycle\n */\nexport class ToolRegistry {\n private tools = new Map<string, ToolRegistryEntry>();\n private formGenerator: FormGenerator;\n private logger: Logger;\n\n constructor(logger?: Logger) {\n this.formGenerator = new FormGenerator();\n this.logger = logger || new Logger({ module: 'ToolRegistry' });\n }\n\n /**\n * Register a tool with the registry\n */\n registerTool(\n tool: StructuredTool,\n options: ToolRegistrationOptions = {}\n ): void {\n const capabilities = this.analyzeToolCapabilities(tool);\n const metadata: ToolMetadata = {\n name: tool.name,\n version: '1.0.0',\n category: options.metadata?.category || 'core',\n description: tool.description,\n capabilities,\n dependencies: [],\n schema: tool.schema,\n ...options.metadata,\n };\n\n try {\n if (!metadata.entityResolutionPreferences) {\n const schemaRecord = tool.schema as unknown as Record<string, unknown>;\n const rawPrefs =\n schemaRecord &&\n typeof schemaRecord === 'object' &&\n (schemaRecord as Record<string, unknown>)[\n '_entityResolutionPreferences'\n ];\n if (rawPrefs && typeof rawPrefs === 'object') {\n metadata.entityResolutionPreferences = rawPrefs as unknown as EntityResolutionPreferences;\n }\n }\n } catch {\n }\n\n try {\n const schemaRecord = tool.schema as unknown as Record<string, unknown>;\n const schemaDef = (schemaRecord && (schemaRecord as Record<string, unknown>)._def) as\n | { typeName?: string; shape?: unknown }\n | undefined;\n if (schemaDef?.typeName === 'ZodObject') {\n const shape: Record<string, unknown> =\n typeof (schemaDef as { shape?: () => Record<string, unknown> }).shape === 'function'\n ? ((schemaDef as { shape: () => Record<string, unknown> }).shape?.() || {})\n : ((schemaDef as { shape?: Record<string, unknown> }).shape || {});\n\n const metadataField = shape['metadata'] as\n | { _def?: { typeName?: string; type?: { _def?: { typeName?: string } } } }\n | undefined;\n const isStringArray =\n !!metadataField &&\n metadataField._def?.typeName === 'ZodArray' &&\n metadataField._def?.type?._def?.typeName === 'ZodString';\n\n if (isStringArray && typeof tool.description === 'string') {\n if (!metadata.entityResolutionPreferences) {\n metadata.entityResolutionPreferences = {\n inscription: 'hrl',\n } as EntityResolutionPreferences;\n }\n const note =\n ' NOTE: When referencing inscriptions or media, provide canonical Hashlink Resource Locators (e.g., hcs://<standard>/<topicId>) rather than external URLs or embedded JSON.';\n if (!tool.description.includes('Hashlink Resource Locators')) {\n (tool as unknown as { description: string }).description = `${tool.description}${note}`;\n }\n }\n }\n } catch {}\n\n let finalTool: StructuredTool = tool;\n let wrapper:\n | FormValidatingToolWrapper<z.ZodObject<z.ZodRawShape>>\n | undefined;\n\n if (this.shouldWrapTool(tool, capabilities, options)) {\n wrapper = wrapToolWithFormValidation(\n tool as StructuredTool<z.ZodObject<z.ZodRawShape>>,\n this.formGenerator,\n {\n requireAllFields: false,\n skipFields: ['metaOptions'],\n ...options.wrapperConfig,\n }\n ) as FormValidatingToolWrapper<z.ZodObject<z.ZodRawShape>>;\n finalTool = wrapper as StructuredTool;\n }\n\n try {\n if (metadata.entityResolutionPreferences) {\n (finalTool as unknown as Record<string, unknown>)[\n 'entityResolutionPreferences'\n ] = metadata.entityResolutionPreferences;\n }\n } catch {\n }\n\n const entry: ToolRegistryEntry = {\n tool: finalTool,\n metadata,\n wrapper,\n originalTool: tool,\n options: {\n priority: capabilities.priority,\n capability: 'basic', // Default capability\n enabled: true, // All tools are enabled by default\n namespace: metadata.category,\n },\n };\n\n this.tools.set(tool.name, entry);\n\n try {\n const metaFG = metadata.fieldGuidance as FG_ToolFieldConfiguration | undefined;\n if (metaFG) {\n fieldGuidanceRegistry.registerToolConfiguration(metaFG);\n }\n const provider = metadata.fieldGuidanceProvider as FG_FieldGuidanceProvider | undefined;\n if (provider) {\n const pattern = metaFG?.toolPattern ?? tool.name;\n fieldGuidanceRegistry.registerToolProvider(pattern, provider, {\n id: `${tool.name}:field-guidance-provider`,\n priority: 0,\n });\n }\n } catch {}\n }\n\n /**\n * Get a tool by name\n */\n getTool(name: string): ToolRegistryEntry | null {\n return this.tools.get(name) || null;\n }\n\n /**\n * Get tools by capability\n */\n getToolsByCapability(\n capability: keyof ToolCapabilities,\n value?: unknown\n ): ToolRegistryEntry[] {\n const results: ToolRegistryEntry[] = [];\n\n for (const entry of this.tools.values()) {\n if (value !== undefined) {\n if (entry.metadata.capabilities[capability] === value) {\n results.push(entry);\n }\n } else if (entry.metadata.capabilities[capability]) {\n results.push(entry);\n }\n }\n\n return results;\n }\n\n /**\n * Get tools by query\n */\n getToolsByQuery(query: ToolQuery): ToolRegistryEntry[] {\n const results: ToolRegistryEntry[] = [];\n\n for (const entry of this.tools.values()) {\n let matches = true;\n\n if (query.name && entry.metadata.name !== query.name) {\n matches = false;\n }\n\n if (query.category && entry.metadata.category !== query.category) {\n matches = false;\n }\n\n if (query.capabilities) {\n for (const [key, value] of Object.entries(query.capabilities)) {\n if (\n entry.metadata.capabilities[key as keyof ToolCapabilities] !== value\n ) {\n matches = false;\n break;\n }\n }\n }\n\n if (matches) {\n results.push(entry);\n }\n }\n\n return results;\n }\n\n /**\n * Get all registered tools\n */\n getAllTools(): StructuredTool[] {\n return Array.from(this.tools.values()).map((entry) => entry.tool);\n }\n\n /**\n * Get all registry entries\n */\n getAllRegistryEntries(): ToolRegistryEntry[] {\n return Array.from(this.tools.values());\n }\n\n /**\n * Get all tool names\n */\n getToolNames(): string[] {\n return Array.from(this.tools.keys());\n }\n\n /**\n * Get tools by priority\n */\n getToolsByPriority(priority: ToolCapabilities['priority']): ToolRegistryEntry[] {\n return this.getToolsByCapability('priority', priority);\n }\n\n /**\n * Get enabled tools (all tools are considered enabled by default)\n */\n getEnabledTools(): ToolRegistryEntry[] {\n return this.getAllRegistryEntries();\n }\n\n /**\n * Get tools by namespace/category\n */\n getToolsByNamespace(namespace?: string): ToolRegistryEntry[] {\n if (!namespace) {\n return this.getAllRegistryEntries();\n }\n return this.getToolsByQuery({ category: namespace as ToolMetadata['category'] });\n }\n\n /**\n * Check if registry has capability\n */\n hasCapability(capability: keyof ToolCapabilities): boolean {\n for (const entry of this.tools.values()) {\n if (entry.metadata.capabilities[capability]) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Update tool options (metadata)\n */\n updateToolOptions(name: string, options: Partial<ToolMetadata>): boolean {\n const entry = this.tools.get(name);\n if (!entry) {\n return false;\n }\n\n entry.metadata = { ...entry.metadata, ...options };\n return true;\n }\n\n /**\n * Check if a tool is registered\n */\n hasTool(name: string): boolean {\n return this.tools.has(name);\n }\n\n /**\n * Unregister a tool\n */\n unregisterTool(name: string): boolean {\n return this.tools.delete(name);\n }\n\n /**\n * Clear all tools\n */\n clear(): void {\n this.tools.clear();\n }\n\n /**\n * Analyze tool capabilities\n */\n private analyzeToolCapabilities(tool: StructuredTool): ToolCapabilities {\n const implementsFormValidatable = isFormValidatable(tool);\n const hasRenderConfig = this.hasRenderConfig(tool);\n const isZodObjectLike = this.isZodObjectLike(tool.schema);\n\n const supportsFormValidation = implementsFormValidatable || hasRenderConfig;\n const requiresWrapper = supportsFormValidation && isZodObjectLike;\n\n let priority: ToolCapabilities['priority'] = 'medium';\n let category: ToolCapabilities['category'] = 'core';\n\n if (supportsFormValidation && requiresWrapper) {\n priority = 'critical';\n } else if (supportsFormValidation) {\n priority = 'high';\n } else if (\n tool.description?.toLowerCase().includes('query') ||\n tool.description?.toLowerCase().includes('search')\n ) {\n priority = 'low';\n }\n\n const toolAsAny = tool as unknown as Record<string, unknown>;\n if (tool.constructor.name.includes('MCP') || toolAsAny.isMCPTool) {\n category = 'mcp';\n } else if (\n toolAsAny.isExtension ||\n tool.constructor.name.includes('Extension')\n ) {\n category = 'extension';\n }\n\n return {\n supportsFormValidation,\n requiresWrapper,\n priority,\n category,\n };\n }\n\n /**\n * Check if tool has render configuration\n */\n private hasRenderConfig(tool: StructuredTool): boolean {\n const schema = tool.schema as Record<string, unknown>;\n return !!(schema && schema._renderConfig);\n }\n\n /**\n * Determine if tool should be wrapped\n */\n private shouldWrapTool(\n tool: StructuredTool,\n capabilities: ToolCapabilities,\n options: ToolRegistrationOptions\n ): boolean {\n if (options.skipWrapper) {\n return false;\n }\n\n if (options.forceWrapper) {\n return true;\n }\n\n return capabilities.requiresWrapper;\n }\n\n /**\n * Check if schema is ZodObject-like\n */\n private isZodObjectLike(schema: unknown): boolean {\n if (!schema || typeof schema !== 'object') {\n return false;\n }\n\n const schemaRecord = schema as Record<string, unknown>;\n const schemaDef = schemaRecord._def as Record<string, unknown> | undefined;\n\n return (\n schema instanceof z.ZodObject ||\n schemaDef?.typeName === 'ZodObject' ||\n ('shape' in schemaRecord && typeof schemaRecord.shape === 'object')\n );\n }\n\n /**\n * Get statistics about the registry\n */\n getStatistics(): {\n totalTools: number;\n wrappedTools: number;\n unwrappedTools: number;\n categoryCounts: Record<ToolCapabilities['category'], number>;\n priorityCounts: Record<ToolCapabilities['priority'], number>;\n } {\n const stats = {\n totalTools: this.tools.size,\n wrappedTools: 0,\n unwrappedTools: 0,\n categoryCounts: { core: 0, extension: 0, mcp: 0 } as Record<\n ToolCapabilities['category'],\n number\n >,\n priorityCounts: { low: 0, medium: 0, high: 0, critical: 0 } as Record<\n ToolCapabilities['priority'],\n number\n >,\n };\n\n for (const entry of this.tools.values()) {\n if (entry.wrapper) {\n stats.wrappedTools++;\n } else {\n stats.unwrappedTools++;\n }\n\n stats.categoryCounts[entry.metadata.category]++;\n stats.priorityCounts[entry.metadata.capabilities.priority]++;\n }\n\n return stats;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index45.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":";;AAwCO,MAAM,kBAAkB;AAAA,EAM7B,YACE,cACA,YACA,QACA,QACA;AACA,SAAK,eAAe;AACpB,SAAK,aAAa;AAClB,SAAK,SAAS;AACd,SAAK,SAAS,UAAU,IAAI,OAAO,EAAE,QAAQ,qBAAqB;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QACJ,UACA,OACA,gBAC0B;AAC1B,UAAM,UAAU,SAAS,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EACzC,SAAS,EAAE,EACX,OAAO,GAAG,CAAC,CAAC;AACf,UAAM,YAAY,KAAK,IAAA;AAEvB,UAAM,YAAY,KAAK,aAAa,QAAQ,QAAQ;AACpD,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,+BAA+B,QAAQ,EAAE;AAAA,IAC3D;AAEA,UAAM,UAA4B;AAAA,MAChC;AAAA,MACA;AAAA,MACA,SAAS,kBAAkB,KAAK,oBAAA;AAAA,MAChC,QAAQ,KAAK;AAAA,MACb;AAAA,MACA;AAAA,IAAA;AAGF,QAAI;AACF,YAAM,qBAAqB,MAAM,KAAK,oBAAoB,OAAO;AACjE,UAAI,mBAAmB,gBAAgB,mBAAmB,aAAa;AACrE,eAAO;AAAA,UACL,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,aAAa,mBAAmB;AAAA,UAChC;AAAA,UACA,eAAe,KAAK,QAAQ;AAAA,QAAA;AAAA,MAEhC;AAEA,YAAM,SAAS,MAAM,KAAK,kBAAkB,OAAO;AAEnD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,QAAQ;AAAA,QACR;AAAA,QACA,eAAe,KAAK,QAAQ;AAAA,MAAA;AAAA,IAEhC,SAAS,OAAO;AACd,aAAO,KAAK;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK,QAAQ;AAAA,MAAA;AAAA,IAEjB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBACJ,UACA,OACA,gBAC0B;AAC1B,WAAO,KAAK,QAAQ,UAAU,OAAO,cAAc;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBACJ,UACA,QACA,YACA,gBAC0B;AAC1B,UAAM,UAAU,QAAQ,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EACxC,SAAS,EAAE,EACX,OAAO,GAAG,CAAC,CAAC;AACf,UAAM,YAAY,KAAK,IAAA;AAEvB,QAAI;AACF,YAAM,iBAAiC;AAAA,QACrC;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,KAAK,IAAA;AAAA,MAAI;AAGtB,YAAM,iBAAiB,MAAM,KAAK,WAAW;AAAA,QAC3C;AAAA,MAAA;AAGF,aAAO,KAAK,QAAQ,UAAU,gBAAgB,cAAc;AAAA,IAC9D,SAAS,OAAO;AACd,aAAO;AAAA,QACL,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC5D;AAAA,QACA,eAAe,KAAK,QAAQ;AAAA,MAAA;AAAA,IAEhC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,oBAAoB,SAG/B;AACD,UAAM,cAAc,QAAQ;AAC5B,QAAI,aAAa,eAAe,QAAQ,aAAa,eAAe,OAAO;AACzE,aAAO,EAAE,cAAc,MAAA;AAAA,IACzB;AAEA,QACE,CAAC,KAAK,WAAW,mBAAmB,QAAQ,UAAU,MAAM,QAAQ,KAAK,GACzE;AACA,aAAO,EAAE,cAAc,MAAA;AAAA,IACzB;AAEA,UAAM,cAAc,MAAM,KAAK,WAAW;AAAA,MACxC,QAAQ;AAAA,MACR,QAAQ,UAAU;AAAA,MAClB,QAAQ;AAAA,IAAA;AAGV,QAAI,aAAa;AACf,aAAO,EAAE,cAAc,MAAM,YAAA;AAAA,IAC/B;AAEA,WAAO,EAAE,cAAc,MAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,kBAAkB,SAA4C;AAC1E,UAAM,EAAE,WAAW,MAAA,IAAU;AAC7B,UAAM,aAAc,SAAqC,CAAA;AACzD,UAAM,aAAa,EAAE,GAAG,YAAY,YAAY,MAAA;AAEhD,QAAI,UAAU,SAAS;AACrB,aAAO,KAAK,mBAAmB,WAAW,UAAU;AAAA,IACtD;AAEA,WAAO,MAAM,UAAU,KAAK,KAAK,UAAU;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBACZ,WACA,YACiB;AACjB,UAAM,UAAU,UAAU;AAC1B,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,wBAAwB;AAAA,IAC1C;AAEA,UAAM,eAAe;AAOrB,QAAI,aAAa,iBAAiB;AAChC,aAAO,MAAM,aAAa,gBAAgB,UAAU;AAAA,IACtD;AAEA,QAAI,aAAa,cAAc,MAAM;AACnC,aAAO,MAAM,aAAa,aAAa,KAAK,UAAU;AAAA,IACxD;AAEA,WAAO,MAAM,UAAU,aAAa,KAAK,UAAU;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKQ,qBACN,OACA,SACA,SACA,eACiB;AACjB,UAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAE1E,QAAI,iBAAiB,UAAU;AAC7B,aAAO;AAAA,QACL,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,OAAO;AAAA,QACP;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,SAAK,OAAO,MAAM,0BAA0B,QAAQ,QAAQ,IAAI;AAAA,MAC9D;AAAA,MACA,OAAO;AAAA,IAAA,CACR;AAED,WAAO;AAAA,MACL,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,MACP;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAsC;AAC5C,WAAO;AAAA,MACL,WAAW,WAAW,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EACtC,SAAS,EAAE,EACX,OAAO,GAAG,CAAC,CAAC;AAAA,MACf,WAAW,KAAK,IAAA;AAAA,IAAI;AAAA,EAExB;AAAA;AAAA;AAAA;AAAA,EAKA,gBAGE;AACA,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,sBAAsB,CAAA;AAAA,IAAC;AAAA,EAE3B;AACF;"}