@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.
- package/cli/readme.md +181 -0
- package/dist/cjs/constants/entity-references.d.ts +18 -0
- package/dist/cjs/constants/form-priorities.d.ts +24 -0
- package/dist/cjs/constants/index.d.ts +4 -0
- package/dist/cjs/constants/messages.d.ts +19 -0
- package/dist/cjs/constants/test-constants.d.ts +42 -0
- package/dist/cjs/conversational-agent.d.ts +3 -8
- package/dist/{types/core/ToolRegistry.d.ts → cjs/core/tool-registry.d.ts} +11 -1
- package/dist/{types/execution/ExecutionPipeline.d.ts → cjs/execution/execution-pipeline.d.ts} +3 -3
- package/dist/cjs/forms/field-guidance-registry.d.ts +108 -0
- package/dist/cjs/forms/form-generator.d.ts +2 -7
- package/dist/cjs/forms/index.d.ts +3 -0
- package/dist/cjs/forms/types.d.ts +9 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.ts +7 -12
- package/dist/cjs/langchain/external-tool-wrapper.d.ts +101 -0
- package/dist/{types/langchain/FormAwareAgentExecutor.d.ts → cjs/langchain/form-aware-agent-executor.d.ts} +19 -4
- package/dist/cjs/langchain/index.d.ts +3 -0
- package/dist/{types → cjs/langchain}/langchain-agent.d.ts +15 -7
- package/dist/cjs/mcp/adapters/index.d.ts +1 -0
- package/dist/cjs/mcp/adapters/langchain.d.ts +1 -1
- package/dist/{types/mcp/ContentProcessor.d.ts → cjs/mcp/content-processor.d.ts} +1 -1
- package/dist/cjs/mcp/index.d.ts +5 -0
- package/dist/{types/mcp/MCPClientManager.d.ts → cjs/mcp/mcp-client-manager.d.ts} +1 -1
- package/dist/cjs/memory/{ContentStorage.d.ts → content-storage.d.ts} +4 -4
- package/dist/cjs/memory/index.d.ts +5 -7
- package/dist/{types/memory/MemoryWindow.d.ts → cjs/memory/memory-window.d.ts} +1 -1
- package/dist/{types/memory/SmartMemoryManager.d.ts → cjs/memory/smart-memory-manager.d.ts} +1 -1
- package/dist/cjs/services/{ContentStoreManager.d.ts → content-store-manager.d.ts} +6 -6
- package/dist/cjs/services/context/resolution-context.d.ts +49 -0
- package/dist/cjs/services/entity-resolver.d.ts +58 -0
- package/dist/cjs/services/formatters/converters/index.d.ts +2 -0
- package/dist/cjs/services/formatters/converters/string-normalization-converter.d.ts +13 -0
- package/dist/cjs/services/formatters/converters/topic-id-to-hrl-converter.d.ts +17 -0
- package/dist/cjs/services/formatters/format-converter-registry.d.ts +66 -0
- package/dist/cjs/services/formatters/index.d.ts +3 -0
- package/dist/cjs/services/formatters/types.d.ts +29 -0
- package/dist/cjs/services/index.d.ts +3 -0
- package/dist/cjs/services/resolution/resolution-pipeline.d.ts +44 -0
- package/dist/cjs/tools/index.d.ts +1 -0
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/esm/index.js +40 -13
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index10.js +669 -13
- package/dist/esm/index10.js.map +1 -1
- package/dist/esm/index11.js +310 -95
- package/dist/esm/index11.js.map +1 -1
- package/dist/esm/index12.js +130 -95
- package/dist/esm/index12.js.map +1 -1
- package/dist/esm/index13.js +262 -153
- package/dist/esm/index13.js.map +1 -1
- package/dist/esm/index14.js +100 -664
- package/dist/esm/index14.js.map +1 -1
- package/dist/esm/index15.js +135 -408
- package/dist/esm/index15.js.map +1 -1
- package/dist/esm/index16.js +240 -122
- package/dist/esm/index16.js.map +1 -1
- package/dist/esm/index17.js +147 -135
- package/dist/esm/index17.js.map +1 -1
- package/dist/esm/index18.js +376 -533
- package/dist/esm/index18.js.map +1 -1
- package/dist/esm/index19.js +87 -214
- package/dist/esm/index19.js.map +1 -1
- package/dist/esm/index2.js +21 -4
- package/dist/esm/index2.js.map +1 -1
- package/dist/esm/index20.js +158 -92
- package/dist/esm/index20.js.map +1 -1
- package/dist/esm/index21.js +717 -44
- package/dist/esm/index21.js.map +1 -1
- package/dist/esm/index22.js +58 -96
- package/dist/esm/index22.js.map +1 -1
- package/dist/esm/index23.js +324 -34
- package/dist/esm/index23.js.map +1 -1
- package/dist/esm/index24.js +125 -712
- package/dist/esm/index24.js.map +1 -1
- package/dist/esm/index25.js +113 -133
- package/dist/esm/index25.js.map +1 -1
- package/dist/esm/index26.js +18 -152
- package/dist/esm/index26.js.map +1 -1
- package/dist/esm/index27.js +14 -210
- package/dist/esm/index27.js.map +1 -1
- package/dist/esm/index28.js +70 -173
- package/dist/esm/index28.js.map +1 -1
- package/dist/esm/index29.js +882 -220
- package/dist/esm/index29.js.map +1 -1
- package/dist/esm/index30.js +218 -126
- package/dist/esm/index30.js.map +1 -1
- package/dist/esm/index31.js +1258 -44
- package/dist/esm/index31.js.map +1 -1
- package/dist/esm/index32.js +132 -24
- package/dist/esm/index32.js.map +1 -1
- package/dist/esm/index33.js +104 -82
- package/dist/esm/index33.js.map +1 -1
- package/dist/esm/index34.js +43 -239
- package/dist/esm/index34.js.map +1 -1
- package/dist/esm/index35.js +106 -0
- package/dist/esm/index35.js.map +1 -0
- package/dist/esm/index36.js +24 -0
- package/dist/esm/index36.js.map +1 -0
- package/dist/esm/index37.js +8 -0
- package/dist/esm/index37.js.map +1 -0
- package/dist/esm/index38.js +15 -0
- package/dist/esm/index38.js.map +1 -0
- package/dist/esm/index39.js +258 -0
- package/dist/esm/index39.js.map +1 -0
- package/dist/esm/index40.js +187 -0
- package/dist/esm/index40.js.map +1 -0
- package/dist/esm/index41.js +30 -0
- package/dist/esm/index41.js.map +1 -0
- package/dist/esm/index42.js +10 -0
- package/dist/esm/index42.js.map +1 -0
- package/dist/esm/index43.js +95 -0
- package/dist/esm/index43.js.map +1 -0
- package/dist/esm/index5.js +2 -2
- package/dist/esm/index5.js.map +1 -1
- package/dist/esm/index6.js +44 -67
- package/dist/esm/index6.js.map +1 -1
- package/dist/esm/index7.js +9 -0
- package/dist/esm/index7.js.map +1 -1
- package/dist/esm/index8.js +13 -1095
- package/dist/esm/index8.js.map +1 -1
- package/dist/esm/index9.js +17 -13
- package/dist/esm/index9.js.map +1 -1
- package/dist/types/constants/entity-references.d.ts +18 -0
- package/dist/types/constants/form-priorities.d.ts +24 -0
- package/dist/types/constants/index.d.ts +4 -0
- package/dist/types/constants/messages.d.ts +19 -0
- package/dist/types/constants/test-constants.d.ts +42 -0
- package/dist/types/conversational-agent.d.ts +3 -8
- package/dist/{cjs/core/ToolRegistry.d.ts → types/core/tool-registry.d.ts} +11 -1
- package/dist/{cjs/execution/ExecutionPipeline.d.ts → types/execution/execution-pipeline.d.ts} +3 -3
- package/dist/types/forms/field-guidance-registry.d.ts +108 -0
- package/dist/types/forms/form-generator.d.ts +2 -7
- package/dist/types/forms/index.d.ts +3 -0
- package/dist/types/forms/types.d.ts +9 -1
- package/dist/types/index.d.ts +7 -12
- package/dist/types/langchain/external-tool-wrapper.d.ts +101 -0
- package/dist/{cjs/langchain/FormAwareAgentExecutor.d.ts → types/langchain/form-aware-agent-executor.d.ts} +19 -4
- package/dist/types/langchain/index.d.ts +3 -0
- package/dist/{cjs → types/langchain}/langchain-agent.d.ts +15 -7
- package/dist/types/mcp/adapters/index.d.ts +1 -0
- package/dist/types/mcp/adapters/langchain.d.ts +1 -1
- package/dist/{cjs/mcp/ContentProcessor.d.ts → types/mcp/content-processor.d.ts} +1 -1
- package/dist/types/mcp/index.d.ts +5 -0
- package/dist/{cjs/mcp/MCPClientManager.d.ts → types/mcp/mcp-client-manager.d.ts} +1 -1
- package/dist/types/memory/{ContentStorage.d.ts → content-storage.d.ts} +4 -4
- package/dist/types/memory/index.d.ts +5 -7
- package/dist/{cjs/memory/MemoryWindow.d.ts → types/memory/memory-window.d.ts} +1 -1
- package/dist/{cjs/memory/SmartMemoryManager.d.ts → types/memory/smart-memory-manager.d.ts} +1 -1
- package/dist/types/services/{ContentStoreManager.d.ts → content-store-manager.d.ts} +6 -6
- package/dist/types/services/context/resolution-context.d.ts +49 -0
- package/dist/types/services/entity-resolver.d.ts +58 -0
- package/dist/types/services/formatters/converters/index.d.ts +2 -0
- package/dist/types/services/formatters/converters/string-normalization-converter.d.ts +13 -0
- package/dist/types/services/formatters/converters/topic-id-to-hrl-converter.d.ts +17 -0
- package/dist/types/services/formatters/format-converter-registry.d.ts +66 -0
- package/dist/types/services/formatters/index.d.ts +3 -0
- package/dist/types/services/formatters/types.d.ts +29 -0
- package/dist/types/services/index.d.ts +3 -0
- package/dist/types/services/resolution/resolution-pipeline.d.ts +44 -0
- package/dist/types/tools/index.d.ts +1 -0
- package/dist/types/utils/index.d.ts +1 -0
- package/package.json +30 -27
- package/src/agent-factory.ts +1 -1
- package/src/base-agent.ts +9 -0
- package/src/config/system-message.ts +2 -15
- package/src/constants/entity-references.ts +23 -0
- package/src/constants/form-priorities.ts +25 -0
- package/src/constants/index.ts +4 -0
- package/src/constants/messages.ts +20 -0
- package/src/constants/test-constants.ts +49 -0
- package/src/conversational-agent.ts +42 -69
- package/src/core/{ToolRegistry.ts → tool-registry.ts} +71 -1
- package/src/examples/external-tool-wrapper-example.ts +56 -0
- package/src/execution/{ExecutionPipeline.ts → execution-pipeline.ts} +3 -3
- package/src/forms/field-guidance-registry.ts +415 -0
- package/src/forms/field-type-registry.ts +49 -48
- package/src/forms/{FormEngine.ts → form-engine.ts} +66 -43
- package/src/forms/form-generator.ts +91 -17
- package/src/forms/index.ts +4 -1
- package/src/forms/types.ts +9 -1
- package/src/index.ts +7 -37
- package/src/langchain/external-tool-wrapper.ts +90 -0
- package/src/langchain/{FormAwareAgentExecutor.ts → form-aware-agent-executor.ts} +615 -231
- package/src/langchain/{FormValidatingToolWrapper.ts → form-validating-tool-wrapper.ts} +2 -1
- package/src/langchain/index.ts +3 -0
- package/src/{langchain-agent.ts → langchain/langchain-agent.ts} +389 -113
- package/src/mcp/adapters/index.ts +1 -0
- package/src/mcp/adapters/langchain.ts +27 -18
- package/src/mcp/{ContentProcessor.ts → content-processor.ts} +71 -47
- package/src/mcp/index.ts +5 -0
- package/src/mcp/{MCPClientManager.ts → mcp-client-manager.ts} +2 -2
- package/src/memory/{ContentStorage.ts → content-storage.ts} +263 -167
- package/src/memory/index.ts +5 -8
- package/src/memory/{MemoryWindow.ts → memory-window.ts} +47 -24
- package/src/memory/{SmartMemoryManager.ts → smart-memory-manager.ts} +49 -22
- package/src/plugins/hbar/HbarPlugin.ts +1 -1
- package/src/plugins/hcs-10/HCS10Plugin.ts +46 -28
- package/src/scripts/test-external-tool-wrapper.ts +6 -6
- package/src/scripts/test-inscribe-form-generation.ts +22 -21
- package/src/scripts/test-inscribe-wrapper-verification.ts +5 -4
- package/src/services/{ContentStoreManager.ts → content-store-manager.ts} +75 -33
- package/src/services/context/resolution-context.ts +80 -0
- package/src/services/entity-resolver.ts +425 -0
- package/src/services/formatters/converters/index.ts +2 -0
- package/src/services/formatters/converters/string-normalization-converter.ts +106 -0
- package/src/services/formatters/converters/topic-id-to-hrl-converter.ts +25 -0
- package/src/services/formatters/format-converter-registry.ts +229 -0
- package/src/services/formatters/index.ts +3 -0
- package/src/services/formatters/types.ts +31 -0
- package/src/services/index.ts +3 -0
- package/src/services/resolution/resolution-pipeline.ts +106 -0
- package/src/tools/index.ts +1 -0
- package/src/types/content-reference.ts +87 -60
- package/src/utils/index.ts +1 -0
- package/cli/dist/CLIApp.d.ts +0 -9
- package/cli/dist/CLIApp.js +0 -127
- package/cli/dist/LocalConversationalAgent.d.ts +0 -37
- package/cli/dist/LocalConversationalAgent.js +0 -58
- package/cli/dist/app.d.ts +0 -16
- package/cli/dist/app.js +0 -13
- package/cli/dist/cli.d.ts +0 -2
- package/cli/dist/cli.js +0 -51
- package/cli/dist/components/AppContainer.d.ts +0 -16
- package/cli/dist/components/AppContainer.js +0 -24
- package/cli/dist/components/AppScreens.d.ts +0 -2
- package/cli/dist/components/AppScreens.js +0 -259
- package/cli/dist/components/ChatScreen.d.ts +0 -15
- package/cli/dist/components/ChatScreen.js +0 -39
- package/cli/dist/components/DebugLoadingScreen.d.ts +0 -5
- package/cli/dist/components/DebugLoadingScreen.js +0 -31
- package/cli/dist/components/LoadingScreen.d.ts +0 -2
- package/cli/dist/components/LoadingScreen.js +0 -16
- package/cli/dist/components/LoadingScreenDebug.d.ts +0 -5
- package/cli/dist/components/LoadingScreenDebug.js +0 -27
- package/cli/dist/components/MCPConfigScreen.d.ts +0 -28
- package/cli/dist/components/MCPConfigScreen.js +0 -168
- package/cli/dist/components/ScreenRouter.d.ts +0 -12
- package/cli/dist/components/ScreenRouter.js +0 -22
- package/cli/dist/components/SetupScreen.d.ts +0 -15
- package/cli/dist/components/SetupScreen.js +0 -65
- package/cli/dist/components/SingleLoadingScreen.d.ts +0 -5
- package/cli/dist/components/SingleLoadingScreen.js +0 -27
- package/cli/dist/components/StatusBadge.d.ts +0 -7
- package/cli/dist/components/StatusBadge.js +0 -28
- package/cli/dist/components/TerminalWindow.d.ts +0 -8
- package/cli/dist/components/TerminalWindow.js +0 -24
- package/cli/dist/components/WelcomeScreen.d.ts +0 -11
- package/cli/dist/components/WelcomeScreen.js +0 -47
- package/cli/dist/context/AppContext.d.ts +0 -68
- package/cli/dist/context/AppContext.js +0 -363
- package/cli/dist/hooks/useInitializeAgent.d.ts +0 -19
- package/cli/dist/hooks/useInitializeAgent.js +0 -28
- package/cli/dist/hooks/useStableState.d.ts +0 -38
- package/cli/dist/hooks/useStableState.js +0 -68
- package/cli/dist/managers/AgentManager.d.ts +0 -57
- package/cli/dist/managers/AgentManager.js +0 -119
- package/cli/dist/managers/ConfigManager.d.ts +0 -53
- package/cli/dist/managers/ConfigManager.js +0 -173
- package/cli/dist/types.d.ts +0 -31
- package/cli/dist/types.js +0 -19
- package/dist/cjs/context/ReferenceContextManager.d.ts +0 -84
- package/dist/cjs/context/ReferenceResponseProcessor.d.ts +0 -76
- package/dist/cjs/services/EntityResolver.d.ts +0 -26
- package/dist/types/context/ReferenceContextManager.d.ts +0 -84
- package/dist/types/context/ReferenceResponseProcessor.d.ts +0 -76
- package/dist/types/services/EntityResolver.d.ts +0 -26
- package/src/context/ReferenceContextManager.ts +0 -350
- package/src/context/ReferenceResponseProcessor.ts +0 -295
- package/src/scripts/test-hedera-kit-wrapper.ts +0 -265
- package/src/services/EntityResolver.ts +0 -128
- /package/dist/cjs/forms/{FormEngine.d.ts → form-engine.d.ts} +0 -0
- /package/dist/cjs/langchain/{FormValidatingToolWrapper.d.ts → form-validating-tool-wrapper.d.ts} +0 -0
- /package/dist/cjs/memory/{ReferenceIdGenerator.d.ts → reference-id-generator.d.ts} +0 -0
- /package/dist/cjs/memory/{TokenCounter.d.ts → token-counter.d.ts} +0 -0
- /package/dist/cjs/tools/{EntityResolverTool.d.ts → entity-resolver-tool.d.ts} +0 -0
- /package/dist/cjs/utils/{ResponseFormatter.d.ts → response-formatter.d.ts} +0 -0
- /package/dist/types/forms/{FormEngine.d.ts → form-engine.d.ts} +0 -0
- /package/dist/types/langchain/{FormValidatingToolWrapper.d.ts → form-validating-tool-wrapper.d.ts} +0 -0
- /package/dist/types/memory/{ReferenceIdGenerator.d.ts → reference-id-generator.d.ts} +0 -0
- /package/dist/types/memory/{TokenCounter.d.ts → token-counter.d.ts} +0 -0
- /package/dist/types/tools/{EntityResolverTool.d.ts → entity-resolver-tool.d.ts} +0 -0
- /package/dist/types/utils/{ResponseFormatter.d.ts → response-formatter.d.ts} +0 -0
- /package/src/memory/{ReferenceIdGenerator.ts → reference-id-generator.ts} +0 -0
- /package/src/memory/{TokenCounter.ts → token-counter.ts} +0 -0
- /package/src/tools/{EntityResolverTool.ts → entity-resolver-tool.ts} +0 -0
- /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(
|
|
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(
|
|
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 } =
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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(
|
|
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<
|
|
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(
|
|
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 (
|
|
339
|
-
|
|
340
|
-
|
|
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 } =
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
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(
|
|
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
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
276
|
+
return FIELD_PRIORITIES.ADVANCED;
|
|
257
277
|
}
|
|
258
278
|
|
|
259
279
|
if (ui?.expert === true) {
|
|
260
|
-
return
|
|
280
|
+
return FIELD_PRIORITIES.EXPERT;
|
|
261
281
|
}
|
|
262
282
|
|
|
263
|
-
return
|
|
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
|
});
|
package/src/forms/index.ts
CHANGED
package/src/forms/types.ts
CHANGED
|
@@ -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
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
+
};
|