@foresthubai/workflow-core 0.4.3 → 0.4.5

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 (298) hide show
  1. package/LICENSE +202 -202
  2. package/NOTICE +14 -14
  3. package/README.md +63 -63
  4. package/dist/api/deployment.d.ts +74 -0
  5. package/dist/api/deployment.d.ts.map +1 -0
  6. package/dist/api/deployment.js +6 -0
  7. package/dist/api/deployment.js.map +1 -0
  8. package/dist/api/engine.d.ts +744 -0
  9. package/dist/api/engine.d.ts.map +1 -0
  10. package/dist/api/engine.js +6 -0
  11. package/dist/api/engine.js.map +1 -0
  12. package/dist/api/index.d.ts +4 -0
  13. package/dist/api/index.d.ts.map +1 -1
  14. package/dist/api/index.js +2 -0
  15. package/dist/api/index.js.map +1 -1
  16. package/dist/api/workflow.d.ts +25 -9
  17. package/dist/api/workflow.d.ts.map +1 -1
  18. package/dist/channel/Channel.d.ts +1 -1
  19. package/dist/channel/Channel.d.ts.map +1 -1
  20. package/dist/channel/Channel.js +3 -1
  21. package/dist/channel/Channel.js.map +1 -1
  22. package/dist/channel/ChannelDefinition.d.ts.map +1 -1
  23. package/dist/channel/ChannelDefinition.js +24 -0
  24. package/dist/channel/ChannelDefinition.js.map +1 -1
  25. package/dist/channel/index.d.ts.map +1 -1
  26. package/dist/channel/index.js +2 -0
  27. package/dist/channel/index.js.map +1 -1
  28. package/dist/channel/serialization.d.ts.map +1 -1
  29. package/dist/channel/serialization.js +8 -0
  30. package/dist/channel/serialization.js.map +1 -1
  31. package/dist/deploy/index.d.ts +5 -1
  32. package/dist/deploy/index.d.ts.map +1 -1
  33. package/dist/deploy/index.js +4 -1
  34. package/dist/deploy/index.js.map +1 -1
  35. package/dist/deploy/inputs.d.ts +26 -0
  36. package/dist/deploy/inputs.d.ts.map +1 -0
  37. package/dist/deploy/inputs.js +4 -0
  38. package/dist/deploy/inputs.js.map +1 -0
  39. package/dist/deploy/requirements.d.ts +24 -0
  40. package/dist/deploy/requirements.d.ts.map +1 -1
  41. package/dist/deploy/requirements.js +63 -0
  42. package/dist/deploy/requirements.js.map +1 -1
  43. package/dist/deploy/spec.d.ts +27 -0
  44. package/dist/deploy/spec.d.ts.map +1 -0
  45. package/dist/deploy/spec.js +352 -0
  46. package/dist/deploy/spec.js.map +1 -0
  47. package/dist/diagnostics/__fixtures__/diagnosticFixtures.d.ts.map +1 -1
  48. package/dist/diagnostics/__fixtures__/diagnosticFixtures.js +2 -0
  49. package/dist/diagnostics/__fixtures__/diagnosticFixtures.js.map +1 -1
  50. package/dist/diagnostics/diagnostics.d.ts.map +1 -1
  51. package/dist/diagnostics/diagnostics.js +2 -0
  52. package/dist/diagnostics/diagnostics.js.map +1 -1
  53. package/dist/diagnostics/index.d.ts.map +1 -1
  54. package/dist/diagnostics/index.js +2 -0
  55. package/dist/diagnostics/index.js.map +1 -1
  56. package/dist/edge/Edge.d.ts.map +1 -1
  57. package/dist/edge/Edge.js +2 -0
  58. package/dist/edge/Edge.js.map +1 -1
  59. package/dist/edge/EdgeDefinition.d.ts.map +1 -1
  60. package/dist/edge/EdgeDefinition.js +2 -0
  61. package/dist/edge/EdgeDefinition.js.map +1 -1
  62. package/dist/edge/EdgeType.d.ts.map +1 -1
  63. package/dist/edge/EdgeType.js +2 -0
  64. package/dist/edge/EdgeType.js.map +1 -1
  65. package/dist/edge/index.d.ts.map +1 -1
  66. package/dist/edge/index.js +2 -2
  67. package/dist/edge/index.js.map +1 -1
  68. package/dist/edge/serialization.d.ts.map +1 -1
  69. package/dist/edge/serialization.js +2 -0
  70. package/dist/edge/serialization.js.map +1 -1
  71. package/dist/expression/index.d.ts.map +1 -1
  72. package/dist/expression/index.js +2 -0
  73. package/dist/expression/index.js.map +1 -1
  74. package/dist/expression/parser.d.ts.map +1 -1
  75. package/dist/expression/parser.js +2 -0
  76. package/dist/expression/parser.js.map +1 -1
  77. package/dist/expression/types.d.ts.map +1 -1
  78. package/dist/expression/types.js +2 -0
  79. package/dist/expression/types.js.map +1 -1
  80. package/dist/function/FunctionDeclaration.d.ts.map +1 -1
  81. package/dist/function/FunctionDeclaration.js +2 -0
  82. package/dist/function/FunctionDeclaration.js.map +1 -1
  83. package/dist/function/index.d.ts.map +1 -1
  84. package/dist/function/index.js +2 -0
  85. package/dist/function/index.js.map +1 -1
  86. package/dist/function/serialization.d.ts.map +1 -1
  87. package/dist/function/serialization.js +2 -0
  88. package/dist/function/serialization.js.map +1 -1
  89. package/dist/id/index.d.ts.map +1 -1
  90. package/dist/id/index.js +2 -0
  91. package/dist/id/index.js.map +1 -1
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +2 -0
  94. package/dist/index.js.map +1 -1
  95. package/dist/memory/Memory.d.ts.map +1 -1
  96. package/dist/memory/Memory.js +2 -0
  97. package/dist/memory/Memory.js.map +1 -1
  98. package/dist/memory/MemoryDefinition.d.ts.map +1 -1
  99. package/dist/memory/MemoryDefinition.js +2 -0
  100. package/dist/memory/MemoryDefinition.js.map +1 -1
  101. package/dist/memory/MemoryFileDefinition.d.ts.map +1 -1
  102. package/dist/memory/MemoryFileDefinition.js +2 -0
  103. package/dist/memory/MemoryFileDefinition.js.map +1 -1
  104. package/dist/memory/MemoryRegistry.d.ts.map +1 -1
  105. package/dist/memory/MemoryRegistry.js +2 -0
  106. package/dist/memory/MemoryRegistry.js.map +1 -1
  107. package/dist/memory/VectorDatabaseDefinition.d.ts.map +1 -1
  108. package/dist/memory/VectorDatabaseDefinition.js +2 -0
  109. package/dist/memory/VectorDatabaseDefinition.js.map +1 -1
  110. package/dist/memory/index.d.ts.map +1 -1
  111. package/dist/memory/index.js +2 -0
  112. package/dist/memory/index.js.map +1 -1
  113. package/dist/memory/serialization.d.ts.map +1 -1
  114. package/dist/memory/serialization.js +2 -0
  115. package/dist/memory/serialization.js.map +1 -1
  116. package/dist/migration/index.d.ts.map +1 -1
  117. package/dist/migration/index.js +2 -0
  118. package/dist/migration/index.js.map +1 -1
  119. package/dist/migration/migrate.d.ts.map +1 -1
  120. package/dist/migration/migrate.js +2 -0
  121. package/dist/migration/migrate.js.map +1 -1
  122. package/dist/migration/migrations.d.ts.map +1 -1
  123. package/dist/migration/migrations.js +2 -0
  124. package/dist/migration/migrations.js.map +1 -1
  125. package/dist/migration/version.d.ts.map +1 -1
  126. package/dist/migration/version.js +2 -0
  127. package/dist/migration/version.js.map +1 -1
  128. package/dist/model/LLMModelDefinition.d.ts.map +1 -1
  129. package/dist/model/LLMModelDefinition.js +2 -0
  130. package/dist/model/LLMModelDefinition.js.map +1 -1
  131. package/dist/model/Model.d.ts.map +1 -1
  132. package/dist/model/Model.js +2 -13
  133. package/dist/model/Model.js.map +1 -1
  134. package/dist/model/ModelDefinition.d.ts.map +1 -1
  135. package/dist/model/ModelDefinition.js +2 -0
  136. package/dist/model/ModelDefinition.js.map +1 -1
  137. package/dist/model/ModelRegistry.d.ts.map +1 -1
  138. package/dist/model/ModelRegistry.js +2 -0
  139. package/dist/model/ModelRegistry.js.map +1 -1
  140. package/dist/model/index.d.ts.map +1 -1
  141. package/dist/model/index.js +2 -0
  142. package/dist/model/index.js.map +1 -1
  143. package/dist/model/serialization.d.ts.map +1 -1
  144. package/dist/model/serialization.js +2 -0
  145. package/dist/model/serialization.js.map +1 -1
  146. package/dist/node/AgentNode.d.ts.map +1 -1
  147. package/dist/node/AgentNode.js +2 -0
  148. package/dist/node/AgentNode.js.map +1 -1
  149. package/dist/node/DataNode.d.ts.map +1 -1
  150. package/dist/node/DataNode.js +2 -0
  151. package/dist/node/DataNode.js.map +1 -1
  152. package/dist/node/FunctionNode.d.ts.map +1 -1
  153. package/dist/node/FunctionNode.js +2 -0
  154. package/dist/node/FunctionNode.js.map +1 -1
  155. package/dist/node/InputNode.d.ts.map +1 -1
  156. package/dist/node/InputNode.js +2 -0
  157. package/dist/node/InputNode.js.map +1 -1
  158. package/dist/node/LogicNode.d.ts.map +1 -1
  159. package/dist/node/LogicNode.js +2 -0
  160. package/dist/node/LogicNode.js.map +1 -1
  161. package/dist/node/MqttNode.d.ts.map +1 -1
  162. package/dist/node/MqttNode.js +2 -0
  163. package/dist/node/MqttNode.js.map +1 -1
  164. package/dist/node/Node.d.ts.map +1 -1
  165. package/dist/node/Node.js +2 -7
  166. package/dist/node/Node.js.map +1 -1
  167. package/dist/node/NodeDefinition.d.ts.map +1 -1
  168. package/dist/node/NodeDefinition.js +2 -0
  169. package/dist/node/NodeDefinition.js.map +1 -1
  170. package/dist/node/NodeRegistry.d.ts.map +1 -1
  171. package/dist/node/NodeRegistry.js +2 -0
  172. package/dist/node/NodeRegistry.js.map +1 -1
  173. package/dist/node/OutputNode.d.ts.map +1 -1
  174. package/dist/node/OutputNode.js +4 -2
  175. package/dist/node/OutputNode.js.map +1 -1
  176. package/dist/node/ToolNode.d.ts.map +1 -1
  177. package/dist/node/ToolNode.js +2 -0
  178. package/dist/node/ToolNode.js.map +1 -1
  179. package/dist/node/TriggerNode.d.ts.map +1 -1
  180. package/dist/node/TriggerNode.js +2 -0
  181. package/dist/node/TriggerNode.js.map +1 -1
  182. package/dist/node/constants.d.ts.map +1 -1
  183. package/dist/node/constants.js +2 -0
  184. package/dist/node/constants.js.map +1 -1
  185. package/dist/node/index.d.ts.map +1 -1
  186. package/dist/node/index.js +2 -0
  187. package/dist/node/index.js.map +1 -1
  188. package/dist/node/methods.d.ts.map +1 -1
  189. package/dist/node/methods.js +2 -0
  190. package/dist/node/methods.js.map +1 -1
  191. package/dist/node/serialization.d.ts.map +1 -1
  192. package/dist/node/serialization.js +33 -13
  193. package/dist/node/serialization.js.map +1 -1
  194. package/dist/parameter/OutputParameter.d.ts.map +1 -1
  195. package/dist/parameter/OutputParameter.js +2 -0
  196. package/dist/parameter/OutputParameter.js.map +1 -1
  197. package/dist/parameter/Parameter.d.ts.map +1 -1
  198. package/dist/parameter/Parameter.js +2 -0
  199. package/dist/parameter/Parameter.js.map +1 -1
  200. package/dist/parameter/index.d.ts.map +1 -1
  201. package/dist/parameter/index.js +2 -0
  202. package/dist/parameter/index.js.map +1 -1
  203. package/dist/variable/Variable.d.ts.map +1 -1
  204. package/dist/variable/Variable.js +2 -0
  205. package/dist/variable/Variable.js.map +1 -1
  206. package/dist/variable/index.d.ts.map +1 -1
  207. package/dist/variable/index.js +2 -3
  208. package/dist/variable/index.js.map +1 -1
  209. package/dist/variable/operations.d.ts.map +1 -1
  210. package/dist/variable/operations.js +2 -0
  211. package/dist/variable/operations.js.map +1 -1
  212. package/dist/workflow/Workflow.d.ts.map +1 -1
  213. package/dist/workflow/Workflow.js +2 -0
  214. package/dist/workflow/Workflow.js.map +1 -1
  215. package/dist/workflow/index.d.ts.map +1 -1
  216. package/dist/workflow/index.js +2 -0
  217. package/dist/workflow/index.js.map +1 -1
  218. package/dist/workflow/serialization.d.ts.map +1 -1
  219. package/dist/workflow/serialization.js +2 -4
  220. package/dist/workflow/serialization.js.map +1 -1
  221. package/package.json +2 -2
  222. package/src/api/deployment.ts +74 -0
  223. package/src/api/engine.ts +744 -0
  224. package/src/api/index.ts +29 -11
  225. package/src/api/workflow.ts +25 -9
  226. package/src/channel/Channel.ts +14 -11
  227. package/src/channel/ChannelDefinition.ts +101 -76
  228. package/src/channel/index.ts +9 -6
  229. package/src/channel/serialization.ts +77 -68
  230. package/src/deploy/index.ts +17 -1
  231. package/src/deploy/inputs.ts +44 -0
  232. package/src/deploy/requirements.test.ts +64 -61
  233. package/src/deploy/requirements.ts +159 -41
  234. package/src/deploy/spec.test.ts +227 -0
  235. package/src/deploy/spec.ts +397 -0
  236. package/src/diagnostics/__fixtures__/diagnosticFixtures.ts +161 -158
  237. package/src/diagnostics/diagnostics.test.ts +881 -878
  238. package/src/diagnostics/diagnostics.ts +939 -936
  239. package/src/diagnostics/index.ts +14 -11
  240. package/src/edge/Edge.ts +26 -23
  241. package/src/edge/EdgeDefinition.ts +48 -45
  242. package/src/edge/EdgeType.ts +22 -19
  243. package/src/edge/index.ts +11 -8
  244. package/src/edge/serialization.ts +86 -83
  245. package/src/expression/index.ts +7 -4
  246. package/src/expression/parser.ts +365 -362
  247. package/src/expression/types.ts +33 -30
  248. package/src/function/FunctionDeclaration.ts +57 -54
  249. package/src/function/index.ts +6 -3
  250. package/src/function/serialization.ts +43 -40
  251. package/src/globals.d.ts +12 -9
  252. package/src/id/index.ts +11 -8
  253. package/src/index.ts +25 -22
  254. package/src/memory/Memory.ts +18 -15
  255. package/src/memory/MemoryDefinition.ts +19 -16
  256. package/src/memory/MemoryFileDefinition.ts +40 -37
  257. package/src/memory/MemoryRegistry.ts +38 -35
  258. package/src/memory/VectorDatabaseDefinition.ts +24 -21
  259. package/src/memory/index.ts +11 -8
  260. package/src/memory/serialization.ts +50 -47
  261. package/src/migration/index.ts +7 -4
  262. package/src/migration/migrate.test.ts +47 -44
  263. package/src/migration/migrate.ts +61 -58
  264. package/src/migration/migrations.ts +27 -24
  265. package/src/migration/version.ts +12 -9
  266. package/src/model/LLMModelDefinition.ts +15 -12
  267. package/src/model/Model.ts +42 -39
  268. package/src/model/ModelDefinition.ts +18 -15
  269. package/src/model/ModelRegistry.ts +36 -33
  270. package/src/model/index.ts +10 -7
  271. package/src/model/serialization.ts +33 -30
  272. package/src/node/AgentNode.ts +85 -82
  273. package/src/node/DataNode.ts +44 -41
  274. package/src/node/FunctionNode.ts +79 -76
  275. package/src/node/InputNode.ts +188 -185
  276. package/src/node/LogicNode.ts +36 -33
  277. package/src/node/MqttNode.ts +130 -127
  278. package/src/node/Node.ts +64 -61
  279. package/src/node/NodeDefinition.ts +40 -37
  280. package/src/node/NodeRegistry.ts +88 -85
  281. package/src/node/OutputNode.ts +90 -87
  282. package/src/node/ToolNode.ts +35 -32
  283. package/src/node/TriggerNode.ts +275 -272
  284. package/src/node/constants.ts +19 -16
  285. package/src/node/index.ts +29 -26
  286. package/src/node/methods.ts +281 -278
  287. package/src/node/serialization.test.ts +51 -0
  288. package/src/node/serialization.ts +565 -544
  289. package/src/parameter/OutputParameter.ts +71 -68
  290. package/src/parameter/Parameter.ts +246 -243
  291. package/src/parameter/index.ts +36 -33
  292. package/src/variable/Variable.ts +13 -10
  293. package/src/variable/index.ts +19 -16
  294. package/src/variable/operations.ts +109 -106
  295. package/src/workflow/Workflow.ts +44 -41
  296. package/src/workflow/index.ts +6 -3
  297. package/src/workflow/serialization.test.ts +243 -240
  298. package/src/workflow/serialization.ts +245 -242
@@ -1,85 +1,88 @@
1
- import { ReadPinNodeDefinition, SerialReadNodeDefinition, RetrieverNodeDefinition, WebFetchNodeDefinition } from "./InputNode";
2
- import { AgentNodeDefinition } from "./AgentNode";
3
- import {
4
- DelayNodeDefinition,
5
- TickerNodeDefinition,
6
- AlarmNodeDefinition,
7
- OnFunctionCallNodeDefinition,
8
- OnStartupNodeDefinition,
9
- OnPinEdgeNodeDefinition,
10
- OnSerialReceiveNodeDefinition,
11
- OnThresholdNodeDefinition,
12
- } from "./TriggerNode";
13
- import { WebSearchToolNodeDefinition } from "./ToolNode";
14
- import { NodeType } from "./Node";
15
- import { NodeCategory } from "./constants";
16
- import { SerialWriteNodeDefinition, WritePinNodeDefinition } from "./OutputNode";
17
- import { IfNodeDefinition } from "./LogicNode";
18
- import { SetVariableNodeDefinition } from "./DataNode";
19
- import { MqttPublishNodeDefinition, OnMqttMessageNodeDefinition } from "./MqttNode";
20
- import { NodeDefinition } from "./NodeDefinition";
21
-
22
- /**
23
- * Central registry for all node definitions.
24
- */
25
- class NodeDefinitionRegistry {
26
- private nodes: Map<NodeType, NodeDefinition> = new Map();
27
- private initialized = false;
28
-
29
- initialize() {
30
- if (this.initialized) return;
31
-
32
- // Register all nodes
33
- this.register(ReadPinNodeDefinition);
34
- this.register(SerialReadNodeDefinition);
35
- this.register(WritePinNodeDefinition);
36
- this.register(SerialWriteNodeDefinition);
37
- this.register(AgentNodeDefinition);
38
- this.register(IfNodeDefinition);
39
- this.register(SetVariableNodeDefinition);
40
- // Register trigger nodes
41
- this.register(OnFunctionCallNodeDefinition);
42
- this.register(DelayNodeDefinition);
43
- this.register(TickerNodeDefinition);
44
- this.register(AlarmNodeDefinition);
45
- this.register(OnStartupNodeDefinition);
46
- this.register(OnPinEdgeNodeDefinition);
47
- this.register(OnSerialReceiveNodeDefinition);
48
- this.register(OnThresholdNodeDefinition);
49
- // Register tool nodes
50
- this.register(WebSearchToolNodeDefinition);
51
- // Register input tool nodes
52
- this.register(RetrieverNodeDefinition);
53
- this.register(WebFetchNodeDefinition);
54
- // Register MQTT nodes
55
- this.register(MqttPublishNodeDefinition);
56
- this.register(OnMqttMessageNodeDefinition);
57
-
58
- this.initialized = true;
59
- }
60
-
61
- private register(definition: NodeDefinition) {
62
- this.nodes.set(definition.type, definition);
63
- }
64
-
65
- getAll(): NodeDefinition[] {
66
- return Array.from(this.nodes.values());
67
- }
68
-
69
- getAllCategories(): NodeCategory[] {
70
- const categories = new Set(this.getAll().map((node) => node.category));
71
- return Array.from(categories).sort();
72
- }
73
-
74
- getByType(type: NodeType): NodeDefinition | undefined {
75
- return this.nodes.get(type);
76
- }
77
-
78
- getByCategory(category: NodeCategory): NodeDefinition[] {
79
- return this.getAll().filter((node) => node.category === category);
80
- }
81
- }
82
-
83
- // Create and initialize the registry
84
- export const NodeRegistry = new NodeDefinitionRegistry();
85
- NodeRegistry.initialize();
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) 2026 ForestHub.
3
+
4
+ import { ReadPinNodeDefinition, SerialReadNodeDefinition, RetrieverNodeDefinition, WebFetchNodeDefinition } from "./InputNode";
5
+ import { AgentNodeDefinition } from "./AgentNode";
6
+ import {
7
+ DelayNodeDefinition,
8
+ TickerNodeDefinition,
9
+ AlarmNodeDefinition,
10
+ OnFunctionCallNodeDefinition,
11
+ OnStartupNodeDefinition,
12
+ OnPinEdgeNodeDefinition,
13
+ OnSerialReceiveNodeDefinition,
14
+ OnThresholdNodeDefinition,
15
+ } from "./TriggerNode";
16
+ import { WebSearchToolNodeDefinition } from "./ToolNode";
17
+ import { NodeType } from "./Node";
18
+ import { NodeCategory } from "./constants";
19
+ import { SerialWriteNodeDefinition, WritePinNodeDefinition } from "./OutputNode";
20
+ import { IfNodeDefinition } from "./LogicNode";
21
+ import { SetVariableNodeDefinition } from "./DataNode";
22
+ import { MqttPublishNodeDefinition, OnMqttMessageNodeDefinition } from "./MqttNode";
23
+ import { NodeDefinition } from "./NodeDefinition";
24
+
25
+ /**
26
+ * Central registry for all node definitions.
27
+ */
28
+ class NodeDefinitionRegistry {
29
+ private nodes: Map<NodeType, NodeDefinition> = new Map();
30
+ private initialized = false;
31
+
32
+ initialize() {
33
+ if (this.initialized) return;
34
+
35
+ // Register all nodes
36
+ this.register(ReadPinNodeDefinition);
37
+ this.register(SerialReadNodeDefinition);
38
+ this.register(WritePinNodeDefinition);
39
+ this.register(SerialWriteNodeDefinition);
40
+ this.register(AgentNodeDefinition);
41
+ this.register(IfNodeDefinition);
42
+ this.register(SetVariableNodeDefinition);
43
+ // Register trigger nodes
44
+ this.register(OnFunctionCallNodeDefinition);
45
+ this.register(DelayNodeDefinition);
46
+ this.register(TickerNodeDefinition);
47
+ this.register(AlarmNodeDefinition);
48
+ this.register(OnStartupNodeDefinition);
49
+ this.register(OnPinEdgeNodeDefinition);
50
+ this.register(OnSerialReceiveNodeDefinition);
51
+ this.register(OnThresholdNodeDefinition);
52
+ // Register tool nodes
53
+ this.register(WebSearchToolNodeDefinition);
54
+ // Register input tool nodes
55
+ this.register(RetrieverNodeDefinition);
56
+ this.register(WebFetchNodeDefinition);
57
+ // Register MQTT nodes
58
+ this.register(MqttPublishNodeDefinition);
59
+ this.register(OnMqttMessageNodeDefinition);
60
+
61
+ this.initialized = true;
62
+ }
63
+
64
+ private register(definition: NodeDefinition) {
65
+ this.nodes.set(definition.type, definition);
66
+ }
67
+
68
+ getAll(): NodeDefinition[] {
69
+ return Array.from(this.nodes.values());
70
+ }
71
+
72
+ getAllCategories(): NodeCategory[] {
73
+ const categories = new Set(this.getAll().map((node) => node.category));
74
+ return Array.from(categories).sort();
75
+ }
76
+
77
+ getByType(type: NodeType): NodeDefinition | undefined {
78
+ return this.nodes.get(type);
79
+ }
80
+
81
+ getByCategory(category: NodeCategory): NodeDefinition[] {
82
+ return this.getAll().filter((node) => node.category === category);
83
+ }
84
+ }
85
+
86
+ // Create and initialize the registry
87
+ export const NodeRegistry = new NodeDefinitionRegistry();
88
+ NodeRegistry.initialize();
@@ -1,87 +1,90 @@
1
- import { NodeBase } from "./Node";
2
- import type { Expression } from "../api";
3
- import { NodeCategory, NodeTag } from "./constants";
4
- import { NodeDefinition } from "./NodeDefinition";
5
-
6
- export interface WritePinNode extends NodeBase {
7
- type: "WritePin";
8
- arguments: {
9
- pinReference: string | undefined;
10
- signalType: "digital" | "analog";
11
- value: Expression;
12
- };
13
- }
14
-
15
- export interface SerialWriteNode extends NodeBase {
16
- type: "SerialWrite";
17
- arguments: {
18
- portReference: string | undefined;
19
- value: Expression; // Expression for the value to write
20
- };
21
- }
22
-
23
- export type OutputNodeType = "WritePin" | "SerialWrite";
24
- export type OutputNode = WritePinNode | SerialWriteNode;
25
-
26
- // Node Definitions
27
-
28
- export const WritePinNodeDefinition: NodeDefinition = {
29
- type: "WritePin",
30
- label: "Write Pin",
31
- category: NodeCategory.Output,
32
- tags: [NodeTag.Pin],
33
- description: "Write data to a pin",
34
- parameters: [
35
- {
36
- id: "pinReference",
37
- label: "Pin",
38
- description: "IO pin to write to",
39
- type: "channelSelect",
40
- channelType: (args) => ((args as WritePinNode["arguments"]).signalType === "digital" ? ["GPIOOUT"] : ["PWM", "DAC"]),
41
- },
42
- {
43
- id: "signalType",
44
- label: "Signal Type",
45
- description: "Type of signal",
46
- type: "selection",
47
- default: "digital",
48
- options: [
49
- { value: "digital", label: "Digital" },
50
- { value: "analog", label: "Analog" },
51
- ],
52
- },
53
- {
54
- id: "value",
55
- label: "Value",
56
- description: "What value to write to the pin",
57
- type: "expression",
58
- expressionType: (args) => ((args as WritePinNode["arguments"]).signalType === "digital" ? "bool" : "int"),
59
- default: { expression: "", references: [], dataType: "bool" },
60
- },
61
- ],
62
- };
63
-
64
- export const SerialWriteNodeDefinition: NodeDefinition = {
65
- type: "SerialWrite",
66
- label: "Serial Write",
67
- category: NodeCategory.Output,
68
- tags: [NodeTag.Serial],
69
- description: "Write string to serial port",
70
- parameters: [
71
- {
72
- id: "portReference",
73
- label: "Port",
74
- description: "Serial port to write to",
75
- type: "channelSelect",
76
- channelType: ["UART"],
77
- },
78
- {
79
- id: "value",
80
- label: "Value",
81
- description: "Expression for the value to write",
82
- type: "expression",
83
- expressionType: "string",
84
- default: { expression: "", references: [], dataType: "string" },
85
- },
86
- ],
87
- };
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) 2026 ForestHub.
3
+
4
+ import { NodeBase } from "./Node";
5
+ import type { Expression } from "../api";
6
+ import { NodeCategory, NodeTag } from "./constants";
7
+ import { NodeDefinition } from "./NodeDefinition";
8
+
9
+ export interface WritePinNode extends NodeBase {
10
+ type: "WritePin";
11
+ arguments: {
12
+ pinReference: string | undefined;
13
+ signalType: "digital" | "analog";
14
+ value: Expression;
15
+ };
16
+ }
17
+
18
+ export interface SerialWriteNode extends NodeBase {
19
+ type: "SerialWrite";
20
+ arguments: {
21
+ portReference: string | undefined;
22
+ value: Expression; // Expression for the value to write
23
+ };
24
+ }
25
+
26
+ export type OutputNodeType = "WritePin" | "SerialWrite";
27
+ export type OutputNode = WritePinNode | SerialWriteNode;
28
+
29
+ // Node Definitions
30
+
31
+ export const WritePinNodeDefinition: NodeDefinition = {
32
+ type: "WritePin",
33
+ label: "Write Pin",
34
+ category: NodeCategory.Output,
35
+ tags: [NodeTag.Pin],
36
+ description: "Write data to a pin",
37
+ parameters: [
38
+ {
39
+ id: "pinReference",
40
+ label: "Pin",
41
+ description: "IO pin to write to",
42
+ type: "channelSelect",
43
+ channelType: (args) => ((args as WritePinNode["arguments"]).signalType === "digital" ? ["GPIOOUT"] : ["PWM", "DAC"]),
44
+ },
45
+ {
46
+ id: "signalType",
47
+ label: "Signal Type",
48
+ description: "Type of signal",
49
+ type: "selection",
50
+ default: "digital",
51
+ options: [
52
+ { value: "digital", label: "Digital" },
53
+ { value: "analog", label: "Analog" },
54
+ ],
55
+ },
56
+ {
57
+ id: "value",
58
+ label: "Value",
59
+ description: "What value to write to the pin",
60
+ type: "expression",
61
+ expressionType: (args) => ((args as WritePinNode["arguments"]).signalType === "digital" ? "bool" : "int"),
62
+ default: { expression: "", references: [], dataType: "bool" },
63
+ },
64
+ ],
65
+ };
66
+
67
+ export const SerialWriteNodeDefinition: NodeDefinition = {
68
+ type: "SerialWrite",
69
+ label: "Serial Write",
70
+ category: NodeCategory.Output,
71
+ tags: [NodeTag.Serial],
72
+ description: "Write string to serial port",
73
+ parameters: [
74
+ {
75
+ id: "portReference",
76
+ label: "Port",
77
+ description: "Serial port or log channel to write to",
78
+ type: "channelSelect",
79
+ channelType: ["UART", "LOG"],
80
+ },
81
+ {
82
+ id: "value",
83
+ label: "Value",
84
+ description: "Expression for the value to write",
85
+ type: "expression",
86
+ expressionType: "string",
87
+ default: { expression: "", references: [], dataType: "string" },
88
+ },
89
+ ],
90
+ };
@@ -1,32 +1,35 @@
1
- import { NodeBase } from "./Node";
2
- import { NodeCategory } from "./constants";
3
- import { NodeDefinition } from "./NodeDefinition";
4
-
5
- // Web Search Tool - provides web search capability to agents
6
- export interface WebSearchToolNode extends NodeBase {
7
- type: "WebSearchTool";
8
- arguments: {
9
- maxResults?: number;
10
- };
11
- }
12
-
13
- export type ToolNodeType = "WebSearchTool";
14
- export type ToolNode = WebSearchToolNode;
15
-
16
- // Node Definitions
17
-
18
- export const WebSearchToolNodeDefinition: NodeDefinition = {
19
- type: "WebSearchTool",
20
- label: "Web Search",
21
- category: NodeCategory.Tool,
22
- description: "Provides web search capability to connected agents",
23
- parameters: [
24
- {
25
- id: "maxResults",
26
- label: "Max Results",
27
- description: "Maximum number of search results to return per call (capped at 20)",
28
- type: "int",
29
- optional: true,
30
- },
31
- ],
32
- };
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) 2026 ForestHub.
3
+
4
+ import { NodeBase } from "./Node";
5
+ import { NodeCategory } from "./constants";
6
+ import { NodeDefinition } from "./NodeDefinition";
7
+
8
+ // Web Search Tool - provides web search capability to agents
9
+ export interface WebSearchToolNode extends NodeBase {
10
+ type: "WebSearchTool";
11
+ arguments: {
12
+ maxResults?: number;
13
+ };
14
+ }
15
+
16
+ export type ToolNodeType = "WebSearchTool";
17
+ export type ToolNode = WebSearchToolNode;
18
+
19
+ // Node Definitions
20
+
21
+ export const WebSearchToolNodeDefinition: NodeDefinition = {
22
+ type: "WebSearchTool",
23
+ label: "Web Search",
24
+ category: NodeCategory.Tool,
25
+ description: "Provides web search capability to connected agents",
26
+ parameters: [
27
+ {
28
+ id: "maxResults",
29
+ label: "Max Results",
30
+ description: "Maximum number of search results to return per call (capped at 20)",
31
+ type: "int",
32
+ optional: true,
33
+ },
34
+ ],
35
+ };