reqon-dsl 0.2.0 → 0.4.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 (450) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +45 -3
  3. package/dist/ast/nodes.d.ts +91 -4
  4. package/dist/ast/nodes.js +14 -0
  5. package/dist/auth/circuit-breaker.d.ts +11 -0
  6. package/dist/auth/circuit-breaker.js +90 -18
  7. package/dist/auth/credentials.d.ts +6 -1
  8. package/dist/auth/credentials.js +12 -4
  9. package/dist/auth/oauth2-provider.js +13 -3
  10. package/dist/auth/rate-limiter.d.ts +12 -1
  11. package/dist/auth/rate-limiter.js +39 -26
  12. package/dist/auth/token-store.js +8 -1
  13. package/dist/cli.d.ts +24 -1
  14. package/dist/cli.js +149 -10
  15. package/dist/config/constants.d.ts +152 -0
  16. package/dist/config/constants.js +139 -0
  17. package/dist/config/index.d.ts +4 -0
  18. package/dist/config/index.js +4 -0
  19. package/dist/control/index.d.ts +2 -0
  20. package/dist/control/index.js +1 -0
  21. package/dist/control/server.d.ts +105 -0
  22. package/dist/control/server.js +315 -0
  23. package/dist/control/types.d.ts +61 -0
  24. package/dist/control/types.js +7 -0
  25. package/dist/debug/cli-debugger.d.ts +17 -0
  26. package/dist/debug/cli-debugger.js +185 -0
  27. package/dist/debug/controller.d.ts +94 -0
  28. package/dist/debug/controller.js +45 -0
  29. package/dist/debug/index.d.ts +6 -0
  30. package/dist/debug/index.js +5 -0
  31. package/dist/errors/index.d.ts +67 -0
  32. package/dist/errors/index.js +89 -1
  33. package/dist/execution/index.d.ts +1 -1
  34. package/dist/execution/state.d.ts +24 -0
  35. package/dist/execution/store.js +2 -2
  36. package/dist/execution-log/events.d.ts +125 -0
  37. package/dist/execution-log/events.js +17 -0
  38. package/dist/execution-log/fold.d.ts +38 -0
  39. package/dist/execution-log/fold.js +54 -0
  40. package/dist/execution-log/index.d.ts +18 -0
  41. package/dist/execution-log/index.js +6 -0
  42. package/dist/execution-log/postgres-store.d.ts +36 -0
  43. package/dist/execution-log/postgres-store.js +108 -0
  44. package/dist/execution-log/resume.d.ts +11 -0
  45. package/dist/execution-log/resume.js +5 -0
  46. package/dist/execution-log/sqlite-store.d.ts +16 -0
  47. package/dist/execution-log/sqlite-store.js +101 -0
  48. package/dist/execution-log/store.d.ts +72 -0
  49. package/dist/execution-log/store.js +182 -0
  50. package/dist/index.d.ts +23 -2
  51. package/dist/index.js +35 -3
  52. package/dist/interpreter/context.d.ts +29 -0
  53. package/dist/interpreter/context.js +18 -0
  54. package/dist/interpreter/evaluator.d.ts +63 -1
  55. package/dist/interpreter/evaluator.js +219 -42
  56. package/dist/interpreter/executor.d.ts +132 -14
  57. package/dist/interpreter/executor.js +883 -178
  58. package/dist/interpreter/fetch-handler.d.ts +48 -1
  59. package/dist/interpreter/fetch-handler.js +216 -38
  60. package/dist/interpreter/http.d.ts +34 -0
  61. package/dist/interpreter/http.js +203 -28
  62. package/dist/interpreter/index.d.ts +5 -3
  63. package/dist/interpreter/index.js +4 -2
  64. package/dist/interpreter/pagination.d.ts +12 -3
  65. package/dist/interpreter/pagination.js +102 -32
  66. package/dist/interpreter/signals.d.ts +8 -0
  67. package/dist/interpreter/signals.js +12 -0
  68. package/dist/interpreter/source-manager.d.ts +75 -0
  69. package/dist/interpreter/source-manager.js +157 -0
  70. package/dist/interpreter/step-handlers/apply-handler.d.ts +29 -0
  71. package/dist/interpreter/step-handlers/apply-handler.js +79 -0
  72. package/dist/interpreter/step-handlers/for-handler.d.ts +16 -0
  73. package/dist/interpreter/step-handlers/for-handler.js +89 -7
  74. package/dist/interpreter/step-handlers/index.d.ts +4 -2
  75. package/dist/interpreter/step-handlers/index.js +4 -2
  76. package/dist/interpreter/step-handlers/match-handler.d.ts +9 -0
  77. package/dist/interpreter/step-handlers/match-handler.js +47 -17
  78. package/dist/interpreter/step-handlers/pause-handler.d.ts +52 -0
  79. package/dist/interpreter/step-handlers/pause-handler.js +87 -0
  80. package/dist/interpreter/step-handlers/store-handler.d.ts +17 -1
  81. package/dist/interpreter/step-handlers/store-handler.js +61 -20
  82. package/dist/interpreter/step-handlers/types.d.ts +3 -0
  83. package/dist/interpreter/step-handlers/validate-handler.d.ts +2 -1
  84. package/dist/interpreter/step-handlers/validate-handler.js +7 -2
  85. package/dist/interpreter/step-handlers/webhook-handler.d.ts +4 -0
  86. package/dist/interpreter/step-handlers/webhook-handler.js +31 -5
  87. package/dist/interpreter/store-manager.d.ts +46 -0
  88. package/dist/interpreter/store-manager.js +70 -0
  89. package/dist/lexer/index.d.ts +11 -4
  90. package/dist/lexer/index.js +11 -4
  91. package/dist/lexer/tokens.d.ts +17 -1
  92. package/dist/lexer/tokens.js +36 -0
  93. package/dist/loader/index.js +5 -8
  94. package/dist/mcp/index.d.ts +11 -0
  95. package/dist/mcp/index.js +11 -0
  96. package/dist/mcp/sandbox.d.ts +41 -0
  97. package/dist/mcp/sandbox.js +76 -0
  98. package/dist/mcp/server.d.ts +17 -0
  99. package/dist/mcp/server.js +504 -0
  100. package/dist/oas/index.d.ts +2 -0
  101. package/dist/oas/index.js +1 -0
  102. package/dist/oas/loader.d.ts +13 -1
  103. package/dist/oas/loader.js +25 -3
  104. package/dist/oas/mock-generator.d.ts +12 -0
  105. package/dist/oas/mock-generator.js +196 -0
  106. package/dist/oas/validator.js +45 -5
  107. package/dist/observability/events.d.ts +248 -0
  108. package/dist/observability/events.js +85 -0
  109. package/dist/observability/index.d.ts +15 -0
  110. package/dist/observability/index.js +12 -0
  111. package/dist/observability/logger.d.ts +106 -0
  112. package/dist/observability/logger.js +266 -0
  113. package/dist/observability/otel.d.ts +143 -0
  114. package/dist/observability/otel.js +421 -0
  115. package/dist/parser/action-parser.d.ts +105 -0
  116. package/dist/parser/action-parser.js +645 -0
  117. package/dist/parser/base.d.ts +7 -0
  118. package/dist/parser/base.js +11 -0
  119. package/dist/parser/expressions.d.ts +14 -0
  120. package/dist/parser/expressions.js +89 -6
  121. package/dist/parser/fetch-parser.d.ts +27 -0
  122. package/dist/parser/fetch-parser.js +280 -0
  123. package/dist/parser/index.d.ts +17 -0
  124. package/dist/parser/index.js +17 -0
  125. package/dist/parser/parser.d.ts +44 -46
  126. package/dist/parser/parser.js +122 -1070
  127. package/dist/parser/pipeline-parser.d.ts +12 -0
  128. package/dist/parser/pipeline-parser.js +52 -0
  129. package/dist/parser/schedule-parser.d.ts +7 -0
  130. package/dist/parser/schedule-parser.js +137 -0
  131. package/dist/parser/source-parser.d.ts +9 -0
  132. package/dist/parser/source-parser.js +151 -0
  133. package/dist/pause/index.d.ts +15 -0
  134. package/dist/pause/index.js +12 -0
  135. package/dist/pause/log-store.d.ts +33 -0
  136. package/dist/pause/log-store.js +98 -0
  137. package/dist/pause/manager.d.ts +130 -0
  138. package/dist/pause/manager.js +294 -0
  139. package/dist/pause/state.d.ts +93 -0
  140. package/dist/pause/state.js +103 -0
  141. package/dist/pause/store.d.ts +61 -0
  142. package/dist/pause/store.js +158 -0
  143. package/dist/plugin.d.ts +9 -12
  144. package/dist/plugin.js +10 -13
  145. package/dist/scheduler/cron-parser.d.ts +10 -3
  146. package/dist/scheduler/cron-parser.js +227 -48
  147. package/dist/scheduler/scheduler.js +56 -22
  148. package/dist/stores/factory.d.ts +7 -1
  149. package/dist/stores/factory.js +14 -3
  150. package/dist/stores/file.d.ts +26 -0
  151. package/dist/stores/file.js +67 -21
  152. package/dist/stores/index.d.ts +16 -1
  153. package/dist/stores/index.js +16 -1
  154. package/dist/stores/memory.d.ts +4 -0
  155. package/dist/stores/memory.js +8 -6
  156. package/dist/stores/postgrest.d.ts +28 -0
  157. package/dist/stores/postgrest.js +84 -37
  158. package/dist/stores/types.d.ts +17 -0
  159. package/dist/stores/types.js +12 -0
  160. package/dist/sync/index.d.ts +3 -2
  161. package/dist/sync/index.js +2 -1
  162. package/dist/sync/log-store.d.ts +30 -0
  163. package/dist/sync/log-store.js +45 -0
  164. package/dist/sync/store.js +1 -1
  165. package/dist/trace/index.d.ts +18 -0
  166. package/dist/trace/index.js +13 -0
  167. package/dist/trace/log-view.d.ts +57 -0
  168. package/dist/trace/log-view.js +76 -0
  169. package/dist/trace/recorder.d.ts +75 -0
  170. package/dist/trace/recorder.js +157 -0
  171. package/dist/trace/replay.d.ts +132 -0
  172. package/dist/trace/replay.js +264 -0
  173. package/dist/trace/state.d.ts +102 -0
  174. package/dist/trace/state.js +86 -0
  175. package/dist/trace/store.d.ts +75 -0
  176. package/dist/trace/store.js +250 -0
  177. package/dist/utils/deep-merge.d.ts +10 -0
  178. package/dist/utils/deep-merge.js +23 -0
  179. package/dist/utils/file.d.ts +13 -4
  180. package/dist/utils/file.js +70 -12
  181. package/dist/utils/index.d.ts +2 -1
  182. package/dist/utils/index.js +2 -1
  183. package/dist/utils/long-timeout.d.ts +19 -0
  184. package/dist/utils/long-timeout.js +33 -0
  185. package/dist/utils/path.d.ts +22 -1
  186. package/dist/utils/path.js +46 -1
  187. package/dist/utils/redact.d.ts +22 -0
  188. package/dist/utils/redact.js +42 -0
  189. package/dist/utils/type-guards.d.ts +58 -0
  190. package/dist/utils/type-guards.js +92 -0
  191. package/dist/webhook/server.d.ts +9 -0
  192. package/dist/webhook/server.js +122 -36
  193. package/dist/webhook/types.d.ts +9 -1
  194. package/package.json +76 -9
  195. package/.claude/settings.local.json +0 -31
  196. package/.claude/skills/api-integration.md +0 -125
  197. package/.claude/skills/database-schema.md +0 -51
  198. package/.claude/skills/dsl-design.md +0 -80
  199. package/.claude/skills/property-testing.md +0 -143
  200. package/.claude/skills/reqon/SKILL.md +0 -44
  201. package/.claude/skills/reqon/references/examples.md +0 -206
  202. package/.claude/skills/reqon/references/syntax.md +0 -263
  203. package/.claude/skills/vscode-extension.md +0 -113
  204. package/.github/dependabot.yml +0 -32
  205. package/.github/pull_request_template.md +0 -21
  206. package/.github/workflows/ci.yml +0 -174
  207. package/.github/workflows/release.yml +0 -73
  208. package/CLAUDE.md +0 -72
  209. package/CONTRIBUTING.md +0 -161
  210. package/TODO.md +0 -51
  211. package/dist/auth/auth.test.d.ts +0 -1
  212. package/dist/auth/auth.test.js +0 -255
  213. package/dist/errors/errors.test.d.ts +0 -1
  214. package/dist/errors/errors.test.js +0 -165
  215. package/dist/execution/execution.test.d.ts +0 -1
  216. package/dist/execution/execution.test.js +0 -246
  217. package/dist/integration.test.d.ts +0 -1
  218. package/dist/integration.test.js +0 -168
  219. package/dist/interpreter/evaluator.test.d.ts +0 -1
  220. package/dist/interpreter/evaluator.test.js +0 -512
  221. package/dist/interpreter/http.test.d.ts +0 -1
  222. package/dist/interpreter/http.test.js +0 -299
  223. package/dist/interpreter/progress.test.d.ts +0 -1
  224. package/dist/interpreter/progress.test.js +0 -216
  225. package/dist/interpreter/schema-matcher.test.d.ts +0 -1
  226. package/dist/interpreter/schema-matcher.test.js +0 -122
  227. package/dist/lexer/lexer.d.ts +0 -24
  228. package/dist/lexer/lexer.js +0 -264
  229. package/dist/lexer/lexer.test.d.ts +0 -1
  230. package/dist/lexer/lexer.test.js +0 -259
  231. package/dist/loader/loader.test.d.ts +0 -1
  232. package/dist/loader/loader.test.js +0 -287
  233. package/dist/oas/oas.test.d.ts +0 -1
  234. package/dist/oas/oas.test.js +0 -218
  235. package/dist/parser/expressions.test.d.ts +0 -1
  236. package/dist/parser/expressions.test.js +0 -378
  237. package/dist/parser/match.test.d.ts +0 -1
  238. package/dist/parser/match.test.js +0 -254
  239. package/dist/parser/parser.test.d.ts +0 -1
  240. package/dist/parser/parser.test.js +0 -333
  241. package/dist/parser/schedule.test.d.ts +0 -1
  242. package/dist/parser/schedule.test.js +0 -241
  243. package/dist/scheduler/cron-parser.test.d.ts +0 -1
  244. package/dist/scheduler/cron-parser.test.js +0 -188
  245. package/dist/stores/file.test.d.ts +0 -1
  246. package/dist/stores/file.test.js +0 -165
  247. package/dist/stores/memory.test.d.ts +0 -1
  248. package/dist/stores/memory.test.js +0 -157
  249. package/dist/stores/stores.test.d.ts +0 -1
  250. package/dist/stores/stores.test.js +0 -158
  251. package/dist/sync/sync.test.d.ts +0 -1
  252. package/dist/sync/sync.test.js +0 -221
  253. package/docusaurus/README.md +0 -41
  254. package/docusaurus/docs/advanced/execution-state.md +0 -283
  255. package/docusaurus/docs/advanced/extending-reqon.md +0 -388
  256. package/docusaurus/docs/advanced/multi-file-missions.md +0 -250
  257. package/docusaurus/docs/advanced/parallel-execution.md +0 -353
  258. package/docusaurus/docs/api-reference.md +0 -443
  259. package/docusaurus/docs/authentication/api-key.md +0 -339
  260. package/docusaurus/docs/authentication/basic.md +0 -276
  261. package/docusaurus/docs/authentication/bearer.md +0 -282
  262. package/docusaurus/docs/authentication/oauth2.md +0 -317
  263. package/docusaurus/docs/authentication/overview.md +0 -251
  264. package/docusaurus/docs/cli.md +0 -229
  265. package/docusaurus/docs/core-concepts/actions.md +0 -286
  266. package/docusaurus/docs/core-concepts/missions.md +0 -264
  267. package/docusaurus/docs/core-concepts/schemas.md +0 -353
  268. package/docusaurus/docs/core-concepts/sources.md +0 -339
  269. package/docusaurus/docs/core-concepts/stores.md +0 -332
  270. package/docusaurus/docs/dsl-syntax/expressions.md +0 -361
  271. package/docusaurus/docs/dsl-syntax/fetch.md +0 -293
  272. package/docusaurus/docs/dsl-syntax/for-loops.md +0 -324
  273. package/docusaurus/docs/dsl-syntax/map.md +0 -345
  274. package/docusaurus/docs/dsl-syntax/match.md +0 -387
  275. package/docusaurus/docs/dsl-syntax/pipelines.md +0 -397
  276. package/docusaurus/docs/dsl-syntax/validate.md +0 -401
  277. package/docusaurus/docs/error-handling/dead-letter-queues.md +0 -399
  278. package/docusaurus/docs/error-handling/flow-control.md +0 -337
  279. package/docusaurus/docs/error-handling/retry-strategies.md +0 -368
  280. package/docusaurus/docs/examples.md +0 -488
  281. package/docusaurus/docs/getting-started.md +0 -256
  282. package/docusaurus/docs/http/circuit-breaker.md +0 -401
  283. package/docusaurus/docs/http/incremental-sync.md +0 -394
  284. package/docusaurus/docs/http/pagination.md +0 -361
  285. package/docusaurus/docs/http/rate-limiting.md +0 -383
  286. package/docusaurus/docs/http/requests.md +0 -328
  287. package/docusaurus/docs/http/retry.md +0 -402
  288. package/docusaurus/docs/intro.md +0 -90
  289. package/docusaurus/docs/openapi/loading-specs.md +0 -305
  290. package/docusaurus/docs/openapi/operation-calls.md +0 -314
  291. package/docusaurus/docs/openapi/overview.md +0 -212
  292. package/docusaurus/docs/openapi/response-validation.md +0 -344
  293. package/docusaurus/docs/scheduling/cron.md +0 -305
  294. package/docusaurus/docs/scheduling/daemon-mode.md +0 -317
  295. package/docusaurus/docs/scheduling/intervals.md +0 -289
  296. package/docusaurus/docs/scheduling/overview.md +0 -231
  297. package/docusaurus/docs/stores/custom-adapters.md +0 -376
  298. package/docusaurus/docs/stores/file.md +0 -236
  299. package/docusaurus/docs/stores/memory.md +0 -193
  300. package/docusaurus/docs/stores/overview.md +0 -274
  301. package/docusaurus/docs/stores/postgrest.md +0 -316
  302. package/docusaurus/docusaurus.config.ts +0 -148
  303. package/docusaurus/package-lock.json +0 -18029
  304. package/docusaurus/package.json +0 -47
  305. package/docusaurus/sidebars.ts +0 -155
  306. package/docusaurus/src/components/HomepageFeatures/index.tsx +0 -105
  307. package/docusaurus/src/components/HomepageFeatures/styles.module.css +0 -12
  308. package/docusaurus/src/css/custom.css +0 -169
  309. package/docusaurus/src/pages/index.module.css +0 -48
  310. package/docusaurus/src/pages/index.tsx +0 -110
  311. package/docusaurus/src/pages/markdown-page.md +0 -7
  312. package/docusaurus/static/.nojekyll +0 -0
  313. package/docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  314. package/docusaurus/static/img/docusaurus.png +0 -0
  315. package/docusaurus/static/img/favicon.ico +0 -0
  316. package/docusaurus/static/img/logo.svg +0 -10
  317. package/docusaurus/static/img/undraw_docusaurus_mountain.svg +0 -171
  318. package/docusaurus/static/img/undraw_docusaurus_react.svg +0 -170
  319. package/docusaurus/static/img/undraw_docusaurus_tree.svg +0 -40
  320. package/docusaurus/tsconfig.json +0 -8
  321. package/examples/README.md +0 -112
  322. package/examples/error-handling/README.md +0 -150
  323. package/examples/error-handling/payment-processor.vague +0 -287
  324. package/examples/github-sync/README.md +0 -74
  325. package/examples/github-sync/fetch-issues.vague +0 -47
  326. package/examples/github-sync/fetch-prs.vague +0 -40
  327. package/examples/github-sync/mission.vague +0 -101
  328. package/examples/github-sync/normalize.vague +0 -70
  329. package/examples/jsonplaceholder/README.md +0 -28
  330. package/examples/jsonplaceholder/posts.vague +0 -48
  331. package/examples/petstore/README.md +0 -35
  332. package/examples/petstore/openapi.yaml +0 -97
  333. package/examples/petstore/sync.vague +0 -52
  334. package/examples/temporal-comparison/README.md +0 -297
  335. package/examples/temporal-comparison/reconciliation.vague +0 -355
  336. package/examples/temporal-comparison/temporal/activities/index.ts +0 -8
  337. package/examples/temporal-comparison/temporal/activities/shipstation.ts +0 -225
  338. package/examples/temporal-comparison/temporal/activities/shopify.ts +0 -257
  339. package/examples/temporal-comparison/temporal/activities/storage.ts +0 -198
  340. package/examples/temporal-comparison/temporal/activities/stripe.ts +0 -169
  341. package/examples/temporal-comparison/temporal/activities/validation.ts +0 -205
  342. package/examples/temporal-comparison/temporal/client/schedule.ts +0 -218
  343. package/examples/temporal-comparison/temporal/config/retry.ts +0 -63
  344. package/examples/temporal-comparison/temporal/types/index.ts +0 -129
  345. package/examples/temporal-comparison/temporal/workers/main.ts +0 -130
  346. package/examples/temporal-comparison/temporal/workflows/orderReconciliation.ts +0 -262
  347. package/examples/xero/README.md +0 -88
  348. package/examples/xero/invoices.vague +0 -189
  349. package/src/api-integration.test.ts +0 -954
  350. package/src/ast/index.ts +0 -1
  351. package/src/ast/nodes.ts +0 -310
  352. package/src/auth/auth.test.ts +0 -326
  353. package/src/auth/circuit-breaker.test.ts +0 -390
  354. package/src/auth/circuit-breaker.ts +0 -379
  355. package/src/auth/credentials.test.ts +0 -273
  356. package/src/auth/credentials.ts +0 -246
  357. package/src/auth/index.ts +0 -40
  358. package/src/auth/oauth2-provider.ts +0 -177
  359. package/src/auth/rate-limiter.ts +0 -459
  360. package/src/auth/token-store.ts +0 -177
  361. package/src/auth/types.ts +0 -159
  362. package/src/benchmark/e2e.bench.ts +0 -288
  363. package/src/benchmark/evaluator.bench.ts +0 -331
  364. package/src/benchmark/fixtures.ts +0 -295
  365. package/src/benchmark/index.ts +0 -108
  366. package/src/benchmark/lexer.bench.ts +0 -69
  367. package/src/benchmark/parser.bench.ts +0 -103
  368. package/src/benchmark/resilience.bench.ts +0 -193
  369. package/src/benchmark/store.bench.ts +0 -147
  370. package/src/benchmark/utils.ts +0 -230
  371. package/src/cli.ts +0 -313
  372. package/src/errors/errors.test.ts +0 -234
  373. package/src/errors/index.ts +0 -223
  374. package/src/execution/execution.test.ts +0 -307
  375. package/src/execution/index.ts +0 -21
  376. package/src/execution/state.ts +0 -207
  377. package/src/execution/store.ts +0 -188
  378. package/src/index.ts +0 -169
  379. package/src/integration.test.ts +0 -192
  380. package/src/interpreter/context.ts +0 -57
  381. package/src/interpreter/evaluator.test.ts +0 -796
  382. package/src/interpreter/evaluator.ts +0 -245
  383. package/src/interpreter/executor.ts +0 -946
  384. package/src/interpreter/fetch-handler.ts +0 -302
  385. package/src/interpreter/http.test.ts +0 -423
  386. package/src/interpreter/http.ts +0 -308
  387. package/src/interpreter/index.ts +0 -32
  388. package/src/interpreter/pagination.ts +0 -207
  389. package/src/interpreter/progress.test.ts +0 -276
  390. package/src/interpreter/schema-matcher.test.ts +0 -160
  391. package/src/interpreter/schema-matcher.ts +0 -168
  392. package/src/interpreter/signals.ts +0 -73
  393. package/src/interpreter/step-handlers/for-handler.ts +0 -65
  394. package/src/interpreter/step-handlers/index.ts +0 -17
  395. package/src/interpreter/step-handlers/map-handler.ts +0 -24
  396. package/src/interpreter/step-handlers/match-handler.ts +0 -101
  397. package/src/interpreter/step-handlers/store-handler.ts +0 -78
  398. package/src/interpreter/step-handlers/types.ts +0 -17
  399. package/src/interpreter/step-handlers/validate-handler.ts +0 -30
  400. package/src/interpreter/step-handlers/webhook-handler.ts +0 -142
  401. package/src/lexer/index.ts +0 -18
  402. package/src/lexer/lexer.test.ts +0 -316
  403. package/src/lexer/tokens.ts +0 -179
  404. package/src/loader/index.ts +0 -288
  405. package/src/loader/loader.test.ts +0 -360
  406. package/src/oas/index.ts +0 -4
  407. package/src/oas/loader.ts +0 -126
  408. package/src/oas/oas.test.ts +0 -254
  409. package/src/oas/validator.ts +0 -299
  410. package/src/parser/base.ts +0 -124
  411. package/src/parser/expressions.test.ts +0 -525
  412. package/src/parser/expressions.ts +0 -314
  413. package/src/parser/index.ts +0 -3
  414. package/src/parser/match.test.ts +0 -296
  415. package/src/parser/parser.test.ts +0 -739
  416. package/src/parser/parser.ts +0 -1469
  417. package/src/parser/schedule.test.ts +0 -287
  418. package/src/parser/webhook.test.ts +0 -248
  419. package/src/plugin.ts +0 -83
  420. package/src/scheduler/cron-parser.test.ts +0 -236
  421. package/src/scheduler/cron-parser.ts +0 -236
  422. package/src/scheduler/index.ts +0 -10
  423. package/src/scheduler/scheduler.ts +0 -443
  424. package/src/scheduler/types.ts +0 -71
  425. package/src/stores/factory.ts +0 -104
  426. package/src/stores/file.test.ts +0 -276
  427. package/src/stores/file.ts +0 -211
  428. package/src/stores/index.ts +0 -6
  429. package/src/stores/memory.test.ts +0 -238
  430. package/src/stores/memory.ts +0 -63
  431. package/src/stores/postgrest.test.ts +0 -488
  432. package/src/stores/postgrest.ts +0 -263
  433. package/src/stores/stores.test.ts +0 -197
  434. package/src/stores/types.ts +0 -58
  435. package/src/sync/index.ts +0 -16
  436. package/src/sync/state.ts +0 -126
  437. package/src/sync/store.ts +0 -139
  438. package/src/sync/sync.test.ts +0 -271
  439. package/src/utils/async.ts +0 -10
  440. package/src/utils/file.ts +0 -106
  441. package/src/utils/index.ts +0 -14
  442. package/src/utils/logger.ts +0 -53
  443. package/src/utils/path.ts +0 -47
  444. package/src/webhook/index.ts +0 -15
  445. package/src/webhook/server.test.ts +0 -253
  446. package/src/webhook/server.ts +0 -389
  447. package/src/webhook/store.ts +0 -239
  448. package/src/webhook/types.ts +0 -93
  449. package/tsconfig.json +0 -17
  450. package/vitest.config.ts +0 -39
@@ -1,15 +1,63 @@
1
+ /**
2
+ * ---
3
+ * purpose: Expression evaluator - evaluates Vague/Reqon expressions at runtime
4
+ * inputs:
5
+ * - Expression AST node (literals, identifiers, binary ops, function calls)
6
+ * - ExecutionContext with variables, response, stores
7
+ * - Optional current record for iteration contexts
8
+ * outputs:
9
+ * - Evaluated value (any JSON-compatible type)
10
+ * related:
11
+ * - ./context.ts - provides variable bindings
12
+ * - ./executor.ts - calls evaluate() for step expressions
13
+ * - ../parser/expressions.ts - IsExpression, ObjectLiteralExpression types
14
+ * ---
15
+ */
1
16
  import { getVariable } from './context.js';
17
+ import { isRecord } from '../utils/type-guards.js';
18
+ import { EvaluatorError, UnsupportedOperationError } from '../errors/index.js';
19
+ /**
20
+ * Evaluate a Reqon/Vague expression within an execution context.
21
+ *
22
+ * Supports all expression types from the Vague DSL including literals, identifiers,
23
+ * binary/logical/ternary expressions, function calls, and pattern matching.
24
+ *
25
+ * @param expr - The expression AST node to evaluate
26
+ * @param ctx - The execution context containing variables, response data, and stores
27
+ * @param current - Optional current record for iteration contexts (e.g., inside for/map)
28
+ * @returns The evaluated result, which can be any JSON-compatible value
29
+ *
30
+ * @example
31
+ * // Evaluate a simple identifier
32
+ * const result = evaluate({ type: 'Identifier', name: 'foo' }, ctx);
33
+ *
34
+ * @example
35
+ * // Evaluate with current record context
36
+ * const result = evaluate(expr, ctx, { id: 1, name: 'test' });
37
+ */
2
38
  export function evaluate(expr, ctx, current) {
39
+ // Handle IsExpression before the switch (custom Reqon type, not in vague-lang Expression union)
40
+ if (expr.type === 'IsExpression') {
41
+ const isExpr = expr;
42
+ const value = evaluate(isExpr.operand, ctx, current);
43
+ return checkType(value, isExpr.typeCheck);
44
+ }
45
+ // Handle ObjectLiteral before the switch (custom Reqon type)
46
+ if (expr.type === 'ObjectLiteral') {
47
+ const objExpr = expr;
48
+ const result = {};
49
+ for (const prop of objExpr.properties) {
50
+ result[prop.key] = evaluate(prop.value, ctx, current);
51
+ }
52
+ return result;
53
+ }
3
54
  switch (expr.type) {
4
55
  case 'Literal':
5
56
  return expr.value;
6
57
  case 'Identifier': {
7
58
  // Check if it's a field on current object
8
- if (current && typeof current === 'object' && current !== null) {
9
- const obj = current;
10
- if (expr.name in obj) {
11
- return obj[expr.name];
12
- }
59
+ if (isRecord(current) && expr.name in current) {
60
+ return current[expr.name];
13
61
  }
14
62
  // Check variables
15
63
  const value = getVariable(ctx, expr.name);
@@ -20,20 +68,31 @@ export function evaluate(expr, ctx, current) {
20
68
  return ctx.response;
21
69
  }
22
70
  // Check if the identifier is a field on response
23
- if (ctx.response && typeof ctx.response === 'object') {
24
- const resp = ctx.response;
25
- if (expr.name in resp)
26
- return resp[expr.name];
71
+ if (isRecord(ctx.response) && expr.name in ctx.response) {
72
+ return ctx.response[expr.name];
27
73
  }
28
74
  return undefined;
29
75
  }
30
76
  case 'QualifiedName': {
31
- // Try from current/response first (common case)
77
+ // Handle 'response.x.y' specially - start from ctx.response
78
+ if (expr.parts.length > 0 && expr.parts[0] === 'response') {
79
+ let value = ctx.response;
80
+ for (let i = 1; i < expr.parts.length; i++) {
81
+ if (isRecord(value)) {
82
+ value = value[expr.parts[i]];
83
+ }
84
+ else {
85
+ return undefined;
86
+ }
87
+ }
88
+ return value;
89
+ }
90
+ // Try from current/response first (common case for .field paths)
32
91
  let value = current ?? ctx.response;
33
- if (value && typeof value === 'object' && value !== null) {
92
+ if (isRecord(value)) {
34
93
  let found = true;
35
94
  for (const part of expr.parts) {
36
- if (value && typeof value === 'object' && value !== null) {
95
+ if (isRecord(value)) {
37
96
  value = value[part];
38
97
  }
39
98
  else {
@@ -50,7 +109,7 @@ export function evaluate(expr, ctx, current) {
50
109
  value = getVariable(ctx, expr.parts[0]);
51
110
  if (value !== undefined) {
52
111
  for (let i = 1; i < expr.parts.length; i++) {
53
- if (value && typeof value === 'object') {
112
+ if (isRecord(value)) {
54
113
  value = value[expr.parts[i]];
55
114
  }
56
115
  else {
@@ -67,36 +126,48 @@ export function evaluate(expr, ctx, current) {
67
126
  const right = evaluate(expr.right, ctx, current);
68
127
  switch (expr.operator) {
69
128
  case '+':
70
- return left + right;
129
+ // Allow string concatenation
130
+ if (typeof left === 'string' || typeof right === 'string') {
131
+ return String(left ?? '') + String(right ?? '');
132
+ }
133
+ return toNumber(left, '+') + toNumber(right, '+');
71
134
  case '-':
72
- return left - right;
135
+ return toNumber(left, '-') - toNumber(right, '-');
73
136
  case '*':
74
- return left * right;
75
- case '/':
76
- return left / right;
137
+ return toNumber(left, '*') * toNumber(right, '*');
138
+ case '/': {
139
+ const divisor = toNumber(right, '/');
140
+ if (divisor === 0) {
141
+ throw new EvaluatorError('Division by zero', { expression: '/' });
142
+ }
143
+ return toNumber(left, '/') / divisor;
144
+ }
77
145
  case '==':
78
146
  return left === right;
79
147
  case '!=':
80
148
  return left !== right;
81
149
  case '<':
82
- return left < right;
150
+ return compareNumbers(left, right, '<');
83
151
  case '>':
84
- return left > right;
152
+ return compareNumbers(left, right, '>');
85
153
  case '<=':
86
- return left <= right;
154
+ return compareNumbers(left, right, '<=');
87
155
  case '>=':
88
- return left >= right;
156
+ return compareNumbers(left, right, '>=');
89
157
  default:
90
- throw new Error(`Unknown operator: ${expr.operator}`);
158
+ throw new UnsupportedOperationError(`operator: ${expr.operator}`, 'binary expression');
91
159
  }
92
160
  }
93
161
  case 'LogicalExpression': {
94
162
  const left = evaluate(expr.left, ctx, current);
163
+ // Return operand values (like JS &&/||), not coerced booleans, so
164
+ // idioms like `x or default` work. Short-circuit: only evaluate the
165
+ // right operand when the left doesn't already decide the result.
95
166
  if (expr.operator === 'and') {
96
- return left ? evaluate(expr.right, ctx, current) : false;
167
+ return left ? evaluate(expr.right, ctx, current) : left;
97
168
  }
98
169
  else {
99
- return left ? true : evaluate(expr.right, ctx, current);
170
+ return left ? left : evaluate(expr.right, ctx, current);
100
171
  }
101
172
  }
102
173
  case 'NotExpression':
@@ -104,9 +175,9 @@ export function evaluate(expr, ctx, current) {
104
175
  case 'UnaryExpression': {
105
176
  const operand = evaluate(expr.operand, ctx, current);
106
177
  if (expr.operator === '-')
107
- return -operand;
178
+ return -toNumber(operand, 'unary -');
108
179
  if (expr.operator === '+')
109
- return +operand;
180
+ return toNumber(operand, 'unary +');
110
181
  return operand;
111
182
  }
112
183
  case 'TernaryExpression': {
@@ -139,8 +210,12 @@ export function evaluate(expr, ctx, current) {
139
210
  if (typeof args[0] === 'string')
140
211
  return args[0].length;
141
212
  return 0;
142
- case 'sum':
143
- return args[0].reduce((a, b) => a + b, 0);
213
+ case 'sum': {
214
+ if (!Array.isArray(args[0])) {
215
+ throw new EvaluatorError('sum() requires an array argument', { expression: 'sum' });
216
+ }
217
+ return args[0].reduce((acc, val) => acc + toNumber(val, 'sum'), 0);
218
+ }
144
219
  case 'count':
145
220
  return Array.isArray(args[0]) ? args[0].length : 0;
146
221
  case 'first':
@@ -148,13 +223,25 @@ export function evaluate(expr, ctx, current) {
148
223
  case 'last':
149
224
  return Array.isArray(args[0]) ? args[0][args[0].length - 1] : undefined;
150
225
  case 'round':
151
- return Math.round(args[0]);
226
+ return Math.round(toNumber(args[0], 'round'));
152
227
  case 'floor':
153
- return Math.floor(args[0]);
228
+ return Math.floor(toNumber(args[0], 'floor'));
154
229
  case 'ceil':
155
- return Math.ceil(args[0]);
230
+ return Math.ceil(toNumber(args[0], 'ceil'));
231
+ case 'now':
232
+ return new Date().toISOString();
233
+ case 'env': {
234
+ // The variable name must be a static string literal. A dynamic argument
235
+ // (e.g. env(response.field)) would let fetched/untrusted data choose
236
+ // which environment variable is read, exfiltrating secrets.
237
+ const nameExpr = expr.arguments[0];
238
+ if (!nameExpr || nameExpr.type !== 'Literal') {
239
+ throw new EvaluatorError(`env() requires a string-literal variable name, not a dynamic expression`, { expression: 'env' });
240
+ }
241
+ return process.env[String(args[0])] ?? '';
242
+ }
156
243
  default:
157
- throw new Error(`Unknown function: ${expr.callee}`);
244
+ throw new UnsupportedOperationError(`function: ${expr.callee}`, 'call expression');
158
245
  }
159
246
  }
160
247
  case 'AnyOfExpression': {
@@ -166,36 +253,126 @@ export function evaluate(expr, ctx, current) {
166
253
  }
167
254
  return collection[Math.floor(Math.random() * collection.length)];
168
255
  }
169
- case 'IsExpression': {
170
- // Type checking expression: value is array, value is string, etc.
171
- const isExpr = expr;
172
- const value = evaluate(isExpr.operand, ctx, current);
173
- return checkType(value, isExpr.typeCheck);
256
+ case 'OrderedSequenceType': {
257
+ // Inline array literal: [1, 2, 3]
258
+ const seqExpr = expr;
259
+ return seqExpr.elements.map((el) => evaluate(el, ctx, current));
174
260
  }
175
261
  default:
176
- throw new Error(`Cannot evaluate expression type: ${expr.type}`);
262
+ throw new EvaluatorError(`Cannot evaluate expression type: ${expr.type}`, {
263
+ expression: expr.type,
264
+ });
177
265
  }
178
266
  }
267
+ /**
268
+ * Evaluate an expression and convert the result to a string.
269
+ *
270
+ * @param expr - The expression to evaluate
271
+ * @param ctx - The execution context
272
+ * @param current - Optional current record for iteration contexts
273
+ * @returns The string representation of the evaluated value
274
+ */
179
275
  export function evaluateToString(expr, ctx, current) {
180
276
  const value = evaluate(expr, ctx, current);
181
277
  return String(value ?? '');
182
278
  }
279
+ /**
280
+ * Interpolate variables in a path string using {variable.path} syntax.
281
+ *
282
+ * Replaces placeholders like {id} or {user.name} with values from the
283
+ * current record or execution context variables.
284
+ *
285
+ * @param path - The path string with {placeholder} syntax
286
+ * @param ctx - The execution context
287
+ * @param current - Optional current record for iteration contexts
288
+ * @returns The interpolated path string
289
+ *
290
+ * @example
291
+ * // Interpolate a simple variable
292
+ * interpolatePath('/users/{id}', ctx, { id: 123 }); // '/users/123'
293
+ *
294
+ * @example
295
+ * // Interpolate a nested path
296
+ * interpolatePath('/orgs/{org.id}/users', ctx, { org: { id: 'acme' } }); // '/orgs/acme/users'
297
+ */
183
298
  export function interpolatePath(path, ctx, current) {
184
299
  return path.replace(/\{([^}]+)\}/g, (_, expr) => {
185
300
  // Simple variable interpolation
186
301
  const parts = expr.split('.');
187
302
  let value = current;
188
303
  for (const part of parts) {
189
- if (value && typeof value === 'object') {
304
+ if (isRecord(value)) {
190
305
  value = value[part];
191
306
  }
192
307
  else {
193
308
  value = getVariable(ctx, part);
194
309
  }
195
310
  }
196
- return String(value ?? '');
311
+ // URL-encode each interpolated value so a path param can't inject path
312
+ // segments, query strings, or fragments into the request target. Path params
313
+ // are single segments, so encoding (which escapes '/', '?', '#', etc.) is the
314
+ // correct treatment.
315
+ return encodeURIComponent(String(value ?? ''));
316
+ });
317
+ }
318
+ /**
319
+ * Coerce a value to a number for arithmetic operations.
320
+ * Returns NaN for values that cannot be meaningfully converted.
321
+ */
322
+ function toNumber(value, operator) {
323
+ if (typeof value === 'number') {
324
+ return value;
325
+ }
326
+ if (typeof value === 'string') {
327
+ const parsed = Number(value);
328
+ if (!isNaN(parsed)) {
329
+ return parsed;
330
+ }
331
+ }
332
+ if (typeof value === 'boolean') {
333
+ return value ? 1 : 0;
334
+ }
335
+ if (value === null || value === undefined) {
336
+ throw new EvaluatorError(`Cannot perform '${operator}' on ${value === null ? 'null' : 'undefined'}`, { expression: operator });
337
+ }
338
+ throw new EvaluatorError(`Cannot perform '${operator}' on ${typeof value} (expected number)`, {
339
+ expression: operator,
197
340
  });
198
341
  }
342
+ /** Coerce for comparison, yielding NaN (not a throw) for nullish/non-numeric. */
343
+ function toComparable(value) {
344
+ if (typeof value === 'number')
345
+ return value;
346
+ if (typeof value === 'boolean')
347
+ return value ? 1 : 0;
348
+ if (typeof value === 'string')
349
+ return Number(value);
350
+ return NaN;
351
+ }
352
+ /**
353
+ * Arithmetic comparison for `where`/`match`/`validate` guards. A missing or
354
+ * non-numeric operand makes the comparison false (the record is excluded) rather
355
+ * than throwing — real API data routinely omits fields, and one missing field
356
+ * shouldn't abort the whole stage.
357
+ */
358
+ function compareNumbers(left, right, operator) {
359
+ const leftNum = toComparable(left);
360
+ const rightNum = toComparable(right);
361
+ if (Number.isNaN(leftNum) || Number.isNaN(rightNum))
362
+ return false;
363
+ switch (operator) {
364
+ case '<':
365
+ return leftNum < rightNum;
366
+ case '>':
367
+ return leftNum > rightNum;
368
+ case '<=':
369
+ return leftNum <= rightNum;
370
+ case '>=':
371
+ return leftNum >= rightNum;
372
+ default:
373
+ return false;
374
+ }
375
+ }
199
376
  /** Type check functions map - more efficient than switch statement */
200
377
  const TYPE_CHECKERS = new Map([
201
378
  ['array', (v) => Array.isArray(v)],
@@ -217,7 +394,7 @@ const TYPE_CHECKERS = new Map([
217
394
  function checkType(value, typeName) {
218
395
  const checker = TYPE_CHECKERS.get(typeName.toLowerCase());
219
396
  if (!checker) {
220
- throw new Error(`Unknown type for 'is' check: ${typeName}`);
397
+ throw new UnsupportedOperationError(`type check: ${typeName}`, "'is' expression");
221
398
  }
222
399
  return checker(value);
223
400
  }
@@ -1,10 +1,33 @@
1
+ /**
2
+ * ---
3
+ * purpose: Mission executor - orchestrates pipeline execution
4
+ * inputs:
5
+ * - ReqonProgram - parsed AST
6
+ * - ExecutorConfig - auth, stores, callbacks, debug settings
7
+ * outputs:
8
+ * - ExecutionResult - success/errors, stores, duration
9
+ * related:
10
+ * - ./context.ts - execution state (variables, stores, sources)
11
+ * - ./evaluator.ts - expression evaluation
12
+ * - ./fetch-handler.ts - HTTP requests
13
+ * - ./step-handlers/ - individual step type handlers
14
+ * - ./source-manager.ts - auth provider management
15
+ * ---
16
+ */
1
17
  import type { ReqonProgram } from '../ast/nodes.js';
2
18
  import type { StoreAdapter } from '../stores/types.js';
19
+ import { type AuthConfig } from './source-manager.js';
3
20
  import { type CircuitBreakerCallbacks } from '../auth/circuit-breaker.js';
4
21
  import type { RateLimitCallbacks } from '../auth/types.js';
5
22
  import { type ExecutionState, type ExecutionStore } from '../execution/index.js';
6
23
  import { type SyncStore } from '../sync/index.js';
7
24
  import type { WebhookServer } from '../webhook/index.js';
25
+ import type { EventEmitter, StructuredLogger } from '../observability/index.js';
26
+ import type { DebugController } from '../debug/index.js';
27
+ import type { ControlServer } from '../control/index.js';
28
+ import { type TraceStore } from '../trace/index.js';
29
+ import { type PauseManager, type PauseStore } from '../pause/index.js';
30
+ import type { ExecutionLogStore } from '../execution-log/index.js';
8
31
  export interface ExecutionResult {
9
32
  success: boolean;
10
33
  duration: number;
@@ -15,6 +38,10 @@ export interface ExecutionResult {
15
38
  executionId?: string;
16
39
  /** Execution state (if persistence enabled) */
17
40
  state?: ExecutionState;
41
+ /** Trace ID if tracing was enabled */
42
+ traceId?: string;
43
+ /** Pause ID if execution was paused */
44
+ pauseId?: string;
18
45
  }
19
46
  export interface ExecutionError {
20
47
  action: string;
@@ -71,6 +98,7 @@ export interface ExecutorConfig {
71
98
  stores?: Record<string, StoreAdapter>;
72
99
  dryRun?: boolean;
73
100
  verbose?: boolean;
101
+ missionDir?: string;
74
102
  rateLimitCallbacks?: RateLimitCallbacks;
75
103
  circuitBreakerCallbacks?: CircuitBreakerCallbacks;
76
104
  developmentMode?: boolean;
@@ -82,29 +110,56 @@ export interface ExecutorConfig {
82
110
  syncStore?: SyncStore;
83
111
  progress?: ProgressCallbacks;
84
112
  webhookServer?: WebhookServer;
113
+ eventEmitter?: EventEmitter;
114
+ logger?: StructuredLogger;
115
+ debugController?: DebugController;
116
+ controlServer?: ControlServer;
117
+ traceStore?: TraceStore;
118
+ pauseStore?: PauseStore;
119
+ pauseManager?: PauseManager;
120
+ executionLog?: ExecutionLogStore;
121
+ /**
122
+ * Max items a single run of a `backfill` paginated fetch accumulates before
123
+ * stopping cleanly (a later resume continues). Bounds memory per run for large
124
+ * backfills. Defaults to the handler's built-in cap.
125
+ */
126
+ backfillMaxItemsPerRun?: number;
85
127
  }
86
- interface AuthConfig {
87
- type: 'bearer' | 'oauth2' | 'none';
88
- token?: string;
89
- accessToken?: string;
90
- refreshToken?: string;
91
- tokenEndpoint?: string;
92
- clientId?: string;
93
- clientSecret?: string;
94
- }
128
+ export { type AuthConfig } from './source-manager.js';
95
129
  export declare class MissionExecutor {
96
130
  private config;
97
131
  private ctx;
98
132
  private errors;
99
133
  private actionsRun;
100
- private oasSources;
101
- private sourceConfigs;
134
+ /** Monotonic key generator for queued values lacking an id. */
135
+ private queueCounter;
136
+ private transforms;
102
137
  private rateLimiter;
103
138
  private circuitBreaker;
139
+ private sourceManager;
140
+ private storeManager;
104
141
  private executionStore?;
105
142
  private executionState?;
106
143
  private syncStore?;
107
144
  private missionName?;
145
+ private eventEmitter?;
146
+ private logger?;
147
+ private executionLog?;
148
+ /** Stable id used for the execution event log (independent of persistState). */
149
+ private logExecutionId?;
150
+ /** Effect ids already applied (from the log) — replay skips these. */
151
+ private appliedEffects;
152
+ /** Backfill page progress per step id (from the log) — resumes pagination. */
153
+ private pageProgress;
154
+ /** The pause being resumed on this run — its step replays past, not into, a pause. */
155
+ private resumingPause?;
156
+ private debugController?;
157
+ private traceRecorder?;
158
+ private traceStore?;
159
+ private pauseManager?;
160
+ private pauseStore?;
161
+ private currentStageIndex;
162
+ private currentPauseId?;
108
163
  constructor(config?: ExecutorConfig);
109
164
  execute(program: ReqonProgram): Promise<ExecutionResult>;
110
165
  private initializeExecutionState;
@@ -113,19 +168,82 @@ export declare class MissionExecutor {
113
168
  private executeMission;
114
169
  private getStageName;
115
170
  private executeSequentialStage;
171
+ /**
172
+ * Run all settled-style tasks with a bounded number in flight at once,
173
+ * preserving result order. Caps fan-out so a wide `run [...]` can't open an
174
+ * unbounded number of concurrent HTTP/store operations.
175
+ */
176
+ private settleWithLimit;
177
+ /**
178
+ * Execute a `run [A, B, ...]` stage.
179
+ *
180
+ * Failure semantics are **complete-then-fail**: every branch runs to
181
+ * completion (bounded by MAX_PARALLEL_ACTIONS in flight), then the stage
182
+ * fails if any branch failed. There is no cancellation of siblings and no
183
+ * rollback — a branch that committed store writes keeps them even if another
184
+ * branch failed. Each branch gets its own action scope (step counter +
185
+ * checkpoints); stores/sources/schemas are shared, so parallel branches that
186
+ * write the same key get last-writer-wins and should target disjoint keys.
187
+ */
116
188
  private executeParallelStage;
117
- private initializeSource;
118
- private initializeStore;
119
189
  private executeAction;
190
+ /** Compute a retry backoff delay from a RetrySignal's backoff config. */
191
+ private computeRetryDelay;
192
+ /** Push a queued value to its target store (queue directive). */
193
+ private handleQueue;
120
194
  private executeStep;
121
195
  private executeFetch;
196
+ /**
197
+ * Per-action mutable scope (step counter + deferred checkpoints). Lazily
198
+ * created so a step run with the bare mission context still works; normally
199
+ * executeAction installs a fresh scope that nested scopes inherit.
200
+ */
201
+ private scopeFor;
202
+ /**
203
+ * Append an event to the execution log. No-op (zero cost) when no log is
204
+ * configured. The executionId is supplied from this run's stable log id.
205
+ */
206
+ private logEvent;
207
+ /** Flush deferred sync checkpoints (called after a successful store / action). */
208
+ private flushPendingCheckpoints;
122
209
  private executeFor;
123
210
  private executeMap;
124
211
  private executeValidate;
125
212
  private executeStore;
213
+ /**
214
+ * A stable hash of the payload a store step will write, used to make the
215
+ * store-effect identity content-aware. Resolving the source is a pure read of
216
+ * the context (the same value the handler stores); on any evaluation failure we
217
+ * fall back to a constant so behaviour matches the old target-only identity
218
+ * rather than throwing inside the dedup path.
219
+ */
220
+ /** Load a pause's checkpoint into the shape the pause step uses to resume. */
221
+ private loadResumingPause;
222
+ private storeContentHash;
126
223
  private executeMatch;
127
224
  private executeLet;
225
+ private executeApply;
128
226
  private executeWebhook;
227
+ private executePause;
129
228
  private log;
229
+ /**
230
+ * Check if pause has been requested and handle it
231
+ * Should be called at safe pause points (between stages, loop iterations)
232
+ */
233
+ private checkPause;
234
+ /**
235
+ * Update control server with current state
236
+ */
237
+ private updateControlServerState;
238
+ private getStepType;
239
+ /** Get the event emitter (for external access) */
240
+ getEventEmitter(): EventEmitter | undefined;
241
+ /** Get the structured logger (for external access) */
242
+ getLogger(): StructuredLogger | undefined;
243
+ /** Get the debug controller (for external access) */
244
+ getDebugController(): DebugController | undefined;
245
+ /** Capture current execution state for debugging */
246
+ private captureDebugSnapshot;
247
+ /** Handle debug command and update state */
248
+ private handleDebugCommand;
130
249
  }
131
- export {};