@hashgraphonline/conversational-agent 0.1.215 → 0.1.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.
Files changed (123) hide show
  1. package/dist/cjs/conversational-agent.d.ts +8 -0
  2. package/dist/cjs/core/ToolRegistry.d.ts +130 -0
  3. package/dist/cjs/execution/ExecutionPipeline.d.ts +81 -0
  4. package/dist/cjs/forms/FormEngine.d.ts +121 -0
  5. package/dist/cjs/forms/form-generator.d.ts +39 -2
  6. package/dist/cjs/forms/types.d.ts +21 -2
  7. package/dist/cjs/index.cjs +1 -1
  8. package/dist/cjs/index.cjs.map +1 -1
  9. package/dist/cjs/index.d.ts +3 -4
  10. package/dist/cjs/langchain/FormAwareAgentExecutor.d.ts +53 -4
  11. package/dist/cjs/langchain/FormValidatingToolWrapper.d.ts +43 -6
  12. package/dist/cjs/langchain-agent.d.ts +49 -0
  13. package/dist/cjs/memory/ContentStorage.d.ts +7 -0
  14. package/dist/cjs/memory/SmartMemoryManager.d.ts +1 -0
  15. package/dist/cjs/services/ContentStoreManager.d.ts +11 -1
  16. package/dist/cjs/utils/ResponseFormatter.d.ts +26 -0
  17. package/dist/esm/index.js +2 -6
  18. package/dist/esm/index12.js +1 -1
  19. package/dist/esm/index12.js.map +1 -1
  20. package/dist/esm/index14.js +23 -5
  21. package/dist/esm/index14.js.map +1 -1
  22. package/dist/esm/index15.js +25 -4
  23. package/dist/esm/index15.js.map +1 -1
  24. package/dist/esm/index16.js +4 -2
  25. package/dist/esm/index16.js.map +1 -1
  26. package/dist/esm/index17.js +2 -7
  27. package/dist/esm/index17.js.map +1 -1
  28. package/dist/esm/index18.js +292 -150
  29. package/dist/esm/index18.js.map +1 -1
  30. package/dist/esm/index19.js +158 -65
  31. package/dist/esm/index19.js.map +1 -1
  32. package/dist/esm/index20.js +94 -270
  33. package/dist/esm/index20.js.map +1 -1
  34. package/dist/esm/index21.js +1 -1
  35. package/dist/esm/index23.js +14 -0
  36. package/dist/esm/index23.js.map +1 -1
  37. package/dist/esm/index24.js +508 -12
  38. package/dist/esm/index24.js.map +1 -1
  39. package/dist/esm/index25.js +1 -1
  40. package/dist/esm/index25.js.map +1 -1
  41. package/dist/esm/index26.js +1 -1
  42. package/dist/esm/index26.js.map +1 -1
  43. package/dist/esm/index27.js +189 -128
  44. package/dist/esm/index27.js.map +1 -1
  45. package/dist/esm/index28.js +164 -45
  46. package/dist/esm/index28.js.map +1 -1
  47. package/dist/esm/index29.js +302 -24
  48. package/dist/esm/index29.js.map +1 -1
  49. package/dist/esm/index30.js +144 -80
  50. package/dist/esm/index30.js.map +1 -1
  51. package/dist/esm/index31.js +63 -7
  52. package/dist/esm/index31.js.map +1 -1
  53. package/dist/esm/index32.js +24 -236
  54. package/dist/esm/index32.js.map +1 -1
  55. package/dist/esm/index33.js +95 -0
  56. package/dist/esm/index33.js.map +1 -0
  57. package/dist/esm/index34.js +245 -0
  58. package/dist/esm/index34.js.map +1 -0
  59. package/dist/esm/index5.js.map +1 -1
  60. package/dist/esm/index6.js +61 -22
  61. package/dist/esm/index6.js.map +1 -1
  62. package/dist/esm/index8.js +653 -131
  63. package/dist/esm/index8.js.map +1 -1
  64. package/dist/types/conversational-agent.d.ts +8 -0
  65. package/dist/types/core/ToolRegistry.d.ts +130 -0
  66. package/dist/types/execution/ExecutionPipeline.d.ts +81 -0
  67. package/dist/types/forms/FormEngine.d.ts +121 -0
  68. package/dist/types/forms/form-generator.d.ts +39 -2
  69. package/dist/types/forms/types.d.ts +21 -2
  70. package/dist/types/index.d.ts +3 -4
  71. package/dist/types/langchain/FormAwareAgentExecutor.d.ts +53 -4
  72. package/dist/types/langchain/FormValidatingToolWrapper.d.ts +43 -6
  73. package/dist/types/langchain-agent.d.ts +49 -0
  74. package/dist/types/memory/ContentStorage.d.ts +7 -0
  75. package/dist/types/memory/SmartMemoryManager.d.ts +1 -0
  76. package/dist/types/services/ContentStoreManager.d.ts +11 -1
  77. package/dist/types/utils/ResponseFormatter.d.ts +26 -0
  78. package/package.json +13 -10
  79. package/src/config/system-message.ts +14 -0
  80. package/src/context/ReferenceContextManager.ts +1 -1
  81. package/src/conversational-agent.ts +91 -36
  82. package/src/core/ToolRegistry.ts +358 -0
  83. package/src/execution/ExecutionPipeline.ts +301 -0
  84. package/src/forms/FormEngine.ts +443 -0
  85. package/src/forms/field-type-registry.ts +1 -13
  86. package/src/forms/form-generator.ts +394 -237
  87. package/src/forms/types.ts +20 -3
  88. package/src/index.ts +6 -10
  89. package/src/langchain/FormAwareAgentExecutor.ts +653 -22
  90. package/src/langchain/FormValidatingToolWrapper.ts +216 -93
  91. package/src/langchain-agent.ts +924 -185
  92. package/src/mcp/ContentProcessor.ts +20 -4
  93. package/src/mcp/MCPClientManager.ts +1 -1
  94. package/src/mcp/adapters/langchain.ts +1 -1
  95. package/src/memory/ContentStorage.ts +25 -5
  96. package/src/memory/SmartMemoryManager.ts +27 -4
  97. package/src/memory/TokenCounter.ts +1 -1
  98. package/src/plugins/hbar/HbarPlugin.ts +0 -1
  99. package/src/scripts/test-external-tool-wrapper.ts +3 -12
  100. package/src/scripts/test-hedera-kit-wrapper.ts +6 -22
  101. package/src/scripts/test-inscribe-form-generation.ts +24 -42
  102. package/src/scripts/test-inscribe-wrapper-verification.ts +1 -7
  103. package/src/services/ContentStoreManager.ts +23 -9
  104. package/src/services/EntityResolver.ts +2 -9
  105. package/src/tools/EntityResolverTool.ts +5 -8
  106. package/src/utils/ResponseFormatter.ts +146 -0
  107. package/dist/cjs/examples/external-tool-wrapper-example.d.ts +0 -131
  108. package/dist/cjs/langchain/ContentAwareAgentExecutor.d.ts +0 -14
  109. package/dist/cjs/langchain/external-tool-wrapper.d.ts +0 -179
  110. package/dist/cjs/scripts/test-external-tool-wrapper.d.ts +0 -5
  111. package/dist/cjs/scripts/test-hedera-kit-wrapper.d.ts +0 -36
  112. package/dist/cjs/scripts/test-inscribe-form-generation.d.ts +0 -15
  113. package/dist/cjs/scripts/test-inscribe-wrapper-verification.d.ts +0 -13
  114. package/dist/types/examples/external-tool-wrapper-example.d.ts +0 -131
  115. package/dist/types/langchain/ContentAwareAgentExecutor.d.ts +0 -14
  116. package/dist/types/langchain/external-tool-wrapper.d.ts +0 -179
  117. package/dist/types/scripts/test-external-tool-wrapper.d.ts +0 -5
  118. package/dist/types/scripts/test-hedera-kit-wrapper.d.ts +0 -36
  119. package/dist/types/scripts/test-inscribe-form-generation.d.ts +0 -15
  120. package/dist/types/scripts/test-inscribe-wrapper-verification.d.ts +0 -13
  121. package/src/examples/external-tool-wrapper-example.ts +0 -227
  122. package/src/langchain/ContentAwareAgentExecutor.ts +0 -19
  123. package/src/langchain/external-tool-wrapper.ts +0 -486
@@ -0,0 +1,301 @@
1
+ import { ZodError } from 'zod';
2
+ import { Logger } from '@hashgraphonline/standards-sdk';
3
+ import { SmartMemoryManager } from '../memory/SmartMemoryManager';
4
+ import { FormEngine, ToolExecutionResult } from '../forms/FormEngine';
5
+ import type { FormMessage, FormSubmission } from '../forms/types';
6
+ import type { ToolRegistry, ToolRegistryEntry } from '../core/ToolRegistry';
7
+
8
+ /**
9
+ * Session context for tool execution
10
+ */
11
+ export interface SessionContext {
12
+ sessionId: string;
13
+ userId?: string;
14
+ timestamp: number;
15
+ conversationId?: string;
16
+ }
17
+
18
+ /**
19
+ * Context passed through execution pipeline
20
+ */
21
+ export interface ExecutionContext {
22
+ toolName: string;
23
+ input: unknown;
24
+ session: SessionContext;
25
+ memory: SmartMemoryManager;
26
+ traceId: string;
27
+ toolEntry: ToolRegistryEntry;
28
+ }
29
+
30
+ /**
31
+ * Result of tool execution with metadata
32
+ */
33
+ export interface ExecutionResult extends ToolExecutionResult {
34
+ traceId: string;
35
+ executionTime: number;
36
+ }
37
+
38
+ /**
39
+ * ExecutionPipeline handles tool execution coordination
40
+ */
41
+ export class ExecutionPipeline {
42
+ private logger: Logger;
43
+ private toolRegistry: ToolRegistry;
44
+ private formEngine: FormEngine;
45
+ private memory: SmartMemoryManager;
46
+
47
+ constructor(
48
+ toolRegistry: ToolRegistry,
49
+ formEngine: FormEngine,
50
+ memory: SmartMemoryManager,
51
+ logger?: Logger
52
+ ) {
53
+ this.toolRegistry = toolRegistry;
54
+ this.formEngine = formEngine;
55
+ this.memory = memory;
56
+ this.logger = logger || new Logger({ module: 'ExecutionPipeline' });
57
+ }
58
+
59
+ /**
60
+ * Execute a tool through the pipeline
61
+ */
62
+ async execute(
63
+ toolName: string,
64
+ input: unknown,
65
+ sessionContext?: SessionContext
66
+ ): Promise<ExecutionResult> {
67
+ const traceId = `trace-${Date.now()}-${Math.random()
68
+ .toString(36)
69
+ .substr(2, 9)}`;
70
+ const startTime = Date.now();
71
+
72
+ const toolEntry = this.toolRegistry.getTool(toolName);
73
+ if (!toolEntry) {
74
+ throw new Error(`Tool not found in registry: ${toolName}`);
75
+ }
76
+
77
+ const context: ExecutionContext = {
78
+ toolName,
79
+ input,
80
+ session: sessionContext || this.buildDefaultSession(),
81
+ memory: this.memory,
82
+ traceId,
83
+ toolEntry,
84
+ };
85
+
86
+ try {
87
+ const shouldGenerateForm = await this.checkFormGeneration(context);
88
+ if (shouldGenerateForm.requiresForm && shouldGenerateForm.formMessage) {
89
+ return {
90
+ success: false,
91
+ output: 'Form generation required',
92
+ requiresForm: true,
93
+ formMessage: shouldGenerateForm.formMessage,
94
+ traceId,
95
+ executionTime: Date.now() - startTime,
96
+ };
97
+ }
98
+
99
+ const result = await this.executeToolDirect(context);
100
+
101
+ return {
102
+ success: true,
103
+ output: result,
104
+ traceId,
105
+ executionTime: Date.now() - startTime,
106
+ };
107
+ } catch (error) {
108
+ return this.handleExecutionError(
109
+ error,
110
+ context,
111
+ traceId,
112
+ Date.now() - startTime
113
+ );
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Execute tool with validation
119
+ */
120
+ async executeWithValidation(
121
+ toolName: string,
122
+ input: unknown,
123
+ sessionContext?: SessionContext
124
+ ): Promise<ExecutionResult> {
125
+ return this.execute(toolName, input, sessionContext);
126
+ }
127
+
128
+ /**
129
+ * Process form submission
130
+ */
131
+ async processFormSubmission(
132
+ toolName: string,
133
+ formId: string,
134
+ parameters: Record<string, unknown>,
135
+ sessionContext?: SessionContext
136
+ ): Promise<ExecutionResult> {
137
+ const traceId = `form-${Date.now()}-${Math.random()
138
+ .toString(36)
139
+ .substr(2, 9)}`;
140
+ const startTime = Date.now();
141
+
142
+ try {
143
+ const formSubmission: FormSubmission = {
144
+ formId,
145
+ toolName,
146
+ parameters,
147
+ timestamp: Date.now(),
148
+ };
149
+
150
+ const processedInput = await this.formEngine.processSubmission(
151
+ formSubmission
152
+ );
153
+
154
+ return this.execute(toolName, processedInput, sessionContext);
155
+ } catch (error) {
156
+ return {
157
+ success: false,
158
+ output: 'Form submission processing failed',
159
+ error: error instanceof Error ? error.message : String(error),
160
+ traceId,
161
+ executionTime: Date.now() - startTime,
162
+ };
163
+ }
164
+ }
165
+
166
+ /**
167
+ * Check if form generation is required
168
+ */
169
+ private async checkFormGeneration(context: ExecutionContext): Promise<{
170
+ requiresForm: boolean;
171
+ formMessage?: FormMessage;
172
+ }> {
173
+ const inputRecord = context.input as Record<string, unknown>;
174
+ if (inputRecord?.__fromForm === true || inputRecord?.renderForm === false) {
175
+ return { requiresForm: false };
176
+ }
177
+
178
+ if (
179
+ !this.formEngine.shouldGenerateForm(context.toolEntry.tool, context.input)
180
+ ) {
181
+ return { requiresForm: false };
182
+ }
183
+
184
+ const formMessage = await this.formEngine.generateForm(
185
+ context.toolName,
186
+ context.toolEntry.tool,
187
+ context.input
188
+ );
189
+
190
+ if (formMessage) {
191
+ return { requiresForm: true, formMessage };
192
+ }
193
+
194
+ return { requiresForm: false };
195
+ }
196
+
197
+ /**
198
+ * Execute tool directly
199
+ */
200
+ private async executeToolDirect(context: ExecutionContext): Promise<string> {
201
+ const { toolEntry, input } = context;
202
+ const parameters = (input as Record<string, unknown>) || {};
203
+ const mergedArgs = { ...parameters, renderForm: false };
204
+
205
+ if (toolEntry.wrapper) {
206
+ return this.executeWrappedTool(toolEntry, mergedArgs);
207
+ }
208
+
209
+ return await toolEntry.tool.call(mergedArgs);
210
+ }
211
+
212
+ /**
213
+ * Execute wrapped tool
214
+ */
215
+ private async executeWrappedTool(
216
+ toolEntry: ToolRegistryEntry,
217
+ mergedArgs: Record<string, unknown>
218
+ ): Promise<string> {
219
+ const wrapper = toolEntry.wrapper;
220
+ if (!wrapper) {
221
+ throw new Error('Tool wrapper not found');
222
+ }
223
+
224
+ const wrapperAsAny = wrapper as unknown as {
225
+ executeOriginal?: (args: Record<string, unknown>) => Promise<string>;
226
+ originalTool?: {
227
+ call?: (args: Record<string, unknown>) => Promise<string>;
228
+ };
229
+ };
230
+
231
+ if (wrapperAsAny.executeOriginal) {
232
+ return await wrapperAsAny.executeOriginal(mergedArgs);
233
+ }
234
+
235
+ if (wrapperAsAny.originalTool?.call) {
236
+ return await wrapperAsAny.originalTool.call(mergedArgs);
237
+ }
238
+
239
+ return await toolEntry.originalTool.call(mergedArgs);
240
+ }
241
+
242
+ /**
243
+ * Handle execution error
244
+ */
245
+ private handleExecutionError(
246
+ error: unknown,
247
+ context: ExecutionContext,
248
+ traceId: string,
249
+ executionTime: number
250
+ ): ExecutionResult {
251
+ const errorMessage = error instanceof Error ? error.message : String(error);
252
+
253
+ if (error instanceof ZodError) {
254
+ return {
255
+ success: false,
256
+ output: 'Validation error occurred',
257
+ error: errorMessage,
258
+ traceId,
259
+ executionTime,
260
+ };
261
+ }
262
+
263
+ this.logger.error(`Tool execution failed: ${context.toolName}`, {
264
+ traceId,
265
+ error: errorMessage,
266
+ });
267
+
268
+ return {
269
+ success: false,
270
+ output: 'Tool execution failed',
271
+ error: errorMessage,
272
+ traceId,
273
+ executionTime,
274
+ };
275
+ }
276
+
277
+ /**
278
+ * Build default session context
279
+ */
280
+ private buildDefaultSession(): SessionContext {
281
+ return {
282
+ sessionId: `session-${Date.now()}-${Math.random()
283
+ .toString(36)
284
+ .substr(2, 9)}`,
285
+ timestamp: Date.now(),
286
+ };
287
+ }
288
+
289
+ /**
290
+ * Get statistics about the pipeline
291
+ */
292
+ getStatistics(): {
293
+ totalMiddleware: number;
294
+ registeredMiddleware: string[];
295
+ } {
296
+ return {
297
+ totalMiddleware: 0,
298
+ registeredMiddleware: [],
299
+ };
300
+ }
301
+ }