@hashgraphonline/conversational-agent 0.1.217 → 0.1.219

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/cli/readme.md +181 -0
  2. package/dist/cjs/constants/entity-references.d.ts +18 -0
  3. package/dist/cjs/constants/form-priorities.d.ts +24 -0
  4. package/dist/cjs/constants/index.d.ts +4 -0
  5. package/dist/cjs/constants/messages.d.ts +19 -0
  6. package/dist/cjs/constants/test-constants.d.ts +42 -0
  7. package/dist/cjs/conversational-agent.d.ts +3 -8
  8. package/dist/{types/core/ToolRegistry.d.ts → cjs/core/tool-registry.d.ts} +11 -1
  9. package/dist/{types/execution/ExecutionPipeline.d.ts → cjs/execution/execution-pipeline.d.ts} +3 -3
  10. package/dist/cjs/forms/field-guidance-registry.d.ts +108 -0
  11. package/dist/cjs/forms/form-generator.d.ts +2 -7
  12. package/dist/cjs/forms/index.d.ts +3 -0
  13. package/dist/cjs/forms/types.d.ts +9 -1
  14. package/dist/cjs/index.cjs +1 -1
  15. package/dist/cjs/index.cjs.map +1 -1
  16. package/dist/cjs/index.d.ts +7 -12
  17. package/dist/cjs/langchain/external-tool-wrapper.d.ts +101 -0
  18. package/dist/{types/langchain/FormAwareAgentExecutor.d.ts → cjs/langchain/form-aware-agent-executor.d.ts} +19 -4
  19. package/dist/cjs/langchain/index.d.ts +3 -0
  20. package/dist/{types → cjs/langchain}/langchain-agent.d.ts +15 -7
  21. package/dist/cjs/mcp/adapters/index.d.ts +1 -0
  22. package/dist/cjs/mcp/adapters/langchain.d.ts +1 -1
  23. package/dist/{types/mcp/ContentProcessor.d.ts → cjs/mcp/content-processor.d.ts} +1 -1
  24. package/dist/cjs/mcp/index.d.ts +5 -0
  25. package/dist/{types/mcp/MCPClientManager.d.ts → cjs/mcp/mcp-client-manager.d.ts} +1 -1
  26. package/dist/cjs/memory/{ContentStorage.d.ts → content-storage.d.ts} +4 -4
  27. package/dist/cjs/memory/index.d.ts +5 -7
  28. package/dist/{types/memory/MemoryWindow.d.ts → cjs/memory/memory-window.d.ts} +1 -1
  29. package/dist/{types/memory/SmartMemoryManager.d.ts → cjs/memory/smart-memory-manager.d.ts} +1 -1
  30. package/dist/cjs/services/{ContentStoreManager.d.ts → content-store-manager.d.ts} +6 -6
  31. package/dist/cjs/services/context/resolution-context.d.ts +49 -0
  32. package/dist/cjs/services/entity-resolver.d.ts +58 -0
  33. package/dist/cjs/services/formatters/converters/index.d.ts +2 -0
  34. package/dist/cjs/services/formatters/converters/string-normalization-converter.d.ts +13 -0
  35. package/dist/cjs/services/formatters/converters/topic-id-to-hrl-converter.d.ts +17 -0
  36. package/dist/cjs/services/formatters/format-converter-registry.d.ts +66 -0
  37. package/dist/cjs/services/formatters/index.d.ts +3 -0
  38. package/dist/cjs/services/formatters/types.d.ts +29 -0
  39. package/dist/cjs/services/index.d.ts +3 -0
  40. package/dist/cjs/services/resolution/resolution-pipeline.d.ts +44 -0
  41. package/dist/cjs/tools/index.d.ts +1 -0
  42. package/dist/cjs/utils/index.d.ts +1 -0
  43. package/dist/esm/index.js +40 -13
  44. package/dist/esm/index.js.map +1 -1
  45. package/dist/esm/index10.js +669 -13
  46. package/dist/esm/index10.js.map +1 -1
  47. package/dist/esm/index11.js +310 -95
  48. package/dist/esm/index11.js.map +1 -1
  49. package/dist/esm/index12.js +130 -95
  50. package/dist/esm/index12.js.map +1 -1
  51. package/dist/esm/index13.js +262 -153
  52. package/dist/esm/index13.js.map +1 -1
  53. package/dist/esm/index14.js +100 -664
  54. package/dist/esm/index14.js.map +1 -1
  55. package/dist/esm/index15.js +135 -408
  56. package/dist/esm/index15.js.map +1 -1
  57. package/dist/esm/index16.js +240 -122
  58. package/dist/esm/index16.js.map +1 -1
  59. package/dist/esm/index17.js +147 -135
  60. package/dist/esm/index17.js.map +1 -1
  61. package/dist/esm/index18.js +376 -533
  62. package/dist/esm/index18.js.map +1 -1
  63. package/dist/esm/index19.js +87 -214
  64. package/dist/esm/index19.js.map +1 -1
  65. package/dist/esm/index2.js +21 -4
  66. package/dist/esm/index2.js.map +1 -1
  67. package/dist/esm/index20.js +158 -92
  68. package/dist/esm/index20.js.map +1 -1
  69. package/dist/esm/index21.js +717 -44
  70. package/dist/esm/index21.js.map +1 -1
  71. package/dist/esm/index22.js +58 -96
  72. package/dist/esm/index22.js.map +1 -1
  73. package/dist/esm/index23.js +324 -34
  74. package/dist/esm/index23.js.map +1 -1
  75. package/dist/esm/index24.js +125 -712
  76. package/dist/esm/index24.js.map +1 -1
  77. package/dist/esm/index25.js +113 -133
  78. package/dist/esm/index25.js.map +1 -1
  79. package/dist/esm/index26.js +18 -152
  80. package/dist/esm/index26.js.map +1 -1
  81. package/dist/esm/index27.js +14 -210
  82. package/dist/esm/index27.js.map +1 -1
  83. package/dist/esm/index28.js +70 -173
  84. package/dist/esm/index28.js.map +1 -1
  85. package/dist/esm/index29.js +882 -220
  86. package/dist/esm/index29.js.map +1 -1
  87. package/dist/esm/index30.js +218 -126
  88. package/dist/esm/index30.js.map +1 -1
  89. package/dist/esm/index31.js +1258 -44
  90. package/dist/esm/index31.js.map +1 -1
  91. package/dist/esm/index32.js +132 -24
  92. package/dist/esm/index32.js.map +1 -1
  93. package/dist/esm/index33.js +104 -82
  94. package/dist/esm/index33.js.map +1 -1
  95. package/dist/esm/index34.js +43 -239
  96. package/dist/esm/index34.js.map +1 -1
  97. package/dist/esm/index35.js +106 -0
  98. package/dist/esm/index35.js.map +1 -0
  99. package/dist/esm/index36.js +24 -0
  100. package/dist/esm/index36.js.map +1 -0
  101. package/dist/esm/index37.js +8 -0
  102. package/dist/esm/index37.js.map +1 -0
  103. package/dist/esm/index38.js +15 -0
  104. package/dist/esm/index38.js.map +1 -0
  105. package/dist/esm/index39.js +258 -0
  106. package/dist/esm/index39.js.map +1 -0
  107. package/dist/esm/index40.js +187 -0
  108. package/dist/esm/index40.js.map +1 -0
  109. package/dist/esm/index41.js +30 -0
  110. package/dist/esm/index41.js.map +1 -0
  111. package/dist/esm/index42.js +10 -0
  112. package/dist/esm/index42.js.map +1 -0
  113. package/dist/esm/index43.js +95 -0
  114. package/dist/esm/index43.js.map +1 -0
  115. package/dist/esm/index5.js +2 -2
  116. package/dist/esm/index5.js.map +1 -1
  117. package/dist/esm/index6.js +44 -67
  118. package/dist/esm/index6.js.map +1 -1
  119. package/dist/esm/index7.js +9 -0
  120. package/dist/esm/index7.js.map +1 -1
  121. package/dist/esm/index8.js +13 -1095
  122. package/dist/esm/index8.js.map +1 -1
  123. package/dist/esm/index9.js +17 -13
  124. package/dist/esm/index9.js.map +1 -1
  125. package/dist/types/constants/entity-references.d.ts +18 -0
  126. package/dist/types/constants/form-priorities.d.ts +24 -0
  127. package/dist/types/constants/index.d.ts +4 -0
  128. package/dist/types/constants/messages.d.ts +19 -0
  129. package/dist/types/constants/test-constants.d.ts +42 -0
  130. package/dist/types/conversational-agent.d.ts +3 -8
  131. package/dist/{cjs/core/ToolRegistry.d.ts → types/core/tool-registry.d.ts} +11 -1
  132. package/dist/{cjs/execution/ExecutionPipeline.d.ts → types/execution/execution-pipeline.d.ts} +3 -3
  133. package/dist/types/forms/field-guidance-registry.d.ts +108 -0
  134. package/dist/types/forms/form-generator.d.ts +2 -7
  135. package/dist/types/forms/index.d.ts +3 -0
  136. package/dist/types/forms/types.d.ts +9 -1
  137. package/dist/types/index.d.ts +7 -12
  138. package/dist/types/langchain/external-tool-wrapper.d.ts +101 -0
  139. package/dist/{cjs/langchain/FormAwareAgentExecutor.d.ts → types/langchain/form-aware-agent-executor.d.ts} +19 -4
  140. package/dist/types/langchain/index.d.ts +3 -0
  141. package/dist/{cjs → types/langchain}/langchain-agent.d.ts +15 -7
  142. package/dist/types/mcp/adapters/index.d.ts +1 -0
  143. package/dist/types/mcp/adapters/langchain.d.ts +1 -1
  144. package/dist/{cjs/mcp/ContentProcessor.d.ts → types/mcp/content-processor.d.ts} +1 -1
  145. package/dist/types/mcp/index.d.ts +5 -0
  146. package/dist/{cjs/mcp/MCPClientManager.d.ts → types/mcp/mcp-client-manager.d.ts} +1 -1
  147. package/dist/types/memory/{ContentStorage.d.ts → content-storage.d.ts} +4 -4
  148. package/dist/types/memory/index.d.ts +5 -7
  149. package/dist/{cjs/memory/MemoryWindow.d.ts → types/memory/memory-window.d.ts} +1 -1
  150. package/dist/{cjs/memory/SmartMemoryManager.d.ts → types/memory/smart-memory-manager.d.ts} +1 -1
  151. package/dist/types/services/{ContentStoreManager.d.ts → content-store-manager.d.ts} +6 -6
  152. package/dist/types/services/context/resolution-context.d.ts +49 -0
  153. package/dist/types/services/entity-resolver.d.ts +58 -0
  154. package/dist/types/services/formatters/converters/index.d.ts +2 -0
  155. package/dist/types/services/formatters/converters/string-normalization-converter.d.ts +13 -0
  156. package/dist/types/services/formatters/converters/topic-id-to-hrl-converter.d.ts +17 -0
  157. package/dist/types/services/formatters/format-converter-registry.d.ts +66 -0
  158. package/dist/types/services/formatters/index.d.ts +3 -0
  159. package/dist/types/services/formatters/types.d.ts +29 -0
  160. package/dist/types/services/index.d.ts +3 -0
  161. package/dist/types/services/resolution/resolution-pipeline.d.ts +44 -0
  162. package/dist/types/tools/index.d.ts +1 -0
  163. package/dist/types/utils/index.d.ts +1 -0
  164. package/package.json +30 -27
  165. package/src/agent-factory.ts +1 -1
  166. package/src/base-agent.ts +9 -0
  167. package/src/config/system-message.ts +2 -15
  168. package/src/constants/entity-references.ts +23 -0
  169. package/src/constants/form-priorities.ts +25 -0
  170. package/src/constants/index.ts +4 -0
  171. package/src/constants/messages.ts +20 -0
  172. package/src/constants/test-constants.ts +49 -0
  173. package/src/conversational-agent.ts +42 -69
  174. package/src/core/{ToolRegistry.ts → tool-registry.ts} +71 -1
  175. package/src/examples/external-tool-wrapper-example.ts +56 -0
  176. package/src/execution/{ExecutionPipeline.ts → execution-pipeline.ts} +3 -3
  177. package/src/forms/field-guidance-registry.ts +415 -0
  178. package/src/forms/field-type-registry.ts +49 -48
  179. package/src/forms/{FormEngine.ts → form-engine.ts} +66 -43
  180. package/src/forms/form-generator.ts +91 -17
  181. package/src/forms/index.ts +4 -1
  182. package/src/forms/types.ts +9 -1
  183. package/src/index.ts +7 -37
  184. package/src/langchain/external-tool-wrapper.ts +90 -0
  185. package/src/langchain/{FormAwareAgentExecutor.ts → form-aware-agent-executor.ts} +615 -231
  186. package/src/langchain/{FormValidatingToolWrapper.ts → form-validating-tool-wrapper.ts} +2 -1
  187. package/src/langchain/index.ts +3 -0
  188. package/src/{langchain-agent.ts → langchain/langchain-agent.ts} +389 -113
  189. package/src/mcp/adapters/index.ts +1 -0
  190. package/src/mcp/adapters/langchain.ts +27 -18
  191. package/src/mcp/{ContentProcessor.ts → content-processor.ts} +71 -47
  192. package/src/mcp/index.ts +5 -0
  193. package/src/mcp/{MCPClientManager.ts → mcp-client-manager.ts} +2 -2
  194. package/src/memory/{ContentStorage.ts → content-storage.ts} +263 -167
  195. package/src/memory/index.ts +5 -8
  196. package/src/memory/{MemoryWindow.ts → memory-window.ts} +47 -24
  197. package/src/memory/{SmartMemoryManager.ts → smart-memory-manager.ts} +49 -22
  198. package/src/plugins/hbar/HbarPlugin.ts +1 -1
  199. package/src/plugins/hcs-10/HCS10Plugin.ts +46 -28
  200. package/src/scripts/test-external-tool-wrapper.ts +6 -6
  201. package/src/scripts/test-inscribe-form-generation.ts +22 -21
  202. package/src/scripts/test-inscribe-wrapper-verification.ts +5 -4
  203. package/src/services/{ContentStoreManager.ts → content-store-manager.ts} +75 -33
  204. package/src/services/context/resolution-context.ts +80 -0
  205. package/src/services/entity-resolver.ts +425 -0
  206. package/src/services/formatters/converters/index.ts +2 -0
  207. package/src/services/formatters/converters/string-normalization-converter.ts +106 -0
  208. package/src/services/formatters/converters/topic-id-to-hrl-converter.ts +25 -0
  209. package/src/services/formatters/format-converter-registry.ts +229 -0
  210. package/src/services/formatters/index.ts +3 -0
  211. package/src/services/formatters/types.ts +31 -0
  212. package/src/services/index.ts +3 -0
  213. package/src/services/resolution/resolution-pipeline.ts +106 -0
  214. package/src/tools/index.ts +1 -0
  215. package/src/types/content-reference.ts +87 -60
  216. package/src/utils/index.ts +1 -0
  217. package/cli/dist/CLIApp.d.ts +0 -9
  218. package/cli/dist/CLIApp.js +0 -127
  219. package/cli/dist/LocalConversationalAgent.d.ts +0 -37
  220. package/cli/dist/LocalConversationalAgent.js +0 -58
  221. package/cli/dist/app.d.ts +0 -16
  222. package/cli/dist/app.js +0 -13
  223. package/cli/dist/cli.d.ts +0 -2
  224. package/cli/dist/cli.js +0 -51
  225. package/cli/dist/components/AppContainer.d.ts +0 -16
  226. package/cli/dist/components/AppContainer.js +0 -24
  227. package/cli/dist/components/AppScreens.d.ts +0 -2
  228. package/cli/dist/components/AppScreens.js +0 -259
  229. package/cli/dist/components/ChatScreen.d.ts +0 -15
  230. package/cli/dist/components/ChatScreen.js +0 -39
  231. package/cli/dist/components/DebugLoadingScreen.d.ts +0 -5
  232. package/cli/dist/components/DebugLoadingScreen.js +0 -31
  233. package/cli/dist/components/LoadingScreen.d.ts +0 -2
  234. package/cli/dist/components/LoadingScreen.js +0 -16
  235. package/cli/dist/components/LoadingScreenDebug.d.ts +0 -5
  236. package/cli/dist/components/LoadingScreenDebug.js +0 -27
  237. package/cli/dist/components/MCPConfigScreen.d.ts +0 -28
  238. package/cli/dist/components/MCPConfigScreen.js +0 -168
  239. package/cli/dist/components/ScreenRouter.d.ts +0 -12
  240. package/cli/dist/components/ScreenRouter.js +0 -22
  241. package/cli/dist/components/SetupScreen.d.ts +0 -15
  242. package/cli/dist/components/SetupScreen.js +0 -65
  243. package/cli/dist/components/SingleLoadingScreen.d.ts +0 -5
  244. package/cli/dist/components/SingleLoadingScreen.js +0 -27
  245. package/cli/dist/components/StatusBadge.d.ts +0 -7
  246. package/cli/dist/components/StatusBadge.js +0 -28
  247. package/cli/dist/components/TerminalWindow.d.ts +0 -8
  248. package/cli/dist/components/TerminalWindow.js +0 -24
  249. package/cli/dist/components/WelcomeScreen.d.ts +0 -11
  250. package/cli/dist/components/WelcomeScreen.js +0 -47
  251. package/cli/dist/context/AppContext.d.ts +0 -68
  252. package/cli/dist/context/AppContext.js +0 -363
  253. package/cli/dist/hooks/useInitializeAgent.d.ts +0 -19
  254. package/cli/dist/hooks/useInitializeAgent.js +0 -28
  255. package/cli/dist/hooks/useStableState.d.ts +0 -38
  256. package/cli/dist/hooks/useStableState.js +0 -68
  257. package/cli/dist/managers/AgentManager.d.ts +0 -57
  258. package/cli/dist/managers/AgentManager.js +0 -119
  259. package/cli/dist/managers/ConfigManager.d.ts +0 -53
  260. package/cli/dist/managers/ConfigManager.js +0 -173
  261. package/cli/dist/types.d.ts +0 -31
  262. package/cli/dist/types.js +0 -19
  263. package/dist/cjs/context/ReferenceContextManager.d.ts +0 -84
  264. package/dist/cjs/context/ReferenceResponseProcessor.d.ts +0 -76
  265. package/dist/cjs/services/EntityResolver.d.ts +0 -26
  266. package/dist/types/context/ReferenceContextManager.d.ts +0 -84
  267. package/dist/types/context/ReferenceResponseProcessor.d.ts +0 -76
  268. package/dist/types/services/EntityResolver.d.ts +0 -26
  269. package/src/context/ReferenceContextManager.ts +0 -350
  270. package/src/context/ReferenceResponseProcessor.ts +0 -295
  271. package/src/scripts/test-hedera-kit-wrapper.ts +0 -265
  272. package/src/services/EntityResolver.ts +0 -128
  273. /package/dist/cjs/forms/{FormEngine.d.ts → form-engine.d.ts} +0 -0
  274. /package/dist/cjs/langchain/{FormValidatingToolWrapper.d.ts → form-validating-tool-wrapper.d.ts} +0 -0
  275. /package/dist/cjs/memory/{ReferenceIdGenerator.d.ts → reference-id-generator.d.ts} +0 -0
  276. /package/dist/cjs/memory/{TokenCounter.d.ts → token-counter.d.ts} +0 -0
  277. /package/dist/cjs/tools/{EntityResolverTool.d.ts → entity-resolver-tool.d.ts} +0 -0
  278. /package/dist/cjs/utils/{ResponseFormatter.d.ts → response-formatter.d.ts} +0 -0
  279. /package/dist/types/forms/{FormEngine.d.ts → form-engine.d.ts} +0 -0
  280. /package/dist/types/langchain/{FormValidatingToolWrapper.d.ts → form-validating-tool-wrapper.d.ts} +0 -0
  281. /package/dist/types/memory/{ReferenceIdGenerator.d.ts → reference-id-generator.d.ts} +0 -0
  282. /package/dist/types/memory/{TokenCounter.d.ts → token-counter.d.ts} +0 -0
  283. /package/dist/types/tools/{EntityResolverTool.d.ts → entity-resolver-tool.d.ts} +0 -0
  284. /package/dist/types/utils/{ResponseFormatter.d.ts → response-formatter.d.ts} +0 -0
  285. /package/src/memory/{ReferenceIdGenerator.ts → reference-id-generator.ts} +0 -0
  286. /package/src/memory/{TokenCounter.ts → token-counter.ts} +0 -0
  287. /package/src/tools/{EntityResolverTool.ts → entity-resolver-tool.ts} +0 -0
  288. /package/src/utils/{ResponseFormatter.ts → response-formatter.ts} +0 -0
@@ -52,7 +52,7 @@ export class FormEngine {
52
52
  const fullContext: FormGenerationContext = {
53
53
  tool,
54
54
  input,
55
- ...context
55
+ ...context,
56
56
  };
57
57
 
58
58
  try {
@@ -75,7 +75,7 @@ export class FormEngine {
75
75
  return null;
76
76
  } catch (error) {
77
77
  this.logger.error(`Failed to generate form for tool: ${toolName}`, {
78
- error: error instanceof Error ? error.message : String(error)
78
+ error: error instanceof Error ? error.message : String(error),
79
79
  });
80
80
  throw error;
81
81
  }
@@ -92,10 +92,10 @@ export class FormEngine {
92
92
  }
93
93
  ): Promise<Record<string, unknown>> {
94
94
  this.validateSubmission(submission);
95
-
95
+
96
96
  const baseToolInput = this.extractBaseToolInput(context);
97
97
  const submissionData = this.extractSubmissionData(submission);
98
-
98
+
99
99
  return this.mergeInputData(baseToolInput, submissionData);
100
100
  }
101
101
 
@@ -115,7 +115,10 @@ export class FormEngine {
115
115
  };
116
116
  return formValidatableTool.shouldGenerateForm(input);
117
117
  } catch (error) {
118
- this.logger.error(`Error calling shouldGenerateForm() on ${tool.name}:`, error);
118
+ this.logger.error(
119
+ `Error calling shouldGenerateForm() on ${tool.name}:`,
120
+ error
121
+ );
119
122
  return false;
120
123
  }
121
124
  }
@@ -150,8 +153,13 @@ export class FormEngine {
150
153
  _context: FormGenerationContext
151
154
  ): Promise<FormMessage> {
152
155
  const { schemaToUse, isFocusedSchema } = this.resolveFormSchema(tool);
153
- const missingFields = this.determineMissingFields(tool, input, schemaToUse, isFocusedSchema);
154
-
156
+ const missingFields = this.determineMissingFields(
157
+ tool,
158
+ input,
159
+ schemaToUse,
160
+ isFocusedSchema
161
+ );
162
+
155
163
  return this.generateFormWithSchema(tool, input, schemaToUse, missingFields);
156
164
  }
157
165
 
@@ -170,22 +178,26 @@ export class FormEngine {
170
178
  input,
171
179
  {
172
180
  toolName: tool.name,
173
- toolDescription: tool.description
181
+ toolDescription: tool.description,
174
182
  },
175
183
  context.missingFields
176
184
  );
177
185
 
178
186
  if (this.isZodObject(schema)) {
179
187
  try {
180
- const { jsonSchema, uiSchema } = this.formGenerator.generateJsonSchemaForm(
181
- schema,
182
- input as Record<string, unknown> | undefined,
183
- context.missingFields || new Set()
184
- );
188
+ const { jsonSchema, uiSchema } =
189
+ this.formGenerator.generateJsonSchemaForm(
190
+ schema,
191
+ input as Record<string, unknown> | undefined,
192
+ context.missingFields || new Set()
193
+ );
185
194
  formMessage.jsonSchema = jsonSchema;
186
195
  formMessage.uiSchema = uiSchema;
187
196
  } catch (error) {
188
- this.logger.warn('Failed to generate JSON Schema for schema-based tool:', error);
197
+ this.logger.warn(
198
+ 'Failed to generate JSON Schema for schema-based tool:',
199
+ error
200
+ );
189
201
  }
190
202
  }
191
203
 
@@ -209,7 +221,7 @@ export class FormEngine {
209
221
  input,
210
222
  {
211
223
  toolName: tool.name,
212
- toolDescription: tool.description
224
+ toolDescription: tool.description,
213
225
  },
214
226
  context.missingFields
215
227
  );
@@ -217,10 +229,10 @@ export class FormEngine {
217
229
  if (renderConfig) {
218
230
  formMessage.formConfig.metadata = {
219
231
  ...formMessage.formConfig.metadata,
220
- renderConfig
232
+ renderConfig,
221
233
  };
222
234
  }
223
-
235
+
224
236
  formMessage.partialInput = input;
225
237
  return formMessage;
226
238
  }
@@ -249,7 +261,11 @@ export class FormEngine {
249
261
  input: unknown
250
262
  ): { isValid: boolean; errors?: string[] } {
251
263
  try {
252
- const zodSchema = tool.schema as z.ZodType<unknown, z.ZodTypeDef, unknown>;
264
+ const zodSchema = tool.schema as z.ZodType<
265
+ unknown,
266
+ z.ZodTypeDef,
267
+ unknown
268
+ >;
253
269
  zodSchema.parse(input);
254
270
  return { isValid: true };
255
271
  } catch (error) {
@@ -285,7 +301,9 @@ export class FormEngine {
285
301
  /**
286
302
  * Extract render configuration from tool
287
303
  */
288
- private extractRenderConfig(tool: StructuredTool): Record<string, unknown> | undefined {
304
+ private extractRenderConfig(
305
+ tool: StructuredTool
306
+ ): Record<string, unknown> | undefined {
289
307
  const schema = tool.schema as Record<string, unknown>;
290
308
  return schema?._renderConfig as Record<string, unknown> | undefined;
291
309
  }
@@ -293,21 +311,21 @@ export class FormEngine {
293
311
  /**
294
312
  * Resolve form schema for FormValidatable tools
295
313
  */
296
- private resolveFormSchema(tool: StructuredTool): {
297
- schemaToUse: z.ZodSchema;
298
- isFocusedSchema: boolean
314
+ private resolveFormSchema(tool: StructuredTool): {
315
+ schemaToUse: z.ZodSchema;
316
+ isFocusedSchema: boolean;
299
317
  } {
300
318
  const formValidatableTool = tool as {
301
319
  getFormSchema?: () => z.ZodSchema | null;
302
320
  };
303
-
321
+
304
322
  if (formValidatableTool.getFormSchema) {
305
323
  const focusedSchema = formValidatableTool.getFormSchema();
306
324
  if (focusedSchema) {
307
325
  return { schemaToUse: focusedSchema, isFocusedSchema: true };
308
326
  }
309
327
  }
310
-
328
+
311
329
  return { schemaToUse: tool.schema as z.ZodSchema, isFocusedSchema: false };
312
330
  }
313
331
 
@@ -321,28 +339,30 @@ export class FormEngine {
321
339
  _isFocusedSchema: boolean
322
340
  ): Set<string> {
323
341
  const missingFields = new Set<string>();
324
-
342
+
325
343
  if (!input || typeof input !== 'object') {
326
344
  return missingFields;
327
345
  }
328
-
346
+
329
347
  const inputRecord = input as Record<string, unknown>;
330
348
  const formValidatableTool = tool as {
331
349
  isFieldEmpty?: (fieldName: string, value: unknown) => boolean;
332
350
  getEssentialFields?: () => string[];
333
351
  };
334
-
352
+
335
353
  if (formValidatableTool.getEssentialFields) {
336
354
  const essentialFields = formValidatableTool.getEssentialFields();
337
355
  for (const field of essentialFields) {
338
- if (!(field in inputRecord) ||
339
- (formValidatableTool.isFieldEmpty &&
340
- formValidatableTool.isFieldEmpty(field, inputRecord[field]))) {
356
+ if (
357
+ !(field in inputRecord) ||
358
+ (formValidatableTool.isFieldEmpty &&
359
+ formValidatableTool.isFieldEmpty(field, inputRecord[field]))
360
+ ) {
341
361
  missingFields.add(field);
342
362
  }
343
363
  }
344
364
  }
345
-
365
+
346
366
  return missingFields;
347
367
  }
348
368
 
@@ -360,25 +380,26 @@ export class FormEngine {
360
380
  input,
361
381
  {
362
382
  toolName: tool.name,
363
- toolDescription: tool.description
383
+ toolDescription: tool.description,
364
384
  },
365
385
  missingFields
366
386
  );
367
-
387
+
368
388
  if (this.isZodObject(schema)) {
369
389
  try {
370
- const { jsonSchema, uiSchema } = this.formGenerator.generateJsonSchemaForm(
371
- schema,
372
- input as Record<string, unknown> | undefined,
373
- missingFields
374
- );
390
+ const { jsonSchema, uiSchema } =
391
+ this.formGenerator.generateJsonSchemaForm(
392
+ schema,
393
+ input as Record<string, unknown> | undefined,
394
+ missingFields
395
+ );
375
396
  formMessage.jsonSchema = jsonSchema;
376
397
  formMessage.uiSchema = uiSchema;
377
398
  } catch (error) {
378
399
  this.logger.warn('Failed to generate JSON Schema:', error);
379
400
  }
380
401
  }
381
-
402
+
382
403
  formMessage.partialInput = input;
383
404
  return formMessage;
384
405
  }
@@ -407,10 +428,12 @@ export class FormEngine {
407
428
  /**
408
429
  * Extract submission data
409
430
  */
410
- private extractSubmissionData(submission: FormSubmission): Record<string, unknown> {
431
+ private extractSubmissionData(
432
+ submission: FormSubmission
433
+ ): Record<string, unknown> {
411
434
  return {
412
435
  ...submission.parameters,
413
- __fromForm: true
436
+ __fromForm: true,
414
437
  };
415
438
  }
416
439
 
@@ -423,7 +446,7 @@ export class FormEngine {
423
446
  ): Record<string, unknown> {
424
447
  return {
425
448
  ...baseInput,
426
- ...submissionData
449
+ ...submissionData,
427
450
  };
428
451
  }
429
452
 
@@ -440,4 +463,4 @@ export class FormEngine {
440
463
  getRegisteredMiddleware(): string[] {
441
464
  return ['FormSubmissionValidator'];
442
465
  }
443
- }
466
+ }
@@ -16,6 +16,16 @@ import {
16
16
  } from '@hashgraphonline/standards-agent-kit';
17
17
  import { Logger } from '@hashgraphonline/standards-sdk';
18
18
  import { fieldTypeRegistry } from './field-type-registry';
19
+ import { fieldGuidanceRegistry } from './field-guidance-registry';
20
+ import { FIELD_PRIORITIES } from '../constants';
21
+
22
+ interface ZodObjectSchema extends z.ZodSchema {
23
+ shape?: Record<string, z.ZodSchema>;
24
+ }
25
+
26
+ function isZodObjectSchema(schema: z.ZodSchema): schema is ZodObjectSchema {
27
+ return typeof schema === 'object' && schema !== null && 'shape' in schema;
28
+ }
19
29
 
20
30
  type FieldPriority = 'essential' | 'common' | 'advanced' | 'expert';
21
31
 
@@ -77,7 +87,7 @@ export class FormGenerator {
77
87
  toolName: context.toolName,
78
88
  partialInput,
79
89
  hasSchema: !!schema,
80
- hasShape: !!(schema && (schema as any).shape),
90
+ hasShape: !!(schema && isZodObjectSchema(schema)),
81
91
  hasPreCalculatedFields: preCalculatedMissingFields !== undefined,
82
92
  preCalculatedFieldsSize: preCalculatedMissingFields?.size || 0,
83
93
  });
@@ -172,18 +182,28 @@ export class FormGenerator {
172
182
  extractedConfig,
173
183
  missingFields,
174
184
  fieldOrdering,
175
- preCalculatedMissingFields
185
+ preCalculatedMissingFields,
186
+ toolName
176
187
  );
177
188
 
189
+ const globalGuidance = fieldGuidanceRegistry.getGlobalGuidance(toolName);
190
+ let description = this.generateFormDescription(toolName, missingFields.size);
191
+
192
+ if (globalGuidance?.qualityStandards) {
193
+ description += '\n\nQuality Guidelines:\n' +
194
+ globalGuidance.qualityStandards.map(standard => `• ${standard}`).join('\n');
195
+ }
196
+
178
197
  return {
179
198
  title: this.generateFormTitle(toolName),
180
- description: this.generateFormDescription(toolName, missingFields.size),
199
+ description,
181
200
  fields,
182
201
  submitLabel: 'Continue',
183
202
  cancelLabel: 'Cancel',
184
203
  metadata: {
185
204
  toolName,
186
205
  missingFieldCount: missingFields.size,
206
+ globalGuidance
187
207
  },
188
208
  };
189
209
  }
@@ -242,25 +262,25 @@ export class FormGenerator {
242
262
  ): FieldPriority {
243
263
  if (renderConfig?.ui?.priority) {
244
264
  const priority = renderConfig.ui.priority as string;
245
- if (['essential', 'common', 'advanced', 'expert'].includes(priority)) {
265
+ if (Object.values(FIELD_PRIORITIES).includes(priority as FieldPriority)) {
246
266
  return priority as FieldPriority;
247
267
  }
248
268
  }
249
269
 
250
270
  if (isRequired === true) {
251
- return 'essential';
271
+ return FIELD_PRIORITIES.ESSENTIAL;
252
272
  }
253
273
 
254
274
  const ui = renderConfig?.ui as Record<string, unknown> | undefined;
255
275
  if (ui?.advanced === true) {
256
- return 'advanced';
276
+ return FIELD_PRIORITIES.ADVANCED;
257
277
  }
258
278
 
259
279
  if (ui?.expert === true) {
260
- return 'expert';
280
+ return FIELD_PRIORITIES.EXPERT;
261
281
  }
262
282
 
263
- return 'common';
283
+ return FIELD_PRIORITIES.COMMON;
264
284
  }
265
285
 
266
286
  /**
@@ -334,7 +354,8 @@ export class FormGenerator {
334
354
  fieldsToInclude: Set<string>,
335
355
  fieldOrdering: { sections: Array<{ fields: string[] }> },
336
356
  extractedConfig: ExtractedRenderConfig,
337
- schema: z.ZodSchema
357
+ schema: z.ZodSchema,
358
+ toolName?: string
338
359
  ): FormField[] {
339
360
  const fields: FormField[] = [];
340
361
  const processedFields = new Set<string>();
@@ -347,7 +368,8 @@ export class FormGenerator {
347
368
  fieldName,
348
369
  extractedConfig.fields[fieldName],
349
370
  schema,
350
- fieldName
371
+ fieldName,
372
+ toolName
351
373
  );
352
374
  if (field) {
353
375
  fields.push(field);
@@ -363,7 +385,8 @@ export class FormGenerator {
363
385
  fieldName,
364
386
  extractedConfig.fields[fieldName],
365
387
  schema,
366
- fieldName
388
+ fieldName,
389
+ toolName
367
390
  );
368
391
  if (field) {
369
392
  fields.push(field);
@@ -382,7 +405,8 @@ export class FormGenerator {
382
405
  extractedConfig: ExtractedRenderConfig,
383
406
  missingFields: Set<string>,
384
407
  fieldOrdering: { sections: Array<{ fields: string[] }> },
385
- preCalculatedMissingFields?: Set<string>
408
+ preCalculatedMissingFields?: Set<string>,
409
+ toolName?: string
386
410
  ): FormField[] {
387
411
  const fieldsToInclude = this.determineFieldsToInclude(
388
412
  schema,
@@ -394,7 +418,8 @@ export class FormGenerator {
394
418
  fieldsToInclude,
395
419
  fieldOrdering,
396
420
  extractedConfig,
397
- schema
421
+ schema,
422
+ toolName
398
423
  );
399
424
 
400
425
  if (fields.length === 0 && missingFields.size > 0) {
@@ -404,7 +429,8 @@ export class FormGenerator {
404
429
  fieldName,
405
430
  extractedConfig.fields[fieldName],
406
431
  schema,
407
- fieldName
432
+ fieldName,
433
+ toolName
408
434
  )
409
435
  )
410
436
  .filter(
@@ -422,19 +448,67 @@ export class FormGenerator {
422
448
  fieldName: string,
423
449
  renderConfig?: RenderConfigSchema,
424
450
  schema?: z.ZodSchema,
425
- fieldPath?: string
451
+ fieldPath?: string,
452
+ toolName?: string
426
453
  ): FormField {
427
454
  const type = this.mapFieldType(renderConfig?.fieldType, schema, fieldPath);
428
455
  const isRequired = this.isFieldRequired(schema, fieldPath || fieldName);
456
+
457
+ const guidance = toolName ? fieldGuidanceRegistry.getFieldGuidance(toolName, fieldName) : null;
458
+ const finalType = guidance?.fieldTypeOverride || type;
429
459
 
430
460
  const field: FormField = {
431
461
  name: fieldName,
432
462
  label: renderConfig?.ui?.label || this.humanizeFieldName(fieldName),
433
- type,
463
+ type: finalType,
434
464
  required: isRequired,
435
465
  priority: this.getFieldPriority(fieldName, renderConfig, isRequired),
436
466
  };
437
467
 
468
+ if (guidance) {
469
+ if (guidance.suggestions && guidance.suggestions.length > 0) {
470
+ field.suggestions = guidance.suggestions;
471
+ if (!field.placeholder) {
472
+ field.placeholder = `e.g., ${guidance.suggestions[0]}`;
473
+ }
474
+ }
475
+
476
+ if (guidance.predefinedOptions) {
477
+ field.options = [...(field.options || []), ...guidance.predefinedOptions];
478
+ }
479
+
480
+ if (guidance.contextualHelpText) {
481
+ field.helpText = guidance.contextualHelpText;
482
+ }
483
+
484
+ if (guidance.warnings) {
485
+ field.warnings = guidance.warnings.map(w => w.message);
486
+ }
487
+
488
+ if (guidance.validationRules) {
489
+ const { qualityChecks } = guidance.validationRules;
490
+ if (qualityChecks) {
491
+ field.contextualGuidance = {
492
+ qualityStandards: [],
493
+ examples: guidance.suggestions || [],
494
+ avoidPatterns: qualityChecks.forbidTechnicalTerms || []
495
+ };
496
+
497
+ if (qualityChecks.minNonTechnicalWords) {
498
+ field.contextualGuidance.qualityStandards?.push(
499
+ `Use at least ${qualityChecks.minNonTechnicalWords} meaningful words`
500
+ );
501
+ }
502
+
503
+ if (qualityChecks.forbidTechnicalTerms) {
504
+ field.contextualGuidance.qualityStandards?.push(
505
+ `Avoid technical terms like: ${qualityChecks.forbidTechnicalTerms.join(', ')}`
506
+ );
507
+ }
508
+ }
509
+ }
510
+ }
511
+
438
512
  if (renderConfig) {
439
513
  field.renderConfig = renderConfig;
440
514
  }
@@ -743,7 +817,7 @@ export class FormGenerator {
743
817
  zodSchema: z.ZodObject<z.ZodRawShape>,
744
818
  partialInput?: Record<string, unknown>,
745
819
  missingFields?: Set<string>
746
- ) {
820
+ ): { jsonSchema: Record<string, unknown>; uiSchema: Record<string, unknown> } {
747
821
  const fullJsonSchema = zodToJsonSchema(zodSchema, {
748
822
  target: 'jsonSchema7',
749
823
  });
@@ -1,2 +1,5 @@
1
1
  export * from './types';
2
- export * from './form-generator';
2
+ export * from './form-generator';
3
+ export * from './form-engine';
4
+ export * from './field-type-registry';
5
+ export * from './field-guidance-registry';
@@ -52,6 +52,13 @@ export interface FormField {
52
52
  options?: FieldOption[];
53
53
  renderConfig?: RenderConfigSchema;
54
54
  priority?: 'essential' | 'common' | 'advanced' | 'expert';
55
+ suggestions?: string[];
56
+ warnings?: string[];
57
+ contextualGuidance?: {
58
+ qualityStandards?: string[];
59
+ examples?: string[];
60
+ avoidPatterns?: string[];
61
+ };
55
62
  }
56
63
 
57
64
  /**
@@ -88,6 +95,7 @@ export interface FieldOption {
88
95
  value: string;
89
96
  label: string;
90
97
  description?: string;
98
+ disabled?: boolean;
91
99
  }
92
100
 
93
101
  /**
@@ -110,7 +118,7 @@ export interface FormSubmission {
110
118
  context?: {
111
119
  originalPrompt?: string;
112
120
  partialInput?: Record<string, unknown>;
113
- chatHistory?: Array<{type: 'human' | 'ai'; content: string}>;
121
+ chatHistory?: Array<{type: 'human' | 'ai' | 'system'; content: string}>;
114
122
  };
115
123
  }
116
124
 
package/src/index.ts CHANGED
@@ -16,43 +16,13 @@ export {
16
16
  type ChatResponse,
17
17
  type UsageStats,
18
18
  } from './base-agent';
19
- export { LangChainAgent } from './langchain-agent';
20
19
  export { createAgent } from './agent-factory';
21
- export {
22
- LangChainProvider,
23
- type AIProvider,
24
- type VercelAIProvider,
25
- type BAMLProvider,
26
- } from './providers';
27
-
20
+ export * from './providers';
28
21
  export * from 'hedera-agent-kit';
29
-
30
- export type { IStateManager } from '@hashgraphonline/standards-agent-kit';
31
-
32
- export type {
33
- MCPServerConfig,
34
- MCPConnectionStatus,
35
- MCPToolInfo,
36
- } from './mcp/types';
37
- export {
38
- MCPServers,
39
- createMCPConfig,
40
- validateServerConfig,
41
- } from './mcp/helpers';
42
-
22
+ export * from './forms';
23
+ export * from './mcp';
43
24
  export * from './memory';
44
- export {
45
- createEntityTools,
46
- ResolveEntitiesTool,
47
- ExtractEntitiesTool,
48
- } from './tools/EntityResolverTool';
49
- export { ContentStoreManager } from './services/ContentStoreManager';
50
-
51
- export { FormGenerator } from './forms/form-generator';
52
- export {
53
- FormValidatingToolWrapper,
54
- wrapToolWithFormValidation,
55
- } from './langchain/FormValidatingToolWrapper';
56
- export type { FormValidationConfig } from './langchain/FormValidatingToolWrapper';
57
- export type { FormMessage, FormField, FormConfig, FormSubmission } from './forms/types';
58
- export { ResponseFormatter } from './utils/ResponseFormatter';
25
+ export * from './services';
26
+ export * from './langchain';
27
+ export * from './tools';
28
+ export * from './utils';
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Mock external tool wrapper functionality
3
+ * These are placeholders to satisfy import statements in test scripts
4
+ */
5
+
6
+ import { z as _z } from 'zod';
7
+
8
+ export interface ExternalToolWrapper<T> {
9
+ name: string;
10
+ description: string;
11
+ schema: T;
12
+ }
13
+
14
+ export function wrapExternalToolWithRenderConfig<T>(
15
+ tool: { name: string; description: string; schema: T },
16
+ config: {
17
+ ui?: { label?: string; description?: string };
18
+ fieldConfigs?: Record<string, unknown>;
19
+ }
20
+ ): ExternalToolWrapper<T> {
21
+ return {
22
+ name: tool.name,
23
+ description: config.ui?.description || tool.description,
24
+ schema: tool.schema
25
+ };
26
+ }
27
+
28
+ export const renderConfigs = {
29
+ text: (label: string, placeholder?: string, help?: string) => ({
30
+ type: 'text',
31
+ label,
32
+ placeholder,
33
+ help
34
+ }),
35
+
36
+ number: (label: string, min?: number, max?: number, help?: string) => ({
37
+ type: 'number',
38
+ label,
39
+ min,
40
+ max,
41
+ help
42
+ }),
43
+
44
+ accountId: (label: string) => ({
45
+ type: 'accountId',
46
+ label,
47
+ placeholder: '0.0.12345'
48
+ }),
49
+
50
+ checkbox: (label: string, help?: string) => ({
51
+ type: 'checkbox',
52
+ label,
53
+ help
54
+ }),
55
+
56
+ currency: (label: string, currency: string, min?: number, max?: number) => ({
57
+ type: 'currency',
58
+ label,
59
+ currency,
60
+ min,
61
+ max
62
+ }),
63
+
64
+ tokenId: (label: string) => ({
65
+ type: 'tokenId',
66
+ label,
67
+ placeholder: '0.0.12345'
68
+ }),
69
+
70
+ select: (label: string, options: Array<{ value: string; label: string }>) => ({
71
+ type: 'select',
72
+ label,
73
+ options
74
+ })
75
+ };
76
+
77
+ export const hederaToolConfigs = {
78
+ hbarTransfer: () => ({
79
+ ui: {
80
+ label: 'HBAR Transfer',
81
+ description: 'Transfer HBAR between accounts'
82
+ },
83
+ fieldConfigs: {
84
+ fromAccountId: renderConfigs.accountId('From Account'),
85
+ toAccountId: renderConfigs.accountId('To Account'),
86
+ amount: renderConfigs.currency('Amount', 'HBAR', 0.00000001, 1000),
87
+ memo: renderConfigs.text('Memo', 'Optional memo')
88
+ }
89
+ })
90
+ };