@xyne/workflow-sdk 1.0.0

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 (310) hide show
  1. package/README.md +36 -0
  2. package/dist/agents/agent-step.d.ts +152 -0
  3. package/dist/agents/agent-step.d.ts.map +1 -0
  4. package/dist/agents/agent-step.js +403 -0
  5. package/dist/agents/agent-step.js.map +1 -0
  6. package/dist/agents/base-runtime.d.ts +38 -0
  7. package/dist/agents/base-runtime.d.ts.map +1 -0
  8. package/dist/agents/base-runtime.js +21 -0
  9. package/dist/agents/base-runtime.js.map +1 -0
  10. package/dist/agents/index.d.ts +12 -0
  11. package/dist/agents/index.d.ts.map +1 -0
  12. package/dist/agents/index.js +17 -0
  13. package/dist/agents/index.js.map +1 -0
  14. package/dist/agents/interceptor.d.ts +19 -0
  15. package/dist/agents/interceptor.d.ts.map +1 -0
  16. package/dist/agents/interceptor.js +21 -0
  17. package/dist/agents/interceptor.js.map +1 -0
  18. package/dist/agents/interceptors/approval-gate.d.ts +14 -0
  19. package/dist/agents/interceptors/approval-gate.d.ts.map +1 -0
  20. package/dist/agents/interceptors/approval-gate.js +19 -0
  21. package/dist/agents/interceptors/approval-gate.js.map +1 -0
  22. package/dist/agents/interceptors/tool-logger.d.ts +15 -0
  23. package/dist/agents/interceptors/tool-logger.d.ts.map +1 -0
  24. package/dist/agents/interceptors/tool-logger.js +23 -0
  25. package/dist/agents/interceptors/tool-logger.js.map +1 -0
  26. package/dist/agents/pi-mono-runtime.d.ts +88 -0
  27. package/dist/agents/pi-mono-runtime.d.ts.map +1 -0
  28. package/dist/agents/pi-mono-runtime.js +129 -0
  29. package/dist/agents/pi-mono-runtime.js.map +1 -0
  30. package/dist/agents/tool-registry.d.ts +25 -0
  31. package/dist/agents/tool-registry.d.ts.map +1 -0
  32. package/dist/agents/tool-registry.js +47 -0
  33. package/dist/agents/tool-registry.js.map +1 -0
  34. package/dist/agents/tool-types.d.ts +25 -0
  35. package/dist/agents/tool-types.d.ts.map +1 -0
  36. package/dist/agents/tool-types.js +9 -0
  37. package/dist/agents/tool-types.js.map +1 -0
  38. package/dist/agents/types.d.ts +91 -0
  39. package/dist/agents/types.d.ts.map +1 -0
  40. package/dist/agents/types.js +12 -0
  41. package/dist/agents/types.js.map +1 -0
  42. package/dist/builder/index.d.ts +30 -0
  43. package/dist/builder/index.d.ts.map +1 -0
  44. package/dist/builder/index.js +32 -0
  45. package/dist/builder/index.js.map +1 -0
  46. package/dist/client/index.d.ts +19 -0
  47. package/dist/client/index.d.ts.map +1 -0
  48. package/dist/client/index.js +18 -0
  49. package/dist/client/index.js.map +1 -0
  50. package/dist/client/types.d.ts +128 -0
  51. package/dist/client/types.d.ts.map +1 -0
  52. package/dist/client/types.js +10 -0
  53. package/dist/client/types.js.map +1 -0
  54. package/dist/client/workflow-client.d.ts +15 -0
  55. package/dist/client/workflow-client.d.ts.map +1 -0
  56. package/dist/client/workflow-client.js +293 -0
  57. package/dist/client/workflow-client.js.map +1 -0
  58. package/dist/common/attachment.d.ts +31 -0
  59. package/dist/common/attachment.d.ts.map +1 -0
  60. package/dist/common/attachment.js +21 -0
  61. package/dist/common/attachment.js.map +1 -0
  62. package/dist/common/executable-check.d.ts +42 -0
  63. package/dist/common/executable-check.d.ts.map +1 -0
  64. package/dist/common/executable-check.js +115 -0
  65. package/dist/common/executable-check.js.map +1 -0
  66. package/dist/common/index.d.ts +21 -0
  67. package/dist/common/index.d.ts.map +1 -0
  68. package/dist/common/index.js +19 -0
  69. package/dist/common/index.js.map +1 -0
  70. package/dist/common/resume-payload.d.ts +34 -0
  71. package/dist/common/resume-payload.d.ts.map +1 -0
  72. package/dist/common/resume-payload.js +12 -0
  73. package/dist/common/resume-payload.js.map +1 -0
  74. package/dist/engine/available-context.d.ts +29 -0
  75. package/dist/engine/available-context.d.ts.map +1 -0
  76. package/dist/engine/available-context.js +66 -0
  77. package/dist/engine/available-context.js.map +1 -0
  78. package/dist/engine/condition-evaluator.d.ts +13 -0
  79. package/dist/engine/condition-evaluator.d.ts.map +1 -0
  80. package/dist/engine/condition-evaluator.js +92 -0
  81. package/dist/engine/condition-evaluator.js.map +1 -0
  82. package/dist/engine/config-validator.d.ts +25 -0
  83. package/dist/engine/config-validator.d.ts.map +1 -0
  84. package/dist/engine/config-validator.js +316 -0
  85. package/dist/engine/config-validator.js.map +1 -0
  86. package/dist/engine/pause-step.d.ts +20 -0
  87. package/dist/engine/pause-step.d.ts.map +1 -0
  88. package/dist/engine/pause-step.js +24 -0
  89. package/dist/engine/pause-step.js.map +1 -0
  90. package/dist/engine/service-registry.d.ts +49 -0
  91. package/dist/engine/service-registry.d.ts.map +1 -0
  92. package/dist/engine/service-registry.js +76 -0
  93. package/dist/engine/service-registry.js.map +1 -0
  94. package/dist/engine/variable-resolver.d.ts +29 -0
  95. package/dist/engine/variable-resolver.d.ts.map +1 -0
  96. package/dist/engine/variable-resolver.js +130 -0
  97. package/dist/engine/variable-resolver.js.map +1 -0
  98. package/dist/engine/workflow-executor.d.ts +96 -0
  99. package/dist/engine/workflow-executor.d.ts.map +1 -0
  100. package/dist/engine/workflow-executor.js +837 -0
  101. package/dist/engine/workflow-executor.js.map +1 -0
  102. package/dist/index.d.ts +57 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +56 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/persistence/in-memory-adapter.d.ts +138 -0
  107. package/dist/persistence/in-memory-adapter.d.ts.map +1 -0
  108. package/dist/persistence/in-memory-adapter.js +315 -0
  109. package/dist/persistence/in-memory-adapter.js.map +1 -0
  110. package/dist/persistence/types.d.ts +214 -0
  111. package/dist/persistence/types.d.ts.map +1 -0
  112. package/dist/persistence/types.js +8 -0
  113. package/dist/persistence/types.js.map +1 -0
  114. package/dist/router/types.d.ts +57 -0
  115. package/dist/router/types.d.ts.map +1 -0
  116. package/dist/router/types.js +8 -0
  117. package/dist/router/types.js.map +1 -0
  118. package/dist/router/workflow-router.d.ts +26 -0
  119. package/dist/router/workflow-router.d.ts.map +1 -0
  120. package/dist/router/workflow-router.js +611 -0
  121. package/dist/router/workflow-router.js.map +1 -0
  122. package/dist/runtime/execution-event-bus.d.ts +38 -0
  123. package/dist/runtime/execution-event-bus.d.ts.map +1 -0
  124. package/dist/runtime/execution-event-bus.js +87 -0
  125. package/dist/runtime/execution-event-bus.js.map +1 -0
  126. package/dist/runtime/types.d.ts +129 -0
  127. package/dist/runtime/types.d.ts.map +1 -0
  128. package/dist/runtime/types.js +5 -0
  129. package/dist/runtime/types.js.map +1 -0
  130. package/dist/runtime/workflow-runtime.d.ts +256 -0
  131. package/dist/runtime/workflow-runtime.d.ts.map +1 -0
  132. package/dist/runtime/workflow-runtime.js +699 -0
  133. package/dist/runtime/workflow-runtime.js.map +1 -0
  134. package/dist/steps/base-step.d.ts +204 -0
  135. package/dist/steps/base-step.d.ts.map +1 -0
  136. package/dist/steps/base-step.js +69 -0
  137. package/dist/steps/base-step.js.map +1 -0
  138. package/dist/steps/builtin/code.step.d.ts +95 -0
  139. package/dist/steps/builtin/code.step.d.ts.map +1 -0
  140. package/dist/steps/builtin/code.step.js +122 -0
  141. package/dist/steps/builtin/code.step.js.map +1 -0
  142. package/dist/steps/builtin/conditional.step.d.ts +146 -0
  143. package/dist/steps/builtin/conditional.step.d.ts.map +1 -0
  144. package/dist/steps/builtin/conditional.step.js +71 -0
  145. package/dist/steps/builtin/conditional.step.js.map +1 -0
  146. package/dist/steps/builtin/dedup.step.d.ts +65 -0
  147. package/dist/steps/builtin/dedup.step.d.ts.map +1 -0
  148. package/dist/steps/builtin/dedup.step.js +61 -0
  149. package/dist/steps/builtin/dedup.step.js.map +1 -0
  150. package/dist/steps/builtin/http-request.step.d.ts +928 -0
  151. package/dist/steps/builtin/http-request.step.d.ts.map +1 -0
  152. package/dist/steps/builtin/http-request.step.js +570 -0
  153. package/dist/steps/builtin/http-request.step.js.map +1 -0
  154. package/dist/steps/builtin/loop.step.d.ts +100 -0
  155. package/dist/steps/builtin/loop.step.d.ts.map +1 -0
  156. package/dist/steps/builtin/loop.step.js +79 -0
  157. package/dist/steps/builtin/loop.step.js.map +1 -0
  158. package/dist/steps/builtin/parallel.step.d.ts +208 -0
  159. package/dist/steps/builtin/parallel.step.d.ts.map +1 -0
  160. package/dist/steps/builtin/parallel.step.js +249 -0
  161. package/dist/steps/builtin/parallel.step.js.map +1 -0
  162. package/dist/steps/builtin/switch.step.d.ts +200 -0
  163. package/dist/steps/builtin/switch.step.d.ts.map +1 -0
  164. package/dist/steps/builtin/switch.step.js +92 -0
  165. package/dist/steps/builtin/switch.step.js.map +1 -0
  166. package/dist/steps/builtin/transform.step.d.ts +247 -0
  167. package/dist/steps/builtin/transform.step.d.ts.map +1 -0
  168. package/dist/steps/builtin/transform.step.js +135 -0
  169. package/dist/steps/builtin/transform.step.js.map +1 -0
  170. package/dist/steps/builtin/wait.step.d.ts +921 -0
  171. package/dist/steps/builtin/wait.step.d.ts.map +1 -0
  172. package/dist/steps/builtin/wait.step.js +211 -0
  173. package/dist/steps/builtin/wait.step.js.map +1 -0
  174. package/dist/steps/step-registry.d.ts +64 -0
  175. package/dist/steps/step-registry.d.ts.map +1 -0
  176. package/dist/steps/step-registry.js +102 -0
  177. package/dist/steps/step-registry.js.map +1 -0
  178. package/dist/storage/in-memory-adapter.d.ts +25 -0
  179. package/dist/storage/in-memory-adapter.d.ts.map +1 -0
  180. package/dist/storage/in-memory-adapter.js +41 -0
  181. package/dist/storage/in-memory-adapter.js.map +1 -0
  182. package/dist/storage/types.d.ts +53 -0
  183. package/dist/storage/types.d.ts.map +1 -0
  184. package/dist/storage/types.js +13 -0
  185. package/dist/storage/types.js.map +1 -0
  186. package/dist/testing/index.d.ts +10 -0
  187. package/dist/testing/index.d.ts.map +1 -0
  188. package/dist/testing/index.js +10 -0
  189. package/dist/testing/index.js.map +1 -0
  190. package/dist/testing/mock-context.d.ts +13 -0
  191. package/dist/testing/mock-context.d.ts.map +1 -0
  192. package/dist/testing/mock-context.js +21 -0
  193. package/dist/testing/mock-context.js.map +1 -0
  194. package/dist/testing/mock-step-context.d.ts +47 -0
  195. package/dist/testing/mock-step-context.d.ts.map +1 -0
  196. package/dist/testing/mock-step-context.js +59 -0
  197. package/dist/testing/mock-step-context.js.map +1 -0
  198. package/dist/triggers/base-trigger.d.ts +58 -0
  199. package/dist/triggers/base-trigger.d.ts.map +1 -0
  200. package/dist/triggers/base-trigger.js +37 -0
  201. package/dist/triggers/base-trigger.js.map +1 -0
  202. package/dist/triggers/builtin/default-cron-trigger.d.ts +44 -0
  203. package/dist/triggers/builtin/default-cron-trigger.d.ts.map +1 -0
  204. package/dist/triggers/builtin/default-cron-trigger.js +31 -0
  205. package/dist/triggers/builtin/default-cron-trigger.js.map +1 -0
  206. package/dist/triggers/builtin/default-event-trigger.d.ts +32 -0
  207. package/dist/triggers/builtin/default-event-trigger.d.ts.map +1 -0
  208. package/dist/triggers/builtin/default-event-trigger.js +21 -0
  209. package/dist/triggers/builtin/default-event-trigger.js.map +1 -0
  210. package/dist/triggers/builtin/default-manual-trigger.d.ts +119 -0
  211. package/dist/triggers/builtin/default-manual-trigger.d.ts.map +1 -0
  212. package/dist/triggers/builtin/default-manual-trigger.js +64 -0
  213. package/dist/triggers/builtin/default-manual-trigger.js.map +1 -0
  214. package/dist/triggers/builtin/default-webhook-trigger.d.ts +72 -0
  215. package/dist/triggers/builtin/default-webhook-trigger.d.ts.map +1 -0
  216. package/dist/triggers/builtin/default-webhook-trigger.js +91 -0
  217. package/dist/triggers/builtin/default-webhook-trigger.js.map +1 -0
  218. package/dist/triggers/cron-trigger.d.ts +52 -0
  219. package/dist/triggers/cron-trigger.d.ts.map +1 -0
  220. package/dist/triggers/cron-trigger.js +15 -0
  221. package/dist/triggers/cron-trigger.js.map +1 -0
  222. package/dist/triggers/event-trigger.d.ts +14 -0
  223. package/dist/triggers/event-trigger.d.ts.map +1 -0
  224. package/dist/triggers/event-trigger.js +13 -0
  225. package/dist/triggers/event-trigger.js.map +1 -0
  226. package/dist/triggers/manual-trigger.d.ts +11 -0
  227. package/dist/triggers/manual-trigger.d.ts.map +1 -0
  228. package/dist/triggers/manual-trigger.js +10 -0
  229. package/dist/triggers/manual-trigger.js.map +1 -0
  230. package/dist/triggers/trigger-registry.d.ts +48 -0
  231. package/dist/triggers/trigger-registry.d.ts.map +1 -0
  232. package/dist/triggers/trigger-registry.js +81 -0
  233. package/dist/triggers/trigger-registry.js.map +1 -0
  234. package/dist/triggers/webhook-trigger.d.ts +54 -0
  235. package/dist/triggers/webhook-trigger.d.ts.map +1 -0
  236. package/dist/triggers/webhook-trigger.js +13 -0
  237. package/dist/triggers/webhook-trigger.js.map +1 -0
  238. package/dist/types/attachment.d.ts +23 -0
  239. package/dist/types/attachment.d.ts.map +1 -0
  240. package/dist/types/attachment.js +2 -0
  241. package/dist/types/attachment.js.map +1 -0
  242. package/dist/types/categories.d.ts +14 -0
  243. package/dist/types/categories.d.ts.map +1 -0
  244. package/dist/types/categories.js +10 -0
  245. package/dist/types/categories.js.map +1 -0
  246. package/dist/types/context.d.ts +61 -0
  247. package/dist/types/context.d.ts.map +1 -0
  248. package/dist/types/context.js +2 -0
  249. package/dist/types/context.js.map +1 -0
  250. package/dist/types/index.d.ts +18 -0
  251. package/dist/types/index.d.ts.map +1 -0
  252. package/dist/types/index.js +12 -0
  253. package/dist/types/index.js.map +1 -0
  254. package/dist/types/known-types.d.ts +34 -0
  255. package/dist/types/known-types.d.ts.map +1 -0
  256. package/dist/types/known-types.js +49 -0
  257. package/dist/types/known-types.js.map +1 -0
  258. package/dist/types/operators.d.ts +20 -0
  259. package/dist/types/operators.d.ts.map +1 -0
  260. package/dist/types/operators.js +27 -0
  261. package/dist/types/operators.js.map +1 -0
  262. package/dist/types/pause-path.d.ts +23 -0
  263. package/dist/types/pause-path.d.ts.map +1 -0
  264. package/dist/types/pause-path.js +2 -0
  265. package/dist/types/pause-path.js.map +1 -0
  266. package/dist/types/pause-state.d.ts +100 -0
  267. package/dist/types/pause-state.d.ts.map +1 -0
  268. package/dist/types/pause-state.js +15 -0
  269. package/dist/types/pause-state.js.map +1 -0
  270. package/dist/types/resume-payload.d.ts +34 -0
  271. package/dist/types/resume-payload.d.ts.map +1 -0
  272. package/dist/types/resume-payload.js +12 -0
  273. package/dist/types/resume-payload.js.map +1 -0
  274. package/dist/types/status.d.ts +27 -0
  275. package/dist/types/status.d.ts.map +1 -0
  276. package/dist/types/status.js +41 -0
  277. package/dist/types/status.js.map +1 -0
  278. package/dist/types/step-events.d.ts +22 -0
  279. package/dist/types/step-events.d.ts.map +1 -0
  280. package/dist/types/step-events.js +8 -0
  281. package/dist/types/step-events.js.map +1 -0
  282. package/dist/types/step-types.d.ts +12 -0
  283. package/dist/types/step-types.d.ts.map +1 -0
  284. package/dist/types/step-types.js +2 -0
  285. package/dist/types/step-types.js.map +1 -0
  286. package/dist/types/trigger-types.d.ts +12 -0
  287. package/dist/types/trigger-types.d.ts.map +1 -0
  288. package/dist/types/trigger-types.js +2 -0
  289. package/dist/types/trigger-types.js.map +1 -0
  290. package/dist/types/validation.d.ts +19 -0
  291. package/dist/types/validation.d.ts.map +1 -0
  292. package/dist/types/validation.js +11 -0
  293. package/dist/types/validation.js.map +1 -0
  294. package/dist/types/workflow-config.d.ts +122 -0
  295. package/dist/types/workflow-config.d.ts.map +1 -0
  296. package/dist/types/workflow-config.js +71 -0
  297. package/dist/types/workflow-config.js.map +1 -0
  298. package/dist/util/executable-check.d.ts +42 -0
  299. package/dist/util/executable-check.d.ts.map +1 -0
  300. package/dist/util/executable-check.js +115 -0
  301. package/dist/util/executable-check.js.map +1 -0
  302. package/dist/util/schema-convert.d.ts +14 -0
  303. package/dist/util/schema-convert.d.ts.map +1 -0
  304. package/dist/util/schema-convert.js +16 -0
  305. package/dist/util/schema-convert.js.map +1 -0
  306. package/dist/util/variable-ref.d.ts +52 -0
  307. package/dist/util/variable-ref.d.ts.map +1 -0
  308. package/dist/util/variable-ref.js +89 -0
  309. package/dist/util/variable-ref.js.map +1 -0
  310. package/package.json +97 -0
@@ -0,0 +1,146 @@
1
+ /**
2
+ * CONDITIONAL step — branch on a recursive {@link Condition} AST.
3
+ *
4
+ * BaseControlFlowStep with two branches: `if_true` and `if_false`.
5
+ *
6
+ * evaluator.evaluate(config.condition, ctx.workflow)
7
+ * true → walk `if_true` → output.branch = 'if_true'
8
+ * false → walk `if_false` → output.branch = 'if_false'
9
+ * (no-op when `if_false` is omitted → output.branch = 'none')
10
+ *
11
+ * The condition evaluator + variable resolver already understand `{{...}}`
12
+ * refs and the operator catalog, so a leaf condition like
13
+ *
14
+ * { variable: 'steps.fetch.output.status', operator: '==', value: 200 }
15
+ *
16
+ * works without any per-step parsing here.
17
+ *
18
+ * Pause/resume inside either branch is handled by the executor's
19
+ * `walkBranchSteps` — same mechanism the PARALLEL and LOOP steps rely on.
20
+ */
21
+ import { z } from 'zod';
22
+ import { BaseControlFlowStep } from '../base-step.js';
23
+ import type { ControlFlowExecutionContext } from '../base-step.js';
24
+ import { BuiltinStepType } from '../../types/known-types.js';
25
+ import type { WorkflowStepConfig } from '../../types/workflow-config.js';
26
+ export declare const ConditionalStepConfigSchema: z.ZodObject<{
27
+ condition: z.ZodType<import("../../types/workflow-config.js").Condition, z.ZodTypeDef, import("../../types/workflow-config.js").Condition>;
28
+ if_true: z.ZodArray<z.ZodObject<{
29
+ id: z.ZodString;
30
+ type: z.ZodString;
31
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
32
+ id: z.ZodString;
33
+ type: z.ZodString;
34
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
35
+ id: z.ZodString;
36
+ type: z.ZodString;
37
+ }, z.ZodTypeAny, "passthrough">>, "many">;
38
+ if_false: z.ZodOptional<z.ZodArray<z.ZodObject<{
39
+ id: z.ZodString;
40
+ type: z.ZodString;
41
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
42
+ id: z.ZodString;
43
+ type: z.ZodString;
44
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
45
+ id: z.ZodString;
46
+ type: z.ZodString;
47
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
48
+ }, "strip", z.ZodTypeAny, {
49
+ condition: import("../../types/workflow-config.js").Condition;
50
+ if_true: z.objectOutputType<{
51
+ id: z.ZodString;
52
+ type: z.ZodString;
53
+ }, z.ZodTypeAny, "passthrough">[];
54
+ if_false?: z.objectOutputType<{
55
+ id: z.ZodString;
56
+ type: z.ZodString;
57
+ }, z.ZodTypeAny, "passthrough">[] | undefined;
58
+ }, {
59
+ condition: import("../../types/workflow-config.js").Condition;
60
+ if_true: z.objectInputType<{
61
+ id: z.ZodString;
62
+ type: z.ZodString;
63
+ }, z.ZodTypeAny, "passthrough">[];
64
+ if_false?: z.objectInputType<{
65
+ id: z.ZodString;
66
+ type: z.ZodString;
67
+ }, z.ZodTypeAny, "passthrough">[] | undefined;
68
+ }>;
69
+ export type ConditionalStepConfig = z.infer<typeof ConditionalStepConfigSchema>;
70
+ export interface ConditionalStepOutput extends Record<string, unknown> {
71
+ /** Which branch executed. `'none'` when condition was false and `if_false` was omitted. */
72
+ branch: 'if_true' | 'if_false' | 'none';
73
+ /** The boolean result of evaluating the condition. */
74
+ evaluated: boolean;
75
+ }
76
+ export declare class ConditionalStep extends BaseControlFlowStep<typeof ConditionalStepConfigSchema, ConditionalStepOutput> {
77
+ readonly type = BuiltinStepType.CONDITIONAL;
78
+ readonly name = "Conditional";
79
+ readonly description = "Branch execution based on a condition";
80
+ readonly configSchema: z.ZodObject<{
81
+ condition: z.ZodType<import("../../types/workflow-config.js").Condition, z.ZodTypeDef, import("../../types/workflow-config.js").Condition>;
82
+ if_true: z.ZodArray<z.ZodObject<{
83
+ id: z.ZodString;
84
+ type: z.ZodString;
85
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
86
+ id: z.ZodString;
87
+ type: z.ZodString;
88
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
89
+ id: z.ZodString;
90
+ type: z.ZodString;
91
+ }, z.ZodTypeAny, "passthrough">>, "many">;
92
+ if_false: z.ZodOptional<z.ZodArray<z.ZodObject<{
93
+ id: z.ZodString;
94
+ type: z.ZodString;
95
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
96
+ id: z.ZodString;
97
+ type: z.ZodString;
98
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
99
+ id: z.ZodString;
100
+ type: z.ZodString;
101
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
102
+ }, "strip", z.ZodTypeAny, {
103
+ condition: import("../../types/workflow-config.js").Condition;
104
+ if_true: z.objectOutputType<{
105
+ id: z.ZodString;
106
+ type: z.ZodString;
107
+ }, z.ZodTypeAny, "passthrough">[];
108
+ if_false?: z.objectOutputType<{
109
+ id: z.ZodString;
110
+ type: z.ZodString;
111
+ }, z.ZodTypeAny, "passthrough">[] | undefined;
112
+ }, {
113
+ condition: import("../../types/workflow-config.js").Condition;
114
+ if_true: z.objectInputType<{
115
+ id: z.ZodString;
116
+ type: z.ZodString;
117
+ }, z.ZodTypeAny, "passthrough">[];
118
+ if_false?: z.objectInputType<{
119
+ id: z.ZodString;
120
+ type: z.ZodString;
121
+ }, z.ZodTypeAny, "passthrough">[] | undefined;
122
+ }>;
123
+ readonly outputSchema: z.ZodObject<{
124
+ branch: z.ZodEnum<["if_true", "if_false", "none"]>;
125
+ evaluated: z.ZodBoolean;
126
+ }, "strip", z.ZodTypeAny, {
127
+ branch: "none" | "if_true" | "if_false";
128
+ evaluated: boolean;
129
+ }, {
130
+ branch: "none" | "if_true" | "if_false";
131
+ evaluated: boolean;
132
+ }>;
133
+ readonly category: "control";
134
+ readonly icon = "fork";
135
+ readonly declaredOutputs: readonly [{
136
+ readonly key: "if_true";
137
+ readonly label: "When true";
138
+ }, {
139
+ readonly key: "if_false";
140
+ readonly label: "When false";
141
+ }];
142
+ /** Allows config-validator to recursively validate nested branches. */
143
+ getBranches(config: Record<string, unknown>): Record<string, WorkflowStepConfig[]>;
144
+ execute(config: ConditionalStepConfig, ctx: ControlFlowExecutionContext): Promise<ConditionalStepOutput>;
145
+ }
146
+ //# sourceMappingURL=conditional.step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditional.step.d.ts","sourceRoot":"","sources":["../../../src/steps/builtin/conditional.step.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAMzE,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAStC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAIhF,MAAM,WAAW,qBAAsB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpE,2FAA2F;IAC3F,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACxC,sDAAsD;IACtD,SAAS,EAAE,OAAO,CAAC;CACpB;AASD,qBAAa,eAAgB,SAAQ,mBAAmB,CACtD,OAAO,2BAA2B,EAClC,qBAAqB,CACtB;IACC,SAAkB,IAAI,+BAA+B;IACrD,SAAkB,IAAI,iBAAiB;IACvC,SAAkB,WAAW,2CAA2C;IACxE,SAAkB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAA+B;IAC7D,SAAkB,YAAY;;;;;;;;;OAA+B;IAC7D,SAAkB,QAAQ,EAAG,SAAS,CAAU;IAChD,SAAkB,IAAI,UAAU;IAChC,SAAkB,eAAe;;;;;;OAGtB;IAEX,uEAAuE;IAC9D,WAAW,CAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAOxB,OAAO,CACpB,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,2BAA2B,GAC/B,OAAO,CAAC,qBAAqB,CAAC;CAwBlC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * CONDITIONAL step — branch on a recursive {@link Condition} AST.
3
+ *
4
+ * BaseControlFlowStep with two branches: `if_true` and `if_false`.
5
+ *
6
+ * evaluator.evaluate(config.condition, ctx.workflow)
7
+ * true → walk `if_true` → output.branch = 'if_true'
8
+ * false → walk `if_false` → output.branch = 'if_false'
9
+ * (no-op when `if_false` is omitted → output.branch = 'none')
10
+ *
11
+ * The condition evaluator + variable resolver already understand `{{...}}`
12
+ * refs and the operator catalog, so a leaf condition like
13
+ *
14
+ * { variable: 'steps.fetch.output.status', operator: '==', value: 200 }
15
+ *
16
+ * works without any per-step parsing here.
17
+ *
18
+ * Pause/resume inside either branch is handled by the executor's
19
+ * `walkBranchSteps` — same mechanism the PARALLEL and LOOP steps rely on.
20
+ */
21
+ import { z } from 'zod';
22
+ import { BaseControlFlowStep } from '../base-step.js';
23
+ import { BuiltinStepType } from '../../types/known-types.js';
24
+ import { ConditionSchema } from '../../types/workflow-config.js';
25
+ import { ConditionEvaluator } from '../../engine/condition-evaluator.js';
26
+ // ─── Config ───
27
+ export const ConditionalStepConfigSchema = z.object({
28
+ condition: ConditionSchema
29
+ .describe('Recursive condition tree. Leaf nodes reference {{variables}} and apply operators; `all`/`any` compose children.'),
30
+ if_true: z.array(z.object({ id: z.string(), type: z.string() }).passthrough()).describe('Steps to execute when the condition resolves true'),
31
+ if_false: z.array(z.object({ id: z.string(), type: z.string() }).passthrough()).optional().describe('Steps to execute when the condition resolves false. Omit to no-op on the false branch.'),
32
+ });
33
+ const ConditionalStepOutputSchema = z.object({
34
+ branch: z.enum(['if_true', 'if_false', 'none']),
35
+ evaluated: z.boolean(),
36
+ });
37
+ // ─── Step ───
38
+ export class ConditionalStep extends BaseControlFlowStep {
39
+ type = BuiltinStepType.CONDITIONAL;
40
+ name = 'Conditional';
41
+ description = 'Branch execution based on a condition';
42
+ configSchema = ConditionalStepConfigSchema;
43
+ outputSchema = ConditionalStepOutputSchema;
44
+ category = 'control';
45
+ icon = 'fork';
46
+ declaredOutputs = [
47
+ { key: 'if_true', label: 'When true' },
48
+ { key: 'if_false', label: 'When false' },
49
+ ];
50
+ /** Allows config-validator to recursively validate nested branches. */
51
+ getBranches(config) {
52
+ return {
53
+ if_true: (config['if_true'] ?? []),
54
+ if_false: (config['if_false'] ?? []),
55
+ };
56
+ }
57
+ async execute(config, ctx) {
58
+ const evaluator = new ConditionEvaluator();
59
+ const evaluated = evaluator.evaluate(config.condition, ctx.workflow);
60
+ if (evaluated) {
61
+ await ctx.walkBranch(config.if_true, ctx.workflow, 'if_true');
62
+ return { branch: 'if_true', evaluated: true };
63
+ }
64
+ if (config.if_false && config.if_false.length > 0) {
65
+ await ctx.walkBranch(config.if_false, ctx.workflow, 'if_false');
66
+ return { branch: 'if_false', evaluated: false };
67
+ }
68
+ return { branch: 'none', evaluated: false };
69
+ }
70
+ }
71
+ //# sourceMappingURL=conditional.step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditional.step.js","sourceRoot":"","sources":["../../../src/steps/builtin/conditional.step.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * DEDUP step — deduplication via ctx.staticData.
3
+ *
4
+ * Checks whether a key (derived from the current context) has been
5
+ * seen before. If it has, marks the output as `duplicate: true` so
6
+ * downstream steps/conditions can skip processing.
7
+ *
8
+ * Uses `ctx.staticData` for persistence — keys survive across executions.
9
+ * Optional TTL: stored timestamps are compared against current time.
10
+ */
11
+ import { z } from 'zod';
12
+ import { BaseActionStep } from '../base-step.js';
13
+ import type { StepExecutionContext } from '../base-step.js';
14
+ import { BuiltinStepType } from '../../types/known-types.js';
15
+ import type { StepCategory } from '../../types/categories.js';
16
+ export declare const DedupStepConfigSchema: z.ZodObject<{
17
+ keyPath: z.ZodString;
18
+ ttlMs: z.ZodOptional<z.ZodNumber>;
19
+ keyPrefix: z.ZodDefault<z.ZodString>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ keyPath: string;
22
+ keyPrefix: string;
23
+ ttlMs?: number | undefined;
24
+ }, {
25
+ keyPath: string;
26
+ ttlMs?: number | undefined;
27
+ keyPrefix?: string | undefined;
28
+ }>;
29
+ export type DedupStepConfig = z.infer<typeof DedupStepConfigSchema>;
30
+ export interface DedupStepOutput extends Record<string, unknown> {
31
+ duplicate: boolean;
32
+ key: string;
33
+ }
34
+ export declare class DedupStep extends BaseActionStep<typeof DedupStepConfigSchema, DedupStepOutput> {
35
+ readonly type = BuiltinStepType.DEDUP;
36
+ readonly name = "Dedup";
37
+ readonly description = "Skip duplicate items using persistent key tracking";
38
+ readonly configSchema: z.ZodObject<{
39
+ keyPath: z.ZodString;
40
+ ttlMs: z.ZodOptional<z.ZodNumber>;
41
+ keyPrefix: z.ZodDefault<z.ZodString>;
42
+ }, "strip", z.ZodTypeAny, {
43
+ keyPath: string;
44
+ keyPrefix: string;
45
+ ttlMs?: number | undefined;
46
+ }, {
47
+ keyPath: string;
48
+ ttlMs?: number | undefined;
49
+ keyPrefix?: string | undefined;
50
+ }>;
51
+ readonly outputSchema: z.ZodObject<{
52
+ duplicate: z.ZodBoolean;
53
+ key: z.ZodString;
54
+ }, "strip", z.ZodTypeAny, {
55
+ key: string;
56
+ duplicate: boolean;
57
+ }, {
58
+ key: string;
59
+ duplicate: boolean;
60
+ }>;
61
+ readonly category: StepCategory;
62
+ readonly icon = "copy-check";
63
+ execute(config: DedupStepConfig, ctx: StepExecutionContext): Promise<DedupStepOutput>;
64
+ }
65
+ //# sourceMappingURL=dedup.step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup.step.d.ts","sourceRoot":"","sources":["../../../src/steps/builtin/dedup.step.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAK9D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAIhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAIpE,MAAM,WAAW,eAAgB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9D,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AASD,qBAAa,SAAU,SAAQ,cAAc,CAC3C,OAAO,qBAAqB,EAC5B,eAAe,CAChB;IACC,SAAkB,IAAI,yBAAyB;IAC/C,SAAkB,IAAI,WAAW;IACjC,SAAkB,WAAW,wDAAwD;IACrF,SAAkB,YAAY;;;;;;;;;;;;OAAyB;IACvD,SAAkB,YAAY;;;;;;;;;OAAyB;IACvD,SAAkB,QAAQ,EAAE,YAAY,CAAU;IAClD,SAAkB,IAAI,gBAAgB;IAEvB,OAAO,CACpB,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,eAAe,CAAC;CAmC5B"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * DEDUP step — deduplication via ctx.staticData.
3
+ *
4
+ * Checks whether a key (derived from the current context) has been
5
+ * seen before. If it has, marks the output as `duplicate: true` so
6
+ * downstream steps/conditions can skip processing.
7
+ *
8
+ * Uses `ctx.staticData` for persistence — keys survive across executions.
9
+ * Optional TTL: stored timestamps are compared against current time.
10
+ */
11
+ import { z } from 'zod';
12
+ import { BaseActionStep } from '../base-step.js';
13
+ import { BuiltinStepType } from '../../types/known-types.js';
14
+ import { resolvePath } from '../../engine/variable-resolver.js';
15
+ // ─── Config ───
16
+ export const DedupStepConfigSchema = z.object({
17
+ keyPath: z.string().min(1).describe('Dotted path to the deduplication key in the workflow context'),
18
+ ttlMs: z.number().int().positive().optional().describe('Time-to-live in milliseconds. Keys older than this are treated as new'),
19
+ keyPrefix: z.string().default('dedup:').describe('Prefix for the storage key to avoid collisions'),
20
+ });
21
+ const DedupStepOutputSchema = z.object({
22
+ duplicate: z.boolean(),
23
+ key: z.string(),
24
+ });
25
+ // ─── Step ───
26
+ export class DedupStep extends BaseActionStep {
27
+ type = BuiltinStepType.DEDUP;
28
+ name = 'Dedup';
29
+ description = 'Skip duplicate items using persistent key tracking';
30
+ configSchema = DedupStepConfigSchema;
31
+ outputSchema = DedupStepOutputSchema;
32
+ category = 'data';
33
+ icon = 'copy-check';
34
+ async execute(config, ctx) {
35
+ // Resolve the dedup key from context
36
+ const rawKey = resolvePath(ctx.workflow, config.keyPath);
37
+ if (rawKey === undefined || rawKey === null) {
38
+ throw new Error(`DEDUP keyPath "${config.keyPath}" resolved to ${String(rawKey)}`);
39
+ }
40
+ const key = `${config.keyPrefix}${String(rawKey)}`;
41
+ // Check if key exists in staticData
42
+ const existing = (await ctx.staticData.get(key));
43
+ if (existing !== undefined) {
44
+ // Check TTL if configured
45
+ if (config.ttlMs !== undefined) {
46
+ const age = Date.now() - existing.seenAt;
47
+ if (age < config.ttlMs) {
48
+ return { duplicate: true, key };
49
+ }
50
+ // Expired — treat as new, fall through to record
51
+ }
52
+ else {
53
+ return { duplicate: true, key };
54
+ }
55
+ }
56
+ // Record the key
57
+ await ctx.staticData.set(key, { seenAt: Date.now() });
58
+ return { duplicate: false, key };
59
+ }
60
+ }
61
+ //# sourceMappingURL=dedup.step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup.step.js","sourceRoot":"","sources":["../../../src/steps/builtin/dedup.step.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAEhE,iBAAiB;AAEjB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IACnG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;IAC/H,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;CACnG,CAAC,CAAC;AAWH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAEH,eAAe;AAEf,MAAM,OAAO,SAAU,SAAQ,cAG9B;IACmB,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC;IAC7B,IAAI,GAAG,OAAO,CAAC;IACf,WAAW,GAAG,oDAAoD,CAAC;IACnE,YAAY,GAAG,qBAAqB,CAAC;IACrC,YAAY,GAAG,qBAAqB,CAAC;IACrC,QAAQ,GAAiB,MAAM,CAAC;IAChC,IAAI,GAAG,YAAY,CAAC;IAE7B,KAAK,CAAC,OAAO,CACpB,MAAuB,EACvB,GAAyB;QAEzB,qCAAqC;QACrC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,kBAAkB,MAAM,CAAC,OAAO,iBAAiB,MAAM,CAAC,MAAM,CAAC,EAAE,CAClE,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAEnD,oCAAoC;QACpC,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAElC,CAAC;QAEd,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,0BAA0B;YAC1B,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;gBACzC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBACvB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;gBAClC,CAAC;gBACD,iDAAiD;YACnD,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YAClC,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAEtD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACnC,CAAC;CACF"}