@decaf-ts/integrations 0.3.4 → 0.3.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 (99) hide show
  1. package/dist/integrations.cjs +3 -3
  2. package/dist/integrations.js +3 -3
  3. package/lib/cjs/graph/execution/CodeSandboxEvaluator.cjs +4 -0
  4. package/lib/cjs/graph/execution/GraphExecutionEngine.cjs +3 -2
  5. package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs +95 -0
  6. package/lib/cjs/graph/execution/index.cjs +4 -2
  7. package/lib/cjs/graph/index.cjs +7 -2
  8. package/lib/cjs/graph/loops/ConditionExpressionEvaluator.cjs +87 -0
  9. package/lib/cjs/graph/loops/GraphConditionEvaluator.cjs +25 -3
  10. package/lib/cjs/graph/loops/index.cjs +3 -2
  11. package/lib/cjs/graph/nodes/agent.cjs +110 -0
  12. package/lib/cjs/graph/nodes/category-styles.cjs +38 -0
  13. package/lib/cjs/graph/nodes/flow-control.cjs +436 -0
  14. package/lib/cjs/graph/nodes/index.cjs +34 -0
  15. package/lib/cjs/graph/nodes/triggers.cjs +250 -0
  16. package/lib/cjs/graph/types.cjs +2 -2
  17. package/lib/cjs/index.cjs +3 -3
  18. package/lib/cjs/keycloak/services/KeycloakAuthService.cjs +5 -4
  19. package/lib/cjs/keycloak/services/KeycloakClientService.cjs +5 -4
  20. package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs +5 -4
  21. package/lib/cjs/keycloak/services/KeycloakRealmService.cjs +8 -7
  22. package/lib/cjs/keycloak/services/KeycloakRoleService.cjs +5 -4
  23. package/lib/cjs/keycloak/services/KeycloakService.cjs +5 -3
  24. package/lib/cjs/keycloak/services/KeycloakUserService.cjs +5 -4
  25. package/lib/cjs/keycloak/services/runtime.cjs +20 -0
  26. package/lib/cjs/kibana/services/KibanaAuthService.cjs +6 -5
  27. package/lib/cjs/kibana/services/KibanaDashboardService.cjs +9 -8
  28. package/lib/cjs/kibana/services/KibanaDataViewService.cjs +7 -6
  29. package/lib/cjs/kibana/services/KibanaRoleService.cjs +5 -4
  30. package/lib/cjs/kibana/services/KibanaService.cjs +4 -2
  31. package/lib/cjs/kibana/services/KibanaSpaceService.cjs +5 -4
  32. package/lib/cjs/kibana/services/KibanaUserService.cjs +5 -4
  33. package/lib/cjs/kibana/services/runtime.cjs +20 -0
  34. package/lib/esm/graph/execution/CodeSandboxEvaluator.js +18 -0
  35. package/lib/esm/graph/execution/GraphExecutionEngine.js +2 -1
  36. package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js +90 -0
  37. package/lib/esm/graph/execution/index.js +3 -1
  38. package/lib/esm/graph/index.js +6 -1
  39. package/lib/esm/graph/loops/ConditionExpressionEvaluator.js +82 -0
  40. package/lib/esm/graph/loops/GraphConditionEvaluator.js +24 -2
  41. package/lib/esm/graph/loops/index.js +2 -1
  42. package/lib/esm/graph/nodes/agent.js +101 -0
  43. package/lib/esm/graph/nodes/category-styles.js +34 -0
  44. package/lib/esm/graph/nodes/flow-control.js +427 -0
  45. package/lib/esm/graph/nodes/index.js +17 -0
  46. package/lib/esm/graph/nodes/triggers.js +241 -0
  47. package/lib/esm/graph/types.js +1 -1
  48. package/lib/esm/index.js +3 -3
  49. package/lib/esm/keycloak/services/KeycloakAuthService.js +4 -3
  50. package/lib/esm/keycloak/services/KeycloakClientService.js +4 -3
  51. package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js +4 -3
  52. package/lib/esm/keycloak/services/KeycloakRealmService.js +4 -3
  53. package/lib/esm/keycloak/services/KeycloakRoleService.js +4 -3
  54. package/lib/esm/keycloak/services/KeycloakService.js +4 -2
  55. package/lib/esm/keycloak/services/KeycloakUserService.js +4 -3
  56. package/lib/esm/keycloak/services/runtime.js +15 -0
  57. package/lib/esm/kibana/services/KibanaAuthService.js +5 -4
  58. package/lib/esm/kibana/services/KibanaDashboardService.js +5 -4
  59. package/lib/esm/kibana/services/KibanaDataViewService.js +4 -3
  60. package/lib/esm/kibana/services/KibanaRoleService.js +4 -3
  61. package/lib/esm/kibana/services/KibanaService.js +3 -1
  62. package/lib/esm/kibana/services/KibanaSpaceService.js +4 -3
  63. package/lib/esm/kibana/services/KibanaUserService.js +4 -3
  64. package/lib/esm/kibana/services/runtime.js +15 -0
  65. package/lib/types/graph/execution/CodeSandboxEvaluator.d.cts +53 -0
  66. package/lib/types/graph/execution/CodeSandboxEvaluator.d.mts +53 -0
  67. package/lib/types/graph/execution/GraphExecutionEngine.d.cts +10 -0
  68. package/lib/types/graph/execution/GraphExecutionEngine.d.mts +10 -0
  69. package/lib/types/graph/execution/SwitchGraphNodeExecutor.d.cts +42 -0
  70. package/lib/types/graph/execution/SwitchGraphNodeExecutor.d.mts +42 -0
  71. package/lib/types/graph/execution/index.d.cts +2 -0
  72. package/lib/types/graph/execution/index.d.mts +2 -0
  73. package/lib/types/graph/index.d.cts +4 -0
  74. package/lib/types/graph/index.d.mts +4 -0
  75. package/lib/types/graph/loops/ConditionExpressionEvaluator.d.cts +36 -0
  76. package/lib/types/graph/loops/ConditionExpressionEvaluator.d.mts +36 -0
  77. package/lib/types/graph/loops/GraphConditionEvaluator.d.cts +20 -4
  78. package/lib/types/graph/loops/GraphConditionEvaluator.d.mts +20 -4
  79. package/lib/types/graph/loops/index.d.cts +1 -0
  80. package/lib/types/graph/loops/index.d.mts +1 -0
  81. package/lib/types/graph/nodes/agent.d.cts +44 -0
  82. package/lib/types/graph/nodes/agent.d.mts +44 -0
  83. package/lib/types/graph/nodes/category-styles.d.cts +8 -0
  84. package/lib/types/graph/nodes/category-styles.d.mts +8 -0
  85. package/lib/types/graph/nodes/flow-control.d.cts +104 -0
  86. package/lib/types/graph/nodes/flow-control.d.mts +104 -0
  87. package/lib/types/graph/nodes/index.d.cts +16 -0
  88. package/lib/types/graph/nodes/index.d.mts +16 -0
  89. package/lib/types/graph/nodes/triggers.d.cts +53 -0
  90. package/lib/types/graph/nodes/triggers.d.mts +53 -0
  91. package/lib/types/graph/types.d.cts +102 -0
  92. package/lib/types/graph/types.d.mts +102 -0
  93. package/lib/types/index.d.cts +2 -2
  94. package/lib/types/index.d.mts +2 -2
  95. package/lib/types/keycloak/services/runtime.d.cts +6 -0
  96. package/lib/types/keycloak/services/runtime.d.mts +6 -0
  97. package/lib/types/kibana/services/runtime.d.cts +6 -0
  98. package/lib/types/kibana/services/runtime.d.mts +6 -0
  99. package/package.json +1 -1
@@ -0,0 +1,427 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ /**
11
+ * @module integrations/graph/nodes/flow-control
12
+ * @summary Production flow-control node kind declarations (DECAF-32 §22.2.2).
13
+ * @description Canonical `@node`-decorated classes for the ten ALFRED-5
14
+ * flow-control kinds. These are graph-level macros: the engine's planner
15
+ * recognises them as ordinary executable nodes (§5.7) but they have no
16
+ * built-in executors — downstream projects (e.g. ALFRED) register custom
17
+ * executors or compile them into Mastra composition APIs (§22.2.2).
18
+ *
19
+ * The three loop kinds (`core.loop.foreach/while/until`) already have built-in
20
+ * executors (§5.9) and are NOT redeclared here.
21
+ */
22
+ import { Model, model, required } from "@decaf-ts/decorator-validation";
23
+ import { uielement } from "@decaf-ts/ui-decorators";
24
+ import { input, node, output } from "@decaf-ts/ui-decorators/graph";
25
+ /**
26
+ * If — conditional branch. Evaluates a `ConditionExpression` (§22.3) and
27
+ * routes the input to the `then` or `else` output.
28
+ */
29
+ let IfFlowNode = class IfFlowNode extends Model {
30
+ };
31
+ __decorate([
32
+ required(),
33
+ uielement("textarea", { label: "Input value", placeholder: "Value to evaluate" }),
34
+ input({ handle: "value" }),
35
+ __metadata("design:type", Object)
36
+ ], IfFlowNode.prototype, "value", void 0);
37
+ __decorate([
38
+ required(),
39
+ uielement("input", { label: "Then", placeholder: "Output when condition is true" }),
40
+ output({ handle: "then" }),
41
+ __metadata("design:type", Object)
42
+ ], IfFlowNode.prototype, "then", void 0);
43
+ __decorate([
44
+ required(),
45
+ uielement("input", { label: "Else", placeholder: "Output when condition is false" }),
46
+ output({ handle: "else" }),
47
+ __metadata("design:type", Object)
48
+ ], IfFlowNode.prototype, "else", void 0);
49
+ IfFlowNode = __decorate([
50
+ node("core.flow.if", {
51
+ kind: "core.flow.if",
52
+ category: "Flow Control",
53
+ color: "#f59e0b",
54
+ icon: "ti-arrows-split-2",
55
+ width: 96,
56
+ height: 96,
57
+ labels: ["flow", "conditional", "branch"],
58
+ metadata: {
59
+ title: "If",
60
+ description: "Conditional branch. Evaluates the configured condition and routes the input to the matching output.",
61
+ condition: { op: "eq", left: { const: true }, right: { const: true } },
62
+ },
63
+ }),
64
+ model()
65
+ ], IfFlowNode);
66
+ export { IfFlowNode };
67
+ /**
68
+ * Switch — multi-branch. Routes the input to one of the case output ports
69
+ * or `default` based on matching conditions. Each case defines a
70
+ * {@link SwitchCaseCondition} (graphical or code mode) and a dedicated
71
+ * output port. Cases are stored in `metadata.switch.cases` and the
72
+ * renderer creates dynamic output ports from them (DECAF-32 §22.2.2).
73
+ *
74
+ * The node grows in height as cases are added. Each case gets its own
75
+ * output port on the right side, labeled with the case label.
76
+ */
77
+ let SwitchFlowNode = class SwitchFlowNode extends Model {
78
+ };
79
+ __decorate([
80
+ required(),
81
+ uielement("textarea", { label: "Input value", placeholder: "Value to switch on" }),
82
+ input({ handle: "value" }),
83
+ __metadata("design:type", Object)
84
+ ], SwitchFlowNode.prototype, "value", void 0);
85
+ __decorate([
86
+ required(),
87
+ uielement("input", { label: "Default", placeholder: "Default output when no case matches" }),
88
+ output({ handle: "default" }),
89
+ __metadata("design:type", Object)
90
+ ], SwitchFlowNode.prototype, "default", void 0);
91
+ SwitchFlowNode = __decorate([
92
+ node("core.flow.switch", {
93
+ kind: "core.flow.switch",
94
+ category: "Flow Control",
95
+ color: "#f97316",
96
+ icon: "ti-arrows-shuffle",
97
+ width: 120,
98
+ height: 140,
99
+ labels: ["flow", "switch", "multi-branch"],
100
+ metadata: {
101
+ title: "Switch",
102
+ description: "Multi-branch switch. Routes the input to the first matching case output, or the default output.",
103
+ switch: {
104
+ cases: [],
105
+ defaultPort: "default",
106
+ },
107
+ },
108
+ }),
109
+ model()
110
+ ], SwitchFlowNode);
111
+ export { SwitchFlowNode };
112
+ /**
113
+ * Parallel — splits execution into concurrent branches.
114
+ */
115
+ let ParallelFlowNode = class ParallelFlowNode extends Model {
116
+ };
117
+ __decorate([
118
+ required(),
119
+ uielement("textarea", { label: "Input value", placeholder: "Value to fan out" }),
120
+ input({ handle: "value" }),
121
+ __metadata("design:type", Object)
122
+ ], ParallelFlowNode.prototype, "value", void 0);
123
+ __decorate([
124
+ required(),
125
+ uielement("input", { label: "Branches", placeholder: "Collected branch outputs" }),
126
+ output({ handle: "branches" }),
127
+ __metadata("design:type", Array)
128
+ ], ParallelFlowNode.prototype, "branches", void 0);
129
+ ParallelFlowNode = __decorate([
130
+ node("core.flow.parallel", {
131
+ kind: "core.flow.parallel",
132
+ category: "Flow Control",
133
+ color: "#06b6d4",
134
+ icon: "ti-arrows-vertical",
135
+ width: 96,
136
+ height: 96,
137
+ labels: ["flow", "parallel", "concurrent"],
138
+ metadata: {
139
+ title: "Parallel",
140
+ description: "Splits execution into concurrent branches. All branches run in parallel and outputs are collected.",
141
+ branchCount: 2,
142
+ },
143
+ }),
144
+ model()
145
+ ], ParallelFlowNode);
146
+ export { ParallelFlowNode };
147
+ /**
148
+ * Merge — normalises branch/parallel outputs into a single output.
149
+ */
150
+ let MergeFlowNode = class MergeFlowNode extends Model {
151
+ };
152
+ __decorate([
153
+ required(),
154
+ uielement("textarea", { label: "Branch outputs", placeholder: "Outputs to merge" }),
155
+ input({ handle: "values" }),
156
+ __metadata("design:type", Array)
157
+ ], MergeFlowNode.prototype, "values", void 0);
158
+ __decorate([
159
+ required(),
160
+ uielement("input", { label: "Merged output", placeholder: "Merged result" }),
161
+ output({ handle: "merged" }),
162
+ __metadata("design:type", Object)
163
+ ], MergeFlowNode.prototype, "merged", void 0);
164
+ MergeFlowNode = __decorate([
165
+ node("core.flow.merge", {
166
+ kind: "core.flow.merge",
167
+ category: "Utility",
168
+ color: "#0d9488",
169
+ icon: "ti-arrows-merge",
170
+ width: 96,
171
+ height: 96,
172
+ labels: ["flow", "merge", "join"],
173
+ metadata: {
174
+ title: "Merge",
175
+ description: "Merges multiple branch outputs into a single normalised output object.",
176
+ strategy: "concat",
177
+ },
178
+ }),
179
+ model()
180
+ ], MergeFlowNode);
181
+ export { MergeFlowNode };
182
+ /**
183
+ * Map — transforms the current input into a new output object.
184
+ */
185
+ let MapFlowNode = class MapFlowNode extends Model {
186
+ };
187
+ __decorate([
188
+ required(),
189
+ uielement("textarea", { label: "Input value", placeholder: "Value to transform" }),
190
+ input({ handle: "value" }),
191
+ __metadata("design:type", Object)
192
+ ], MapFlowNode.prototype, "value", void 0);
193
+ __decorate([
194
+ required(),
195
+ uielement("input", { label: "Transformed output", placeholder: "Mapped result" }),
196
+ output({ handle: "result" }),
197
+ __metadata("design:type", Object)
198
+ ], MapFlowNode.prototype, "result", void 0);
199
+ MapFlowNode = __decorate([
200
+ node("core.flow.map", {
201
+ kind: "core.flow.map",
202
+ category: "Utility",
203
+ color: "#84cc16",
204
+ icon: "ti-arrows-right-left",
205
+ width: 96,
206
+ height: 96,
207
+ labels: ["flow", "map", "transform"],
208
+ metadata: {
209
+ title: "Map",
210
+ description: "Transforms the current input into a new output object using the configured mapper.",
211
+ mapper: {},
212
+ },
213
+ }),
214
+ model()
215
+ ], MapFlowNode);
216
+ export { MapFlowNode };
217
+ /**
218
+ * Delay — pauses execution for a configured duration.
219
+ */
220
+ let DelayFlowNode = class DelayFlowNode extends Model {
221
+ };
222
+ __decorate([
223
+ required(),
224
+ uielement("textarea", { label: "Input value", placeholder: "Value to forward after delay" }),
225
+ input({ handle: "value" }),
226
+ __metadata("design:type", Object)
227
+ ], DelayFlowNode.prototype, "value", void 0);
228
+ __decorate([
229
+ required(),
230
+ uielement("input", { label: "Output value", placeholder: "Forwarded value" }),
231
+ output({ handle: "value" }),
232
+ __metadata("design:type", Object)
233
+ ], DelayFlowNode.prototype, "valueOut", void 0);
234
+ DelayFlowNode = __decorate([
235
+ node("core.flow.delay", {
236
+ kind: "core.flow.delay",
237
+ category: "Utility",
238
+ color: "#a3a3a3",
239
+ icon: "ti-clock-hour-4",
240
+ width: 96,
241
+ height: 96,
242
+ labels: ["flow", "delay", "wait"],
243
+ metadata: {
244
+ title: "Delay",
245
+ description: "Pauses execution for the configured duration (in milliseconds), then forwards the input unchanged.",
246
+ durationMs: 1000,
247
+ },
248
+ }),
249
+ model()
250
+ ], DelayFlowNode);
251
+ export { DelayFlowNode };
252
+ /**
253
+ * Error boundary — try/catch/finally workflow behaviour.
254
+ */
255
+ let ErrorBoundaryFlowNode = class ErrorBoundaryFlowNode extends Model {
256
+ };
257
+ __decorate([
258
+ required(),
259
+ uielement("textarea", { label: "Input value", placeholder: "Value to guard" }),
260
+ input({ handle: "value" }),
261
+ __metadata("design:type", Object)
262
+ ], ErrorBoundaryFlowNode.prototype, "value", void 0);
263
+ __decorate([
264
+ required(),
265
+ uielement("input", { label: "Result", placeholder: "Output on success" }),
266
+ output({ handle: "result" }),
267
+ __metadata("design:type", Object)
268
+ ], ErrorBoundaryFlowNode.prototype, "result", void 0);
269
+ __decorate([
270
+ required(),
271
+ uielement("input", { label: "Error", placeholder: "Output on failure" }),
272
+ output({ handle: "error" }),
273
+ __metadata("design:type", Object)
274
+ ], ErrorBoundaryFlowNode.prototype, "error", void 0);
275
+ ErrorBoundaryFlowNode = __decorate([
276
+ node("core.flow.errorBoundary", {
277
+ kind: "core.flow.errorBoundary",
278
+ category: "Flow Control",
279
+ color: "#ef4444",
280
+ icon: "ti-shield-check",
281
+ width: 96,
282
+ height: 96,
283
+ labels: ["flow", "error", "try-catch"],
284
+ metadata: {
285
+ title: "Error boundary",
286
+ description: "Wraps the input in a try/catch/finally. Emits the result on success, or the error on failure.",
287
+ finally: false,
288
+ },
289
+ }),
290
+ model()
291
+ ], ErrorBoundaryFlowNode);
292
+ export { ErrorBoundaryFlowNode };
293
+ /**
294
+ * Human approval — suspends execution until a human approves or rejects.
295
+ */
296
+ let HumanApprovalFlowNode = class HumanApprovalFlowNode extends Model {
297
+ };
298
+ __decorate([
299
+ required(),
300
+ uielement("textarea", { label: "Input value", placeholder: "Value pending approval" }),
301
+ input({ handle: "value" }),
302
+ __metadata("design:type", Object)
303
+ ], HumanApprovalFlowNode.prototype, "value", void 0);
304
+ __decorate([
305
+ required(),
306
+ uielement("input", { label: "Approved", placeholder: "Output when approved" }),
307
+ output({ handle: "approved" }),
308
+ __metadata("design:type", Object)
309
+ ], HumanApprovalFlowNode.prototype, "approved", void 0);
310
+ __decorate([
311
+ required(),
312
+ uielement("input", { label: "Rejected", placeholder: "Output when rejected" }),
313
+ output({ handle: "rejected" }),
314
+ __metadata("design:type", Object)
315
+ ], HumanApprovalFlowNode.prototype, "rejected", void 0);
316
+ HumanApprovalFlowNode = __decorate([
317
+ node("core.flow.humanApproval", {
318
+ kind: "core.flow.humanApproval",
319
+ category: "Flow Control",
320
+ color: "#d946ef",
321
+ icon: "ti-user-check",
322
+ width: 96,
323
+ height: 96,
324
+ labels: ["flow", "approval", "suspend"],
325
+ metadata: {
326
+ title: "Human approval",
327
+ description: "Suspends execution until a human approves or rejects. Emits the approved value or a rejection.",
328
+ approvers: [],
329
+ timeoutMs: 86400000,
330
+ },
331
+ }),
332
+ model()
333
+ ], HumanApprovalFlowNode);
334
+ export { HumanApprovalFlowNode };
335
+ /**
336
+ * Return — defines and normalises the final workflow output.
337
+ */
338
+ let ReturnFlowNode = class ReturnFlowNode extends Model {
339
+ };
340
+ __decorate([
341
+ required(),
342
+ uielement("textarea", { label: "Input value", placeholder: "Value to normalise" }),
343
+ input({ handle: "value" }),
344
+ __metadata("design:type", Object)
345
+ ], ReturnFlowNode.prototype, "value", void 0);
346
+ __decorate([
347
+ required(),
348
+ uielement("input", { label: "Returned output", placeholder: "Normalised output" }),
349
+ output({ handle: "result" }),
350
+ __metadata("design:type", Object)
351
+ ], ReturnFlowNode.prototype, "result", void 0);
352
+ ReturnFlowNode = __decorate([
353
+ node("core.flow.return", {
354
+ kind: "core.flow.return",
355
+ category: "Utility",
356
+ color: "#22c55e",
357
+ icon: "ti-arrow-back-up",
358
+ width: 96,
359
+ height: 96,
360
+ labels: ["flow", "return", "output"],
361
+ metadata: {
362
+ title: "Return",
363
+ description: "Normalises the input into the final workflow output object.",
364
+ outputSchema: {},
365
+ },
366
+ }),
367
+ model()
368
+ ], ReturnFlowNode);
369
+ export { ReturnFlowNode };
370
+ /**
371
+ * Code — sandboxed JS/TS code execution (ALFRED-5 §7).
372
+ *
373
+ * The engine does not implement the sandbox directly (§22.4). A future
374
+ * executor may wrap the `CodeSandbox` contract (ALFRED-5 §7.17) as a
375
+ * pluggable executor. The placeholder syntax (`{{ $input }}`, `{{ $item }}`,
376
+ * `{{ $index }}`, `{{ $vars }}`, `{{ $node["Name"].output }}`) is Mastra-
377
+ * agnostic and lives in the downstream project's `modules/core` (ALFRED-6).
378
+ */
379
+ let CodeFlowNode = class CodeFlowNode extends Model {
380
+ };
381
+ __decorate([
382
+ required(),
383
+ uielement("textarea", { label: "Input", placeholder: "Input object (accessible as $input)" }),
384
+ input({ handle: "input" }),
385
+ __metadata("design:type", Object)
386
+ ], CodeFlowNode.prototype, "input", void 0);
387
+ __decorate([
388
+ required(),
389
+ uielement("input", { label: "Result", placeholder: "Code execution result" }),
390
+ output({ handle: "result" }),
391
+ __metadata("design:type", Object)
392
+ ], CodeFlowNode.prototype, "result", void 0);
393
+ CodeFlowNode = __decorate([
394
+ node("core.flow.code", {
395
+ kind: "core.flow.code",
396
+ category: "Utility",
397
+ color: "#7c3aed",
398
+ icon: "ti-code",
399
+ width: 96,
400
+ height: 96,
401
+ labels: ["flow", "code", "sandbox", "transform"],
402
+ metadata: {
403
+ title: "Code",
404
+ description: "Runs user-authored JS/TS in a restricted VM sandbox. Supports placeholder syntax for workflow data references.",
405
+ code: "",
406
+ language: "javascript",
407
+ },
408
+ }),
409
+ model()
410
+ ], CodeFlowNode);
411
+ export { CodeFlowNode };
412
+ /**
413
+ * All built-in flow-control node constructors.
414
+ */
415
+ export const GRAPH_FLOW_CONTROL_NODES = [
416
+ IfFlowNode,
417
+ SwitchFlowNode,
418
+ ParallelFlowNode,
419
+ MergeFlowNode,
420
+ MapFlowNode,
421
+ DelayFlowNode,
422
+ ErrorBoundaryFlowNode,
423
+ HumanApprovalFlowNode,
424
+ ReturnFlowNode,
425
+ CodeFlowNode,
426
+ ];
427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dyYXBoL25vZGVzL2Zsb3ctY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVwRTs7O0dBR0c7QUFnQkksSUFBTSxVQUFVLEdBQWhCLE1BQU0sVUFBVyxTQUFRLEtBQUs7Q0FlcEMsQ0FBQTtBQVhDO0lBSEMsUUFBUSxFQUFFO0lBQ1YsU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLENBQUM7SUFDakYsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDOzt5Q0FDWDtBQUtoQjtJQUhDLFFBQVEsRUFBRTtJQUNWLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSwrQkFBK0IsRUFBRSxDQUFDO0lBQ25GLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQzs7d0NBQ1o7QUFLZjtJQUhDLFFBQVEsRUFBRTtJQUNWLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDO0lBQ3BGLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQzs7d0NBQ1o7QUFkSixVQUFVO0lBZnRCLElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDcEIsSUFBSSxFQUFF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O0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN0QyxVQUFVO0lBQ1YsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixhQUFhO0lBQ2IsV0FBVztJQUNYLGFBQWE7SUFDYixxQkFBcUI7SUFDckIscUJBQXFCO0lBQ3JCLGNBQWM7SUFDZCxZQUFZO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvbm9kZXMvZmxvdy1jb250cm9sXG4gKiBAc3VtbWFyeSBQcm9kdWN0aW9uIGZsb3ctY29udHJvbCBub2RlIGtpbmQgZGVjbGFyYXRpb25zIChERUNBRi0zMiDCpzIyLjIuMikuXG4gKiBAZGVzY3JpcHRpb24gQ2Fub25pY2FsIGBAbm9kZWAtZGVjb3JhdGVkIGNsYXNzZXMgZm9yIHRoZSB0ZW4gQUxGUkVELTVcbiAqIGZsb3ctY29udHJvbCBraW5kcy4gVGhlc2UgYXJlIGdyYXBoLWxldmVsIG1hY3JvczogdGhlIGVuZ2luZSdzIHBsYW5uZXJcbiAqIHJlY29nbmlzZXMgdGhlbSBhcyBvcmRpbmFyeSBleGVjdXRhYmxlIG5vZGVzICjCpzUuNykgYnV0IHRoZXkgaGF2ZSBub1xuICogYnVpbHQtaW4gZXhlY3V0b3JzIOKAlCBkb3duc3RyZWFtIHByb2plY3RzIChlLmcuIEFMRlJFRCkgcmVnaXN0ZXIgY3VzdG9tXG4gKiBleGVjdXRvcnMgb3IgY29tcGlsZSB0aGVtIGludG8gTWFzdHJhIGNvbXBvc2l0aW9uIEFQSXMgKMKnMjIuMi4yKS5cbiAqXG4gKiBUaGUgdGhyZWUgbG9vcCBraW5kcyAoYGNvcmUubG9vcC5mb3JlYWNoL3doaWxlL3VudGlsYCkgYWxyZWFkeSBoYXZlIGJ1aWx0LWluXG4gKiBleGVjdXRvcnMgKMKnNS45KSBhbmQgYXJlIE5PVCByZWRlY2xhcmVkIGhlcmUuXG4gKi9cbmltcG9ydCB7IE1vZGVsLCBtb2RlbCwgcmVxdWlyZWQgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyB1aWVsZW1lbnQgfSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IGlucHV0LCBub2RlLCBvdXRwdXQgfSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcblxuLyoqXG4gKiBJZiDigJQgY29uZGl0aW9uYWwgYnJhbmNoLiBFdmFsdWF0ZXMgYSBgQ29uZGl0aW9uRXhwcmVzc2lvbmAgKMKnMjIuMykgYW5kXG4gKiByb3V0ZXMgdGhlIGlucHV0IHRvIHRoZSBgdGhlbmAgb3IgYGVsc2VgIG91dHB1dC5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cuaWZcIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5pZlwiLFxuICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgY29sb3I6IFwiI2Y1OWUwYlwiLFxuICBpY29uOiBcInRpLWFycm93cy1zcGxpdC0yXCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwiY29uZGl0aW9uYWxcIiwgXCJicmFuY2hcIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiSWZcIixcbiAgICBkZXNjcmlwdGlvbjogXCJDb25kaXRpb25hbCBicmFuY2guIEV2YWx1YXRlcyB0aGUgY29uZmlndXJlZCBjb25kaXRpb24gYW5kIHJvdXRlcyB0aGUgaW5wdXQgdG8gdGhlIG1hdGNoaW5nIG91dHB1dC5cIixcbiAgICBjb25kaXRpb246IHsgb3A6IFwiZXFcIiwgbGVmdDogeyBjb25zdDogdHJ1ZSB9LCByaWdodDogeyBjb25zdDogdHJ1ZSB9IH0sXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBJZkZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBldmFsdWF0ZVwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pXG4gIHZhbHVlITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJUaGVuXCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dCB3aGVuIGNvbmRpdGlvbiBpcyB0cnVlXCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJ0aGVuXCIgfSlcbiAgdGhlbiE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiRWxzZVwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgd2hlbiBjb25kaXRpb24gaXMgZmFsc2VcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcImVsc2VcIiB9KVxuICBlbHNlITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBTd2l0Y2gg4oCUIG11bHRpLWJyYW5jaC4gUm91dGVzIHRoZSBpbnB1dCB0byBvbmUgb2YgdGhlIGNhc2Ugb3V0cHV0IHBvcnRzXG4gKiBvciBgZGVmYXVsdGAgYmFzZWQgb24gbWF0Y2hpbmcgY29uZGl0aW9ucy4gRWFjaCBjYXNlIGRlZmluZXMgYVxuICoge0BsaW5rIFN3aXRjaENhc2VDb25kaXRpb259IChncmFwaGljYWwgb3IgY29kZSBtb2RlKSBhbmQgYSBkZWRpY2F0ZWRcbiAqIG91dHB1dCBwb3J0LiBDYXNlcyBhcmUgc3RvcmVkIGluIGBtZXRhZGF0YS5zd2l0Y2guY2FzZXNgIGFuZCB0aGVcbiAqIHJlbmRlcmVyIGNyZWF0ZXMgZHluYW1pYyBvdXRwdXQgcG9ydHMgZnJvbSB0aGVtIChERUNBRi0zMiDCpzIyLjIuMikuXG4gKlxuICogVGhlIG5vZGUgZ3Jvd3MgaW4gaGVpZ2h0IGFzIGNhc2VzIGFyZSBhZGRlZC4gRWFjaCBjYXNlIGdldHMgaXRzIG93blxuICogb3V0cHV0IHBvcnQgb24gdGhlIHJpZ2h0IHNpZGUsIGxhYmVsZWQgd2l0aCB0aGUgY2FzZSBsYWJlbC5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cuc3dpdGNoXCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cuc3dpdGNoXCIsXG4gIGNhdGVnb3J5OiBcIkZsb3cgQ29udHJvbFwiLFxuICBjb2xvcjogXCIjZjk3MzE2XCIsXG4gIGljb246IFwidGktYXJyb3dzLXNodWZmbGVcIixcbiAgd2lkdGg6IDEyMCxcbiAgaGVpZ2h0OiAxNDAsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcInN3aXRjaFwiLCBcIm11bHRpLWJyYW5jaFwiXSxcbiAgbWV0YWRhdGE6IHtcbiAgICB0aXRsZTogXCJTd2l0Y2hcIixcbiAgICBkZXNjcmlwdGlvbjogXCJNdWx0aS1icmFuY2ggc3dpdGNoLiBSb3V0ZXMgdGhlIGlucHV0IHRvIHRoZSBmaXJzdCBtYXRjaGluZyBjYXNlIG91dHB1dCwgb3IgdGhlIGRlZmF1bHQgb3V0cHV0LlwiLFxuICAgIHN3aXRjaDoge1xuICAgICAgY2FzZXM6IFtdLFxuICAgICAgZGVmYXVsdFBvcnQ6IFwiZGVmYXVsdFwiLFxuICAgIH0sXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBTd2l0Y2hGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gc3dpdGNoIG9uXCIgfSlcbiAgQGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSlcbiAgdmFsdWUhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIkRlZmF1bHRcIiwgcGxhY2Vob2xkZXI6IFwiRGVmYXVsdCBvdXRwdXQgd2hlbiBubyBjYXNlIG1hdGNoZXNcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcImRlZmF1bHRcIiB9KVxuICBkZWZhdWx0ITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBQYXJhbGxlbCDigJQgc3BsaXRzIGV4ZWN1dGlvbiBpbnRvIGNvbmN1cnJlbnQgYnJhbmNoZXMuXG4gKi9cbkBub2RlKFwiY29yZS5mbG93LnBhcmFsbGVsXCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cucGFyYWxsZWxcIixcbiAgY2F0ZWdvcnk6IFwiRmxvdyBDb250cm9sXCIsXG4gIGNvbG9yOiBcIiMwNmI2ZDRcIixcbiAgaWNvbjogXCJ0aS1hcnJvd3MtdmVydGljYWxcIixcbiAgd2lkdGg6IDk2LFxuICBoZWlnaHQ6IDk2LFxuICBsYWJlbHM6IFtcImZsb3dcIiwgXCJwYXJhbGxlbFwiLCBcImNvbmN1cnJlbnRcIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiUGFyYWxsZWxcIixcbiAgICBkZXNjcmlwdGlvbjogXCJTcGxpdHMgZXhlY3V0aW9uIGludG8gY29uY3VycmVudCBicmFuY2hlcy4gQWxsIGJyYW5jaGVzIHJ1biBpbiBwYXJhbGxlbCBhbmQgb3V0cHV0cyBhcmUgY29sbGVjdGVkLlwiLFxuICAgIGJyYW5jaENvdW50OiAyLFxuICB9LFxufSlcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgUGFyYWxsZWxGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gZmFuIG91dFwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pXG4gIHZhbHVlITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJCcmFuY2hlc1wiLCBwbGFjZWhvbGRlcjogXCJDb2xsZWN0ZWQgYnJhbmNoIG91dHB1dHNcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcImJyYW5jaGVzXCIgfSlcbiAgYnJhbmNoZXMhOiB1bmtub3duW107XG59XG5cbi8qKlxuICogTWVyZ2Ug4oCUIG5vcm1hbGlzZXMgYnJhbmNoL3BhcmFsbGVsIG91dHB1dHMgaW50byBhIHNpbmdsZSBvdXRwdXQuXG4gKi9cbkBub2RlKFwiY29yZS5mbG93Lm1lcmdlXCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cubWVyZ2VcIixcbiAgY2F0ZWdvcnk6IFwiVXRpbGl0eVwiLFxuICBjb2xvcjogXCIjMGQ5NDg4XCIsXG4gIGljb246IFwidGktYXJyb3dzLW1lcmdlXCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwibWVyZ2VcIiwgXCJqb2luXCJdLFxuICBtZXRhZGF0YToge1xuICAgIHRpdGxlOiBcIk1lcmdlXCIsXG4gICAgZGVzY3JpcHRpb246IFwiTWVyZ2VzIG11bHRpcGxlIGJyYW5jaCBvdXRwdXRzIGludG8gYSBzaW5nbGUgbm9ybWFsaXNlZCBvdXRwdXQgb2JqZWN0LlwiLFxuICAgIHN0cmF0ZWd5OiBcImNvbmNhdFwiLFxuICB9LFxufSlcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgTWVyZ2VGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiQnJhbmNoIG91dHB1dHNcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0cyB0byBtZXJnZVwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZXNcIiB9KVxuICB2YWx1ZXMhOiB1bmtub3duW107XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiTWVyZ2VkIG91dHB1dFwiLCBwbGFjZWhvbGRlcjogXCJNZXJnZWQgcmVzdWx0XCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJtZXJnZWRcIiB9KVxuICBtZXJnZWQhOiB1bmtub3duO1xufVxuXG4vKipcbiAqIE1hcCDigJQgdHJhbnNmb3JtcyB0aGUgY3VycmVudCBpbnB1dCBpbnRvIGEgbmV3IG91dHB1dCBvYmplY3QuXG4gKi9cbkBub2RlKFwiY29yZS5mbG93Lm1hcFwiLCB7XG4gIGtpbmQ6IFwiY29yZS5mbG93Lm1hcFwiLFxuICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gIGNvbG9yOiBcIiM4NGNjMTZcIixcbiAgaWNvbjogXCJ0aS1hcnJvd3MtcmlnaHQtbGVmdFwiLFxuICB3aWR0aDogOTYsXG4gIGhlaWdodDogOTYsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcIm1hcFwiLCBcInRyYW5zZm9ybVwiXSxcbiAgbWV0YWRhdGE6IHtcbiAgICB0aXRsZTogXCJNYXBcIixcbiAgICBkZXNjcmlwdGlvbjogXCJUcmFuc2Zvcm1zIHRoZSBjdXJyZW50IGlucHV0IGludG8gYSBuZXcgb3V0cHV0IG9iamVjdCB1c2luZyB0aGUgY29uZmlndXJlZCBtYXBwZXIuXCIsXG4gICAgbWFwcGVyOiB7fSxcbiAgfSxcbn0pXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIE1hcEZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byB0cmFuc2Zvcm1cIiB9KVxuICBAaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KVxuICB2YWx1ZSE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiVHJhbnNmb3JtZWQgb3V0cHV0XCIsIHBsYWNlaG9sZGVyOiBcIk1hcHBlZCByZXN1bHRcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcInJlc3VsdFwiIH0pXG4gIHJlc3VsdCE6IHVua25vd247XG59XG5cbi8qKlxuICogRGVsYXkg4oCUIHBhdXNlcyBleGVjdXRpb24gZm9yIGEgY29uZmlndXJlZCBkdXJhdGlvbi5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cuZGVsYXlcIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5kZWxheVwiLFxuICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gIGNvbG9yOiBcIiNhM2EzYTNcIixcbiAgaWNvbjogXCJ0aS1jbG9jay1ob3VyLTRcIixcbiAgd2lkdGg6IDk2LFxuICBoZWlnaHQ6IDk2LFxuICBsYWJlbHM6IFtcImZsb3dcIiwgXCJkZWxheVwiLCBcIndhaXRcIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiRGVsYXlcIixcbiAgICBkZXNjcmlwdGlvbjogXCJQYXVzZXMgZXhlY3V0aW9uIGZvciB0aGUgY29uZmlndXJlZCBkdXJhdGlvbiAoaW4gbWlsbGlzZWNvbmRzKSwgdGhlbiBmb3J3YXJkcyB0aGUgaW5wdXQgdW5jaGFuZ2VkLlwiLFxuICAgIGR1cmF0aW9uTXM6IDEwMDAsXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBEZWxheUZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBmb3J3YXJkIGFmdGVyIGRlbGF5XCIgfSlcbiAgQGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSlcbiAgdmFsdWUhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIk91dHB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJGb3J3YXJkZWQgdmFsdWVcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSlcbiAgdmFsdWVPdXQhOiB1bmtub3duO1xufVxuXG4vKipcbiAqIEVycm9yIGJvdW5kYXJ5IOKAlCB0cnkvY2F0Y2gvZmluYWxseSB3b3JrZmxvdyBiZWhhdmlvdXIuXG4gKi9cbkBub2RlKFwiY29yZS5mbG93LmVycm9yQm91bmRhcnlcIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5lcnJvckJvdW5kYXJ5XCIsXG4gIGNhdGVnb3J5OiBcIkZsb3cgQ29udHJvbFwiLFxuICBjb2xvcjogXCIjZWY0NDQ0XCIsXG4gIGljb246IFwidGktc2hpZWxkLWNoZWNrXCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwiZXJyb3JcIiwgXCJ0cnktY2F0Y2hcIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiRXJyb3IgYm91bmRhcnlcIixcbiAgICBkZXNjcmlwdGlvbjogXCJXcmFwcyB0aGUgaW5wdXQgaW4gYSB0cnkvY2F0Y2gvZmluYWxseS4gRW1pdHMgdGhlIHJlc3VsdCBvbiBzdWNjZXNzLCBvciB0aGUgZXJyb3Igb24gZmFpbHVyZS5cIixcbiAgICBmaW5hbGx5OiBmYWxzZSxcbiAgfSxcbn0pXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIEVycm9yQm91bmRhcnlGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gZ3VhcmRcIiB9KVxuICBAaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KVxuICB2YWx1ZSE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiUmVzdWx0XCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dCBvbiBzdWNjZXNzXCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJyZXN1bHRcIiB9KVxuICByZXN1bHQhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIkVycm9yXCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dCBvbiBmYWlsdXJlXCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJlcnJvclwiIH0pXG4gIGVycm9yITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBIdW1hbiBhcHByb3ZhbCDigJQgc3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIGEgaHVtYW4gYXBwcm92ZXMgb3IgcmVqZWN0cy5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cuaHVtYW5BcHByb3ZhbFwiLCB7XG4gIGtpbmQ6IFwiY29yZS5mbG93Lmh1bWFuQXBwcm92YWxcIixcbiAgY2F0ZWdvcnk6IFwiRmxvdyBDb250cm9sXCIsXG4gIGNvbG9yOiBcIiNkOTQ2ZWZcIixcbiAgaWNvbjogXCJ0aS11c2VyLWNoZWNrXCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwiYXBwcm92YWxcIiwgXCJzdXNwZW5kXCJdLFxuICBtZXRhZGF0YToge1xuICAgIHRpdGxlOiBcIkh1bWFuIGFwcHJvdmFsXCIsXG4gICAgZGVzY3JpcHRpb246IFwiU3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIGEgaHVtYW4gYXBwcm92ZXMgb3IgcmVqZWN0cy4gRW1pdHMgdGhlIGFwcHJvdmVkIHZhbHVlIG9yIGEgcmVqZWN0aW9uLlwiLFxuICAgIGFwcHJvdmVyczogW10sXG4gICAgdGltZW91dE1zOiA4NjQwMDAwMCxcbiAgfSxcbn0pXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIEh1bWFuQXBwcm92YWxGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgcGVuZGluZyBhcHByb3ZhbFwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pXG4gIHZhbHVlITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJBcHByb3ZlZFwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgd2hlbiBhcHByb3ZlZFwiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwiYXBwcm92ZWRcIiB9KVxuICBhcHByb3ZlZCE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiUmVqZWN0ZWRcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IHdoZW4gcmVqZWN0ZWRcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcInJlamVjdGVkXCIgfSlcbiAgcmVqZWN0ZWQhOiB1bmtub3duO1xufVxuXG4vKipcbiAqIFJldHVybiDigJQgZGVmaW5lcyBhbmQgbm9ybWFsaXNlcyB0aGUgZmluYWwgd29ya2Zsb3cgb3V0cHV0LlxuICovXG5Abm9kZShcImNvcmUuZmxvdy5yZXR1cm5cIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5yZXR1cm5cIixcbiAgY2F0ZWdvcnk6IFwiVXRpbGl0eVwiLFxuICBjb2xvcjogXCIjMjJjNTVlXCIsXG4gIGljb246IFwidGktYXJyb3ctYmFjay11cFwiLFxuICB3aWR0aDogOTYsXG4gIGhlaWdodDogOTYsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcInJldHVyblwiLCBcIm91dHB1dFwiXSxcbiAgbWV0YWRhdGE6IHtcbiAgICB0aXRsZTogXCJSZXR1cm5cIixcbiAgICBkZXNjcmlwdGlvbjogXCJOb3JtYWxpc2VzIHRoZSBpbnB1dCBpbnRvIHRoZSBmaW5hbCB3b3JrZmxvdyBvdXRwdXQgb2JqZWN0LlwiLFxuICAgIG91dHB1dFNjaGVtYToge30sXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBSZXR1cm5GbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gbm9ybWFsaXNlXCIgfSlcbiAgQGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSlcbiAgdmFsdWUhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIlJldHVybmVkIG91dHB1dFwiLCBwbGFjZWhvbGRlcjogXCJOb3JtYWxpc2VkIG91dHB1dFwiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwicmVzdWx0XCIgfSlcbiAgcmVzdWx0ITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBDb2RlIOKAlCBzYW5kYm94ZWQgSlMvVFMgY29kZSBleGVjdXRpb24gKEFMRlJFRC01IMKnNykuXG4gKlxuICogVGhlIGVuZ2luZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIHNhbmRib3ggZGlyZWN0bHkgKMKnMjIuNCkuIEEgZnV0dXJlXG4gKiBleGVjdXRvciBtYXkgd3JhcCB0aGUgYENvZGVTYW5kYm94YCBjb250cmFjdCAoQUxGUkVELTUgwqc3LjE3KSBhcyBhXG4gKiBwbHVnZ2FibGUgZXhlY3V0b3IuIFRoZSBwbGFjZWhvbGRlciBzeW50YXggKGB7eyAkaW5wdXQgfX1gLCBge3sgJGl0ZW0gfX1gLFxuICogYHt7ICRpbmRleCB9fWAsIGB7eyAkdmFycyB9fWAsIGB7eyAkbm9kZVtcIk5hbWVcIl0ub3V0cHV0IH19YCkgaXMgTWFzdHJhLVxuICogYWdub3N0aWMgYW5kIGxpdmVzIGluIHRoZSBkb3duc3RyZWFtIHByb2plY3QncyBgbW9kdWxlcy9jb3JlYCAoQUxGUkVELTYpLlxuICovXG5Abm9kZShcImNvcmUuZmxvdy5jb2RlXCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cuY29kZVwiLFxuICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gIGNvbG9yOiBcIiM3YzNhZWRcIixcbiAgaWNvbjogXCJ0aS1jb2RlXCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwiY29kZVwiLCBcInNhbmRib3hcIiwgXCJ0cmFuc2Zvcm1cIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiQ29kZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlJ1bnMgdXNlci1hdXRob3JlZCBKUy9UUyBpbiBhIHJlc3RyaWN0ZWQgVk0gc2FuZGJveC4gU3VwcG9ydHMgcGxhY2Vob2xkZXIgc3ludGF4IGZvciB3b3JrZmxvdyBkYXRhIHJlZmVyZW5jZXMuXCIsXG4gICAgY29kZTogXCJcIixcbiAgICBsYW5ndWFnZTogXCJqYXZhc2NyaXB0XCIsXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBDb2RlRmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0XCIsIHBsYWNlaG9sZGVyOiBcIklucHV0IG9iamVjdCAoYWNjZXNzaWJsZSBhcyAkaW5wdXQpXCIgfSlcbiAgQGlucHV0KHsgaGFuZGxlOiBcImlucHV0XCIgfSlcbiAgaW5wdXQhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIlJlc3VsdFwiLCBwbGFjZWhvbGRlcjogXCJDb2RlIGV4ZWN1dGlvbiByZXN1bHRcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcInJlc3VsdFwiIH0pXG4gIHJlc3VsdCE6IHVua25vd247XG59XG5cbi8qKlxuICogQWxsIGJ1aWx0LWluIGZsb3ctY29udHJvbCBub2RlIGNvbnN0cnVjdG9ycy5cbiAqL1xuZXhwb3J0IGNvbnN0IEdSQVBIX0ZMT1dfQ09OVFJPTF9OT0RFUyA9IFtcbiAgSWZGbG93Tm9kZSxcbiAgU3dpdGNoRmxvd05vZGUsXG4gIFBhcmFsbGVsRmxvd05vZGUsXG4gIE1lcmdlRmxvd05vZGUsXG4gIE1hcEZsb3dOb2RlLFxuICBEZWxheUZsb3dOb2RlLFxuICBFcnJvckJvdW5kYXJ5Rmxvd05vZGUsXG4gIEh1bWFuQXBwcm92YWxGbG93Tm9kZSxcbiAgUmV0dXJuRmxvd05vZGUsXG4gIENvZGVGbG93Tm9kZSxcbl0gYXMgY29uc3Q7XG4iXX0=
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @module integrations/graph/nodes
3
+ * @summary Production node kind declarations (DECAF-32 §22.2).
4
+ * @description Canonical `@node`-decorated classes for the ALFRED-5 node kind
5
+ * taxonomy. These are the framework's built-in node definitions — triggers
6
+ * (§22.2.1), flow-control/utility nodes (§22.2.2–22.2.3), and the Agent node
7
+ * (§21.3). The three loop kinds (`core.loop.foreach/while/until`) already have
8
+ * built-in executors (§5.9) and are not redeclared here.
9
+ *
10
+ * Consumers (for-angular, ALFRED, etc.) import these declarations to populate
11
+ * node palettes, registries, and reference snapshots.
12
+ */
13
+ export * from "./category-styles.js";
14
+ export * from "./triggers.js";
15
+ export * from "./flow-control.js";
16
+ export * from "./agent.js";
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ3JhcGgvbm9kZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxxQ0FBa0M7QUFDbEMsOEJBQTJCO0FBQzNCLGtDQUErQjtBQUMvQiwyQkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL25vZGVzXG4gKiBAc3VtbWFyeSBQcm9kdWN0aW9uIG5vZGUga2luZCBkZWNsYXJhdGlvbnMgKERFQ0FGLTMyIMKnMjIuMikuXG4gKiBAZGVzY3JpcHRpb24gQ2Fub25pY2FsIGBAbm9kZWAtZGVjb3JhdGVkIGNsYXNzZXMgZm9yIHRoZSBBTEZSRUQtNSBub2RlIGtpbmRcbiAqIHRheG9ub215LiBUaGVzZSBhcmUgdGhlIGZyYW1ld29yaydzIGJ1aWx0LWluIG5vZGUgZGVmaW5pdGlvbnMg4oCUIHRyaWdnZXJzXG4gKiAowqcyMi4yLjEpLCBmbG93LWNvbnRyb2wvdXRpbGl0eSBub2RlcyAowqcyMi4yLjLigJMyMi4yLjMpLCBhbmQgdGhlIEFnZW50IG5vZGVcbiAqICjCpzIxLjMpLiBUaGUgdGhyZWUgbG9vcCBraW5kcyAoYGNvcmUubG9vcC5mb3JlYWNoL3doaWxlL3VudGlsYCkgYWxyZWFkeSBoYXZlXG4gKiBidWlsdC1pbiBleGVjdXRvcnMgKMKnNS45KSBhbmQgYXJlIG5vdCByZWRlY2xhcmVkIGhlcmUuXG4gKlxuICogQ29uc3VtZXJzIChmb3ItYW5ndWxhciwgQUxGUkVELCBldGMuKSBpbXBvcnQgdGhlc2UgZGVjbGFyYXRpb25zIHRvIHBvcHVsYXRlXG4gKiBub2RlIHBhbGV0dGVzLCByZWdpc3RyaWVzLCBhbmQgcmVmZXJlbmNlIHNuYXBzaG90cy5cbiAqL1xuZXhwb3J0ICogZnJvbSBcIi4vY2F0ZWdvcnktc3R5bGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90cmlnZ2Vyc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZmxvdy1jb250cm9sXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hZ2VudFwiO1xuIl19