whale-code 6.5.11 → 6.6.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 (613) hide show
  1. package/dist/cli/chat/ChatApp.js +7 -11
  2. package/dist/cli/chat/ChatApp.js.map +1 -1
  3. package/dist/cli/chat/ChatInput.js +7 -3
  4. package/dist/cli/chat/ChatInput.js.map +1 -1
  5. package/dist/cli/chat/MessageList.js +5 -6
  6. package/dist/cli/chat/MessageList.js.map +1 -1
  7. package/dist/cli/chat/StatusBar.d.ts +2 -2
  8. package/dist/cli/chat/StatusBar.js +90 -160
  9. package/dist/cli/chat/StatusBar.js.map +1 -1
  10. package/dist/cli/chat/components/LiveArea.js +78 -115
  11. package/dist/cli/chat/components/LiveArea.js.map +1 -1
  12. package/dist/cli/chat/components/StaticMessages.js +60 -79
  13. package/dist/cli/chat/components/StaticMessages.js.map +1 -1
  14. package/dist/cli/chat/hooks/useAgentLoop.js +45 -37
  15. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -1
  16. package/dist/cli/chat/store.d.ts +12 -0
  17. package/dist/cli/chat/store.js +19 -0
  18. package/dist/cli/chat/store.js.map +1 -1
  19. package/dist/cli/services/agent-loop-tools.js +10 -1
  20. package/dist/cli/services/agent-loop-tools.js.map +1 -1
  21. package/dist/cli/services/cli-agent-loop.js +3 -2
  22. package/dist/cli/services/cli-agent-loop.js.map +1 -1
  23. package/dist/cli/services/config-store.js +4 -3
  24. package/dist/cli/services/config-store.js.map +1 -1
  25. package/dist/cli/services/memory-manager.js +2 -2
  26. package/dist/cli/services/memory-manager.js.map +1 -1
  27. package/dist/cli/services/permission-modes.js +14 -10
  28. package/dist/cli/services/permission-modes.js.map +1 -1
  29. package/dist/cli/services/session-client.js +2 -1
  30. package/dist/cli/services/session-client.js.map +1 -1
  31. package/dist/cli/services/session-persistence.js +14 -6
  32. package/dist/cli/services/session-persistence.js.map +1 -1
  33. package/dist/cli/shared/SpinnerSlot.js +4 -1
  34. package/dist/cli/shared/SpinnerSlot.js.map +1 -1
  35. package/dist/server/handlers/browser-lifecycle.js +10 -0
  36. package/dist/server/handlers/browser-lifecycle.js.map +1 -1
  37. package/dist/server/handlers/browser.js +16 -1
  38. package/dist/server/handlers/browser.js.map +1 -1
  39. package/dist/server/handlers/campaigns.js +11 -0
  40. package/dist/server/handlers/campaigns.js.map +1 -1
  41. package/dist/server/handlers/catalog-products.js +19 -5
  42. package/dist/server/handlers/catalog-products.js.map +1 -1
  43. package/dist/server/handlers/catalog.js +42 -8
  44. package/dist/server/handlers/catalog.js.map +1 -1
  45. package/dist/server/handlers/clickhouse.js +4 -4
  46. package/dist/server/handlers/clickhouse.js.map +1 -1
  47. package/dist/server/handlers/comms-email.js +70 -8
  48. package/dist/server/handlers/comms-email.js.map +1 -1
  49. package/dist/server/handlers/comms.js +63 -21
  50. package/dist/server/handlers/comms.js.map +1 -1
  51. package/dist/server/handlers/coupons.js +141 -77
  52. package/dist/server/handlers/coupons.js.map +1 -1
  53. package/dist/server/handlers/google-ads.js +280 -8
  54. package/dist/server/handlers/google-ads.js.map +1 -1
  55. package/dist/server/handlers/remove-bg.d.ts +33 -0
  56. package/dist/server/handlers/remove-bg.js +698 -44
  57. package/dist/server/handlers/remove-bg.js.map +1 -1
  58. package/dist/server/handlers/supply-chain.js +93 -1
  59. package/dist/server/handlers/supply-chain.js.map +1 -1
  60. package/dist/server/handlers/workflow-steps-types.d.ts +1 -1
  61. package/dist/server/handlers/workflow-steps-types.js +7 -1
  62. package/dist/server/handlers/workflow-steps-types.js.map +1 -1
  63. package/dist/server/handlers/workflow-steps.js +1 -1
  64. package/dist/server/handlers/workflow-steps.js.map +1 -1
  65. package/dist/server/index.js +122 -29
  66. package/dist/server/index.js.map +1 -1
  67. package/dist/server/lib/agent-loop-turn.js +33 -3
  68. package/dist/server/lib/agent-loop-turn.js.map +1 -1
  69. package/dist/server/lib/agent-loop-types.d.ts +6 -2
  70. package/dist/server/lib/agent-loop-types.js +14 -2
  71. package/dist/server/lib/agent-loop-types.js.map +1 -1
  72. package/dist/server/lib/clickhouse-client.js +4 -2
  73. package/dist/server/lib/clickhouse-client.js.map +1 -1
  74. package/dist/server/lib/code-worker.js +4 -1
  75. package/dist/server/lib/code-worker.js.map +1 -1
  76. package/dist/server/providers/anthropic.js +103 -33
  77. package/dist/server/providers/anthropic.js.map +1 -1
  78. package/dist/server/server-chat.js +2 -2
  79. package/dist/server/server-chat.js.map +1 -1
  80. package/dist/server/server-helpers.d.ts +8 -1
  81. package/dist/server/server-helpers.js +17 -3
  82. package/dist/server/server-helpers.js.map +1 -1
  83. package/dist/server/server-persist.js +34 -21
  84. package/dist/server/server-persist.js.map +1 -1
  85. package/dist/server/server-rate-limit.d.ts +0 -1
  86. package/dist/server/server-rate-limit.js +5 -5
  87. package/dist/server/server-rate-limit.js.map +1 -1
  88. package/dist/server/server-routes-approvals.js +2 -2
  89. package/dist/server/server-routes-approvals.js.map +1 -1
  90. package/dist/server/server-routes-auth.js +2 -2
  91. package/dist/server/server-routes-auth.js.map +1 -1
  92. package/dist/server/server-routes-events.js +2 -2
  93. package/dist/server/server-routes-events.js.map +1 -1
  94. package/dist/server/server-routes-public.js +4 -4
  95. package/dist/server/server-routes-public.js.map +1 -1
  96. package/dist/server/server-routes-webchat.js +3 -3
  97. package/dist/server/server-routes-webchat.js.map +1 -1
  98. package/dist/server/server-store-circuit-breaker.js +1 -1
  99. package/dist/server/server-store-circuit-breaker.js.map +1 -1
  100. package/dist/server/tool-router.js +7 -4
  101. package/dist/server/tool-router.js.map +1 -1
  102. package/dist/server/validation.js +11 -0
  103. package/dist/server/validation.js.map +1 -1
  104. package/dist/shared/api-client.js +38 -11
  105. package/dist/shared/api-client.js.map +1 -1
  106. package/package.json +12 -10
  107. package/vendor/ink/build/ink.js +68 -24
  108. package/vendor/ink/node_modules/react-devtools-core/README.md +152 -0
  109. package/vendor/ink/node_modules/react-devtools-core/backend.js +1 -0
  110. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js +2 -0
  111. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js.map +1 -0
  112. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js +15691 -0
  113. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js.map +1 -0
  114. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js +2 -0
  115. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js.map +1 -0
  116. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js +14 -0
  117. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js.map +1 -0
  118. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js +2 -0
  119. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js.map +1 -0
  120. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/LICENSE +21 -0
  121. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/README.md +495 -0
  122. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/browser.js +8 -0
  123. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/index.js +10 -0
  124. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/buffer-util.js +129 -0
  125. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/constants.js +10 -0
  126. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/event-target.js +184 -0
  127. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/extension.js +223 -0
  128. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/limiter.js +55 -0
  129. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/permessage-deflate.js +518 -0
  130. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/receiver.js +607 -0
  131. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/sender.js +409 -0
  132. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/stream.js +180 -0
  133. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/validation.js +104 -0
  134. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket-server.js +449 -0
  135. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket.js +1197 -0
  136. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/package.json +56 -0
  137. package/vendor/ink/node_modules/react-devtools-core/package.json +38 -0
  138. package/vendor/ink/node_modules/react-devtools-core/standalone.js +1 -0
  139. package/dist/cli/__tests__/print-mode-streaming.test.js +0 -270
  140. package/dist/cli/__tests__/print-mode.basic-output.test.js +0 -230
  141. package/dist/cli/__tests__/print-mode.session-errors.test.js +0 -252
  142. package/dist/cli/__tests__/print-mode.test.js +0 -273
  143. package/dist/cli/__tests__/serve-mode-messages.test.js +0 -338
  144. package/dist/cli/__tests__/serve-mode.messages.part2.test.js +0 -266
  145. package/dist/cli/__tests__/serve-mode.messages.test.js +0 -277
  146. package/dist/cli/__tests__/serve-mode.startup-http.test.js +0 -279
  147. package/dist/cli/__tests__/serve-mode.test.js +0 -345
  148. package/dist/cli/chat/NodeManager.d.ts +0 -30
  149. package/dist/cli/chat/NodeManager.js +0 -66
  150. package/dist/cli/chat/NodeManager.js.map +0 -1
  151. package/dist/cli/chat/chat-input-menu-handler.d.ts +0 -32
  152. package/dist/cli/chat/hooks/slash-imsg-handlers.js +0 -148
  153. package/dist/cli/chat/hooks/slash-imsg-handlers.js.map +0 -1
  154. package/dist/cli/chat/hooks/useStreamingReducer.d.ts +0 -66
  155. package/dist/cli/commands/__tests__/config-cmd.test.js +0 -270
  156. package/dist/cli/commands/__tests__/doctor.test.js +0 -257
  157. package/dist/cli/commands/__tests__/imsg-node-bridge.test.js +0 -99
  158. package/dist/cli/commands/__tests__/imsg-utils.test.js +0 -73
  159. package/dist/cli/commands/__tests__/init.test.js +0 -214
  160. package/dist/cli/commands/__tests__/mcp.test.js +0 -287
  161. package/dist/cli/commands/imsg-watcher-helpers.d.ts +0 -40
  162. package/dist/cli/commands/imsg-watcher-helpers.js +0 -184
  163. package/dist/cli/commands/imsg-watcher-helpers.js.map +0 -1
  164. package/dist/cli/commands/imsg-watcher.d.ts +0 -11
  165. package/dist/cli/commands/imsg-watcher.js +0 -230
  166. package/dist/cli/commands/imsg-watcher.js.map +0 -1
  167. package/dist/cli/services/__tests__/agent-definitions.test.js +0 -153
  168. package/dist/cli/services/__tests__/agent-events-global.test.js +0 -39
  169. package/dist/cli/services/__tests__/agent-events.part2.test.js +0 -113
  170. package/dist/cli/services/__tests__/agent-events.test.js +0 -157
  171. package/dist/cli/services/__tests__/agent-loop-auth.test.js +0 -392
  172. package/dist/cli/services/__tests__/agent-loop-budget.test.js +0 -389
  173. package/dist/cli/services/__tests__/agent-loop-tools-lifecycle.test.js +0 -430
  174. package/dist/cli/services/__tests__/agent-loop-tools-maxturns.test.js +0 -486
  175. package/dist/cli/services/__tests__/agent-loop-utils-execution.test.js +0 -528
  176. package/dist/cli/services/__tests__/agent-loop-utils-helpers.test.js +0 -466
  177. package/dist/cli/services/__tests__/agent-worker-base-execute.test.js +0 -257
  178. package/dist/cli/services/__tests__/agent-worker-base-helpers.test.js +0 -198
  179. package/dist/cli/services/__tests__/agent-worker-base.test.js +0 -278
  180. package/dist/cli/services/__tests__/auth-service-exports.test.js +0 -41
  181. package/dist/cli/services/__tests__/auth-service.part2.test.js +0 -169
  182. package/dist/cli/services/__tests__/auth-service.test.js +0 -242
  183. package/dist/cli/services/__tests__/background-processes.test.js +0 -282
  184. package/dist/cli/services/__tests__/claude-md-loader.test.js +0 -134
  185. package/dist/cli/services/__tests__/config-store.test.js +0 -247
  186. package/dist/cli/services/__tests__/debug-log.test.js +0 -199
  187. package/dist/cli/services/__tests__/edge-cases-caching.test.js +0 -174
  188. package/dist/cli/services/__tests__/edge-cases-compaction-core.test.js +0 -226
  189. package/dist/cli/services/__tests__/edge-cases-compaction-openai.test.js +0 -152
  190. package/dist/cli/services/__tests__/edge-cases-compaction-shapes.test.js +0 -53
  191. package/dist/cli/services/__tests__/edge-cases-compaction-thinking.test.js +0 -226
  192. package/dist/cli/services/__tests__/edge-cases-compaction.test.js +0 -131
  193. package/dist/cli/services/__tests__/edge-cases-paths.test.js +0 -86
  194. package/dist/cli/services/__tests__/error-logger-messages.test.js +0 -81
  195. package/dist/cli/services/__tests__/error-logger-transport.test.js +0 -119
  196. package/dist/cli/services/__tests__/error-logger.test.js +0 -264
  197. package/dist/cli/services/__tests__/file-history.test.js +0 -136
  198. package/dist/cli/services/__tests__/git-context-cache-reset.test.js +0 -223
  199. package/dist/cli/services/__tests__/git-context.test.js +0 -241
  200. package/dist/cli/services/__tests__/interactive-tools-execute.test.js +0 -166
  201. package/dist/cli/services/__tests__/interactive-tools-plan.test.js +0 -197
  202. package/dist/cli/services/__tests__/interactive-tools.part2.test.js +0 -168
  203. package/dist/cli/services/__tests__/interactive-tools.test.js +0 -179
  204. package/dist/cli/services/__tests__/keybinding-manager.test.js +0 -205
  205. package/dist/cli/services/__tests__/local-tools-dispatch.test.js +0 -404
  206. package/dist/cli/services/__tests__/local-tools.test.js +0 -238
  207. package/dist/cli/services/__tests__/lsp-manager.test.js +0 -364
  208. package/dist/cli/services/__tests__/mcp-client-connect-disconnect.test.js +0 -310
  209. package/dist/cli/services/__tests__/mcp-client.test.js +0 -93
  210. package/dist/cli/services/__tests__/memory-manager.test.js +0 -154
  211. package/dist/cli/services/__tests__/model-manager-utils.test.js +0 -154
  212. package/dist/cli/services/__tests__/model-manager.test.js +0 -175
  213. package/dist/cli/services/__tests__/permission-modes.test.js +0 -222
  214. package/dist/cli/services/__tests__/ripgrep.test.js +0 -328
  215. package/dist/cli/services/__tests__/server-tools-execute.test.js +0 -317
  216. package/dist/cli/services/__tests__/server-tools.test.js +0 -272
  217. package/dist/cli/services/__tests__/session-persistence.test.js +0 -245
  218. package/dist/cli/services/__tests__/subagent-basic.test.js +0 -489
  219. package/dist/cli/services/__tests__/subagent-edge.test.js +0 -545
  220. package/dist/cli/services/__tests__/subagent-prompts.test.js +0 -558
  221. package/dist/cli/services/__tests__/subagent-worker-errors.test.js +0 -255
  222. package/dist/cli/services/__tests__/subagent-worker.test.js +0 -242
  223. package/dist/cli/services/__tests__/system-prompt.test.js +0 -210
  224. package/dist/cli/services/__tests__/team-lead-comms-messaging.test.js +0 -250
  225. package/dist/cli/services/__tests__/team-lead-comms-result.test.js +0 -232
  226. package/dist/cli/services/__tests__/team-lead-comms-stop.test.js +0 -344
  227. package/dist/cli/services/__tests__/team-lead-comms.test.js +0 -285
  228. package/dist/cli/services/__tests__/team-lead-create.test.js +0 -327
  229. package/dist/cli/services/__tests__/team-lead-run.test.js +0 -318
  230. package/dist/cli/services/__tests__/team-lead-stop.test.js +0 -199
  231. package/dist/cli/services/__tests__/team-state-comms.test.js +0 -240
  232. package/dist/cli/services/__tests__/team-state-core.test.js +0 -230
  233. package/dist/cli/services/__tests__/team-state-tasks-complete-fail-available.test.js +0 -224
  234. package/dist/cli/services/__tests__/team-state-tasks.test.js +0 -184
  235. package/dist/cli/services/__tests__/telemetry-ai-metadata.test.js +0 -116
  236. package/dist/cli/services/__tests__/telemetry.part2.test.js +0 -195
  237. package/dist/cli/services/__tests__/telemetry.test.js +0 -176
  238. package/dist/cli/services/agent-loop-iteration.d.ts +0 -13
  239. package/dist/cli/services/agent-loop-setup.d.ts +0 -32
  240. package/dist/cli/services/agent-worker-base-api.d.ts +0 -19
  241. package/dist/cli/services/agent-worker-base-helpers.d.ts +0 -27
  242. package/dist/cli/services/agent-worker-base-tools.d.ts +0 -16
  243. package/dist/cli/services/agent-worker-base-types.d.ts +0 -81
  244. package/dist/cli/services/background-agents.d.ts +0 -26
  245. package/dist/cli/services/background-processes-ops.d.ts +0 -24
  246. package/dist/cli/services/background-tool-defs.d.ts +0 -50
  247. package/dist/cli/services/config-modules-model.test.js +0 -133
  248. package/dist/cli/services/config-modules-permission.test.js +0 -85
  249. package/dist/cli/services/config-modules-permissions.test.js +0 -85
  250. package/dist/cli/services/config-modules-session.test.js +0 -297
  251. package/dist/cli/services/format-server-response-columns.test.js +0 -265
  252. package/dist/cli/services/format-server-response-fallback.test.js +0 -65
  253. package/dist/cli/services/format-server-response-primitives-basic.test.js +0 -261
  254. package/dist/cli/services/format-server-response-primitives-nested.test.js +0 -188
  255. package/dist/cli/services/format-server-response-primitives.test.js +0 -300
  256. package/dist/cli/services/format-server-response-realworld.test.js +0 -248
  257. package/dist/cli/services/format-server-response-values.test.js +0 -247
  258. package/dist/cli/services/hooks-runners.test.js +0 -184
  259. package/dist/cli/services/hooks.glob-load.test.js +0 -233
  260. package/dist/cli/services/hooks.run-hooks.test.js +0 -184
  261. package/dist/cli/services/hooks.test.js +0 -233
  262. package/dist/cli/services/ink-incremental.d.ts +0 -19
  263. package/dist/cli/services/ink-incremental.js +0 -59
  264. package/dist/cli/services/ink-incremental.js.map +0 -1
  265. package/dist/cli/services/ink-resize-fix.d.ts +0 -18
  266. package/dist/cli/services/ink-resize-fix.js +0 -76
  267. package/dist/cli/services/ink-resize-fix.js.map +0 -1
  268. package/dist/cli/services/ink-sync-output.d.ts +0 -12
  269. package/dist/cli/services/ink-sync-output.js +0 -16
  270. package/dist/cli/services/ink-sync-output.js.map +0 -1
  271. package/dist/cli/services/interactive-tool-defs.d.ts +0 -80
  272. package/dist/cli/services/local-tools-definitions.d.ts +0 -6
  273. package/dist/cli/services/local-tools-files.test.js +0 -256
  274. package/dist/cli/services/local-tools-read-many.d.ts +0 -6
  275. package/dist/cli/services/model-router.test.js +0 -245
  276. package/dist/cli/services/rewind-rewindTo.test.js +0 -202
  277. package/dist/cli/services/rewind.test.js +0 -175
  278. package/dist/cli/services/sandbox.test.js +0 -198
  279. package/dist/cli/services/subagent-execution.d.ts +0 -12
  280. package/dist/cli/services/team-lead-auto.d.ts +0 -11
  281. package/dist/cli/services/team-lead-execution.d.ts +0 -28
  282. package/dist/cli/services/teammate-loop.js +0 -557
  283. package/dist/cli/services/teammate-loop.js.map +0 -1
  284. package/dist/cli/services/tools/__tests__/agent-tools-tasks-teams.test.js +0 -250
  285. package/dist/cli/services/tools/__tests__/agent-tools-teams.test.js +0 -200
  286. package/dist/cli/services/tools/__tests__/agent-tools.test.js +0 -340
  287. package/dist/cli/services/tools/__tests__/file-ops-cache.test.js +0 -152
  288. package/dist/cli/services/tools/__tests__/file-ops-notebook.test.js +0 -249
  289. package/dist/cli/services/tools/__tests__/file-ops-read.test.js +0 -261
  290. package/dist/cli/services/tools/__tests__/file-ops-write.test.js +0 -292
  291. package/dist/cli/services/tools/__tests__/search-tools-rg.test.js +0 -92
  292. package/dist/cli/services/tools/__tests__/search-tools.part2.test.js +0 -174
  293. package/dist/cli/services/tools/__tests__/search-tools.test.js +0 -227
  294. package/dist/cli/services/tools/__tests__/shell-exec-allowed-core.test.js +0 -163
  295. package/dist/cli/services/tools/__tests__/shell-exec-allowed-extended.test.js +0 -220
  296. package/dist/cli/services/tools/__tests__/shell-exec-allowed.part2.test.js +0 -215
  297. package/dist/cli/services/tools/__tests__/shell-exec-allowed.test.js +0 -154
  298. package/dist/cli/services/tools/__tests__/shell-exec-blocked.test.js +0 -132
  299. package/dist/cli/services/tools/__tests__/shell-exec-execution.test.js +0 -245
  300. package/dist/cli/services/tools/__tests__/task-manager-create.test.js +0 -110
  301. package/dist/cli/services/tools/__tests__/task-manager-crud.test.js +0 -339
  302. package/dist/cli/services/tools/__tests__/task-manager-list-get.test.js +0 -343
  303. package/dist/cli/services/tools/__tests__/task-manager-query.test.js +0 -346
  304. package/dist/cli/services/tools/__tests__/task-manager-routing.test.js +0 -58
  305. package/dist/cli/services/tools/__tests__/task-manager-update.test.js +0 -224
  306. package/dist/cli/services/tools/__tests__/task-manager.test.js +0 -159
  307. package/dist/cli/services/tools/__tests__/web-tools-html-search.test.js +0 -227
  308. package/dist/cli/services/tools/__tests__/web-tools.test.js +0 -285
  309. package/dist/cli/services/tools/shell-exec.test.js +0 -148
  310. package/dist/cli/shared/SharedTick.d.ts +0 -10
  311. package/dist/cli/shared/__tests__/markdown.test.js +0 -188
  312. package/dist/local-agent/__tests__/connection-disconnect.test.js +0 -201
  313. package/dist/local-agent/__tests__/connection-lifecycle.test.js +0 -289
  314. package/dist/local-agent/__tests__/connection-msghandling.test.js +0 -311
  315. package/dist/local-agent/__tests__/connection-reconnect.test.js +0 -230
  316. package/dist/local-agent/__tests__/connection-toolexec.test.js +0 -253
  317. package/dist/local-agent/__tests__/discovery.test.js +0 -328
  318. package/dist/local-agent/__tests__/executor-background.test.js +0 -219
  319. package/dist/local-agent/__tests__/executor-exec.test.js +0 -221
  320. package/dist/local-agent/__tests__/executor-jobs-sessions.test.js +0 -220
  321. package/dist/local-agent/__tests__/executor-system-info.test.js +0 -133
  322. package/dist/local-agent/__tests__/executor-systeminfo.test.js +0 -109
  323. package/dist/local-agent/__tests__/executor.test.js +0 -235
  324. package/dist/local-agent/__tests__/index.test.js +0 -139
  325. package/dist/node/__tests__/cli-channels.test.js +0 -293
  326. package/dist/node/__tests__/cli-config-edge.test.js +0 -154
  327. package/dist/node/__tests__/cli-config.test.js +0 -215
  328. package/dist/node/__tests__/config.test.js +0 -292
  329. package/dist/node/__tests__/runtime-heartbeat.test.js +0 -153
  330. package/dist/node/__tests__/runtime-lifecycle-init.test.js +0 -263
  331. package/dist/node/__tests__/runtime-lifecycle-stats.test.js +0 -180
  332. package/dist/node/__tests__/runtime-lifecycle.test.js +0 -305
  333. package/dist/node/__tests__/runtime-relay.test.js +0 -341
  334. package/dist/node/adapters/__tests__/base.test.js +0 -286
  335. package/dist/node/adapters/__tests__/discord.test.js +0 -284
  336. package/dist/node/adapters/__tests__/email-send.test.js +0 -295
  337. package/dist/node/adapters/__tests__/email.inbound-send.test.js +0 -217
  338. package/dist/node/adapters/__tests__/email.lifecycle.test.js +0 -211
  339. package/dist/node/adapters/__tests__/email.test.js +0 -290
  340. package/dist/node/adapters/__tests__/email.webhook-send.test.js +0 -251
  341. package/dist/node/adapters/__tests__/imessage-filter.test.js +0 -183
  342. package/dist/node/adapters/__tests__/imessage-lifecycle.test.js +0 -215
  343. package/dist/node/adapters/__tests__/imessage-send-restart.test.js +0 -227
  344. package/dist/node/adapters/__tests__/slack.part2.test.js +0 -135
  345. package/dist/node/adapters/__tests__/slack.test.js +0 -241
  346. package/dist/node/adapters/__tests__/sms-extras.test.js +0 -108
  347. package/dist/node/adapters/__tests__/sms-lifecycle.test.js +0 -203
  348. package/dist/node/adapters/__tests__/sms-messaging.test.js +0 -266
  349. package/dist/node/adapters/__tests__/sms.part2.test.js +0 -174
  350. package/dist/node/adapters/__tests__/sms.test.js +0 -253
  351. package/dist/node/adapters/__tests__/telegram-polling.test.js +0 -256
  352. package/dist/node/adapters/__tests__/telegram-send.test.js +0 -166
  353. package/dist/node/adapters/__tests__/webchat-inbound.test.js +0 -188
  354. package/dist/node/adapters/__tests__/webchat-outbound.test.js +0 -178
  355. package/dist/node/adapters/__tests__/whatsapp-inbound.test.js +0 -200
  356. package/dist/node/adapters/__tests__/whatsapp-send.test.js +0 -212
  357. package/dist/node/adapters/__tests__/whatsapp.test.js +0 -280
  358. package/dist/server/__tests__/gateway-fast-fail.test.js +0 -160
  359. package/dist/server/__tests__/local-agent-gateway.test.js +0 -186
  360. package/dist/server/__tests__/proxy-handlers-delegation.test.js +0 -240
  361. package/dist/server/__tests__/proxy-handlers-validation.test.js +0 -211
  362. package/dist/server/__tests__/proxy-handlers.part2.test.js +0 -240
  363. package/dist/server/__tests__/proxy-handlers.test.js +0 -213
  364. package/dist/server/__tests__/strip-base64-e2e.test.js +0 -303
  365. package/dist/server/__tests__/strip-base64.test.js +0 -256
  366. package/dist/server/__tests__/tool-router-agent-tools.test.js +0 -324
  367. package/dist/server/__tests__/tool-router-execute-core.test.js +0 -357
  368. package/dist/server/__tests__/tool-router-execute-permissions.test.js +0 -332
  369. package/dist/server/__tests__/tool-router-execute.test.js +0 -348
  370. package/dist/server/__tests__/tool-router-load.test.js +0 -432
  371. package/dist/server/__tests__/tool-router-permissions.test.js +0 -359
  372. package/dist/server/__tests__/tool-router-registry-cache.test.js +0 -383
  373. package/dist/server/__tests__/tool-router-registry-handlers.test.js +0 -272
  374. package/dist/server/__tests__/tool-router-registry.test.js +0 -331
  375. package/dist/server/__tests__/validation-inventory.test.js +0 -250
  376. package/dist/server/__tests__/validation-misc.test.js +0 -243
  377. package/dist/server/__tests__/validation-supply-chain.test.js +0 -188
  378. package/dist/server/__tests__/worker.test.js +0 -265
  379. package/dist/server/handlers/__tests__/conversation-lock.test.js +0 -117
  380. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-login.e2e.test.js +0 -268
  381. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-tokens.e2e.test.js +0 -264
  382. package/dist/server/handlers/__tests__/e2e/email-pipeline-send.e2e.test.js +0 -214
  383. package/dist/server/handlers/__tests__/e2e/email-pipeline-threads.e2e.test.js +0 -168
  384. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline-dedup.e2e.test.js +0 -229
  385. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline.e2e.test.js +0 -239
  386. package/dist/server/handlers/__tests__/e2e/error-logging-rate-limit.e2e.test.js +0 -150
  387. package/dist/server/handlers/__tests__/e2e/inventory-sync-guards.e2e.test.js +0 -177
  388. package/dist/server/handlers/__tests__/e2e/inventory-sync.e2e.test.js +0 -228
  389. package/dist/server/handlers/__tests__/e2e/inventory-sync.part2.e2e.test.js +0 -188
  390. package/dist/server/handlers/__tests__/e2e/order-lifecycle-fulfillment.e2e.test.js +0 -295
  391. package/dist/server/handlers/__tests__/e2e/order-lifecycle.e2e.test.js +0 -277
  392. package/dist/server/handlers/__tests__/e2e/order-lifecycle.fulfillment.e2e.test.js +0 -307
  393. package/dist/server/handlers/__tests__/e2e/order-lifecycle.setup.e2e.test.js +0 -177
  394. package/dist/server/handlers/__tests__/e2e/storefront-checkout-cart.e2e.test.js +0 -255
  395. package/dist/server/handlers/__tests__/e2e/storefront-checkout-webhook.e2e.test.js +0 -231
  396. package/dist/server/handlers/__tests__/e2e/workflow-execution-failures.e2e.test.js +0 -235
  397. package/dist/server/handlers/__tests__/e2e/workflow-execution.e2e.test.js +0 -294
  398. package/dist/server/handlers/__tests__/e2e/workflow-security.e2e.test.js +0 -311
  399. package/dist/server/handlers/__tests__/e2e/workflow-security.part2.e2e.test.js +0 -267
  400. package/dist/server/handlers/__tests__/workflow-cache.test.js +0 -237
  401. package/dist/server/handlers/analytics-errors-edge.test.js +0 -173
  402. package/dist/server/handlers/analytics.test.js +0 -280
  403. package/dist/server/handlers/api-docs-examples-ext.d.ts +0 -9
  404. package/dist/server/handlers/api-docs-examples-ext.js +0 -278
  405. package/dist/server/handlers/api-docs-examples-ext.js.map +0 -1
  406. package/dist/server/handlers/api-docs-examples.d.ts +0 -8
  407. package/dist/server/handlers/api-docs-examples.js +0 -221
  408. package/dist/server/handlers/api-docs-examples.js.map +0 -1
  409. package/dist/server/handlers/api-docs-sections-ext.d.ts +0 -2
  410. package/dist/server/handlers/api-docs-sections-ext.js +0 -497
  411. package/dist/server/handlers/api-docs-sections-ext.js.map +0 -1
  412. package/dist/server/handlers/api-docs-sections.d.ts +0 -21
  413. package/dist/server/handlers/api-docs-sections.js +0 -293
  414. package/dist/server/handlers/api-docs-sections.js.map +0 -1
  415. package/dist/server/handlers/api-keys.part2.test.js +0 -157
  416. package/dist/server/handlers/api-keys.test.js +0 -161
  417. package/dist/server/handlers/billing-routes.test.js +0 -123
  418. package/dist/server/handlers/billing.test.js +0 -215
  419. package/dist/server/handlers/browser-actions-errors.test.js +0 -94
  420. package/dist/server/handlers/browser-actions.part2.test.js +0 -190
  421. package/dist/server/handlers/browser-actions.test.js +0 -190
  422. package/dist/server/handlers/browser-validation.test.js +0 -257
  423. package/dist/server/handlers/catalog.test.js +0 -297
  424. package/dist/server/handlers/comms.test.js +0 -289
  425. package/dist/server/handlers/creations-advanced-collections.test.js +0 -214
  426. package/dist/server/handlers/creations-advanced-generate.test.js +0 -142
  427. package/dist/server/handlers/creations-advanced.test.js +0 -171
  428. package/dist/server/handlers/creations-collections-preview.test.js +0 -214
  429. package/dist/server/handlers/creations-crud.test.js +0 -260
  430. package/dist/server/handlers/creations-mutations.test.js +0 -197
  431. package/dist/server/handlers/crm.test.js +0 -179
  432. package/dist/server/handlers/discovery-advertise.test.js +0 -185
  433. package/dist/server/handlers/discovery-scan.test.js +0 -233
  434. package/dist/server/handlers/embeddings-embed-search.test.js +0 -196
  435. package/dist/server/handlers/embeddings-index-delete-stats.test.js +0 -140
  436. package/dist/server/handlers/embeddings-search.test.js +0 -221
  437. package/dist/server/handlers/embeddings.test.js +0 -137
  438. package/dist/server/handlers/enrichment-breach.d.ts +0 -8
  439. package/dist/server/handlers/enrichment-breach.js +0 -266
  440. package/dist/server/handlers/enrichment-breach.js.map +0 -1
  441. package/dist/server/handlers/enrichment-data.d.ts +0 -13
  442. package/dist/server/handlers/enrichment-data.js +0 -145
  443. package/dist/server/handlers/enrichment-data.js.map +0 -1
  444. package/dist/server/handlers/enrichment-mutations.test.js +0 -240
  445. package/dist/server/handlers/enrichment-queries.test.js +0 -181
  446. package/dist/server/handlers/enrichment-validation.test.js +0 -177
  447. package/dist/server/handlers/enrichment-writes.d.ts +0 -16
  448. package/dist/server/handlers/enrichment-writes.js +0 -226
  449. package/dist/server/handlers/enrichment-writes.js.map +0 -1
  450. package/dist/server/handlers/image-gen.test.js +0 -205
  451. package/dist/server/handlers/inventory.test.js +0 -380
  452. package/dist/server/handlers/kali-background.test.js +0 -222
  453. package/dist/server/handlers/kali-errors.test.js +0 -92
  454. package/dist/server/handlers/kali-validation.test.js +0 -234
  455. package/dist/server/handlers/llm-providers-actions.test.js +0 -220
  456. package/dist/server/handlers/llm-providers-anthropic.test.js +0 -239
  457. package/dist/server/handlers/llm-providers-failover.test.js +0 -232
  458. package/dist/server/handlers/llm-providers-providers.test.js +0 -300
  459. package/dist/server/handlers/llm-providers-validation.test.js +0 -239
  460. package/dist/server/handlers/local-agent-tools.test.js +0 -224
  461. package/dist/server/handlers/local-agent.test.js +0 -198
  462. package/dist/server/handlers/local-agent.tools-status.test.js +0 -204
  463. package/dist/server/handlers/local-agent.validation-exec.test.js +0 -182
  464. package/dist/server/handlers/meta-ads-audience-rules.test.js +0 -243
  465. package/dist/server/handlers/meta-ads-audience-targeting.test.js +0 -205
  466. package/dist/server/handlers/meta-ads-audiences-targeting.test.js +0 -383
  467. package/dist/server/handlers/meta-ads-crud-ads.test.js +0 -136
  468. package/dist/server/handlers/meta-ads-crud-campaigns.test.js +0 -189
  469. package/dist/server/handlers/meta-ads-crud-create.test.js +0 -303
  470. package/dist/server/handlers/meta-ads-crud-list-update.test.js +0 -259
  471. package/dist/server/handlers/meta-ads-delete-publish-sync.test.js +0 -282
  472. package/dist/server/handlers/meta-ads-insights.test.js +0 -80
  473. package/dist/server/handlers/meta-ads-list-get.test.js +0 -237
  474. package/dist/server/handlers/meta-ads-publish-delete.test.js +0 -254
  475. package/dist/server/handlers/meta-ads-publish-helpers.js +0 -117
  476. package/dist/server/handlers/meta-ads-publish-helpers.js.map +0 -1
  477. package/dist/server/handlers/meta-ads-publish-sync.test.js +0 -205
  478. package/dist/server/handlers/meta-ads-publish.test.js +0 -254
  479. package/dist/server/handlers/meta-ads-sync-insights.test.js +0 -184
  480. package/dist/server/handlers/meta-ads-update.test.js +0 -117
  481. package/dist/server/handlers/nodes-channels.test.js +0 -413
  482. package/dist/server/handlers/nodes-events.test.js +0 -131
  483. package/dist/server/handlers/nodes-list-delete.test.js +0 -171
  484. package/dist/server/handlers/nodes-messages-delivery.test.js +0 -208
  485. package/dist/server/handlers/nodes-messages.test.js +0 -211
  486. package/dist/server/handlers/nodes-register.test.js +0 -277
  487. package/dist/server/handlers/nodes.test.js +0 -353
  488. package/dist/server/handlers/operations.test.js +0 -136
  489. package/dist/server/handlers/platform-telemetry.test.js +0 -200
  490. package/dist/server/handlers/platform-websearch.test.js +0 -160
  491. package/dist/server/handlers/storefront.test.js +0 -329
  492. package/dist/server/handlers/supply-chain.test.js +0 -347
  493. package/dist/server/handlers/transcription.test.js +0 -118
  494. package/dist/server/handlers/video-gen-veo.js +0 -114
  495. package/dist/server/handlers/video-gen-veo.js.map +0 -1
  496. package/dist/server/handlers/video-gen.test.js +0 -146
  497. package/dist/server/handlers/voice.test.js +0 -153
  498. package/dist/server/handlers/workflow-steps.test.js +0 -330
  499. package/dist/server/handlers/workflows-extras.test.js +0 -65
  500. package/dist/server/handlers/workflows.part2.test.js +0 -170
  501. package/dist/server/handlers/workflows.test.js +0 -281
  502. package/dist/server/lib/__tests__/batch-client-conversion-jsonl.test.js +0 -171
  503. package/dist/server/lib/__tests__/batch-client-polling.test.js +0 -292
  504. package/dist/server/lib/__tests__/batch-client-queue.test.js +0 -270
  505. package/dist/server/lib/__tests__/clickhouse-buffer.test.js +0 -236
  506. package/dist/server/lib/__tests__/code-worker-edge-cases.test.js +0 -118
  507. package/dist/server/lib/__tests__/code-worker-pool-execute.test.js +0 -193
  508. package/dist/server/lib/__tests__/code-worker-pool-execution.test.js +0 -165
  509. package/dist/server/lib/__tests__/code-worker-pool-init.test.js +0 -131
  510. package/dist/server/lib/__tests__/code-worker-pool.test.js +0 -194
  511. package/dist/server/lib/__tests__/code-worker-sandbox-ops.test.js +0 -123
  512. package/dist/server/lib/__tests__/code-worker-sandbox.test.js +0 -217
  513. package/dist/server/lib/__tests__/code-worker.test.js +0 -179
  514. package/dist/server/lib/__tests__/compaction-service-generate.test.js +0 -229
  515. package/dist/server/lib/__tests__/compaction-service.test.js +0 -319
  516. package/dist/server/lib/__tests__/otel.test.js +0 -146
  517. package/dist/server/lib/__tests__/prompt-sanitizer-validation.test.js +0 -165
  518. package/dist/server/lib/__tests__/prompt-sanitizer.sanitize.test.js +0 -343
  519. package/dist/server/lib/__tests__/prompt-sanitizer.test.js +0 -328
  520. package/dist/server/lib/__tests__/prompt-sanitizer.validate-tool.test.js +0 -145
  521. package/dist/server/lib/__tests__/provider-capabilities.test.js +0 -263
  522. package/dist/server/lib/__tests__/provider-failover-routing.test.js +0 -145
  523. package/dist/server/lib/__tests__/provider-failover-state.test.js +0 -131
  524. package/dist/server/lib/__tests__/rate-limiter-budgets.test.js +0 -216
  525. package/dist/server/lib/__tests__/rate-limiter.budgets-tools.test.js +0 -113
  526. package/dist/server/lib/__tests__/rate-limiter.check-request.test.js +0 -141
  527. package/dist/server/lib/__tests__/rate-limiter.stats-lifecycle.test.js +0 -135
  528. package/dist/server/lib/__tests__/rate-limiter.test.js +0 -207
  529. package/dist/server/lib/__tests__/server-agent-loop-abort-conditions.test.js +0 -544
  530. package/dist/server/lib/__tests__/server-agent-loop-abort.part2.test.js +0 -504
  531. package/dist/server/lib/__tests__/server-agent-loop-abort.test.js +0 -396
  532. package/dist/server/lib/__tests__/server-agent-loop-compaction.test.js +0 -397
  533. package/dist/server/lib/__tests__/server-agent-loop-failover.test.js +0 -356
  534. package/dist/server/lib/__tests__/server-agent-loop-features-caching.test.js +0 -519
  535. package/dist/server/lib/__tests__/server-agent-loop-features-edges.test.js +0 -512
  536. package/dist/server/lib/__tests__/server-subagent-bailout.test.js +0 -194
  537. package/dist/server/lib/__tests__/server-subagent-basics.test.js +0 -348
  538. package/dist/server/lib/__tests__/server-subagent-errors-abort.test.js +0 -319
  539. package/dist/server/lib/__tests__/server-subagent-errors-progress.test.js +0 -253
  540. package/dist/server/lib/__tests__/server-subagent-errors.part2.test.js +0 -253
  541. package/dist/server/lib/__tests__/server-subagent-errors.test.js +0 -319
  542. package/dist/server/lib/__tests__/session-checkpoint-load.test.js +0 -275
  543. package/dist/server/lib/__tests__/session-checkpoint-save.test.js +0 -159
  544. package/dist/server/lib/__tests__/ssrf-guard.test.js +0 -93
  545. package/dist/server/lib/__tests__/supabase-client.test.js +0 -111
  546. package/dist/server/lib/__tests__/template-resolver.test.js +0 -317
  547. package/dist/server/lib/__tests__/utils-timeout.test.js +0 -49
  548. package/dist/server/lib/__tests__/utils.test.js +0 -322
  549. package/dist/server/providers/__tests__/anthropic-adapter.test.js +0 -228
  550. package/dist/server/providers/__tests__/anthropic-betas-toolchoice.test.js +0 -257
  551. package/dist/server/providers/__tests__/anthropic-errors.test.js +0 -262
  552. package/dist/server/providers/__tests__/anthropic-stream-core.test.js +0 -275
  553. package/dist/server/providers/__tests__/anthropic-streaming-betas.test.js +0 -247
  554. package/dist/server/providers/__tests__/anthropic-streaming-core.test.js +0 -275
  555. package/dist/server/providers/__tests__/bedrock-config.test.js +0 -177
  556. package/dist/server/providers/__tests__/bedrock-stream-behavior-streaming.test.js +0 -272
  557. package/dist/server/providers/__tests__/bedrock-stream-behavior-toolchoice.test.js +0 -214
  558. package/dist/server/providers/__tests__/bedrock-stream-behavior.part2.test.js +0 -165
  559. package/dist/server/providers/__tests__/bedrock-stream-behavior.test.js +0 -309
  560. package/dist/server/providers/__tests__/bedrock-stream-body-credentials.test.js +0 -170
  561. package/dist/server/providers/__tests__/bedrock-stream-body-extras.test.js +0 -183
  562. package/dist/server/providers/__tests__/bedrock-stream-body-request.test.js +0 -305
  563. package/dist/server/providers/__tests__/bedrock-stream-body.part2.test.js +0 -305
  564. package/dist/server/providers/__tests__/bedrock-stream-body.test.js +0 -175
  565. package/dist/server/providers/__tests__/bedrock-stream-errors.test.js +0 -165
  566. package/dist/server/providers/__tests__/gemini-config-methods.test.js +0 -182
  567. package/dist/server/providers/__tests__/gemini-config-streaming.test.js +0 -257
  568. package/dist/server/providers/__tests__/gemini-conversion-messages.test.js +0 -247
  569. package/dist/server/providers/__tests__/gemini-conversion-schema.test.js +0 -365
  570. package/dist/server/providers/__tests__/gemini-tools-choice.test.js +0 -221
  571. package/dist/server/providers/__tests__/gemini-tools-fn.test.js +0 -252
  572. package/dist/server/providers/__tests__/openai-config.test.js +0 -194
  573. package/dist/server/providers/__tests__/openai-conversion.test.js +0 -276
  574. package/dist/server/providers/__tests__/openai-messages.test.js +0 -261
  575. package/dist/server/providers/__tests__/openai-streaming.test.js +0 -394
  576. package/dist/server/providers/__tests__/openai-tools-cache.test.js +0 -227
  577. package/dist/server/providers/__tests__/registry.test.js +0 -183
  578. package/dist/server/providers/__tests__/shared.test.js +0 -297
  579. package/dist/shared/agent-core-config.test.js +0 -132
  580. package/dist/shared/agent-core-context-thinking.test.js +0 -293
  581. package/dist/shared/agent-core-loop-calls.test.js +0 -174
  582. package/dist/shared/agent-core-loop-detector-bail.test.js +0 -201
  583. package/dist/shared/agent-core-loop-detector.test.js +0 -195
  584. package/dist/shared/agent-core-loop-errors.test.js +0 -258
  585. package/dist/shared/agent-core-pricing.test.js +0 -191
  586. package/dist/shared/agent-core-sanitize-retry.test.js +0 -129
  587. package/dist/shared/api-client-build-request.test.js +0 -228
  588. package/dist/shared/api-client-build-system-caching.test.js +0 -107
  589. package/dist/shared/api-client-build.test.js +0 -223
  590. package/dist/shared/api-client-config.d.ts +0 -21
  591. package/dist/shared/api-client-helpers.d.ts +0 -57
  592. package/dist/shared/api-client-helpers.test.js +0 -261
  593. package/dist/shared/api-client-proxy-happy.test.js +0 -255
  594. package/dist/shared/api-client-proxy-retry.test.js +0 -307
  595. package/dist/shared/api-client-proxy.d.ts +0 -26
  596. package/dist/shared/api-client-proxy.test.js +0 -255
  597. package/dist/shared/api-client-retry.test.js +0 -307
  598. package/dist/shared/api-client-system-trimming.test.js +0 -261
  599. package/dist/shared/api-client-trimming.d.ts +0 -36
  600. package/dist/shared/api-client.test.js +0 -228
  601. package/dist/shared/compaction-thinking.test.js +0 -315
  602. package/dist/shared/compaction-trimming.test.js +0 -223
  603. package/dist/shared/sse-parser-callbacks.test.js +0 -422
  604. package/dist/shared/sse-parser-collect.test.js +0 -252
  605. package/dist/shared/sse-parser-e2e.test.js +0 -558
  606. package/dist/shared/sse-parser-parse.test.js +0 -253
  607. package/dist/shared/tool-dispatch-advanced-batch-build.test.js +0 -405
  608. package/dist/shared/tool-dispatch-advanced.test.js +0 -320
  609. package/dist/shared/tool-dispatch-basic.test.js +0 -278
  610. package/dist/shared/tool-dispatch-content.d.ts +0 -14
  611. package/dist/shared/tool-dispatch-parallel.test.js +0 -378
  612. package/dist/webchat/__tests__/widget-messaging.test.js +0 -323
  613. package/dist/webchat/__tests__/widget.test.js +0 -273
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-steps.js","names":["createHmac","timingSafeEqual","randomUUID","resolveTemplate","evaluateCondition","sanitizeError","executeWithPool","initWorkerPool","getPoolStats","shutdownPool","batchClient","getProvider","createLogger","startSpan","queueSpan","auditRowToSpan","classifyErrorType","log","webhookRateCounters","Map","MAX_INLINE_DEPTH","CODE_TIMEOUT_MS","CODE_OUTPUT_MAX","MAX_FOR_EACH_ITEMS","MAX_PARALLEL_CHILDREN","GUEST_APPROVAL_SECRET","process","env","FLY_INTERNAL_SECRET","GUEST_APPROVAL_BASE_URL","generateGuestApprovalUrl","approvalId","action","expiresAt","payload","sig","update","digest","encodeURIComponent","verifyGuestApprovalSignature","expected","Buffer","from","logWorkflowEvent","supabase","runId","eventType","stepRunId","error","insert","run_id","step_run_id","event_type","warn","err","message","checkFlowControl","step","config","step_config","concurrencyLimit","concurrency_limit","concurrencyKey","concurrency_key","step_key","count","select","head","eq","store_id","neq","allowed","reason","rateLimit","rate_limit","rateWindowSec","rate_window_seconds","windowStart","Date","now","toISOString","in","gte","_executeTool","_runAgentQuery","_broadcastToken","_broadcastStepError","setToolExecutor","fn","setAgentExecutor","setTokenBroadcaster","setStepErrorBroadcaster","surfaceStepError","errorMessage","timestamp","error_details","step_name","step_type","error_message","type","workflow_id","executeToolStep","ctx","storeId","traceId","success","toolName","tool_name","argsTemplate","args_template","args","resolvedArgs","template_data","mergedData","trigger","stepData","Object","entries","steps","output","assign","keys","length","tool_id","cb","checkToolCircuitBreaker","result","updateToolCircuitBreaker","data","executeConditionStep","expression","on_true","on_false","branch","undefined","condition_result","executeTransformStep","mapping","executeAgentStep","agentId","agent_id","promptTemplate","prompt_template","prompt","allowedTools","allowed_tools","blockedTools","blocked_tools","requireApprovalTools","require_approval_tools","gatedPrompt","join","approvedTools","input","approved_tools","pendingTools","filter","t","includes","maxTurns","max_turns","useBatch","use_batch","model","provider","batchProvider","requestId","replace","slice","batchResult","processSingle","role","content","max_tokens","temperature","response","text","usage","batch","onToken","token","validateUrl","executeWebhookOutStep","url","ssrfError","method","toUpperCase","headers","k","v","body","bodyTemplate","body_template","JSON","stringify","hmac_secret","hmac","controller","AbortController","timer","setTimeout","abort","resp","fetch","signal","clearTimeout","ct","get","json","ok","status","String","substring","name","executeNoopStep","noop","executeLlmBatchStep","systemTemplate","system","maxTokens","tools","batch_request_id","executeApprovalStep","approval_status","approvalData","isApproved","approved","response_data","approval_data","responded_by","on_approve","on_reject","title","description","options","timeoutSeconds","timeout_seconds","timeoutAction","timeout_action","channels","notification_channels","form_schema","assigned_to","assigned_role","expires_at","guestUrls","optionsList","Array","isArray","opt","waiting_for","guest_urls","parseCronField","field","min","max","values","Set","part","split","trimmed","trim","i","add","range","stepStr","parseInt","isNaN","start","end","map","Number","s","e","n","sort","a","b","getUtcOffsetMinutes","date","tz","fmt","Intl","DateTimeFormat","timeZone","year","month","day","hour","minute","second","hour12","p","fromEntries","formatToParts","x","value","wallMs","UTC","getTime","getNextCronTime","after","timezone","parts","minutes","hours","doms","months","dows","domRestricted","dowRestricted","useDomDowOr","effectiveTz","offsetMin","localEpoch","candidate","setUTCSeconds","setUTCMinutes","getUTCMinutes","maxMs","lastOffsetDay","getUTCDate","currentDay","approxUtc","newOffset","drift","setTime","realUtc","mo","getUTCMonth","hr","getUTCHours","mi","dow","getUTCDay","setUTCMonth","setUTCHours","domMatch","dowMatch","dayMatch","setUTCDate","verifyOffset","processScheduleTriggers","dueWorkflows","not","lte","limit","fired","wf","isOneTime","cron_expression","rpc","p_workflow_id","id","p_store_id","p_trigger_type","p_trigger_payload","cron","one_time","scheduled_at","p_idempotency_key","workflowId","trace_id","executeInlineChain","last_scheduled_at","next_run_at","is_active","nextRun","DEFAULT_MAX_RUN_DURATION_SEC","enforceWorkflowTimeouts","timedOut","run","workflows","maxDuration","max_run_duration_seconds","elapsed","started_at","completeWorkflowRun","Math","round","archiveToDlq","elapsedSec","zombieRuns","activeSteps","checkWorkflowCompletion","lastOrphanCleanupAt","ORPHAN_CLEANUP_INTERVAL_MS","cleanupOrphanedSteps","orphans","cleaned","runStatus","workflow_runs","completed_at","info","lastDlqRetryAt","DLQ_RETRY_INTERVAL_MS","DLQ_RETRY_BATCH_SIZE","DLQ_MAX_RETRY_ATTEMPTS","processDlqRetries","or","lt","order","ascending","retried","entry","last_retry_at","backoffMs","pow","retry_count","trigger_type","trigger_payload","_dlq_retry","_dlq_entry_id","last_error","retried_run_id","dlqEntryId","retryCount","processEventTriggers","events","claimed","claimErr","batch_size","debug","fallbackEvents","eventIds","uniqueStoreIds","uniqueEventTypes","allSubs","subsMap","sub","key","has","set","push","processed","event","subs","processed_at","filter_expression","event_payload","pass","idempotencyKey","startErr","_event_id","_event_type","_event_source","source","eventId","deduplicated","workflowName","single","workflow_name","error_step_key","step_outputs","run_duration_ms","duration_ms","executeCodeStepIsolated","code","language","timeoutMs","timeout_ms","context","outputStr","truncated","executePythonCode","_code","_ctx","toolId","circuit_breaker_state","trippedAt","circuit_breaker_tripped_at","cooldownMs","circuit_breaker_cooldown_seconds","TRANSIENT_ERROR_PATTERNS","isTransientError","some","pattern","test","circuit_breaker_failures","newFailures","circuit_breaker_threshold","severity","resource_type","resource_id","service_name","span_kind","status_code","start_time","end_time","details","failures","threshold","handleWorkflowCircuitBreaker","reclaimStaleSteps","MIN_STALE_THRESHOLD_MS","MAX_STALE_AGE_MS","staleSteps","reclaimed","timeoutSec","workflow_steps","staleThreshold","exhaustedRetries","attempt_count","max_attempts","next_retry_at","stepKey","processWorkflowSteps","batchSize","catch","claimedRaw","errors","workflowIds","openBreakers","blockedIds","w","blocked","affectedRuns","skippedSteps","blockedWorkflows","size","stepCount","runIds","runTraces","traceMap","r","isForEachEmailStep","parent_step_run_id","emailForEachSteps","otherSteps","processStep","applyVersionOverrides","executeAndAdvance","errMsg","Promise","all","processWaitingSteps","resolved","subWfSteps","childRunIds","child_run_id","Boolean","childRuns","runMap","childRun","accumulateAndAdvance","aggregatedParents","aggErr","waitingParents","parent","totalChildren","doneChildren","childOutputs","outputs","c","failedKids","allSuccess","children","total","failed","total_children","done_children","childOutputsArr","child_outputs","failed_children","firstError","find","parent_id","parent_run_id","parent_step_key","stepDef","wsDef","versionedSteps","loadVersionedSteps","vStep","on_success","on_failure","max_retries","step_id","stepOutput","p_run_id","p_step_key","p_step_output","then","rpcErr","newOutputs","createNextStepRunByKey","startTime","span","attempt","prevRun","nextStepKey","flowCheck","flow_control","workflow","val","stepTimeoutSec","stepTimeoutMs","stepTimer","stepTimeoutPromise","_","reject","Error","race","delaySec","seconds","delay_seconds","resume_at","delayed","childWfId","payloadTemplate","trigger_payload_template","startResult","child_workflow_id","stepKeys","step_keys","child_steps","parallel","itemsExpr","items","targetStepKey","maxItems","max_items","targetStep","item","idx","waiting_for_count","target_step","approvalResult","customUrl","endpoint","customSsrfError","customHeaders","customBody","payload_config","ctrl","respData","waitpoint_completed","waitpoint_data","waitpointToken","waitpointTimeout","waitpointExpires","label","timeoutErr","durationMs","setError","rpcError","retryError","lockError","cpError","sequence_number","request_id","error_type","retryPolicy","retry_policy","backoffType","backoff_type","baseDelay","backoff_base_seconds","retry_delay_seconds","maxBackoff","max_backoff_seconds","backoffDelay","random","retryOn","retry_on","shouldRetry","VERSION_CACHE_MAX_SIZE","versionedStepsCache","VERSION_CACHE_TTL_MS","clearStepCache","clear","versionedStepsCacheSet","delete","excess","removed","setInterval","cached","version_id","version","resolveStepDef","nextStep","max_steps_per_run","inserted","claimStepForRun","row","input_schema","depth","depthLimit","runData","asyncTypes","allSteps","activeStatuses","failedSteps","vStepMap","stepIds","stepDefs","defMap","d","def","errorStepKey","resolvedTraceId","failedStepRuns","errorCount","errorLog","sr","updatedMetadata","metadata","error_count","error_log","updatedRows","updateErr","current_step_key","sendErrorNotification","errorPayload","error_step","errorWebhookSsrf","on_error_webhook_url","on_error_email","to","subject","handleWebhookIngestion","slug","rawBody","endpointQuery","endpoints","counter","timestamps","max_requests_per_minute","verify_signature","signature","signing_secret","sigBuf","expBuf","MAX_TRIGGER_PAYLOAD_BYTES","parse","raw","payload_transform","last_received_at","total_received","input_bytes","sync_response","sync_timeout_seconds","deadline"],"sources":["../../../src/server/handlers/workflow-steps.ts"],"sourcesContent":["// server/handlers/workflow-steps.ts — Step executor engine\n// Extracted from workflows.ts to separate step execution from workflow CRUD/management.\n//\n// Contains: step type executors, executeAndAdvance, inline chain execution,\n// circuit breakers, code execution (JS/Python), cron parser, schedule/timeout processing,\n// event trigger processing, flow control, webhook ingestion, and all step advancement helpers.\n\nimport { createHmac, timingSafeEqual, randomUUID } from \"node:crypto\";\n// P0 FIX: node:vm import removed — in-process code sandbox eliminated\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { resolveTemplate, evaluateCondition, type TemplateContext } from \"../lib/template-resolver.js\";\nimport { sanitizeError } from \"../../shared/agent-core.js\";\nimport { executeWithPool, initWorkerPool, getPoolStats, shutdownPool } from \"../lib/code-worker-pool.js\";\nimport { batchClient } from \"../lib/batch-client.js\";\nimport { getProvider } from \"../../shared/constants.js\";\nimport { createLogger } from \"../lib/logger.js\";\nimport { startSpan } from \"../lib/otel.js\";\nimport { queueSpan, auditRowToSpan, classifyErrorType } from \"../lib/clickhouse-buffer.js\";\n\nconst log = createLogger(\"workflow-steps\");\n\n// In-memory sliding-window rate limiter for webhooks (replaces audit_logs read)\nconst webhookRateCounters = new Map<string, { timestamps: number[] }>();\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst MAX_INLINE_DEPTH = 50;\nconst CODE_TIMEOUT_MS = 5000;\nconst CODE_OUTPUT_MAX = 102_400; // 100KB\nconst MAX_FOR_EACH_ITEMS = 1000; // P2 FIX: Prevent unbounded for_each expansion\nconst MAX_PARALLEL_CHILDREN = 100; // P1 FIX: Cap parallel step fan-out\nconst GUEST_APPROVAL_SECRET = process.env.GUEST_APPROVAL_SECRET || process.env.FLY_INTERNAL_SECRET || \"\";\nconst GUEST_APPROVAL_BASE_URL = \"https://whale-agent.fly.dev/approvals/guest\";\n\n// ============================================================================\n// GUEST APPROVAL — HMAC-signed URLs for unauthenticated approvers\n// ============================================================================\n\nexport function generateGuestApprovalUrl(approvalId: string, action: string, expiresAt: string): string | null {\n if (!GUEST_APPROVAL_SECRET) return null; // Guest approvals disabled — no signing secret configured\n const payload = `${approvalId}:${action}:${expiresAt}`;\n const sig = createHmac(\"sha256\", GUEST_APPROVAL_SECRET).update(payload).digest(\"hex\");\n return `${GUEST_APPROVAL_BASE_URL}/${approvalId}?action=${action}&expires=${encodeURIComponent(expiresAt)}&sig=${sig}`;\n}\n\nexport function verifyGuestApprovalSignature(approvalId: string, action: string, expiresAt: string, sig: string): boolean {\n if (!GUEST_APPROVAL_SECRET) return false; // Guest approvals disabled — no signing secret configured\n const payload = `${approvalId}:${action}:${expiresAt}`;\n const expected = createHmac(\"sha256\", GUEST_APPROVAL_SECRET).update(payload).digest(\"hex\");\n try {\n return timingSafeEqual(Buffer.from(sig, \"hex\"), Buffer.from(expected, \"hex\"));\n } catch {\n return false;\n }\n}\n\n// ============================================================================\n// EVENT JOURNAL — append-only state transition log\n// ============================================================================\n\nexport async function logWorkflowEvent(\n supabase: SupabaseClient, runId: string, eventType: string,\n payload: Record<string, unknown>, stepRunId?: string,\n): Promise<void> {\n const { error } = await supabase.from(\"workflow_events\").insert({\n run_id: runId,\n step_run_id: stepRunId || null,\n event_type: eventType,\n payload,\n });\n if (error) log.warn({ err: error.message, runId, eventType }, \"logWorkflowEvent insert failed\");\n}\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface StepClaim {\n step_run_id: string;\n run_id: string;\n workflow_id: string;\n store_id: string;\n step_id: string;\n step_key: string;\n step_type: string;\n step_config: Record<string, unknown>;\n on_success: string | null;\n on_failure: string | null;\n timeout_seconds: number;\n input_schema: Record<string, unknown> | null;\n step_outputs: Record<string, unknown>;\n trigger_payload: Record<string, unknown>;\n attempt_count: number;\n max_attempts: number;\n max_steps_per_run: number;\n input: unknown | null;\n parent_step_run_id: string | null;\n retry_delay_seconds: number;\n}\n\nexport interface StepResult {\n success: boolean;\n output?: unknown;\n error?: string;\n branch?: string;\n}\n\n// ============================================================================\n// FLOW CONTROL — concurrency + rate limiting at step level\n// ============================================================================\n\nasync function checkFlowControl(\n supabase: SupabaseClient, step: StepClaim,\n): Promise<{ allowed: boolean; reason?: string }> {\n const config = step.step_config;\n\n // Per-step concurrency limit\n // P0 FIX: Filter by store_id to prevent cross-tenant data access in flow control decisions\n const concurrencyLimit = config.concurrency_limit as number;\n if (concurrencyLimit && concurrencyLimit > 0) {\n const concurrencyKey = (config.concurrency_key as string) || step.step_key;\n const { count } = await supabase.from(\"workflow_step_runs\")\n .select(\"id\", { count: \"exact\", head: true })\n .eq(\"step_key\", concurrencyKey)\n .eq(\"status\", \"running\")\n .eq(\"store_id\", step.store_id)\n .neq(\"id\", step.step_run_id); // exclude self\n if ((count || 0) >= concurrencyLimit) {\n return { allowed: false, reason: `Concurrency limit ${concurrencyLimit} reached for '${concurrencyKey}'` };\n }\n }\n\n // Per-step rate limit (max N executions per window)\n // P0 FIX: Filter by store_id to prevent cross-tenant data access in flow control decisions\n const rateLimit = config.rate_limit as number;\n const rateWindowSec = (config.rate_window_seconds as number) || 60;\n if (rateLimit && rateLimit > 0) {\n const windowStart = new Date(Date.now() - rateWindowSec * 1000).toISOString();\n const { count } = await supabase.from(\"workflow_step_runs\")\n .select(\"id\", { count: \"exact\", head: true })\n .eq(\"step_key\", step.step_key)\n .eq(\"store_id\", step.store_id)\n .in(\"status\", [\"success\", \"running\"])\n .gte(\"started_at\", windowStart);\n if ((count || 0) >= rateLimit) {\n return { allowed: false, reason: `Rate limit ${rateLimit}/${rateWindowSec}s reached for '${step.step_key}'` };\n }\n }\n\n return { allowed: true };\n}\n\n// ============================================================================\n// INJECTED EXECUTORS (set from index.ts to avoid circular deps)\n// ============================================================================\n\ntype ExecuteToolFn = (\n supabase: SupabaseClient,\n toolName: string,\n args: Record<string, unknown>,\n storeId?: string,\n traceId?: string,\n) => Promise<{ success: boolean; data?: unknown; error?: string }>;\n\ntype TokenBroadcastFn = (runId: string, stepKey: string, token: string) => void;\n\ntype StepErrorBroadcastFn = (runId: string, data: {\n type: \"workflow_error\";\n workflow_id: string;\n run_id: string;\n step_name: string;\n step_type: string;\n error: string;\n timestamp: string;\n}) => void;\n\ntype RunAgentQueryFn = (\n supabase: SupabaseClient,\n agentId: string,\n prompt: string,\n storeId: string,\n maxTurns?: number,\n onToken?: (token: string) => void,\n traceId?: string,\n) => Promise<{ success: boolean; response?: string; error?: string }>;\n\nlet _executeTool: ExecuteToolFn | null = null;\nlet _runAgentQuery: RunAgentQueryFn | null = null;\nlet _broadcastToken: TokenBroadcastFn | null = null;\nlet _broadcastStepError: StepErrorBroadcastFn | null = null;\n\nexport function setToolExecutor(fn: ExecuteToolFn): void { _executeTool = fn; }\nexport function setAgentExecutor(fn: RunAgentQueryFn): void { _runAgentQuery = fn; }\nexport function setTokenBroadcaster(fn: TokenBroadcastFn): void { _broadcastToken = fn; }\nexport function setStepErrorBroadcaster(fn: StepErrorBroadcastFn): void { _broadcastStepError = fn; }\n\n/** Broadcast a step error to SSE clients and persist error_details on the step run. */\nasync function surfaceStepError(\n supabase: SupabaseClient,\n step: { step_run_id: string; run_id: string; workflow_id: string; step_key: string; step_type: string },\n errorMessage: string,\n): Promise<void> {\n const timestamp = new Date().toISOString();\n\n // 1. Persist structured error_details on the step run record\n await supabase.from(\"workflow_step_runs\").update({\n error_details: {\n step_name: step.step_key,\n step_type: step.step_type,\n error_message: errorMessage,\n timestamp,\n },\n }).eq(\"id\", step.step_run_id);\n\n // 2. Broadcast via SSE so connected clients see the error in real time\n if (_broadcastStepError) {\n _broadcastStepError(step.run_id, {\n type: \"workflow_error\",\n workflow_id: step.workflow_id,\n run_id: step.run_id,\n step_name: step.step_key,\n step_type: step.step_type,\n error: errorMessage,\n timestamp,\n });\n }\n}\n\n// ============================================================================\n// STEP EXECUTORS\n// ============================================================================\n\nasync function executeToolStep(\n supabase: SupabaseClient, config: Record<string, unknown>,\n ctx: TemplateContext, storeId: string, traceId?: string,\n): Promise<StepResult> {\n if (!_executeTool) return { success: false, error: \"Tool executor not initialized\" };\n const toolName = config.tool_name as string;\n if (!toolName) return { success: false, error: \"No tool_name in step config\" };\n\n const argsTemplate = (config.args_template || config.args || {}) as Record<string, unknown>;\n const resolvedArgs = resolveTemplate(argsTemplate, ctx) as Record<string, unknown>;\n\n // For email steps: auto-inject template_data from workflow context so {{variable}} placeholders resolve\n if (toolName === \"email\" && (resolvedArgs.action === \"send\" || resolvedArgs.action === \"send_template\") && !resolvedArgs.template_data) {\n const mergedData: Record<string, unknown> = { ...(ctx.trigger || {}) };\n for (const [, stepData] of Object.entries(ctx.steps || {})) {\n if (stepData?.output && typeof stepData.output === \"object\") {\n Object.assign(mergedData, stepData.output as Record<string, unknown>);\n }\n }\n if (Object.keys(mergedData).length > 0) {\n resolvedArgs.template_data = mergedData;\n }\n }\n\n if (config.tool_id) {\n const cb = await checkToolCircuitBreaker(supabase, config.tool_id as string);\n if (!cb.allowed) return { success: false, error: cb.reason };\n }\n\n const result = await _executeTool(supabase, toolName, resolvedArgs, storeId, traceId);\n\n if (config.tool_id) await updateToolCircuitBreaker(supabase, config.tool_id as string, result.success, result.error);\n\n return result.success\n ? { success: true, output: result.data }\n : { success: false, error: result.error };\n}\n\nfunction executeConditionStep(config: Record<string, unknown>, ctx: TemplateContext): StepResult {\n const expression = config.expression as string;\n if (!expression) return { success: false, error: \"No expression in condition step\" };\n if (!config.on_true && !config.on_false) {\n return { success: false, output: { error: \"Condition step must have at least on_true or on_false defined\" } };\n }\n const result = evaluateCondition(expression, ctx);\n const branch = result ? (config.on_true as string || undefined) : (config.on_false as string || undefined);\n return { success: true, output: { condition_result: result, branch }, branch };\n}\n\nfunction executeTransformStep(config: Record<string, unknown>, ctx: TemplateContext): StepResult {\n const mapping = config.mapping as Record<string, unknown>;\n if (!mapping) return { success: false, error: \"No mapping in transform step\" };\n return { success: true, output: resolveTemplate(mapping, ctx) };\n}\n\nasync function executeAgentStep(\n config: Record<string, unknown>, ctx: TemplateContext, storeId: string,\n supabase: SupabaseClient, step?: StepClaim, traceId?: string,\n): Promise<StepResult> {\n if (!_runAgentQuery) return { success: false, error: \"Agent executor not initialized\" };\n const agentId = config.agent_id as string;\n if (!agentId) return { success: false, error: \"No agent_id in agent step config\" };\n\n const promptTemplate = (config.prompt_template || config.prompt || \"\") as string;\n const prompt = resolveTemplate(promptTemplate, ctx) as string;\n if (!prompt) return { success: false, error: \"No prompt resolved for agent step\" };\n\n // AI tool gating — inject allowed/blocked tool lists into prompt\n const allowedTools = config.allowed_tools as string[] | undefined;\n const blockedTools = config.blocked_tools as string[] | undefined;\n const requireApprovalTools = config.require_approval_tools as string[] | undefined;\n\n let gatedPrompt = prompt;\n if (allowedTools?.length) {\n gatedPrompt += `\\n\\n[SYSTEM: You may ONLY use these tools: ${allowedTools.join(\", \")}. Refuse any other tool calls.]`;\n }\n if (blockedTools?.length) {\n gatedPrompt += `\\n\\n[SYSTEM: You must NEVER use these tools: ${blockedTools.join(\", \")}. Use alternatives instead.]`;\n }\n if (requireApprovalTools?.length && step) {\n // Check if approval was already given (stored in step input from approval step)\n const approvedTools = (step.input as any)?.approved_tools as string[] | undefined;\n const pendingTools = requireApprovalTools.filter(t => !approvedTools?.includes(t));\n if (pendingTools.length > 0) {\n gatedPrompt += `\\n\\n[SYSTEM: The following tools require human approval before use: ${pendingTools.join(\", \")}. Do NOT call them — describe what you would do and why, then stop.]`;\n }\n }\n\n const maxTurns = (config.max_turns as number) || 5;\n const useBatch = config.use_batch === true;\n\n // Batch mode: single-turn LLM call via Batch API for ~50% cost savings.\n // Only valid when no tool loop is needed (the batch API doesn't support agentic tool loops).\n if (useBatch && maxTurns <= 1) {\n const model = (config.model as string) || \"claude-sonnet-4-6\";\n const provider = getProvider(model);\n const batchProvider = (provider === \"openai\") ? \"openai\" as const : \"anthropic\" as const;\n const requestId = `wf_agent_${randomUUID().replace(/-/g, \"\").slice(0, 12)}`;\n\n try {\n const batchResult = await batchClient.processSingle(\n requestId,\n batchProvider,\n model,\n [{ role: \"user\", content: gatedPrompt }],\n { max_tokens: (config.max_tokens as number) || 4096, temperature: config.temperature as number | undefined },\n );\n\n return batchResult.success\n ? { success: true, output: { response: batchResult.text || \"\", usage: batchResult.usage, batch: true } }\n : { success: false, error: batchResult.error || \"Batch agent request failed\" };\n } catch (err) {\n return { success: false, error: sanitizeError(err) };\n }\n }\n\n // Wire up token broadcasting for SSE streaming to connected clients\n const onToken = step && _broadcastToken\n ? (token: string) => _broadcastToken!(step.run_id, step.step_key, token)\n : undefined;\n\n const result = await _runAgentQuery(supabase, agentId, gatedPrompt, storeId, maxTurns, onToken, traceId);\n\n return result.success\n ? { success: true, output: { response: result.response } }\n : { success: false, error: result.error };\n}\n\n// P1 FIX: Use shared SSRF guard module (enhanced with DNS resolve-then-check, IPv6-mapped, CGNAT)\nimport { validateUrl } from \"../lib/ssrf-guard.js\";\n\nasync function executeWebhookOutStep(\n config: Record<string, unknown>, ctx: TemplateContext,\n): Promise<StepResult> {\n const url = resolveTemplate(config.url as string, ctx) as string;\n if (!url) return { success: false, error: \"No URL in webhook_out step\" };\n // P0 FIX: Use async validateUrl (DNS resolve-then-check) instead of sync isBlockedUrl\n const ssrfError = await validateUrl(url);\n if (ssrfError) return { success: false, error: `Blocked: ${ssrfError}` };\n\n const method = ((config.method as string) || \"POST\").toUpperCase();\n const headers: Record<string, string> = {};\n if (config.headers && typeof config.headers === \"object\") {\n for (const [k, v] of Object.entries(config.headers as Record<string, string>)) {\n headers[k] = resolveTemplate(v, ctx) as string;\n }\n }\n\n let body: string | undefined;\n if (method !== \"GET\" && method !== \"HEAD\") {\n const bodyTemplate = config.body_template || {};\n body = JSON.stringify(resolveTemplate(bodyTemplate, ctx));\n if (!headers[\"Content-Type\"]) headers[\"Content-Type\"] = \"application/json\";\n }\n\n if (config.hmac_secret && body) {\n const hmac = createHmac(\"sha256\", config.hmac_secret as string).update(body).digest(\"hex\");\n headers[\"X-Webhook-Signature\"] = `sha256=${hmac}`;\n }\n\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 30_000);\n const resp = await fetch(url, { method, headers, body, signal: controller.signal });\n clearTimeout(timer);\n\n const ct = resp.headers.get(\"content-type\") || \"\";\n const data = ct.includes(\"json\") ? await resp.json() : await resp.text();\n\n if (!resp.ok) return { success: false, error: `HTTP ${resp.status}: ${String(data).substring(0, 500)}` };\n return { success: true, output: { status: resp.status, data } };\n } catch (err: any) {\n if (err.name === \"AbortError\") return { success: false, error: \"Webhook request timed out\" };\n return { success: false, error: sanitizeError(err) };\n }\n}\n\nfunction executeNoopStep(): StepResult {\n return { success: true, output: { noop: true } };\n}\n\n\n// ============================================================================\n// BATCH LLM STEP — non-streaming LLM via Batch API (~50% cost savings)\n// ============================================================================\n\n/**\n * Execute an LLM request via the Batch API instead of streaming.\n * Designed for workflow steps that don't need real-time token streaming.\n *\n * Step config:\n * model: string — model ID (e.g. \"claude-sonnet-4-6\", \"gpt-5-mini\")\n * prompt: string — prompt template (resolved with ctx)\n * system: string — optional system prompt template\n * max_tokens: number — optional, default 4096\n * temperature: number — optional\n * tools: array — optional tool definitions for the LLM\n */\nasync function executeLlmBatchStep(\n config: Record<string, unknown>, ctx: TemplateContext,\n): Promise<StepResult> {\n const model = config.model as string;\n if (!model) return { success: false, error: \"No model in llm_batch step config\" };\n\n const promptTemplate = (config.prompt_template || config.prompt || \"\") as string;\n const prompt = resolveTemplate(promptTemplate, ctx) as string;\n if (!prompt) return { success: false, error: \"No prompt resolved for llm_batch step\" };\n\n const systemTemplate = config.system as string | undefined;\n const system = systemTemplate ? resolveTemplate(systemTemplate, ctx) as string : undefined;\n\n const maxTokens = (config.max_tokens as number) || 4096;\n const temperature = config.temperature as number | undefined;\n const tools = config.tools as unknown[] | undefined;\n\n // Determine provider from model ID\n const provider = getProvider(model);\n const batchProvider = (provider === \"openai\") ? \"openai\" as const : \"anthropic\" as const;\n\n const requestId = `wf_${randomUUID().replace(/-/g, \"\").slice(0, 16)}`;\n\n try {\n const result = await batchClient.processSingle(\n requestId,\n batchProvider,\n model,\n [{ role: \"user\", content: prompt }],\n { system, tools, max_tokens: maxTokens, temperature },\n );\n\n if (result.success) {\n return {\n success: true,\n output: {\n response: result.text || \"\",\n content: result.content,\n usage: result.usage,\n batch_request_id: requestId,\n },\n };\n } else {\n return { success: false, error: result.error || \"Batch LLM request failed\" };\n }\n } catch (err) {\n return { success: false, error: sanitizeError(err) };\n }\n}\n\n// ============================================================================\n// PHASE 2: APPROVAL STEP EXECUTOR\n// ============================================================================\n\nasync function executeApprovalStep(\n supabase: SupabaseClient, step: StepClaim, ctx: TemplateContext,\n): Promise<StepResult | \"waiting\"> {\n const config = step.step_config;\n\n // Second pass — step was resumed after approval response\n if (step.input && typeof step.input === \"object\" && (step.input as any).approval_status) {\n const approvalData = step.input as { approval_status: string; approval_data?: unknown; responded_by?: string };\n const isApproved = approvalData.approval_status === \"approved\" || approvalData.approval_status === \"approve\";\n return {\n success: true,\n output: {\n approved: isApproved,\n status: approvalData.approval_status,\n response_data: approvalData.approval_data,\n responded_by: approvalData.responded_by,\n },\n branch: isApproved ? (config.on_approve as string) : (config.on_reject as string),\n };\n }\n\n // First pass — create approval request and wait\n const title = resolveTemplate((config.title || \"Approval Required\") as string, ctx) as string;\n const description = config.description ? resolveTemplate(config.description as string, ctx) as string : null;\n const prompt = config.prompt ? resolveTemplate(config.prompt as string, ctx) as string : null;\n const options = config.options || [\"approve\", \"reject\"];\n const timeoutSeconds = (config.timeout_seconds as number) || 86400;\n const timeoutAction = (config.timeout_action as string) || \"fail\";\n const channels = config.notification_channels || [\"push\"];\n\n const expiresAt = new Date(Date.now() + timeoutSeconds * 1000).toISOString();\n\n await supabase.from(\"workflow_approval_requests\").insert({\n store_id: step.store_id,\n run_id: step.run_id,\n step_run_id: step.step_run_id,\n workflow_id: step.workflow_id,\n title,\n description,\n prompt,\n options,\n form_schema: config.form_schema || null,\n assigned_to: config.assigned_to || null,\n assigned_role: config.assigned_role || null,\n expires_at: expiresAt,\n timeout_action: timeoutAction,\n notification_channels: channels,\n });\n\n // Generate guest approval URLs (signed, no auth required) — only if signing secret is configured\n const guestUrls: Record<string, string> = {};\n const optionsList = Array.isArray(options) ? options as string[] : [\"approve\", \"reject\"];\n for (const opt of optionsList) {\n const url = generateGuestApprovalUrl(step.step_run_id, opt, expiresAt);\n if (url) guestUrls[opt] = url;\n }\n\n // Set step to waiting\n await supabase.from(\"workflow_step_runs\").update({\n status: \"waiting\",\n output: { waiting_for: \"approval\", title, expires_at: expiresAt, guest_urls: guestUrls },\n }).eq(\"id\", step.step_run_id);\n\n return \"waiting\";\n}\n\n// ============================================================================\n// PHASE 7: ENHANCED CODE EXECUTION\n// ============================================================================\n\n// Re-export pool management for index.ts to initialize on startup\nexport { initWorkerPool, getPoolStats, shutdownPool };\n\n// ============================================================================\n// CRON EXPRESSION PARSER — 5-field (min hour dom mon dow)\n// No external dependencies. Supports: *, */N, N-M, N,M, N\n// ============================================================================\n\nfunction parseCronField(field: string, min: number, max: number): number[] {\n const values: Set<number> = new Set();\n for (const part of field.split(\",\")) {\n const trimmed = part.trim();\n if (trimmed === \"*\") {\n for (let i = min; i <= max; i++) values.add(i);\n } else if (trimmed.includes(\"/\")) {\n const [range, stepStr] = trimmed.split(\"/\");\n const step = parseInt(stepStr, 10);\n if (isNaN(step) || step <= 0) continue;\n let start = min, end = max;\n if (range !== \"*\") {\n if (range.includes(\"-\")) {\n [start, end] = range.split(\"-\").map(Number);\n } else {\n start = parseInt(range, 10);\n }\n }\n for (let i = start; i <= end; i += step) values.add(i);\n } else if (trimmed.includes(\"-\")) {\n const [s, e] = trimmed.split(\"-\").map(Number);\n for (let i = s; i <= e; i++) values.add(i);\n } else {\n const n = parseInt(trimmed, 10);\n if (!isNaN(n) && n >= min && n <= max) values.add(n);\n }\n }\n return [...values].sort((a, b) => a - b);\n}\n\n/**\n * Compute the next occurrence of a 5-field cron expression after `after`.\n * Returns null if expression is invalid or no match found within 366 days.\n */\n/**\n * Get the UTC offset in minutes for an IANA timezone at a specific instant.\n * Uses Intl.DateTimeFormat.formatToParts to extract wall-clock components,\n * then diffs against the UTC components of the same instant. No string parsing.\n */\nfunction getUtcOffsetMinutes(date: Date, tz: string): number {\n // Extract wall-clock parts in the target timezone\n const fmt = new Intl.DateTimeFormat(\"en-US\", {\n timeZone: tz, year: \"numeric\", month: \"numeric\", day: \"numeric\",\n hour: \"numeric\", minute: \"numeric\", second: \"numeric\", hour12: false,\n });\n const p = Object.fromEntries(fmt.formatToParts(date).map(x => [x.type, parseInt(x.value, 10)]));\n // Build a pseudo-UTC timestamp from the wall-clock parts\n const wallMs = Date.UTC(p.year, p.month - 1, p.day, p.hour % 24, p.minute, p.second);\n // The offset is how far ahead the wall clock is from the actual UTC instant\n return (wallMs - date.getTime()) / 60_000;\n}\n\nexport function getNextCronTime(expression: string, after: Date = new Date(), timezone?: string): Date | null {\n const parts = expression.trim().split(/\\s+/);\n if (parts.length !== 5) return null;\n\n const minutes = parseCronField(parts[0], 0, 59);\n const hours = parseCronField(parts[1], 0, 23);\n const doms = parseCronField(parts[2], 1, 31);\n const months = parseCronField(parts[3], 1, 12);\n const dows = parseCronField(parts[4], 0, 6); // 0=Sunday\n\n if (!minutes.length || !hours.length || !doms.length || !months.length || !dows.length) return null;\n\n // DOM/DOW: POSIX semantics — when both are restricted, match EITHER (OR).\n // When only one is restricted, match only that one.\n const domRestricted = parts[2] !== \"*\";\n const dowRestricted = parts[4] !== \"*\";\n const useDomDowOr = domRestricted && dowRestricted;\n\n // Validate timezone\n let effectiveTz = \"UTC\";\n if (timezone) {\n try { Intl.DateTimeFormat(undefined, { timeZone: timezone }); effectiveTz = timezone; } catch { /* invalid tz, stay UTC */ }\n }\n\n // Strategy: work in \"local time\" coordinates using a fake Date whose UTC fields\n // represent the wall-clock time in the target timezone. This lets us use the fast\n // jump-by-month/day/hour logic. Once we find a match, we convert back to real UTC.\n //\n // The offset is recomputed each time we cross a day boundary to handle DST transitions.\n let offsetMin = effectiveTz === \"UTC\" ? 0 : getUtcOffsetMinutes(after, effectiveTz);\n const localEpoch = after.getTime() + offsetMin * 60_000;\n const candidate = new Date(localEpoch);\n candidate.setUTCSeconds(0, 0);\n candidate.setUTCMinutes(candidate.getUTCMinutes() + 1); // 1 minute after `after`\n\n const maxMs = after.getTime() + 366 * 86_400_000;\n let lastOffsetDay = candidate.getUTCDate(); // Track day for offset recomputation\n\n // Iterate in local-time coordinates (fast jumps — same algorithm as before)\n while (true) {\n // Recompute offset on day boundaries to handle DST transitions correctly\n const currentDay = candidate.getUTCDate();\n if (effectiveTz !== \"UTC\" && currentDay !== lastOffsetDay) {\n // Convert current candidate back to approximate UTC, then get fresh offset\n const approxUtc = new Date(candidate.getTime() - offsetMin * 60_000);\n const newOffset = getUtcOffsetMinutes(approxUtc, effectiveTz);\n if (newOffset !== offsetMin) {\n // DST changed — adjust candidate to maintain correct local-time coordinates\n const drift = (newOffset - offsetMin) * 60_000;\n candidate.setTime(candidate.getTime() + drift);\n offsetMin = newOffset;\n }\n lastOffsetDay = candidate.getUTCDate();\n }\n\n // Safety: check if we've exceeded 366 days\n const realUtc = candidate.getTime() - offsetMin * 60_000;\n if (realUtc > maxMs) return null;\n\n const mo = candidate.getUTCMonth() + 1;\n const day = candidate.getUTCDate();\n const hr = candidate.getUTCHours();\n const mi = candidate.getUTCMinutes();\n const dow = candidate.getUTCDay();\n\n if (!months.includes(mo)) {\n candidate.setUTCMonth(candidate.getUTCMonth() + 1, 1);\n candidate.setUTCHours(0, 0, 0, 0);\n continue;\n }\n\n const domMatch = doms.includes(day);\n const dowMatch = dows.includes(dow);\n const dayMatch = useDomDowOr ? (domMatch || dowMatch) : (domMatch && dowMatch);\n if (!dayMatch) {\n candidate.setUTCDate(candidate.getUTCDate() + 1);\n candidate.setUTCHours(0, 0, 0, 0);\n continue;\n }\n\n if (!hours.includes(hr)) {\n candidate.setUTCHours(candidate.getUTCHours() + 1, 0, 0, 0);\n continue;\n }\n\n if (!minutes.includes(mi)) {\n candidate.setUTCMinutes(candidate.getUTCMinutes() + 1, 0, 0);\n continue;\n }\n\n // Match found in local coordinates — convert back to real UTC.\n if (effectiveTz === \"UTC\") return candidate;\n\n const result = new Date(candidate.getTime() - offsetMin * 60_000);\n\n // Verify: the result in UTC should map back to the same local time we matched.\n // DST spring-forward (gap): 2:00-3:00 doesn't exist → verifyOffset differs → we skip.\n // DST fall-back (ambiguity): 1:00-2:00 exists twice → first occurrence wins (same as cronie).\n const verifyOffset = getUtcOffsetMinutes(result, effectiveTz);\n if (verifyOffset !== offsetMin) {\n candidate.setUTCMinutes(candidate.getUTCMinutes() + 1, 0, 0);\n continue;\n }\n\n return result;\n }\n}\n\n// ============================================================================\n// SCHEDULE TRIGGER PROCESSING — fires due cron workflows\n// ============================================================================\n\nexport async function processScheduleTriggers(supabase: SupabaseClient): Promise<number> {\n // Find workflows that are past due — supports both cron (recurring) and one-time (run_at)\n const { data: dueWorkflows } = await supabase.from(\"workflows\")\n .select(\"id, store_id, cron_expression, timezone\")\n .not(\"next_run_at\", \"is\", null)\n .lte(\"next_run_at\", new Date().toISOString())\n .eq(\"is_active\", true)\n .eq(\"status\", \"active\")\n .limit(10);\n\n if (!dueWorkflows?.length) return 0;\n\n let fired = 0;\n for (const wf of dueWorkflows) {\n try {\n const isOneTime = !wf.cron_expression;\n\n // Start the run\n const { data: result, error } = await supabase.rpc(\"start_workflow_run\", {\n p_workflow_id: wf.id,\n p_store_id: wf.store_id,\n p_trigger_type: \"schedule\",\n p_trigger_payload: {\n cron: wf.cron_expression || null,\n one_time: isOneTime,\n scheduled_at: new Date().toISOString(),\n },\n p_idempotency_key: wf.cron_expression\n ? `schedule:${wf.id}:${new Date().toISOString().slice(0, 16)}` // Minute-granularity dedup for cron\n : `schedule:${wf.id}:one_time`,\n });\n\n if (error || !result?.success) {\n log.error({ workflowId: wf.id, err: error?.message || result?.error }, \"failed to start scheduled workflow\");\n // Still update next_run_at to prevent infinite retries\n } else {\n fired++;\n // Generate trace_id for the new run\n const traceId = randomUUID();\n await supabase.from(\"workflow_runs\").update({ trace_id: traceId }).eq(\"id\", result.run_id);\n // Inline execution\n try { await executeInlineChain(supabase, result.run_id); } catch (err) { log.error({ runId: result.run_id, err: (err as Error).message }, \"inline chain failed for scheduled run\"); }\n }\n\n if (isOneTime) {\n // One-time schedule: clear next_run_at and deactivate\n await supabase.from(\"workflows\").update({\n last_scheduled_at: new Date().toISOString(),\n next_run_at: null,\n is_active: false,\n status: \"paused\",\n }).eq(\"id\", wf.id);\n } else {\n // Recurring cron: compute next run time\n const nextRun = getNextCronTime(wf.cron_expression, new Date(), wf.timezone || undefined);\n await supabase.from(\"workflows\").update({\n last_scheduled_at: new Date().toISOString(),\n next_run_at: nextRun?.toISOString() || null,\n }).eq(\"id\", wf.id);\n }\n } catch (err) {\n log.error({ workflowId: wf.id, err: sanitizeError(err) }, \"error processing scheduled workflow\");\n }\n }\n\n return fired;\n}\n\n// ============================================================================\n// WORKFLOW TIMEOUT ENFORCEMENT — cancel overtime runs\n// ============================================================================\n\nconst DEFAULT_MAX_RUN_DURATION_SEC = 3600; // 1 hour hard ceiling for any workflow run\n\nexport async function enforceWorkflowTimeouts(supabase: SupabaseClient): Promise<number> {\n // Find running workflows that exceeded their duration limit\n const { data: timedOut } = await supabase.from(\"workflow_runs\")\n .select(\"id, workflow_id, store_id, started_at, workflows!inner(max_run_duration_seconds, name)\")\n .eq(\"status\", \"running\")\n .not(\"started_at\", \"is\", null)\n .limit(50);\n\n if (!timedOut?.length) return 0;\n\n let count = 0;\n const now = Date.now();\n\n for (const run of timedOut) {\n const wf = (run as any).workflows;\n // Use configured max_duration or fall back to the hard ceiling\n const maxDuration = (wf?.max_run_duration_seconds && wf.max_run_duration_seconds > 0)\n ? wf.max_run_duration_seconds\n : DEFAULT_MAX_RUN_DURATION_SEC;\n\n const elapsed = now - new Date(run.started_at).getTime();\n if (elapsed < maxDuration * 1000) continue;\n\n // This run has timed out\n await completeWorkflowRun(\n supabase, run.id, run.workflow_id, run.store_id,\n \"timed_out\",\n `Workflow exceeded max duration of ${maxDuration}s (ran for ${Math.round(elapsed / 1000)}s)`,\n );\n\n // Archive to DLQ\n await archiveToDlq(supabase, run.id, run.workflow_id, run.store_id, wf?.name);\n\n count++;\n log.warn({ runId: run.id, elapsedSec: Math.round(elapsed / 1000), maxDuration }, \"workflow run timed out\");\n }\n\n // Detect zombie runs: \"running\" with no active steps (all steps are terminal)\n const { data: zombieRuns } = await supabase.from(\"workflow_runs\")\n .select(\"id, workflow_id, store_id, started_at, workflows!inner(name)\")\n .eq(\"status\", \"running\")\n .not(\"started_at\", \"is\", null)\n .limit(50);\n\n if (zombieRuns?.length) {\n for (const run of zombieRuns) {\n const elapsed = now - new Date(run.started_at).getTime();\n if (elapsed < 120_000) continue; // Only check runs older than 2 min\n\n const { data: activeSteps } = await supabase.from(\"workflow_step_runs\")\n .select(\"id\").eq(\"run_id\", run.id)\n .in(\"status\", [\"pending\", \"running\", \"retrying\", \"waiting\"]).limit(1);\n\n if (!activeSteps?.length) {\n // No active steps but run is still \"running\" — finalize it\n await checkWorkflowCompletion(supabase, run.id, run.workflow_id);\n count++;\n log.warn({ runId: run.id, elapsedSec: Math.round(elapsed / 1000) }, \"finalized zombie workflow run\");\n }\n }\n }\n\n return count;\n}\n\n// ============================================================================\n// ORPHANED STEP CLEANUP — cancel step_runs whose parent run is terminal\n// ============================================================================\n\nlet lastOrphanCleanupAt = 0;\nconst ORPHAN_CLEANUP_INTERVAL_MS = 60_000; // Run at most once per minute\n\nexport async function cleanupOrphanedSteps(supabase: SupabaseClient): Promise<number> {\n if (Date.now() - lastOrphanCleanupAt < ORPHAN_CLEANUP_INTERVAL_MS) return 0;\n lastOrphanCleanupAt = Date.now();\n\n // Find step_runs in non-terminal status whose parent run IS terminal.\n // The !inner join + .in filter on the JOINED table ensures Postgres only returns\n // rows where the run status is already terminal — no in-app filtering needed.\n const { data: orphans } = await supabase.from(\"workflow_step_runs\")\n .select(\"id, run_id, step_key, status, workflow_runs!workflow_step_runs_run_id_fkey!inner(status)\")\n .in(\"status\", [\"pending\", \"retrying\", \"waiting\"])\n .in(\"workflow_runs.status\", [\"success\", \"failed\", \"cancelled\", \"timed_out\"])\n .limit(100);\n\n if (!orphans?.length) return 0;\n\n let cleaned = 0;\n for (const step of orphans) {\n const runStatus = (step as any).workflow_runs?.status;\n await supabase.from(\"workflow_step_runs\").update({\n status: \"cancelled\",\n error_message: `Orphaned: parent run already ${runStatus}`,\n completed_at: new Date().toISOString(),\n }).eq(\"id\", step.id);\n cleaned++;\n }\n\n if (cleaned > 0) {\n log.info({ cleaned }, \"cleaned up orphaned step runs\");\n }\n return cleaned;\n}\n\n// ============================================================================\n// DLQ RETRY MECHANISM — retry transient DLQ failures\n// ============================================================================\n\nlet lastDlqRetryAt = 0;\nconst DLQ_RETRY_INTERVAL_MS = 60_000; // Run at most once per minute\nconst DLQ_RETRY_BATCH_SIZE = 5;\nconst DLQ_MAX_RETRY_ATTEMPTS = 3;\n\nexport async function processDlqRetries(supabase: SupabaseClient): Promise<number> {\n // Throttle: only run once per minute\n if (Date.now() - lastDlqRetryAt < DLQ_RETRY_INTERVAL_MS) return 0;\n lastDlqRetryAt = Date.now();\n\n // Fetch retryable DLQ entries: transient errors (timeout, network), not yet exhausted\n const { data: entries } = await supabase.from(\"workflow_dlq\")\n .select(\"id, workflow_id, store_id, trigger_type, trigger_payload, error_message, retry_count, last_retry_at\")\n .or(\"error_message.ilike.%timed out%,error_message.ilike.%timeout%,error_message.ilike.%network%,error_message.ilike.%ECONNREFUSED%,error_message.ilike.%fetch failed%\")\n .eq(\"status\", \"pending\")\n .lt(\"retry_count\", DLQ_MAX_RETRY_ATTEMPTS)\n .order(\"created_at\", { ascending: true })\n .limit(DLQ_RETRY_BATCH_SIZE);\n\n if (!entries?.length) return 0;\n\n let retried = 0;\n const now = Date.now();\n for (const entry of entries) {\n try {\n // Enforce per-entry exponential backoff: 2min, 4min, 8min\n if (entry.last_retry_at) {\n const backoffMs = Math.pow(2, entry.retry_count || 0) * 120_000;\n const elapsed = now - new Date(entry.last_retry_at).getTime();\n if (elapsed < backoffMs) continue; // Too soon for this entry\n }\n\n const { data: result, error } = await supabase.rpc(\"start_workflow_run\", {\n p_workflow_id: entry.workflow_id,\n p_store_id: entry.store_id,\n p_trigger_type: entry.trigger_type || \"dlq_retry\",\n p_trigger_payload: { ...(entry.trigger_payload || {}), _dlq_retry: true, _dlq_entry_id: entry.id },\n p_idempotency_key: `dlq_retry:${entry.id}:${(entry.retry_count || 0) + 1}`,\n });\n\n if (error || !result?.success) {\n // Update retry count but keep in DLQ\n await supabase.from(\"workflow_dlq\").update({\n retry_count: (entry.retry_count || 0) + 1,\n last_error: error?.message || result?.error || \"retry failed\",\n last_retry_at: new Date().toISOString(),\n }).eq(\"id\", entry.id);\n continue;\n }\n\n // Success — mark DLQ entry as retried\n await supabase.from(\"workflow_dlq\").update({\n status: \"retried\",\n retry_count: (entry.retry_count || 0) + 1,\n retried_run_id: result.run_id,\n last_retry_at: new Date().toISOString(),\n }).eq(\"id\", entry.id);\n\n // Execute inline\n if (result.run_id) {\n const traceId = randomUUID();\n await supabase.from(\"workflow_runs\").update({ trace_id: traceId }).eq(\"id\", result.run_id);\n try { await executeInlineChain(supabase, result.run_id); } catch (err) {\n log.error({ runId: result.run_id, err: (err as Error).message }, \"inline chain failed for DLQ retry\");\n }\n }\n\n retried++;\n log.info({ dlqEntryId: entry.id, workflowId: entry.workflow_id, retryCount: (entry.retry_count || 0) + 1 }, \"DLQ entry retried\");\n } catch (err) {\n log.warn({ dlqEntryId: entry.id, err: sanitizeError(err) }, \"DLQ retry error\");\n await supabase.from(\"workflow_dlq\").update({\n retry_count: (entry.retry_count || 0) + 1,\n last_retry_at: new Date().toISOString(),\n last_error: sanitizeError(err),\n }).eq(\"id\", entry.id);\n }\n }\n\n return retried;\n}\n\n// ============================================================================\n// EVENT TRIGGER PROCESSING — match inbound events to workflow subscriptions\n// ============================================================================\n\nexport async function processEventTriggers(supabase: SupabaseClient): Promise<number> {\n // Atomically claim a batch of pending events using FOR UPDATE SKIP LOCKED\n // Falls back to SELECT+UPDATE if the RPC doesn't exist yet\n let events: { id: string; store_id: string; event_type: string; event_payload: Record<string, unknown>; source: string }[] | null = null;\n\n const { data: claimed, error: claimErr } = await supabase.rpc(\"claim_pending_events\", { batch_size: 20 });\n if (!claimErr && claimed?.length) {\n events = claimed;\n } else {\n // Fallback: non-atomic claim (SELECT then UPDATE)\n if (claimErr) log.debug({ err: claimErr.message }, \"claim_pending_events RPC unavailable, using fallback\");\n const { data: fallbackEvents } = await supabase.from(\"automation_events\")\n .select(\"id, store_id, event_type, event_payload, source\")\n .eq(\"status\", \"pending\")\n .order(\"created_at\", { ascending: true })\n .limit(20);\n if (fallbackEvents?.length) {\n const eventIds = fallbackEvents.map(e => e.id);\n await supabase.from(\"automation_events\")\n .update({ status: \"processing\" })\n .in(\"id\", eventIds);\n events = fallbackEvents;\n }\n }\n\n if (!events?.length) return 0;\n\n // P2 FIX: Batch-load ALL active subscriptions once instead of per-event queries.\n // Group by (store_id, event_type) for O(1) in-memory lookup per event.\n const uniqueStoreIds = Array.from(new Set(events.map(e => e.store_id)));\n const uniqueEventTypes = Array.from(new Set(events.map(e => e.event_type)));\n const { data: allSubs } = await supabase.from(\"workflow_event_subscriptions\")\n .select(\"id, workflow_id, filter_expression, store_id, event_type\")\n .in(\"store_id\", uniqueStoreIds)\n .in(\"event_type\", uniqueEventTypes)\n .eq(\"is_active\", true);\n\n // Build lookup map: \"store_id:event_type\" -> subscriptions[]\n const subsMap = new Map<string, typeof allSubs>();\n for (const sub of (allSubs || [])) {\n const key = `${sub.store_id}:${sub.event_type}`;\n if (!subsMap.has(key)) subsMap.set(key, []);\n subsMap.get(key)!.push(sub);\n }\n\n let processed = 0;\n\n for (const event of events) {\n try {\n // P2 FIX: In-memory lookup instead of per-event DB query\n const subs = subsMap.get(`${event.store_id}:${event.event_type}`) || [];\n\n if (!subs.length) {\n // No subscribers — mark processed and move on\n await supabase.from(\"automation_events\")\n .update({ status: \"processed\", processed_at: new Date().toISOString() })\n .eq(\"id\", event.id);\n processed++;\n continue;\n }\n\n for (const sub of subs) {\n // Optional filter expression evaluation\n if (sub.filter_expression) {\n try {\n const ctx: TemplateContext = {\n trigger: event.event_payload || {},\n steps: {},\n };\n const pass = evaluateCondition(sub.filter_expression, ctx);\n if (!pass) continue; // Filter didn't match — skip this subscription\n } catch {\n // Filter eval error — skip rather than block\n continue;\n }\n }\n\n // Start a workflow run for each matching subscription\n const idempotencyKey = `event:${event.id}:${sub.workflow_id}`;\n const { data: result, error: startErr } = await supabase.rpc(\"start_workflow_run\", {\n p_workflow_id: sub.workflow_id,\n p_store_id: event.store_id,\n p_trigger_type: \"event\",\n p_trigger_payload: {\n ...(event.event_payload || {}),\n _event_id: event.id,\n _event_type: event.event_type,\n _event_source: event.source,\n },\n p_idempotency_key: idempotencyKey,\n });\n\n if (startErr || !result?.success) {\n log.error({ workflowId: sub.workflow_id, eventId: event.id, err: startErr?.message || result?.error }, \"failed to start event-triggered workflow\");\n continue;\n }\n\n // Assign trace ID and run inline chain for immediate execution\n if (result.run_id && !result.deduplicated) {\n const traceId = randomUUID();\n await supabase.from(\"workflow_runs\").update({ trace_id: traceId }).eq(\"id\", result.run_id);\n try { await executeInlineChain(supabase, result.run_id); } catch (err) { log.error({ runId: result.run_id, err: (err as Error).message }, \"inline chain failed for event run\"); }\n }\n }\n\n // Mark event as processed\n await supabase.from(\"automation_events\")\n .update({ status: \"processed\", processed_at: new Date().toISOString() })\n .eq(\"id\", event.id);\n processed++;\n\n } catch (err) {\n // Mark event as failed\n await supabase.from(\"automation_events\")\n .update({\n status: \"failed\",\n processed_at: new Date().toISOString(),\n error_message: sanitizeError(err),\n })\n .eq(\"id\", event.id);\n log.error({ eventId: event.id, err: sanitizeError(err) }, \"error processing event trigger\");\n }\n }\n\n return processed;\n}\n\n// ============================================================================\n// DEAD LETTER QUEUE — archive failed runs for investigation\n// ============================================================================\n\nasync function archiveToDlq(\n supabase: SupabaseClient, runId: string, workflowId: string, storeId: string, workflowName?: string,\n): Promise<void> {\n const { data: run } = await supabase.from(\"workflow_runs\")\n .select(\"error_message, error_step_key, trigger_type, trigger_payload, step_outputs, duration_ms\")\n .eq(\"id\", runId).single();\n if (!run) return;\n\n const { error } = await supabase.from(\"workflow_dlq\").insert({\n store_id: storeId,\n run_id: runId,\n workflow_id: workflowId,\n workflow_name: workflowName || null,\n error_message: run.error_message,\n error_step_key: run.error_step_key,\n trigger_type: run.trigger_type,\n trigger_payload: run.trigger_payload || {},\n step_outputs: run.step_outputs || {},\n run_duration_ms: run.duration_ms,\n });\n if (error) log.warn({ err: error.message, runId, workflowId }, \"archiveToDlq insert failed\");\n}\n\n/**\n * Process-isolated JS code execution via persistent worker pool.\n * Falls back to one-shot fork if pool is unavailable.\n * A crash, OOM, or infinite loop in user code cannot take down the server.\n */\nasync function executeCodeStepIsolated(config: Record<string, unknown>, ctx: TemplateContext): Promise<StepResult> {\n const code = config.code as string;\n if (!code) return { success: false, error: \"No code in code step config\" };\n\n const language = (config.language as string) || \"javascript\";\n if (language === \"python\") {\n // P0 FIX: Python regex sandbox is trivially bypassable (string concatenation,\n // __builtins__, globals() aliasing). Hard-fail until a real Python sandbox\n // (e.g. Pyodide/WASM or containerized execution) is available.\n return { success: false, error: \"Python code execution is temporarily disabled — sandbox under hardening. Use JavaScript code steps instead.\" };\n }\n\n const timeoutMs = (config.timeout_ms as number) || CODE_TIMEOUT_MS;\n\n try {\n const result = await executeWithPool({\n code,\n context: { steps: ctx.steps, trigger: ctx.trigger, input: ctx.input },\n timeoutMs,\n });\n // P3 FIX: Enforce same 100KB output cap as Python code steps\n if (result.success && result.output) {\n const outputStr = JSON.stringify(result.output);\n if (outputStr.length > CODE_OUTPUT_MAX) {\n result.output = { result: outputStr.slice(0, CODE_OUTPUT_MAX) + \"\\n[output truncated at 100KB]\", truncated: true };\n }\n }\n return result;\n } catch (err) {\n // P0 FIX: Hard failure — no in-process fallback (SSRF risk via unrestricted fetch in sandbox)\n log.error({ err: (err as Error).message }, \"worker pool execution failed, no fallback\");\n return { success: false, error: \"Code execution unavailable — worker pool failed\" };\n }\n}\n\n// P0 FIX: executeCodeStepInProcess removed — in-process fallback was a security risk\n// (unrestricted fetch in sandbox = SSRF). All code steps now require the worker pool.\n\nasync function executePythonCode(_code: string, _ctx: TemplateContext): Promise<StepResult> {\n return { success: false, error: \"Python code execution is disabled — sandbox under hardening\" };\n}\n\n// ============================================================================\n// CIRCUIT BREAKER (per user_tool)\n// ============================================================================\n\nasync function checkToolCircuitBreaker(\n supabase: SupabaseClient, toolId: string,\n): Promise<{ allowed: boolean; reason?: string }> {\n const { data } = await supabase.from(\"user_tools\")\n .select(\"circuit_breaker_state, circuit_breaker_tripped_at, circuit_breaker_cooldown_seconds\")\n .eq(\"id\", toolId).single();\n if (!data) return { allowed: true };\n\n if (data.circuit_breaker_state === \"open\") {\n const trippedAt = new Date(data.circuit_breaker_tripped_at).getTime();\n const cooldownMs = (data.circuit_breaker_cooldown_seconds || 300) * 1000;\n if (Date.now() < trippedAt + cooldownMs) {\n return { allowed: false, reason: `Circuit breaker open (cooldown until ${new Date(trippedAt + cooldownMs).toISOString()})` };\n }\n await supabase.from(\"user_tools\").update({ circuit_breaker_state: \"half_open\" }).eq(\"id\", toolId);\n }\n return { allowed: true };\n}\n\n// P1 FIX: Transient error patterns — these indicate network/infra issues, not broken tools.\n// Circuit breaker should only trip on persistent tool-level errors (auth, 404, bad config).\nconst TRANSIENT_ERROR_PATTERNS = [\n /timed?\\s*out/i, /timeout/i, /ECONNREFUSED/i, /ECONNRESET/i, /ETIMEDOUT/i,\n /fetch failed/i, /network/i, /socket hang up/i, /EPIPE/i, /EHOSTUNREACH/i,\n /503 Service Unavailable/i, /502 Bad Gateway/i, /429 Too Many Requests/i,\n];\n\nfunction isTransientError(errorMessage?: string | null): boolean {\n if (!errorMessage) return false;\n return TRANSIENT_ERROR_PATTERNS.some(pattern => pattern.test(errorMessage));\n}\n\nasync function updateToolCircuitBreaker(\n supabase: SupabaseClient, toolId: string, success: boolean, errorMessage?: string,\n): Promise<void> {\n if (success) {\n await supabase.from(\"user_tools\").update({ circuit_breaker_state: \"closed\", circuit_breaker_failures: 0 }).eq(\"id\", toolId);\n return;\n }\n\n // P1 FIX: Skip circuit breaker increment for transient errors (network, timeout, etc.)\n if (isTransientError(errorMessage)) {\n log.debug({ toolId, error: errorMessage }, \"skipping circuit breaker increment for transient error\");\n return;\n }\n\n const { data } = await supabase.from(\"user_tools\")\n .select(\"circuit_breaker_failures, circuit_breaker_threshold\").eq(\"id\", toolId).single();\n if (!data) return;\n const newFailures = (data.circuit_breaker_failures || 0) + 1;\n if (newFailures >= (data.circuit_breaker_threshold || 5)) {\n await supabase.from(\"user_tools\").update({\n circuit_breaker_state: \"open\", circuit_breaker_failures: newFailures,\n circuit_breaker_tripped_at: new Date().toISOString(),\n }).eq(\"id\", toolId);\n queueSpan(auditRowToSpan({\n action: \"workflow.circuit_breaker.tripped\", severity: \"warning\",\n resource_type: \"user_tool\", resource_id: toolId, source: \"workflow_engine\",\n service_name: \"workflow-engine\", span_kind: \"INTERNAL\", status_code: \"OK\",\n start_time: new Date().toISOString(), end_time: new Date().toISOString(),\n details: { failures: newFailures, threshold: data.circuit_breaker_threshold },\n }));\n } else {\n await supabase.from(\"user_tools\").update({ circuit_breaker_failures: newFailures }).eq(\"id\", toolId);\n }\n}\n\nasync function handleWorkflowCircuitBreaker(\n supabase: SupabaseClient, workflowId: string, success: boolean, errorMessage?: string | null,\n): Promise<void> {\n if (success) {\n await supabase.from(\"workflows\").update({ circuit_breaker_state: \"closed\", circuit_breaker_failures: 0 }).eq(\"id\", workflowId);\n return;\n }\n\n // P1 FIX: Skip circuit breaker increment for transient errors\n if (isTransientError(errorMessage)) {\n log.debug({ workflowId, error: errorMessage }, \"skipping workflow circuit breaker increment for transient error\");\n return;\n }\n\n const { data } = await supabase.from(\"workflows\")\n .select(\"circuit_breaker_failures, circuit_breaker_threshold\").eq(\"id\", workflowId).single();\n if (!data) return;\n const newFailures = (data.circuit_breaker_failures || 0) + 1;\n if (newFailures >= (data.circuit_breaker_threshold || 5)) {\n await supabase.from(\"workflows\").update({\n circuit_breaker_state: \"open\", circuit_breaker_failures: newFailures,\n circuit_breaker_tripped_at: new Date().toISOString(),\n }).eq(\"id\", workflowId);\n queueSpan(auditRowToSpan({\n action: \"workflow.circuit_breaker.tripped\", severity: \"warning\",\n resource_type: \"workflow\", resource_id: workflowId, source: \"workflow_engine\",\n service_name: \"workflow-engine\", span_kind: \"INTERNAL\", status_code: \"OK\",\n start_time: new Date().toISOString(), end_time: new Date().toISOString(),\n details: { failures: newFailures, threshold: data.circuit_breaker_threshold },\n }));\n } else {\n await supabase.from(\"workflows\").update({ circuit_breaker_failures: newFailures }).eq(\"id\", workflowId);\n }\n}\n\n// ============================================================================\n// CORE ENGINE\n// ============================================================================\n\n/**\n * Reclaim steps stuck in \"running\" status longer than their timeout + buffer.\n * This handles steps that crashed mid-execution (e.g., server restart, OOM).\n * Steps are reset to \"retrying\" so the worker can re-execute them.\n */\nasync function reclaimStaleSteps(supabase: SupabaseClient): Promise<number> {\n // P0 FIX: Use step.timeout_seconds * 2 (min 300s) as stale threshold to prevent\n // double-execution. The old 60s buffer was too aggressive for long-running steps.\n const MIN_STALE_THRESHOLD_MS = 300_000; // 5 min minimum before reclaim\n const MAX_STALE_AGE_MS = 1_200_000; // Hard ceiling: 20 min = always stale\n\n const { data: staleSteps } = await supabase.from(\"workflow_step_runs\")\n .select(`\n id, step_key, run_id, attempt_count, max_attempts, started_at,\n workflow_steps!inner(timeout_seconds)\n `)\n .eq(\"status\", \"running\")\n .not(\"started_at\", \"is\", null)\n .limit(50);\n\n if (!staleSteps?.length) return 0;\n\n let reclaimed = 0;\n const now = Date.now();\n\n for (const step of staleSteps) {\n const timeoutSec = (step as any).workflow_steps?.timeout_seconds || 120;\n // P0 FIX: threshold = max(300s, timeout * 2) — gives step enough time to complete\n const staleThreshold = Math.min(Math.max(MIN_STALE_THRESHOLD_MS, timeoutSec * 2000), MAX_STALE_AGE_MS);\n const elapsed = now - new Date(step.started_at).getTime();\n\n if (elapsed < staleThreshold) continue;\n\n const exhaustedRetries = step.attempt_count >= step.max_attempts;\n if (exhaustedRetries) {\n // No retries left — mark as failed\n await supabase.from(\"workflow_step_runs\").update({\n status: \"failed\",\n error_message: `Step stale: running for ${Math.round(elapsed / 1000)}s with no response (retries exhausted)`,\n completed_at: new Date().toISOString(),\n }).eq(\"id\", step.id);\n } else {\n // Reset to retrying so worker picks it up again\n await supabase.from(\"workflow_step_runs\").update({\n status: \"retrying\",\n error_message: `Step stale: running for ${Math.round(elapsed / 1000)}s with no response (auto-reclaimed)`,\n next_retry_at: new Date(now + 5000).toISOString(),\n }).eq(\"id\", step.id);\n }\n reclaimed++;\n log.warn({ stepRunId: step.id, stepKey: step.step_key, runId: step.run_id, elapsedSec: Math.round(elapsed / 1000), exhaustedRetries }, \"reclaimed stale step\");\n }\n return reclaimed;\n}\n\nexport async function processWorkflowSteps(\n supabase: SupabaseClient, batchSize: number = 10,\n): Promise<{ processed: number; errors: number; reclaimed?: number }> {\n // Reclaim stale steps first so they become available for claiming\n const reclaimed = await reclaimStaleSteps(supabase).catch(e => {\n log.warn({ err: (e as Error).message }, \"reclaimStaleSteps failed\");\n return 0;\n });\n\n const { data: claimedRaw, error: claimErr } = await supabase.rpc(\"claim_pending_steps\", {\n batch_size: batchSize,\n });\n if (claimErr) {\n log.error({ err: claimErr.message }, \"workflow claim error\");\n return { processed: 0, errors: 1, reclaimed };\n }\n\n let claimed: StepClaim[] = Array.isArray(claimedRaw) ? claimedRaw : [];\n if (claimed.length === 0) return { processed: 0, errors: 0, reclaimed };\n\n // Circuit breaker enforcement — skip steps from workflows with open breakers\n const workflowIds = [...new Set(claimed.map(s => s.workflow_id))];\n const { data: openBreakers } = await supabase.from(\"workflows\")\n .select(\"id\")\n .in(\"id\", workflowIds)\n .eq(\"circuit_breaker_state\", \"open\");\n if (openBreakers?.length) {\n const blockedIds = new Set(openBreakers.map(w => w.id));\n const blocked = claimed.filter(s => blockedIds.has(s.workflow_id));\n claimed = claimed.filter(s => !blockedIds.has(s.workflow_id));\n // Mark blocked steps as skipped and finalize affected runs\n const affectedRuns = new Map<string, string>();\n for (const step of blocked) {\n await supabase.from(\"workflow_step_runs\").update({\n status: \"skipped\",\n error_message: \"Workflow circuit breaker is open — step skipped\",\n completed_at: new Date().toISOString(),\n }).eq(\"id\", step.step_run_id);\n affectedRuns.set(step.run_id, step.workflow_id);\n }\n // Check completion for affected runs — prevents zombie \"running\" state\n for (const [runId, workflowId] of affectedRuns) {\n await checkWorkflowCompletion(supabase, runId, workflowId).catch(e =>\n log.warn({ runId, err: (e as Error).message }, \"completion check after circuit breaker skip failed\"));\n }\n if (blocked.length) log.warn({ skippedSteps: blocked.length, blockedWorkflows: blockedIds.size }, \"circuit breaker skipped steps\");\n if (claimed.length === 0) return { processed: blocked.length, errors: 0, reclaimed };\n }\n\n log.info({ stepCount: claimed.length }, \"processing workflow steps\");\n let errors = 0;\n\n // Batch-fetch trace_ids for all runs in this batch\n const runIds = [...new Set(claimed.map(s => s.run_id))];\n const { data: runTraces } = await supabase.from(\"workflow_runs\")\n .select(\"id, trace_id\").in(\"id\", runIds);\n const traceMap = new Map((runTraces || []).map(r => [r.id, r.trace_id as string | undefined]));\n\n // Partition: email tool steps from for_each need sequential processing with delays\n // to avoid overwhelming Resend's 2 req/s rate limit\n const isForEachEmailStep = (s: StepClaim) =>\n s.parent_step_run_id && s.step_type === \"tool\" &&\n String(s.step_config?.tool_name || \"\").includes(\"email\");\n\n const emailForEachSteps = claimed.filter(isForEachEmailStep);\n const otherSteps = claimed.filter(s => !isForEachEmailStep(s));\n\n const processStep = async (step: StepClaim) => {\n try {\n await applyVersionOverrides(supabase, step);\n await executeAndAdvance(supabase, step, traceMap.get(step.run_id));\n } catch (err) {\n errors++;\n const errMsg = sanitizeError(err);\n log.error({ stepKey: step.step_key, runId: step.run_id, err: errMsg }, \"step execution error\");\n await supabase.from(\"workflow_step_runs\").update({\n status: \"failed\", error_message: errMsg,\n completed_at: new Date().toISOString(), duration_ms: 0,\n }).eq(\"id\", step.step_run_id);\n // Surface error to clients (SSE broadcast + structured error_details on step run)\n await surfaceStepError(supabase, step, errMsg);\n // Check if this failure finalizes the run (prevents zombie runs from uncaught errors)\n await checkWorkflowCompletion(supabase, step.run_id, step.workflow_id).catch(e =>\n log.warn({ runId: step.run_id, err: (e as Error).message }, \"completion check after step error failed\"));\n }\n };\n\n // Process non-email steps in parallel (existing behavior)\n await Promise.all(otherSteps.map(processStep));\n\n // Process email for_each children sequentially with 550ms throttle\n for (let i = 0; i < emailForEachSteps.length; i++) {\n if (i > 0) await new Promise(r => setTimeout(r, 550));\n await processStep(emailForEachSteps[i]);\n }\n\n return { processed: claimed.length, errors };\n}\n\n/**\n * Check waiting steps: sub_workflow children completed, parallel/for_each children done.\n * Called by the persistent worker loop alongside processWorkflowSteps.\n */\nexport async function processWaitingSteps(supabase: SupabaseClient): Promise<number> {\n let resolved = 0;\n\n // 0. Expire pending approvals (Phase 2)\n try {\n await supabase.rpc(\"expire_pending_approvals\");\n } catch (err) {\n // Non-fatal — RPC may not exist yet if migration not applied\n log.warn({ err: sanitizeError(err) }, \"expire_pending_approvals error\");\n }\n\n // 1. Sub-workflow steps waiting for child runs to complete\n const { data: subWfSteps } = await supabase\n .from(\"workflow_step_runs\")\n .select(\"id, run_id, step_key, child_run_id, step_type\")\n .eq(\"status\", \"waiting\")\n .eq(\"step_type\", \"sub_workflow\")\n .not(\"child_run_id\", \"is\", null)\n .limit(50);\n\n if (subWfSteps?.length) {\n const childRunIds = subWfSteps.map(s => s.child_run_id).filter(Boolean) as string[];\n const { data: childRuns } = await supabase\n .from(\"workflow_runs\")\n .select(\"id, status, step_outputs, error_message\")\n .in(\"id\", childRunIds)\n .in(\"status\", [\"success\", \"failed\"]);\n\n if (childRuns?.length) {\n const runMap = new Map(childRuns.map(r => [r.id, r]));\n for (const step of subWfSteps) {\n const childRun = runMap.get(step.child_run_id!);\n if (!childRun) continue;\n\n const success = childRun.status === \"success\";\n await supabase.from(\"workflow_step_runs\").update({\n status: success ? \"success\" : \"failed\",\n output: childRun.step_outputs,\n error_message: success ? null : childRun.error_message,\n completed_at: new Date().toISOString(),\n }).eq(\"id\", step.id);\n\n // Accumulate output + advance\n await accumulateAndAdvance(supabase, step.id, step.run_id, step.step_key,\n success, childRun.step_outputs, childRun.error_message);\n resolved++;\n }\n }\n }\n\n // 2. P1 FIX: Use aggregate RPC to eliminate N+1 queries (was 4 queries per parent)\n const { data: aggregatedParents, error: aggErr } = await supabase.rpc(\"get_waiting_parents_with_children\");\n\n if (aggErr) {\n // Fallback to old N+1 pattern if RPC doesn't exist yet\n log.debug({ err: aggErr.message }, \"get_waiting_parents_with_children RPC unavailable, using fallback\");\n const { data: waitingParents } = await supabase\n .from(\"workflow_step_runs\")\n .select(\"id, run_id, step_key, step_type, output\")\n .eq(\"status\", \"waiting\")\n .in(\"step_type\", [\"parallel\", \"for_each\"])\n .limit(50);\n\n if (waitingParents?.length) {\n for (const parent of waitingParents) {\n const { count: totalChildren } = await supabase\n .from(\"workflow_step_runs\")\n .select(\"id\", { count: \"exact\", head: true })\n .eq(\"parent_step_run_id\", parent.id);\n const { count: doneChildren } = await supabase\n .from(\"workflow_step_runs\")\n .select(\"id\", { count: \"exact\", head: true })\n .eq(\"parent_step_run_id\", parent.id)\n .in(\"status\", [\"success\", \"failed\", \"skipped\", \"cancelled\"]);\n if (totalChildren && doneChildren && doneChildren >= totalChildren) {\n const { data: childOutputs } = await supabase\n .from(\"workflow_step_runs\")\n .select(\"step_key, output, status, error_message\")\n .eq(\"parent_step_run_id\", parent.id)\n .order(\"created_at\", { ascending: true });\n const outputs = (childOutputs || []).map(c => c.output);\n const failedKids = (childOutputs || []).filter(c => c.status === \"failed\");\n const allSuccess = failedKids.length === 0;\n await supabase.from(\"workflow_step_runs\").update({\n status: allSuccess ? \"success\" : \"failed\",\n output: { children: outputs, total: totalChildren, failed: failedKids.length },\n error_message: allSuccess ? null : failedKids[0]?.error_message,\n completed_at: new Date().toISOString(),\n }).eq(\"id\", parent.id);\n await accumulateAndAdvance(supabase, parent.id, parent.run_id, parent.step_key,\n allSuccess, { children: outputs }, allSuccess ? null : failedKids[0]?.error_message);\n resolved++;\n }\n }\n }\n } else if (aggregatedParents?.length) {\n for (const parent of aggregatedParents) {\n if (parent.total_children > 0 && parent.done_children >= parent.total_children) {\n const childOutputsArr = (parent.child_outputs || []) as any[];\n const outputs = childOutputsArr.map((c: any) => c.output);\n const allSuccess = parent.failed_children === 0;\n const firstError = childOutputsArr.find((c: any) => c.status === \"failed\")?.error_message;\n\n await supabase.from(\"workflow_step_runs\").update({\n status: allSuccess ? \"success\" : \"failed\",\n output: { children: outputs, total: parent.total_children, failed: parent.failed_children },\n error_message: allSuccess ? null : firstError,\n completed_at: new Date().toISOString(),\n }).eq(\"id\", parent.parent_id);\n\n await accumulateAndAdvance(supabase, parent.parent_id, parent.parent_run_id, parent.parent_step_key,\n allSuccess, { children: outputs }, allSuccess ? null : firstError);\n resolved++;\n }\n }\n }\n\n return resolved;\n}\n\n/** Helper: after a waiting step resolves, accumulate output and advance the workflow. */\nasync function accumulateAndAdvance(\n supabase: SupabaseClient, stepRunId: string, runId: string, stepKey: string,\n success: boolean, output: unknown, errorMessage?: string | null,\n): Promise<void> {\n // Load run to get current step_outputs + workflow_id + on_success/on_failure\n const { data: run } = await supabase.from(\"workflow_runs\")\n .select(\"workflow_id, step_outputs, store_id\").eq(\"id\", runId).single();\n if (!run) return;\n\n const { data: stepDef } = await supabase.from(\"workflow_step_runs\")\n .select(\"step_id, step_key\").eq(\"id\", stepRunId).single();\n if (!stepDef) return;\n\n // Phase 4: Try versioned step def first, fall back to live table\n let wsDef: { on_success?: string | null; on_failure?: string | null; max_retries?: number } | null = null;\n const versionedSteps = await loadVersionedSteps(supabase, runId);\n if (versionedSteps) {\n const vStep = versionedSteps.find((s: any) => s.step_key === stepKey);\n if (vStep) wsDef = { on_success: vStep.on_success, on_failure: vStep.on_failure, max_retries: vStep.max_retries };\n }\n if (!wsDef) {\n const { data } = await supabase.from(\"workflow_steps\")\n .select(\"on_success, on_failure, max_retries\").eq(\"id\", stepDef.step_id).single();\n wsDef = data;\n }\n\n // P1 FIX: Atomic step output accumulation — use jsonb_set instead of read-modify-write\n // This prevents lost updates when multiple steps complete concurrently\n const stepOutput = { output, status: success ? \"success\" : \"failed\" };\n await supabase.rpc(\"accumulate_step_output\", {\n p_run_id: runId,\n p_step_key: stepKey,\n p_step_output: stepOutput,\n }).then(({ error: rpcErr }) => {\n // Fallback to direct update if RPC doesn't exist yet (migration pending)\n if (rpcErr) {\n const newOutputs = { ...(run.step_outputs || {}), [stepKey]: stepOutput };\n return supabase.from(\"workflow_runs\").update({ step_outputs: newOutputs }).eq(\"id\", runId);\n }\n });\n\n if (success) {\n if (wsDef?.on_success) {\n await createNextStepRunByKey(supabase, runId, run.workflow_id, wsDef.on_success);\n } else {\n await checkWorkflowCompletion(supabase, runId, run.workflow_id);\n }\n } else {\n if (wsDef?.on_failure) {\n await createNextStepRunByKey(supabase, runId, run.workflow_id, wsDef.on_failure);\n } else {\n await completeWorkflowRun(supabase, runId, run.workflow_id, run.store_id, \"failed\", errorMessage, stepKey);\n }\n }\n}\n\nexport async function executeAndAdvance(supabase: SupabaseClient, step: StepClaim, traceId?: string): Promise<void> {\n const startTime = Date.now();\n\n // Phase 3.3: OTEL span for step execution\n const span = startSpan(\"workflow.step.execute\", {\n \"workflow.run_id\": step.run_id,\n \"workflow.step_key\": step.step_key,\n \"workflow.step_type\": step.step_type,\n \"workflow.attempt\": step.attempt_count,\n ...(traceId ? { \"workflow.trace_id\": traceId } : {}),\n });\n\n // Event journal — step started\n await logWorkflowEvent(supabase, step.run_id, \"step_started\", {\n step_key: step.step_key, step_type: step.step_type, attempt: step.attempt_count,\n }, step.step_run_id);\n\n // Step result caching — skip successful steps on retry (idempotent re-execution)\n if (step.attempt_count > 1) {\n const { data: prevRun } = await supabase.from(\"workflow_step_runs\")\n .select(\"status, output\").eq(\"run_id\", step.run_id).eq(\"step_key\", step.step_key)\n .eq(\"status\", \"success\").neq(\"id\", step.step_run_id).limit(1);\n if (prevRun?.length) {\n log.info({ stepKey: step.step_key, runId: step.run_id }, \"step already succeeded, using cached result\");\n await supabase.from(\"workflow_step_runs\").update({\n status: \"success\", output: prevRun[0].output,\n completed_at: new Date().toISOString(), duration_ms: Date.now() - startTime,\n }).eq(\"id\", step.step_run_id);\n await logWorkflowEvent(supabase, step.run_id, \"step_cached\", { step_key: step.step_key }, step.step_run_id);\n const nextStepKey = step.on_success;\n if (!nextStepKey) {\n await checkWorkflowCompletion(supabase, step.run_id, step.workflow_id);\n } else {\n await createNextStepRunByKey(supabase, step.run_id, step.workflow_id, nextStepKey);\n }\n return;\n }\n }\n\n // Flow control — check concurrency/rate limits before execution\n const flowCheck = await checkFlowControl(supabase, step);\n if (!flowCheck.allowed) {\n // Requeue step with short delay for flow control backoff\n await supabase.from(\"workflow_step_runs\").update({\n status: \"retrying\",\n next_retry_at: new Date(Date.now() + 2000).toISOString(), // retry in 2s\n output: { flow_control: flowCheck.reason },\n }).eq(\"id\", step.step_run_id);\n await logWorkflowEvent(supabase, step.run_id, \"step_throttled\", { reason: flowCheck.reason }, step.step_run_id);\n return;\n }\n\n // Build template context\n const ctx: TemplateContext = {\n steps: {},\n trigger: step.trigger_payload || {},\n input: step.input || undefined,\n workflow: {\n id: step.workflow_id,\n store_id: step.store_id,\n },\n run: {\n id: step.run_id,\n workflow_id: step.workflow_id,\n store_id: step.store_id,\n },\n };\n if (step.step_outputs && typeof step.step_outputs === \"object\") {\n for (const [key, val] of Object.entries(step.step_outputs)) {\n if (val && typeof val === \"object\") {\n ctx.steps[key] = val as { output?: unknown; status?: string; duration_ms?: number };\n }\n }\n }\n\n let result: StepResult;\n\n // Enforce step-level timeout from step column (default 30s)\n const stepTimeoutSec = step.timeout_seconds || (step.step_config.timeout_seconds as number) || 30;\n const stepTimeoutMs = stepTimeoutSec * 1000;\n let stepTimer: ReturnType<typeof setTimeout> | undefined;\n const stepTimeoutPromise = new Promise<never>((_, reject) => {\n stepTimer = setTimeout(() => reject(new Error(`Step timed out after ${stepTimeoutSec}s`)), stepTimeoutMs);\n });\n\n try {\n\n switch (step.step_type) {\n case \"tool\":\n result = await Promise.race([executeToolStep(supabase, step.step_config, ctx, step.store_id, traceId), stepTimeoutPromise]);\n break;\n case \"condition\":\n result = executeConditionStep(step.step_config, ctx);\n break;\n case \"transform\":\n result = executeTransformStep(step.step_config, ctx);\n break;\n\n case \"delay\": {\n // First attempt: set the delay. Second attempt (after delay): success.\n if (step.attempt_count <= 1) {\n const delaySec = (step.step_config.seconds as number) || 60;\n await supabase.from(\"workflow_step_runs\").update({\n status: \"retrying\",\n output: { delay_seconds: delaySec, resume_at: new Date(Date.now() + delaySec * 1000).toISOString() },\n next_retry_at: new Date(Date.now() + delaySec * 1000).toISOString(),\n }).eq(\"id\", step.step_run_id);\n clearTimeout(stepTimer);\n return; // Worker picks it up after delay\n }\n result = { success: true, output: { delayed: true, seconds: step.step_config.seconds } };\n break;\n }\n\n case \"agent\":\n result = await Promise.race([executeAgentStep(step.step_config, ctx, step.store_id, supabase, step, traceId), stepTimeoutPromise]);\n break;\n\n case \"sub_workflow\": {\n const childWfId = resolveTemplate((step.step_config.workflow_id || \"\") as string, ctx) as string;\n if (!childWfId) { result = { success: false, error: \"No workflow_id in sub_workflow config\" }; break; }\n\n const payloadTemplate = (step.step_config.trigger_payload_template || step.step_config.trigger_payload || {}) as Record<string, unknown>;\n const payload = resolveTemplate(payloadTemplate, ctx);\n\n const { data: startResult } = await supabase.rpc(\"start_workflow_run\", {\n p_workflow_id: childWfId,\n p_store_id: step.store_id,\n p_trigger_type: \"sub_workflow\",\n p_trigger_payload: payload,\n });\n\n if (!startResult?.success) {\n result = { success: false, error: startResult?.error || \"Failed to start sub-workflow\" };\n break;\n }\n\n // Set to waiting — processWaitingSteps will resolve when child completes\n await supabase.from(\"workflow_step_runs\").update({\n status: \"waiting\",\n child_run_id: startResult.run_id,\n output: { child_run_id: startResult.run_id, child_workflow_id: childWfId },\n }).eq(\"id\", step.step_run_id);\n clearTimeout(stepTimer);\n return;\n }\n\n case \"parallel\": {\n const stepKeys = (step.step_config.step_keys || step.step_config.child_steps || []) as string[];\n if (stepKeys.length === 0) { result = { success: true, output: { parallel: true, steps: [] } }; break; }\n if (stepKeys.length > MAX_PARALLEL_CHILDREN) {\n result = { success: false, error: `Parallel step has ${stepKeys.length} children, exceeding limit of ${MAX_PARALLEL_CHILDREN}` }; break;\n }\n\n const { data: steps } = await supabase.from(\"workflow_steps\")\n .select(\"id, step_key, step_type, max_retries\")\n .eq(\"workflow_id\", step.workflow_id).in(\"step_key\", stepKeys);\n\n if (steps?.length) {\n await supabase.from(\"workflow_step_runs\").insert(\n steps.map(s => ({\n run_id: step.run_id, step_id: s.id, step_key: s.step_key,\n step_type: s.step_type, status: \"pending\" as const,\n max_attempts: s.max_retries ?? 3, parent_step_run_id: step.step_run_id,\n }))\n );\n }\n\n await supabase.from(\"workflow_step_runs\").update({\n status: \"waiting\", output: { waiting_for: stepKeys },\n }).eq(\"id\", step.step_run_id);\n clearTimeout(stepTimer);\n return; // processWaitingSteps resolves when all children complete\n }\n\n case \"for_each\": {\n const itemsExpr = step.step_config.items as string;\n const targetStepKey = step.step_config.step_key as string;\n if (!itemsExpr || !targetStepKey) {\n result = { success: false, error: \"for_each requires items and step_key in config\" }; break;\n }\n\n const items = resolveTemplate(itemsExpr, ctx);\n if (!Array.isArray(items)) {\n result = { success: false, error: `for_each items resolved to ${typeof items}, expected array` }; break;\n }\n if (items.length === 0) {\n result = { success: true, output: { children: [], total: 0 } }; break;\n }\n\n // P2 FIX: Enforce max items limit to prevent runaway step creation\n const maxItems = (step.step_config.max_items as number) || MAX_FOR_EACH_ITEMS;\n if (items.length > maxItems) {\n result = { success: false, error: `for_each exceeded maximum of ${maxItems} items (got ${items.length}). Increase limit in step config or paginate.` }; break;\n }\n\n // Look up target step definition\n const { data: targetStep } = await supabase.from(\"workflow_steps\")\n .select(\"id, step_key, step_type, max_retries\")\n .eq(\"workflow_id\", step.workflow_id).eq(\"step_key\", targetStepKey).single();\n\n if (!targetStep) {\n result = { success: false, error: `for_each target step '${targetStepKey}' not found` }; break;\n }\n\n // Create a step_run per item with the item as input\n await supabase.from(\"workflow_step_runs\").insert(\n items.map((item, idx) => ({\n run_id: step.run_id, step_id: targetStep.id,\n step_key: `${targetStepKey}[${idx}]`, step_type: targetStep.step_type,\n status: \"pending\" as const, max_attempts: targetStep.max_retries ?? 3,\n parent_step_run_id: step.step_run_id, input: item,\n }))\n );\n\n await supabase.from(\"workflow_step_runs\").update({\n status: \"waiting\", output: { waiting_for_count: items.length, target_step: targetStepKey },\n }).eq(\"id\", step.step_run_id);\n clearTimeout(stepTimer);\n return;\n }\n\n case \"code\": {\n result = await Promise.race([executeCodeStepIsolated(step.step_config, ctx), stepTimeoutPromise]);\n break;\n }\n\n case \"webhook_out\":\n result = await Promise.race([executeWebhookOutStep(step.step_config, ctx), stepTimeoutPromise]);\n break;\n\n case \"noop\":\n result = executeNoopStep();\n break;\n\n case \"llm_batch\":\n result = await Promise.race([executeLlmBatchStep(step.step_config, ctx), stepTimeoutPromise]);\n break;\n\n case \"approval\": {\n const approvalResult = await executeApprovalStep(supabase, step, ctx);\n if (approvalResult === \"waiting\") { clearTimeout(stepTimer); return; }\n result = approvalResult;\n break;\n }\n\n // Custom step — POSTs workflow context to a user-defined URL and uses the response\n case \"custom\": {\n const customUrl = resolveTemplate((step.step_config.url || step.step_config.endpoint) as string, ctx) as string;\n if (!customUrl) { result = { success: false, error: \"Custom step requires url in config\" }; break; }\n // P0 FIX: Use async validateUrl (DNS resolve-then-check) instead of sync isBlockedUrl\n const customSsrfError = await validateUrl(customUrl);\n if (customSsrfError) { result = { success: false, error: `Custom step blocked: ${customSsrfError}` }; break; }\n try {\n const customHeaders: Record<string, string> = { \"Content-Type\": \"application/json\" };\n if (step.step_config.headers && typeof step.step_config.headers === \"object\") {\n for (const [k, v] of Object.entries(step.step_config.headers as Record<string, string>)) {\n customHeaders[k] = resolveTemplate(v, ctx) as string;\n }\n }\n const customBody = JSON.stringify({\n step_key: step.step_key,\n run_id: step.run_id,\n workflow_id: step.workflow_id,\n input: step.input,\n step_outputs: step.step_outputs,\n trigger_payload: step.trigger_payload,\n config: step.step_config.payload_config || {},\n });\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), 30_000);\n const resp = await fetch(customUrl, { method: \"POST\", headers: customHeaders, body: customBody, signal: ctrl.signal });\n clearTimeout(timer);\n const respData = resp.headers.get(\"content-type\")?.includes(\"json\")\n ? await resp.json() : await resp.text();\n if (!resp.ok) {\n result = { success: false, error: `Custom step HTTP ${resp.status}: ${String(respData).substring(0, 500)}` };\n } else {\n // Support branch routing from custom step response\n const branch = typeof respData === \"object\" && respData?.branch ? respData.branch as string : undefined;\n result = { success: true, output: respData, branch };\n }\n } catch (err: any) {\n result = { success: false, error: err.name === \"AbortError\" ? \"Custom step timed out\" : sanitizeError(err) };\n }\n break;\n }\n\n // Waitpoint — generalized wait-for-external-signal (subsumes approval, webhook callback, cross-workflow)\n case \"waitpoint\": {\n // Second pass — resumed with completion data\n if (step.input && typeof step.input === \"object\" && (step.input as any).waitpoint_completed) {\n result = { success: true, output: (step.input as any).waitpoint_data || {} };\n break;\n }\n // First pass — create waitpoint token and pause\n const waitpointToken = randomUUID();\n const waitpointTimeout = (step.step_config.timeout_seconds as number) || 86400;\n const waitpointExpires = new Date(Date.now() + waitpointTimeout * 1000).toISOString();\n await supabase.from(\"waitpoint_tokens\").insert({\n token: waitpointToken,\n run_id: step.run_id,\n step_run_id: step.step_run_id,\n store_id: step.store_id,\n expires_at: waitpointExpires,\n label: (step.step_config.label as string) || step.step_key,\n });\n await supabase.from(\"workflow_step_runs\").update({\n status: \"waiting\",\n output: { waiting_for: \"waitpoint\", token: waitpointToken, expires_at: waitpointExpires },\n }).eq(\"id\", step.step_run_id);\n await logWorkflowEvent(supabase, step.run_id, \"waitpoint_created\", { token: waitpointToken }, step.step_run_id);\n clearTimeout(stepTimer);\n return;\n }\n\n default:\n result = { success: false, error: `Unknown step type: ${step.step_type}` };\n }\n\n } catch (timeoutErr: any) {\n result = { success: false, error: timeoutErr.message || `Step timed out after ${stepTimeoutSec}s` };\n } finally {\n clearTimeout(stepTimer);\n }\n\n const durationMs = Date.now() - startTime;\n\n // Phase 3.3: End OTEL span with result attributes\n if (result.success) {\n span.end({ \"workflow.duration_ms\": durationMs, \"workflow.status\": \"success\" });\n } else {\n span.setError(result.error || \"step failed\");\n span.end({ \"workflow.duration_ms\": durationMs, \"workflow.status\": \"failed\" });\n }\n\n // Event journal — step completed\n await logWorkflowEvent(supabase, step.run_id, result.success ? \"step_completed\" : \"step_failed\", {\n step_key: step.step_key, duration_ms: durationMs,\n ...(result.error ? { error: result.error } : {}),\n ...(result.branch ? { branch: result.branch } : {}),\n }, step.step_run_id);\n\n // Persist step result\n await supabase.from(\"workflow_step_runs\").update({\n status: result.success ? \"success\" : \"failed\",\n output: result.output || null,\n error_message: result.error || null,\n completed_at: new Date().toISOString(),\n duration_ms: durationMs,\n }).eq(\"id\", step.step_run_id);\n\n // P4 FIX: Atomically merge step output using jsonb_set to prevent race conditions\n // Two concurrent steps can no longer overwrite each other's outputs\n const stepOutput = { output: result.output, status: result.success ? \"success\" : \"failed\", duration_ms: durationMs };\n const { error: rpcError } = await supabase.rpc(\"accumulate_step_output\", {\n p_run_id: step.run_id,\n p_step_key: step.step_key,\n p_step_output: stepOutput,\n });\n if (rpcError) {\n // Retry once — transient connection errors are common under load\n log.warn({ err: rpcError.message, runId: step.run_id, stepKey: step.step_key }, \"accumulate_step_output RPC error, retrying once\");\n const { error: retryError } = await supabase.rpc(\"accumulate_step_output\", {\n p_run_id: step.run_id,\n p_step_key: step.step_key,\n p_step_output: stepOutput,\n });\n if (retryError) {\n // Final fallback: advisory-lock-guarded RPC prevents parallel step race conditions\n log.warn({ err: retryError.message, runId: step.run_id, stepKey: step.step_key }, \"accumulate_step_output retry failed, using locked fallback\");\n const { error: lockError } = await supabase.rpc(\"accumulate_step_output_locked\", {\n p_run_id: step.run_id,\n p_step_key: step.step_key,\n p_step_output: stepOutput,\n });\n if (lockError) {\n // P0 FIX: Throw so the step is marked as failed, not falsely as success\n throw new Error(`Failed to accumulate step output after all fallbacks: ${lockError.message}`);\n }\n }\n }\n\n // Checkpoint — snapshot state after each step for replay/debugging\n if (result.success) {\n const { error: cpError } = await supabase.from(\"workflow_checkpoints\").insert({\n run_id: step.run_id, step_run_id: step.step_run_id, step_key: step.step_key,\n step_outputs: { ...(step.step_outputs || {}), [step.step_key]: { output: result.output, status: \"success\", duration_ms: durationMs } },\n trigger_payload: step.trigger_payload,\n sequence_number: Object.keys(step.step_outputs || {}).length + 1,\n });\n if (cpError) log.warn({ err: cpError.message, runId: step.run_id, stepKey: step.step_key }, \"checkpoint insert failed\");\n }\n\n // Telemetry → ClickHouse\n queueSpan(auditRowToSpan({\n action: `workflow.step.${result.success ? \"completed\" : \"failed\"}`,\n severity: result.success ? \"info\" : \"error\",\n store_id: step.store_id, resource_type: \"workflow_step_run\",\n resource_id: step.step_run_id, source: \"workflow_engine\", duration_ms: durationMs,\n request_id: traceId || null,\n service_name: \"workflow-engine\", span_kind: \"INTERNAL\",\n status_code: result.success ? \"OK\" : \"ERROR\",\n start_time: new Date(Date.now() - durationMs).toISOString(),\n end_time: new Date().toISOString(),\n error_type: result.error ? classifyErrorType(result.error) : undefined,\n details: { workflow_id: step.workflow_id, run_id: step.run_id, step_key: step.step_key, step_type: step.step_type, attempt: step.attempt_count },\n error_message: result.error || null,\n }));\n\n // Surface step errors to clients via SSE broadcast + structured error_details\n if (!result.success && result.error) {\n await surfaceStepError(supabase, step, result.error);\n }\n\n // Child steps (parallel/for_each) — just save result, parent handles advancement\n if (step.parent_step_run_id) {\n // If child failed and has retries left, retry it (respects retry_policy)\n if (!result.success && step.attempt_count < step.max_attempts) {\n const retryPolicy = step.step_config.retry_policy as { backoff_type?: string; backoff_base_seconds?: number; max_backoff_seconds?: number } | undefined;\n const backoffType = retryPolicy?.backoff_type || \"exponential\";\n const baseDelay = retryPolicy?.backoff_base_seconds || step.retry_delay_seconds || 10;\n const maxBackoff = retryPolicy?.max_backoff_seconds || 300;\n let backoffDelay: number;\n switch (backoffType) {\n case \"fixed\": backoffDelay = baseDelay; break;\n case \"linear\": backoffDelay = baseDelay * step.attempt_count; break;\n default: backoffDelay = baseDelay * Math.pow(2, step.attempt_count - 1); break;\n }\n backoffDelay = Math.min(backoffDelay, maxBackoff);\n // P3 FIX: Add jitter (50%-100% of computed delay) to prevent thundering herd\n backoffDelay *= (0.5 + Math.random() * 0.5);\n await supabase.from(\"workflow_step_runs\").update({\n status: \"retrying\",\n next_retry_at: new Date(Date.now() + backoffDelay * 1000).toISOString(),\n }).eq(\"id\", step.step_run_id);\n }\n return; // Parent's processWaitingSteps handles advancement\n }\n\n // Handle failure — configurable retry policy\n if (!result.success) {\n if (step.attempt_count < step.max_attempts) {\n // Check retry_on filter — only retry if error matches pattern (if configured)\n const retryPolicy = step.step_config.retry_policy as { backoff_type?: string; backoff_base_seconds?: number; max_backoff_seconds?: number; retry_on?: string[] } | undefined;\n const retryOn = retryPolicy?.retry_on;\n const shouldRetry = !retryOn?.length || retryOn.some(pattern => result.error?.includes(pattern));\n\n if (shouldRetry) {\n const backoffType = retryPolicy?.backoff_type || \"exponential\";\n const baseDelay = retryPolicy?.backoff_base_seconds || step.retry_delay_seconds || 10;\n const maxBackoff = retryPolicy?.max_backoff_seconds || 300; // 5 min cap\n let backoffDelay: number;\n switch (backoffType) {\n case \"fixed\": backoffDelay = baseDelay; break;\n case \"linear\": backoffDelay = baseDelay * step.attempt_count; break;\n default: backoffDelay = baseDelay * Math.pow(2, step.attempt_count - 1); break; // exponential\n }\n backoffDelay = Math.min(backoffDelay, maxBackoff);\n // P3 FIX: Add jitter (50%-100% of computed delay) to prevent thundering herd\n backoffDelay *= (0.5 + Math.random() * 0.5);\n await supabase.from(\"workflow_step_runs\").update({\n status: \"retrying\",\n next_retry_at: new Date(Date.now() + backoffDelay * 1000).toISOString(),\n }).eq(\"id\", step.step_run_id);\n await logWorkflowEvent(supabase, step.run_id, \"step_retrying\", {\n step_key: step.step_key, attempt: step.attempt_count, backoff_type: backoffType, delay_seconds: backoffDelay,\n }, step.step_run_id);\n return;\n }\n // retry_on filter didn't match — fall through to failure handling\n }\n\n if (step.on_failure) {\n await createNextStepRunByKey(supabase, step.run_id, step.workflow_id, step.on_failure);\n } else {\n await completeWorkflowRun(supabase, step.run_id, step.workflow_id, step.store_id, \"failed\", result.error, step.step_key);\n }\n return;\n }\n\n // Advance — condition steps use branch, otherwise on_success\n const nextStepKey = result.branch || step.on_success;\n if (!nextStepKey) {\n await checkWorkflowCompletion(supabase, step.run_id, step.workflow_id);\n return;\n }\n await createNextStepRunByKey(supabase, step.run_id, step.workflow_id, nextStepKey);\n}\n\n// ============================================================================\n// WORKFLOW ADVANCEMENT HELPERS\n// ============================================================================\n\n// P1 FIX: Per-run in-memory cache for versioned steps (30s TTL)\n// Prevents 4x redundant DB calls per step execution\n// P0 FIX: Capped at 500 entries with LRU eviction to prevent unbounded memory growth\nconst VERSION_CACHE_MAX_SIZE = 500;\nconst versionedStepsCache = new Map<string, { data: any[] | null; expiresAt: number }>();\nconst VERSION_CACHE_TTL_MS = 30_000;\n\nexport function clearStepCache(): void {\n versionedStepsCache.clear();\n}\n\n/** Insert into cache with LRU eviction when size exceeds limit */\nfunction versionedStepsCacheSet(key: string, value: { data: any[] | null; expiresAt: number }): void {\n // If key already exists, delete first so re-insertion moves it to end (most recent)\n if (versionedStepsCache.has(key)) {\n versionedStepsCache.delete(key);\n }\n versionedStepsCache.set(key, value);\n // Evict oldest entries (Map iteration order = insertion order) if over limit\n if (versionedStepsCache.size > VERSION_CACHE_MAX_SIZE) {\n const excess = versionedStepsCache.size - VERSION_CACHE_MAX_SIZE;\n let removed = 0;\n for (const k of versionedStepsCache.keys()) {\n if (removed >= excess) break;\n versionedStepsCache.delete(k);\n removed++;\n }\n }\n}\n\n// Periodic cleanup to prevent memory leaks\nsetInterval(() => {\n const now = Date.now();\n for (const [key, entry] of versionedStepsCache) {\n if (now > entry.expiresAt) versionedStepsCache.delete(key);\n }\n}, 60_000);\n\n/**\n * Load the versioned steps array for a run. Returns null if no version.\n * Uses per-run in-memory cache with 30s TTL.\n */\nasync function loadVersionedSteps(\n supabase: SupabaseClient, runId: string,\n): Promise<any[] | null> {\n const cached = versionedStepsCache.get(runId);\n if (cached && Date.now() < cached.expiresAt) return cached.data;\n\n const { data: run } = await supabase.from(\"workflow_runs\")\n .select(\"version_id\").eq(\"id\", runId).single();\n if (!run?.version_id) {\n versionedStepsCacheSet(runId, { data: null, expiresAt: Date.now() + VERSION_CACHE_TTL_MS });\n return null;\n }\n\n const { data: version } = await supabase.from(\"workflow_versions\")\n .select(\"steps\").eq(\"id\", run.version_id).single();\n const result = (version?.steps && Array.isArray(version.steps)) ? version.steps as any[] : null;\n versionedStepsCacheSet(runId, { data: result, expiresAt: Date.now() + VERSION_CACHE_TTL_MS });\n return result;\n}\n\n/**\n * Apply versioned overrides to a claimed step. If the run has a version_id,\n * replaces step_config, on_success, on_failure with values from the snapshot.\n */\nasync function applyVersionOverrides(supabase: SupabaseClient, step: StepClaim): Promise<void> {\n const versionedSteps = await loadVersionedSteps(supabase, step.run_id);\n if (!versionedSteps) return;\n\n const vStep = versionedSteps.find((s: any) => s.step_key === step.step_key);\n if (vStep) {\n step.step_config = vStep.step_config || step.step_config;\n step.on_success = vStep.on_success ?? step.on_success;\n step.on_failure = vStep.on_failure ?? step.on_failure;\n }\n}\n\n/**\n * Resolve a step definition by key. If the run has a version_id, load from\n * the versioned snapshot. Otherwise, load from the live workflow_steps table.\n */\nasync function resolveStepDef(\n supabase: SupabaseClient, runId: string, workflowId: string, stepKey: string,\n): Promise<{ id: string; step_key: string; step_type: string; max_retries: number } | null> {\n const versionedSteps = await loadVersionedSteps(supabase, runId);\n\n if (versionedSteps) {\n const step = versionedSteps.find((s: any) => s.step_key === stepKey);\n if (step) {\n return { id: step.id, step_key: step.step_key, step_type: step.step_type, max_retries: step.max_retries ?? 3 };\n }\n return null;\n }\n\n // Live table\n const { data } = await supabase.from(\"workflow_steps\")\n .select(\"id, step_key, step_type, max_retries\")\n .eq(\"workflow_id\", workflowId).eq(\"step_key\", stepKey).single();\n return data;\n}\n\nasync function createNextStepRunByKey(\n supabase: SupabaseClient, runId: string, workflowId: string, stepKey: string,\n): Promise<string | null> {\n const nextStep = await resolveStepDef(supabase, runId, workflowId, stepKey);\n\n if (!nextStep) {\n log.error({ stepKey, workflowId }, \"step not found in workflow\");\n const { data: run } = await supabase.from(\"workflow_runs\").select(\"store_id\").eq(\"id\", runId).single();\n await completeWorkflowRun(supabase, runId, workflowId, run?.store_id, \"failed\", `Step '${stepKey}' not found`);\n return null;\n }\n\n // Check step count limit\n const { data: run } = await supabase.from(\"workflow_runs\")\n .select(\"store_id\").eq(\"id\", runId).single();\n const { count } = await supabase.from(\"workflow_step_runs\")\n .select(\"id\", { count: \"exact\", head: true }).eq(\"run_id\", runId);\n\n const { data: wf } = await supabase.from(\"workflows\")\n .select(\"max_steps_per_run\").eq(\"id\", workflowId).single();\n\n if ((count || 0) >= (wf?.max_steps_per_run || 50)) {\n await completeWorkflowRun(supabase, runId, workflowId, run?.store_id, \"failed\", `Step limit exceeded (${wf?.max_steps_per_run || 50})`);\n return null;\n }\n\n const { data: inserted } = await supabase.from(\"workflow_step_runs\").insert({\n run_id: runId, step_id: nextStep.id, step_key: nextStep.step_key,\n step_type: nextStep.step_type, status: \"pending\", max_attempts: nextStep.max_retries ?? 3,\n }).select(\"id\").single();\n\n return inserted?.id || null;\n}\n\n// ============================================================================\n// PHASE 1: INLINE EXECUTION — execute steps immediately, no 5s wait\n// ============================================================================\n\n/**\n * Claim a single pending step for a specific run using atomic RPC.\n * P0 FIX: Uses claim_step_for_run RPC with FOR UPDATE SKIP LOCKED + attempt_count increment.\n * Replaces the old SELECT-then-UPDATE pattern that never incremented attempt_count (infinite retries).\n */\nasync function claimStepForRun(\n supabase: SupabaseClient, runId: string,\n): Promise<StepClaim | null> {\n const { data, error } = await supabase.rpc(\"claim_step_for_run\", { p_run_id: runId });\n\n if (error) {\n log.error({ err: error.message, runId }, \"claim_step_for_run RPC failed\");\n return null;\n }\n\n // RPC returns an array of rows; we expect 0 or 1\n const row = Array.isArray(data) ? data[0] : data;\n if (!row) return null;\n\n return {\n step_run_id: row.step_run_id,\n run_id: row.run_id,\n workflow_id: row.workflow_id,\n store_id: row.store_id,\n step_id: row.step_id,\n step_key: row.step_key,\n step_type: row.step_type,\n step_config: row.step_config || {},\n on_success: row.on_success,\n on_failure: row.on_failure,\n timeout_seconds: row.timeout_seconds || 60,\n input_schema: row.input_schema,\n step_outputs: row.step_outputs || {},\n trigger_payload: row.trigger_payload || {},\n attempt_count: row.attempt_count || 1,\n max_attempts: row.max_attempts || 3,\n max_steps_per_run: row.max_steps_per_run || 50,\n input: row.input,\n parent_step_run_id: row.parent_step_run_id,\n retry_delay_seconds: row.retry_delay_seconds || 10,\n };\n}\n\n/**\n * Execute the first pending step of a run inline, then chain subsequent steps.\n * Depth guard prevents unbounded recursion — worker loop catches anything left.\n */\nexport async function executeInlineChain(\n supabase: SupabaseClient, runId: string, depth: number = 0, traceId?: string,\n): Promise<void> {\n if (depth >= MAX_INLINE_DEPTH) {\n log.warn({ runId, depthLimit: MAX_INLINE_DEPTH }, \"inline depth limit reached, deferring to worker\");\n return;\n }\n\n // Resolve traceId from run record if not passed (first depth only to avoid repeated queries)\n if (!traceId && depth === 0) {\n const { data: runData } = await supabase.from(\"workflow_runs\")\n .select(\"trace_id\").eq(\"id\", runId).single();\n traceId = runData?.trace_id || undefined;\n }\n\n // H1 FIX: Claim step specifically for this run — cannot steal from other runs\n const step = await claimStepForRun(supabase, runId);\n if (!step) return; // No pending steps for this run\n\n // Phase 4: Override step_config/on_success/on_failure from version snapshot\n await applyVersionOverrides(supabase, step);\n\n try {\n await executeAndAdvance(supabase, step, traceId);\n } catch (err) {\n const errMsg = sanitizeError(err);\n log.error({ stepKey: step.step_key, runId, err: errMsg }, \"inline step execution error\");\n await supabase.from(\"workflow_step_runs\").update({\n status: \"failed\", error_message: errMsg,\n completed_at: new Date().toISOString(), duration_ms: 0,\n }).eq(\"id\", step.step_run_id);\n // Surface error to clients (SSE broadcast + structured error_details on step run)\n await surfaceStepError(supabase, step, errMsg);\n return;\n }\n\n // Steps that go async (delay, sub_workflow, parallel, for_each, approval) don't chain\n const asyncTypes = new Set([\"delay\", \"sub_workflow\", \"parallel\", \"for_each\", \"approval\", \"waitpoint\"]);\n if (asyncTypes.has(step.step_type)) return;\n\n // Chain to next step\n await executeInlineChain(supabase, runId, depth + 1, traceId);\n}\n\nasync function checkWorkflowCompletion(\n supabase: SupabaseClient, runId: string, workflowId: string,\n): Promise<void> {\n // P1 FIX: Single atomic query to count all step statuses — eliminates race windows\n // between multiple queries that could see inconsistent state\n const { data: allSteps } = await supabase.from(\"workflow_step_runs\")\n .select(\"step_key, step_id, status, error_message\")\n .eq(\"run_id\", runId);\n\n if (!allSteps?.length) {\n // No steps at all — mark as success (empty workflow)\n const { data: run } = await supabase.from(\"workflow_runs\").select(\"store_id\").eq(\"id\", runId).single();\n await completeWorkflowRun(supabase, runId, workflowId, run?.store_id, \"success\");\n return;\n }\n\n // Count in-memory from single query result\n const activeStatuses = new Set([\"pending\", \"running\", \"retrying\", \"waiting\"]);\n const activeSteps = allSteps.filter(s => activeStatuses.has(s.status));\n if (activeSteps.length > 0) return; // Still in progress\n\n // All steps are terminal — determine outcome\n const skippedSteps = allSteps.filter(s => s.status === \"skipped\");\n const failedSteps = allSteps.filter(s => s.status === \"failed\");\n\n // Filter to unhandled failures — steps where on_failure is null (no error handler)\n // M14 FIX: Use versioned step defs when available\n let failed: typeof failedSteps = [];\n if (failedSteps.length) {\n const versionedSteps = await loadVersionedSteps(supabase, runId);\n\n if (versionedSteps) {\n // Use versioned definitions\n const vStepMap = new Map(versionedSteps.map((s: any) => [s.step_key, s]));\n failed = failedSteps.filter(s => {\n const vStep = vStepMap.get(s.step_key);\n return !vStep?.on_failure;\n });\n } else {\n // Fall back to live table\n const stepIds = failedSteps.map(s => s.step_id).filter(Boolean);\n if (stepIds.length) {\n const { data: stepDefs } = await supabase.from(\"workflow_steps\")\n .select(\"id, on_failure\").in(\"id\", stepIds);\n const defMap = new Map((stepDefs || []).map(d => [d.id, d]));\n\n failed = failedSteps.filter(s => {\n const def = defMap.get(s.step_id);\n return !def?.on_failure;\n });\n }\n }\n }\n\n const { data: run } = await supabase.from(\"workflow_runs\").select(\"store_id\").eq(\"id\", runId).single();\n\n if (failed.length) {\n await completeWorkflowRun(supabase, runId, workflowId, run?.store_id, \"failed\", failed[0].error_message, failed[0].step_key);\n } else if (skippedSteps.length) {\n // All remaining steps were skipped (circuit breaker) — fail the run\n await completeWorkflowRun(supabase, runId, workflowId, run?.store_id, \"failed\",\n `${skippedSteps.length} step(s) skipped by circuit breaker`, skippedSteps[0].step_key);\n } else {\n await completeWorkflowRun(supabase, runId, workflowId, run?.store_id, \"success\");\n }\n}\n\nexport async function completeWorkflowRun(\n supabase: SupabaseClient, runId: string, workflowId: string, storeId: string | undefined,\n status: \"success\" | \"failed\" | \"cancelled\" | \"timed_out\",\n errorMessage?: string | null, errorStepKey?: string | null, traceId?: string,\n): Promise<void> {\n const { data: run } = await supabase.from(\"workflow_runs\")\n .select(\"started_at, trace_id, metadata\").eq(\"id\", runId).single();\n const durationMs = run?.started_at ? Date.now() - new Date(run.started_at).getTime() : null;\n const resolvedTraceId = traceId || run?.trace_id || null;\n\n // Aggregate error_count and error_log from failed step runs\n const { data: failedStepRuns } = await supabase.from(\"workflow_step_runs\")\n .select(\"step_key, step_type, error_message, error_details\")\n .eq(\"run_id\", runId)\n .eq(\"status\", \"failed\");\n\n const errorCount = failedStepRuns?.length || 0;\n const errorLog = (failedStepRuns || []).map(sr => ({\n step_name: sr.step_key,\n step_type: sr.step_type,\n error_message: sr.error_message,\n ...(sr.error_details ? { details: sr.error_details } : {}),\n }));\n\n const updatedMetadata = {\n ...((run?.metadata as Record<string, unknown>) || {}),\n error_count: errorCount,\n ...(errorLog.length ? { error_log: errorLog } : {}),\n };\n\n // Guard against double-completion: only update if still running\n const { data: updatedRows, error: updateErr } = await supabase.from(\"workflow_runs\").update({\n status, error_message: errorMessage || null, error_step_key: errorStepKey || null,\n completed_at: new Date().toISOString(), duration_ms: durationMs, current_step_key: null,\n metadata: updatedMetadata,\n }).eq(\"id\", runId).eq(\"status\", \"running\").select(\"id\");\n\n if (updateErr) {\n log.warn({ err: updateErr.message, runId, status }, \"completeWorkflowRun update failed\");\n return;\n }\n if (!updatedRows || updatedRows.length === 0) {\n log.warn({ runId, status }, \"completeWorkflowRun skipped — run already completed by another caller\");\n return;\n }\n\n // Cancel remaining pending steps\n await supabase.from(\"workflow_step_runs\").update({ status: \"cancelled\" })\n .eq(\"run_id\", runId).in(\"status\", [\"pending\", \"retrying\", \"waiting\"]);\n\n // Event journal — run completed\n await logWorkflowEvent(supabase, runId, `run_${status}`, {\n workflow_id: workflowId, duration_ms: durationMs,\n ...(errorMessage ? { error: errorMessage } : {}),\n });\n\n // Circuit breaker\n if (workflowId) await handleWorkflowCircuitBreaker(supabase, workflowId, status === \"success\", errorMessage);\n\n // Telemetry → ClickHouse\n queueSpan(auditRowToSpan({\n action: `workflow.run.${status}`, severity: status === \"success\" ? \"info\" : \"error\",\n store_id: storeId || null, resource_type: \"workflow_run\", resource_id: runId,\n source: \"workflow_engine\", duration_ms: durationMs,\n request_id: resolvedTraceId,\n service_name: \"workflow-engine\", span_kind: \"INTERNAL\",\n status_code: status === \"success\" ? \"OK\" : \"ERROR\",\n start_time: new Date(Date.now() - (durationMs || 0)).toISOString(),\n end_time: new Date().toISOString(),\n error_type: errorMessage ? classifyErrorType(errorMessage) : undefined,\n details: { workflow_id: workflowId, run_id: runId },\n error_message: errorMessage || null,\n }));\n\n // Error notifications\n if (status === \"failed\" && workflowId) {\n await sendErrorNotification(supabase, workflowId, runId, storeId, errorMessage, errorStepKey);\n // Auto-archive to Dead Letter Queue\n if (storeId) {\n try {\n await archiveToDlq(supabase, runId, workflowId, storeId);\n } catch (e: any) {\n log.warn({ err: e?.message, runId }, \"archiveToDlq failed\");\n }\n }\n }\n}\n\nasync function sendErrorNotification(\n supabase: SupabaseClient, workflowId: string, runId: string,\n storeId: string | undefined, errorMessage?: string | null, errorStepKey?: string | null,\n): Promise<void> {\n const { data: wf } = await supabase.from(\"workflows\")\n .select(\"name, on_error_webhook_url, on_error_email\").eq(\"id\", workflowId).single();\n if (!wf) return;\n\n const errorPayload = {\n event: \"workflow.run.failed\",\n workflow_id: workflowId, workflow_name: wf.name,\n run_id: runId, error_message: errorMessage, error_step: errorStepKey,\n timestamp: new Date().toISOString(),\n };\n\n // Webhook notification (with SSRF protection)\n const errorWebhookSsrf = wf.on_error_webhook_url ? await validateUrl(wf.on_error_webhook_url) : \"no URL\";\n if (wf.on_error_webhook_url && !errorWebhookSsrf) {\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 10_000);\n await fetch(wf.on_error_webhook_url, {\n method: \"POST\", headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(errorPayload), signal: controller.signal,\n });\n clearTimeout(timer);\n } catch (err) {\n log.error({ err: sanitizeError(err), workflowId }, \"error notification webhook failed\");\n }\n }\n\n // Email notification\n if (wf.on_error_email && _executeTool && storeId) {\n try {\n await _executeTool(supabase, \"email\", {\n action: \"send\", to: wf.on_error_email,\n subject: `Workflow \"${wf.name}\" failed`,\n text: `Workflow \"${wf.name}\" failed at step \"${errorStepKey || \"unknown\"}\".\\n\\nError: ${errorMessage || \"Unknown error\"}\\n\\nRun ID: ${runId}\\nTime: ${new Date().toISOString()}`,\n }, storeId);\n } catch (err) {\n log.error({ err: sanitizeError(err), workflowId }, \"error notification email failed\");\n }\n }\n}\n\n// ============================================================================\n// WEBHOOK INGESTION\n// ============================================================================\n\nexport async function handleWebhookIngestion(\n supabase: SupabaseClient, slug: string, rawBody: string, headers: Record<string, string>,\n storeId?: string,\n): Promise<{ status: number; body: Record<string, unknown> }> {\n // P0 FIX: Multi-tenancy — scope webhook lookup by store_id when available\n let endpointQuery = supabase.from(\"webhook_endpoints\")\n .select(\"*\").eq(\"slug\", slug).eq(\"is_active\", true);\n if (storeId) {\n endpointQuery = endpointQuery.eq(\"store_id\", storeId);\n }\n const { data: endpoints } = await endpointQuery.limit(1);\n const endpoint = endpoints?.[0];\n if (!endpoint) return { status: 404, body: { error: \"Webhook endpoint not found\" } };\n\n // Rate limit — in-memory sliding window (no DB round-trip)\n const now = Date.now();\n let counter = webhookRateCounters.get(endpoint.id);\n if (!counter) { counter = { timestamps: [] }; webhookRateCounters.set(endpoint.id, counter); }\n counter.timestamps = counter.timestamps.filter(t => t > now - 60_000);\n if (counter.timestamps.length >= endpoint.max_requests_per_minute) {\n return { status: 429, body: { error: \"Rate limit exceeded\" } };\n }\n counter.timestamps.push(now);\n\n // HMAC verification\n if (endpoint.verify_signature) {\n const signature = headers[\"x-webhook-signature\"] || headers[\"x-hub-signature-256\"] || \"\";\n if (!signature) return { status: 401, body: { error: \"Missing signature\" } };\n\n const expected = `sha256=${createHmac(\"sha256\", endpoint.signing_secret).update(rawBody).digest(\"hex\")}`;\n try {\n const sigBuf = Buffer.from(signature);\n const expBuf = Buffer.from(expected);\n if (sigBuf.length !== expBuf.length || !timingSafeEqual(sigBuf, expBuf)) {\n return { status: 401, body: { error: \"Invalid signature\" } };\n }\n } catch { return { status: 401, body: { error: \"Invalid signature\" } }; }\n }\n\n // P3 FIX: Reject oversized payloads before parsing to prevent memory exhaustion\n const MAX_TRIGGER_PAYLOAD_BYTES = 10_000_000; // 10MB\n if (rawBody.length > MAX_TRIGGER_PAYLOAD_BYTES) {\n return { status: 413, body: { error: `Trigger payload too large (${rawBody.length} bytes, max 10MB)` } };\n }\n\n let payload: Record<string, unknown>;\n try { payload = JSON.parse(rawBody); } catch { payload = { raw: rawBody }; }\n\n if (endpoint.payload_transform && typeof endpoint.payload_transform === \"object\") {\n payload = resolveTemplate(endpoint.payload_transform, { steps: {}, trigger: payload }) as Record<string, unknown>;\n }\n\n // Update stats\n await supabase.from(\"webhook_endpoints\").update({\n last_received_at: new Date().toISOString(),\n total_received: (endpoint.total_received || 0) + 1,\n }).eq(\"id\", endpoint.id);\n\n // Telemetry → ClickHouse\n queueSpan(auditRowToSpan({\n action: \"webhook.received\", severity: \"info\", store_id: endpoint.store_id,\n resource_type: \"webhook_endpoint\", resource_id: endpoint.id, source: \"webhook\",\n service_name: \"workflow-engine\", span_kind: \"SERVER\", status_code: \"OK\",\n start_time: new Date().toISOString(), end_time: new Date().toISOString(),\n input_bytes: rawBody.length,\n details: { slug, workflow_id: endpoint.workflow_id },\n }));\n\n // Start workflow\n const { data: startResult } = await supabase.rpc(\"start_workflow_run\", {\n p_workflow_id: endpoint.workflow_id, p_store_id: endpoint.store_id,\n p_trigger_type: \"webhook\", p_trigger_payload: payload,\n });\n if (!startResult?.success) {\n return { status: 422, body: { error: startResult?.error || \"Failed to start workflow\" } };\n }\n\n const runId = startResult.run_id;\n\n // Sync response — poll until workflow completes or timeout\n if (endpoint.sync_response) {\n const timeoutMs = (endpoint.sync_timeout_seconds || 30) * 1000;\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n await new Promise(r => setTimeout(r, 500));\n\n const { data: run } = await supabase.from(\"workflow_runs\")\n .select(\"status, step_outputs, error_message\").eq(\"id\", runId).single();\n\n if (run?.status === \"success\") {\n return { status: 200, body: { success: true, run_id: runId, output: run.step_outputs } };\n }\n if (run?.status === \"failed\") {\n return { status: 422, body: { success: false, run_id: runId, error: run.error_message, output: run.step_outputs } };\n }\n }\n\n return { status: 202, body: { success: true, run_id: runId, status: \"running\", message: \"Workflow still in progress\" } };\n }\n\n return { status: 200, body: { success: true, run_id: runId, deduplicated: startResult.deduplicated || false } };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"workflow-steps.js","names":["createHmac","timingSafeEqual","randomUUID","resolveTemplate","evaluateCondition","sanitizeError","executeWithPool","initWorkerPool","getPoolStats","shutdownPool","batchClient","getProvider","createLogger","startSpan","queueSpan","auditRowToSpan","classifyErrorType","log","webhookRateCounters","Map","MAX_INLINE_DEPTH","CODE_TIMEOUT_MS","CODE_OUTPUT_MAX","MAX_FOR_EACH_ITEMS","MAX_PARALLEL_CHILDREN","GUEST_APPROVAL_SECRET","process","env","FLY_INTERNAL_SECRET","GUEST_APPROVAL_BASE_URL","AGENT_BASE_URL","replace","generateGuestApprovalUrl","approvalId","action","expiresAt","payload","sig","update","digest","encodeURIComponent","verifyGuestApprovalSignature","expected","Buffer","from","logWorkflowEvent","supabase","runId","eventType","stepRunId","error","insert","run_id","step_run_id","event_type","warn","err","message","checkFlowControl","step","config","step_config","concurrencyLimit","concurrency_limit","concurrencyKey","concurrency_key","step_key","count","select","head","eq","store_id","neq","allowed","reason","rateLimit","rate_limit","rateWindowSec","rate_window_seconds","windowStart","Date","now","toISOString","in","gte","_executeTool","_runAgentQuery","_broadcastToken","_broadcastStepError","setToolExecutor","fn","setAgentExecutor","setTokenBroadcaster","setStepErrorBroadcaster","surfaceStepError","errorMessage","timestamp","error_details","step_name","step_type","error_message","type","workflow_id","executeToolStep","ctx","storeId","traceId","success","toolName","tool_name","argsTemplate","args_template","args","resolvedArgs","template_data","mergedData","trigger","stepData","Object","entries","steps","output","assign","keys","length","tool_id","cb","checkToolCircuitBreaker","result","updateToolCircuitBreaker","data","executeConditionStep","expression","on_true","on_false","branch","undefined","condition_result","executeTransformStep","mapping","executeAgentStep","agentId","agent_id","promptTemplate","prompt_template","prompt","allowedTools","allowed_tools","blockedTools","blocked_tools","requireApprovalTools","require_approval_tools","gatedPrompt","join","approvedTools","input","approved_tools","pendingTools","filter","t","includes","maxTurns","max_turns","useBatch","use_batch","model","provider","batchProvider","requestId","slice","batchResult","processSingle","role","content","max_tokens","temperature","response","text","usage","batch","onToken","token","validateUrl","executeWebhookOutStep","url","ssrfError","method","toUpperCase","headers","k","v","body","bodyTemplate","body_template","JSON","stringify","hmac_secret","hmac","controller","AbortController","timer","setTimeout","abort","resp","fetch","signal","clearTimeout","ct","get","json","ok","status","String","substring","name","executeNoopStep","noop","executeLlmBatchStep","systemTemplate","system","maxTokens","tools","batch_request_id","executeApprovalStep","approval_status","approvalData","isApproved","approved","response_data","approval_data","responded_by","on_approve","on_reject","title","description","options","timeoutSeconds","timeout_seconds","timeoutAction","timeout_action","channels","notification_channels","form_schema","assigned_to","assigned_role","expires_at","guestUrls","optionsList","Array","isArray","opt","waiting_for","guest_urls","parseCronField","field","min","max","values","Set","part","split","trimmed","trim","i","add","range","stepStr","parseInt","isNaN","start","end","map","Number","s","e","n","sort","a","b","getUtcOffsetMinutes","date","tz","fmt","Intl","DateTimeFormat","timeZone","year","month","day","hour","minute","second","hour12","p","fromEntries","formatToParts","x","value","wallMs","UTC","getTime","getNextCronTime","after","timezone","parts","minutes","hours","doms","months","dows","domRestricted","dowRestricted","useDomDowOr","effectiveTz","offsetMin","localEpoch","candidate","setUTCSeconds","setUTCMinutes","getUTCMinutes","maxMs","lastOffsetDay","getUTCDate","currentDay","approxUtc","newOffset","drift","setTime","realUtc","mo","getUTCMonth","hr","getUTCHours","mi","dow","getUTCDay","setUTCMonth","setUTCHours","domMatch","dowMatch","dayMatch","setUTCDate","verifyOffset","processScheduleTriggers","dueWorkflows","not","lte","limit","fired","wf","isOneTime","cron_expression","rpc","p_workflow_id","id","p_store_id","p_trigger_type","p_trigger_payload","cron","one_time","scheduled_at","p_idempotency_key","workflowId","trace_id","executeInlineChain","last_scheduled_at","next_run_at","is_active","nextRun","DEFAULT_MAX_RUN_DURATION_SEC","enforceWorkflowTimeouts","timedOut","run","workflows","maxDuration","max_run_duration_seconds","elapsed","started_at","completeWorkflowRun","Math","round","archiveToDlq","elapsedSec","zombieRuns","activeSteps","checkWorkflowCompletion","lastOrphanCleanupAt","ORPHAN_CLEANUP_INTERVAL_MS","cleanupOrphanedSteps","orphans","cleaned","runStatus","workflow_runs","completed_at","info","lastDlqRetryAt","DLQ_RETRY_INTERVAL_MS","DLQ_RETRY_BATCH_SIZE","DLQ_MAX_RETRY_ATTEMPTS","processDlqRetries","or","lt","order","ascending","retried","entry","last_retry_at","backoffMs","pow","retry_count","trigger_type","trigger_payload","_dlq_retry","_dlq_entry_id","last_error","retried_run_id","dlqEntryId","retryCount","processEventTriggers","events","claimed","claimErr","batch_size","debug","fallbackEvents","eventIds","uniqueStoreIds","uniqueEventTypes","allSubs","subsMap","sub","key","has","set","push","processed","event","subs","processed_at","filter_expression","event_payload","pass","idempotencyKey","startErr","_event_id","_event_type","_event_source","source","eventId","deduplicated","workflowName","single","workflow_name","error_step_key","step_outputs","run_duration_ms","duration_ms","executeCodeStepIsolated","code","language","timeoutMs","timeout_ms","context","outputStr","truncated","executePythonCode","_code","_ctx","toolId","circuit_breaker_state","trippedAt","circuit_breaker_tripped_at","cooldownMs","circuit_breaker_cooldown_seconds","TRANSIENT_ERROR_PATTERNS","isTransientError","some","pattern","test","circuit_breaker_failures","newFailures","circuit_breaker_threshold","severity","resource_type","resource_id","service_name","span_kind","status_code","start_time","end_time","details","failures","threshold","handleWorkflowCircuitBreaker","reclaimStaleSteps","MIN_STALE_THRESHOLD_MS","MAX_STALE_AGE_MS","staleSteps","reclaimed","timeoutSec","workflow_steps","staleThreshold","exhaustedRetries","attempt_count","max_attempts","next_retry_at","stepKey","processWorkflowSteps","batchSize","catch","claimedRaw","errors","workflowIds","openBreakers","blockedIds","w","blocked","affectedRuns","skippedSteps","blockedWorkflows","size","stepCount","runIds","runTraces","traceMap","r","isForEachEmailStep","parent_step_run_id","emailForEachSteps","otherSteps","processStep","applyVersionOverrides","executeAndAdvance","errMsg","Promise","all","processWaitingSteps","resolved","subWfSteps","childRunIds","child_run_id","Boolean","childRuns","runMap","childRun","accumulateAndAdvance","aggregatedParents","aggErr","waitingParents","parent","totalChildren","doneChildren","childOutputs","outputs","c","failedKids","allSuccess","children","total","failed","total_children","done_children","childOutputsArr","child_outputs","failed_children","firstError","find","parent_id","parent_run_id","parent_step_key","stepDef","wsDef","versionedSteps","loadVersionedSteps","vStep","on_success","on_failure","max_retries","step_id","stepOutput","p_run_id","p_step_key","p_step_output","then","rpcErr","newOutputs","createNextStepRunByKey","startTime","span","attempt","prevRun","nextStepKey","flowCheck","flow_control","workflow","val","stepTimeoutSec","stepTimeoutMs","stepTimer","stepTimeoutPromise","_","reject","Error","race","delaySec","seconds","delay_seconds","resume_at","delayed","childWfId","payloadTemplate","trigger_payload_template","startResult","child_workflow_id","stepKeys","step_keys","child_steps","parallel","itemsExpr","items","targetStepKey","maxItems","max_items","targetStep","item","idx","waiting_for_count","target_step","approvalResult","customUrl","endpoint","customSsrfError","customHeaders","customBody","payload_config","ctrl","respData","waitpoint_completed","waitpoint_data","waitpointToken","waitpointTimeout","waitpointExpires","label","timeoutErr","durationMs","setError","rpcError","retryError","lockError","cpError","sequence_number","request_id","error_type","retryPolicy","retry_policy","backoffType","backoff_type","baseDelay","backoff_base_seconds","retry_delay_seconds","maxBackoff","max_backoff_seconds","backoffDelay","random","retryOn","retry_on","shouldRetry","VERSION_CACHE_MAX_SIZE","versionedStepsCache","VERSION_CACHE_TTL_MS","clearStepCache","clear","versionedStepsCacheSet","delete","excess","removed","setInterval","cached","version_id","version","resolveStepDef","nextStep","max_steps_per_run","inserted","claimStepForRun","row","input_schema","depth","depthLimit","runData","asyncTypes","allSteps","activeStatuses","failedSteps","vStepMap","stepIds","stepDefs","defMap","d","def","errorStepKey","resolvedTraceId","failedStepRuns","errorCount","errorLog","sr","updatedMetadata","metadata","error_count","error_log","updatedRows","updateErr","current_step_key","sendErrorNotification","errorPayload","error_step","errorWebhookSsrf","on_error_webhook_url","on_error_email","to","subject","handleWebhookIngestion","slug","rawBody","endpointQuery","endpoints","counter","timestamps","max_requests_per_minute","verify_signature","signature","signing_secret","sigBuf","expBuf","MAX_TRIGGER_PAYLOAD_BYTES","parse","raw","payload_transform","last_received_at","total_received","input_bytes","sync_response","sync_timeout_seconds","deadline"],"sources":["../../../src/server/handlers/workflow-steps.ts"],"sourcesContent":["// server/handlers/workflow-steps.ts — Step executor engine\n// Extracted from workflows.ts to separate step execution from workflow CRUD/management.\n//\n// Contains: step type executors, executeAndAdvance, inline chain execution,\n// circuit breakers, code execution (JS/Python), cron parser, schedule/timeout processing,\n// event trigger processing, flow control, webhook ingestion, and all step advancement helpers.\n\nimport { createHmac, timingSafeEqual, randomUUID } from \"node:crypto\";\n// P0 FIX: node:vm import removed — in-process code sandbox eliminated\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { resolveTemplate, evaluateCondition, type TemplateContext } from \"../lib/template-resolver.js\";\nimport { sanitizeError } from \"../../shared/agent-core.js\";\nimport { executeWithPool, initWorkerPool, getPoolStats, shutdownPool } from \"../lib/code-worker-pool.js\";\nimport { batchClient } from \"../lib/batch-client.js\";\nimport { getProvider } from \"../../shared/constants.js\";\nimport { createLogger } from \"../lib/logger.js\";\nimport { startSpan } from \"../lib/otel.js\";\nimport { queueSpan, auditRowToSpan, classifyErrorType } from \"../lib/clickhouse-buffer.js\";\n\nconst log = createLogger(\"workflow-steps\");\n\n// In-memory sliding-window rate limiter for webhooks (replaces audit_logs read)\nconst webhookRateCounters = new Map<string, { timestamps: number[] }>();\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst MAX_INLINE_DEPTH = 50;\nconst CODE_TIMEOUT_MS = 5000;\nconst CODE_OUTPUT_MAX = 102_400; // 100KB\nconst MAX_FOR_EACH_ITEMS = 1000; // P2 FIX: Prevent unbounded for_each expansion\nconst MAX_PARALLEL_CHILDREN = 100; // P1 FIX: Cap parallel step fan-out\nconst GUEST_APPROVAL_SECRET = process.env.GUEST_APPROVAL_SECRET || process.env.FLY_INTERNAL_SECRET || \"\";\nconst GUEST_APPROVAL_BASE_URL = process.env.AGENT_BASE_URL\n ? `${process.env.AGENT_BASE_URL.replace(/\\/$/, \"\")}/approvals/guest`\n : \"https://whale-agent.fly.dev/approvals/guest\";\n\n// ============================================================================\n// GUEST APPROVAL — HMAC-signed URLs for unauthenticated approvers\n// ============================================================================\n\nexport function generateGuestApprovalUrl(approvalId: string, action: string, expiresAt: string): string | null {\n if (!GUEST_APPROVAL_SECRET) return null; // Guest approvals disabled — no signing secret configured\n const payload = `${approvalId}:${action}:${expiresAt}`;\n const sig = createHmac(\"sha256\", GUEST_APPROVAL_SECRET).update(payload).digest(\"hex\");\n return `${GUEST_APPROVAL_BASE_URL}/${approvalId}?action=${action}&expires=${encodeURIComponent(expiresAt)}&sig=${sig}`;\n}\n\nexport function verifyGuestApprovalSignature(approvalId: string, action: string, expiresAt: string, sig: string): boolean {\n if (!GUEST_APPROVAL_SECRET) return false; // Guest approvals disabled — no signing secret configured\n const payload = `${approvalId}:${action}:${expiresAt}`;\n const expected = createHmac(\"sha256\", GUEST_APPROVAL_SECRET).update(payload).digest(\"hex\");\n try {\n return timingSafeEqual(Buffer.from(sig, \"hex\"), Buffer.from(expected, \"hex\"));\n } catch {\n return false;\n }\n}\n\n// ============================================================================\n// EVENT JOURNAL — append-only state transition log\n// ============================================================================\n\nexport async function logWorkflowEvent(\n supabase: SupabaseClient, runId: string, eventType: string,\n payload: Record<string, unknown>, stepRunId?: string,\n): Promise<void> {\n const { error } = await supabase.from(\"workflow_events\").insert({\n run_id: runId,\n step_run_id: stepRunId || null,\n event_type: eventType,\n payload,\n });\n if (error) log.warn({ err: error.message, runId, eventType }, \"logWorkflowEvent insert failed\");\n}\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface StepClaim {\n step_run_id: string;\n run_id: string;\n workflow_id: string;\n store_id: string;\n step_id: string;\n step_key: string;\n step_type: string;\n step_config: Record<string, unknown>;\n on_success: string | null;\n on_failure: string | null;\n timeout_seconds: number;\n input_schema: Record<string, unknown> | null;\n step_outputs: Record<string, unknown>;\n trigger_payload: Record<string, unknown>;\n attempt_count: number;\n max_attempts: number;\n max_steps_per_run: number;\n input: unknown | null;\n parent_step_run_id: string | null;\n retry_delay_seconds: number;\n}\n\nexport interface StepResult {\n success: boolean;\n output?: unknown;\n error?: string;\n branch?: string;\n}\n\n// ============================================================================\n// FLOW CONTROL — concurrency + rate limiting at step level\n// ============================================================================\n\nasync function checkFlowControl(\n supabase: SupabaseClient, step: StepClaim,\n): Promise<{ allowed: boolean; reason?: string }> {\n const config = step.step_config;\n\n // Per-step concurrency limit\n // P0 FIX: Filter by store_id to prevent cross-tenant data access in flow control decisions\n const concurrencyLimit = config.concurrency_limit as number;\n if (concurrencyLimit && concurrencyLimit > 0) {\n const concurrencyKey = (config.concurrency_key as string) || step.step_key;\n const { count } = await supabase.from(\"workflow_step_runs\")\n .select(\"id\", { count: \"exact\", head: true })\n .eq(\"step_key\", concurrencyKey)\n .eq(\"status\", \"running\")\n .eq(\"store_id\", step.store_id)\n .neq(\"id\", step.step_run_id); // exclude self\n if ((count || 0) >= concurrencyLimit) {\n return { allowed: false, reason: `Concurrency limit ${concurrencyLimit} reached for '${concurrencyKey}'` };\n }\n }\n\n // Per-step rate limit (max N executions per window)\n // P0 FIX: Filter by store_id to prevent cross-tenant data access in flow control decisions\n const rateLimit = config.rate_limit as number;\n const rateWindowSec = (config.rate_window_seconds as number) || 60;\n if (rateLimit && rateLimit > 0) {\n const windowStart = new Date(Date.now() - rateWindowSec * 1000).toISOString();\n const { count } = await supabase.from(\"workflow_step_runs\")\n .select(\"id\", { count: \"exact\", head: true })\n .eq(\"step_key\", step.step_key)\n .eq(\"store_id\", step.store_id)\n .in(\"status\", [\"success\", \"running\"])\n .gte(\"started_at\", windowStart);\n if ((count || 0) >= rateLimit) {\n return { allowed: false, reason: `Rate limit ${rateLimit}/${rateWindowSec}s reached for '${step.step_key}'` };\n }\n }\n\n return { allowed: true };\n}\n\n// ============================================================================\n// INJECTED EXECUTORS (set from index.ts to avoid circular deps)\n// ============================================================================\n\ntype ExecuteToolFn = (\n supabase: SupabaseClient,\n toolName: string,\n args: Record<string, unknown>,\n storeId?: string,\n traceId?: string,\n) => Promise<{ success: boolean; data?: unknown; error?: string }>;\n\ntype TokenBroadcastFn = (runId: string, stepKey: string, token: string) => void;\n\ntype StepErrorBroadcastFn = (runId: string, data: {\n type: \"workflow_error\";\n workflow_id: string;\n run_id: string;\n step_name: string;\n step_type: string;\n error: string;\n timestamp: string;\n}) => void;\n\ntype RunAgentQueryFn = (\n supabase: SupabaseClient,\n agentId: string,\n prompt: string,\n storeId: string,\n maxTurns?: number,\n onToken?: (token: string) => void,\n traceId?: string,\n) => Promise<{ success: boolean; response?: string; error?: string }>;\n\nlet _executeTool: ExecuteToolFn | null = null;\nlet _runAgentQuery: RunAgentQueryFn | null = null;\nlet _broadcastToken: TokenBroadcastFn | null = null;\nlet _broadcastStepError: StepErrorBroadcastFn | null = null;\n\nexport function setToolExecutor(fn: ExecuteToolFn): void { _executeTool = fn; }\nexport function setAgentExecutor(fn: RunAgentQueryFn): void { _runAgentQuery = fn; }\nexport function setTokenBroadcaster(fn: TokenBroadcastFn): void { _broadcastToken = fn; }\nexport function setStepErrorBroadcaster(fn: StepErrorBroadcastFn): void { _broadcastStepError = fn; }\n\n/** Broadcast a step error to SSE clients and persist error_details on the step run. */\nasync function surfaceStepError(\n supabase: SupabaseClient,\n step: { step_run_id: string; run_id: string; workflow_id: string; step_key: string; step_type: string },\n errorMessage: string,\n): Promise<void> {\n const timestamp = new Date().toISOString();\n\n // 1. Persist structured error_details on the step run record\n await supabase.from(\"workflow_step_runs\").update({\n error_details: {\n step_name: step.step_key,\n step_type: step.step_type,\n error_message: errorMessage,\n timestamp,\n },\n }).eq(\"id\", step.step_run_id);\n\n // 2. Broadcast via SSE so connected clients see the error in real time\n if (_broadcastStepError) {\n _broadcastStepError(step.run_id, {\n type: \"workflow_error\",\n workflow_id: step.workflow_id,\n run_id: step.run_id,\n step_name: step.step_key,\n step_type: step.step_type,\n error: errorMessage,\n timestamp,\n });\n }\n}\n\n// ============================================================================\n// STEP EXECUTORS\n// ============================================================================\n\nasync function executeToolStep(\n supabase: SupabaseClient, config: Record<string, unknown>,\n ctx: TemplateContext, storeId: string, traceId?: string,\n): Promise<StepResult> {\n if (!_executeTool) return { success: false, error: \"Tool executor not initialized\" };\n const toolName = config.tool_name as string;\n if (!toolName) return { success: false, error: \"No tool_name in step config\" };\n\n const argsTemplate = (config.args_template || config.args || {}) as Record<string, unknown>;\n const resolvedArgs = resolveTemplate(argsTemplate, ctx) as Record<string, unknown>;\n\n // For email steps: auto-inject template_data from workflow context so {{variable}} placeholders resolve\n if (toolName === \"email\" && (resolvedArgs.action === \"send\" || resolvedArgs.action === \"send_template\") && !resolvedArgs.template_data) {\n const mergedData: Record<string, unknown> = { ...(ctx.trigger || {}) };\n for (const [, stepData] of Object.entries(ctx.steps || {})) {\n if (stepData?.output && typeof stepData.output === \"object\") {\n Object.assign(mergedData, stepData.output as Record<string, unknown>);\n }\n }\n if (Object.keys(mergedData).length > 0) {\n resolvedArgs.template_data = mergedData;\n }\n }\n\n if (config.tool_id) {\n const cb = await checkToolCircuitBreaker(supabase, config.tool_id as string);\n if (!cb.allowed) return { success: false, error: cb.reason };\n }\n\n const result = await _executeTool(supabase, toolName, resolvedArgs, storeId, traceId);\n\n if (config.tool_id) await updateToolCircuitBreaker(supabase, config.tool_id as string, result.success, result.error);\n\n return result.success\n ? { success: true, output: result.data }\n : { success: false, error: result.error };\n}\n\nfunction executeConditionStep(config: Record<string, unknown>, ctx: TemplateContext): StepResult {\n const expression = config.expression as string;\n if (!expression) return { success: false, error: \"No expression in condition step\" };\n if (!config.on_true && !config.on_false) {\n return { success: false, output: { error: \"Condition step must have at least on_true or on_false defined\" } };\n }\n const result = evaluateCondition(expression, ctx);\n const branch = result ? (config.on_true as string || undefined) : (config.on_false as string || undefined);\n return { success: true, output: { condition_result: result, branch }, branch };\n}\n\nfunction executeTransformStep(config: Record<string, unknown>, ctx: TemplateContext): StepResult {\n const mapping = config.mapping as Record<string, unknown>;\n if (!mapping) return { success: false, error: \"No mapping in transform step\" };\n return { success: true, output: resolveTemplate(mapping, ctx) };\n}\n\nasync function executeAgentStep(\n config: Record<string, unknown>, ctx: TemplateContext, storeId: string,\n supabase: SupabaseClient, step?: StepClaim, traceId?: string,\n): Promise<StepResult> {\n if (!_runAgentQuery) return { success: false, error: \"Agent executor not initialized\" };\n const agentId = config.agent_id as string;\n if (!agentId) return { success: false, error: \"No agent_id in agent step config\" };\n\n const promptTemplate = (config.prompt_template || config.prompt || \"\") as string;\n const prompt = resolveTemplate(promptTemplate, ctx) as string;\n if (!prompt) return { success: false, error: \"No prompt resolved for agent step\" };\n\n // AI tool gating — inject allowed/blocked tool lists into prompt\n const allowedTools = config.allowed_tools as string[] | undefined;\n const blockedTools = config.blocked_tools as string[] | undefined;\n const requireApprovalTools = config.require_approval_tools as string[] | undefined;\n\n let gatedPrompt = prompt;\n if (allowedTools?.length) {\n gatedPrompt += `\\n\\n[SYSTEM: You may ONLY use these tools: ${allowedTools.join(\", \")}. Refuse any other tool calls.]`;\n }\n if (blockedTools?.length) {\n gatedPrompt += `\\n\\n[SYSTEM: You must NEVER use these tools: ${blockedTools.join(\", \")}. Use alternatives instead.]`;\n }\n if (requireApprovalTools?.length && step) {\n // Check if approval was already given (stored in step input from approval step)\n const approvedTools = (step.input as any)?.approved_tools as string[] | undefined;\n const pendingTools = requireApprovalTools.filter(t => !approvedTools?.includes(t));\n if (pendingTools.length > 0) {\n gatedPrompt += `\\n\\n[SYSTEM: The following tools require human approval before use: ${pendingTools.join(\", \")}. Do NOT call them — describe what you would do and why, then stop.]`;\n }\n }\n\n const maxTurns = (config.max_turns as number) || 5;\n const useBatch = config.use_batch === true;\n\n // Batch mode: single-turn LLM call via Batch API for ~50% cost savings.\n // Only valid when no tool loop is needed (the batch API doesn't support agentic tool loops).\n if (useBatch && maxTurns <= 1) {\n const model = (config.model as string) || \"claude-sonnet-4-6\";\n const provider = getProvider(model);\n const batchProvider = (provider === \"openai\") ? \"openai\" as const : \"anthropic\" as const;\n const requestId = `wf_agent_${randomUUID().replace(/-/g, \"\").slice(0, 12)}`;\n\n try {\n const batchResult = await batchClient.processSingle(\n requestId,\n batchProvider,\n model,\n [{ role: \"user\", content: gatedPrompt }],\n { max_tokens: (config.max_tokens as number) || 4096, temperature: config.temperature as number | undefined },\n );\n\n return batchResult.success\n ? { success: true, output: { response: batchResult.text || \"\", usage: batchResult.usage, batch: true } }\n : { success: false, error: batchResult.error || \"Batch agent request failed\" };\n } catch (err) {\n return { success: false, error: sanitizeError(err) };\n }\n }\n\n // Wire up token broadcasting for SSE streaming to connected clients\n const onToken = step && _broadcastToken\n ? (token: string) => _broadcastToken!(step.run_id, step.step_key, token)\n : undefined;\n\n const result = await _runAgentQuery(supabase, agentId, gatedPrompt, storeId, maxTurns, onToken, traceId);\n\n return result.success\n ? { success: true, output: { response: result.response } }\n : { success: false, error: result.error };\n}\n\n// P1 FIX: Use shared SSRF guard module (enhanced with DNS resolve-then-check, IPv6-mapped, CGNAT)\nimport { validateUrl } from \"../lib/ssrf-guard.js\";\n\nasync function executeWebhookOutStep(\n config: Record<string, unknown>, ctx: TemplateContext,\n): Promise<StepResult> {\n const url = resolveTemplate(config.url as string, ctx) as string;\n if (!url) return { success: false, error: \"No URL in webhook_out step\" };\n // P0 FIX: Use async validateUrl (DNS resolve-then-check) instead of sync isBlockedUrl\n const ssrfError = await validateUrl(url);\n if (ssrfError) return { success: false, error: `Blocked: ${ssrfError}` };\n\n const method = ((config.method as string) || \"POST\").toUpperCase();\n const headers: Record<string, string> = {};\n if (config.headers && typeof config.headers === \"object\") {\n for (const [k, v] of Object.entries(config.headers as Record<string, string>)) {\n headers[k] = resolveTemplate(v, ctx) as string;\n }\n }\n\n let body: string | undefined;\n if (method !== \"GET\" && method !== \"HEAD\") {\n const bodyTemplate = config.body_template || {};\n body = JSON.stringify(resolveTemplate(bodyTemplate, ctx));\n if (!headers[\"Content-Type\"]) headers[\"Content-Type\"] = \"application/json\";\n }\n\n if (config.hmac_secret && body) {\n const hmac = createHmac(\"sha256\", config.hmac_secret as string).update(body).digest(\"hex\");\n headers[\"X-Webhook-Signature\"] = `sha256=${hmac}`;\n }\n\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 30_000);\n const resp = await fetch(url, { method, headers, body, signal: controller.signal });\n clearTimeout(timer);\n\n const ct = resp.headers.get(\"content-type\") || \"\";\n const data = ct.includes(\"json\") ? await resp.json() : await resp.text();\n\n if (!resp.ok) return { success: false, error: `HTTP ${resp.status}: ${String(data).substring(0, 500)}` };\n return { success: true, output: { status: resp.status, data } };\n } catch (err: any) {\n if (err.name === \"AbortError\") return { success: false, error: \"Webhook request timed out\" };\n return { success: false, error: sanitizeError(err) };\n }\n}\n\nfunction executeNoopStep(): StepResult {\n return { success: true, output: { noop: true } };\n}\n\n\n// ============================================================================\n// BATCH LLM STEP — non-streaming LLM via Batch API (~50% cost savings)\n// ============================================================================\n\n/**\n * Execute an LLM request via the Batch API instead of streaming.\n * Designed for workflow steps that don't need real-time token streaming.\n *\n * Step config:\n * model: string — model ID (e.g. \"claude-sonnet-4-6\", \"gpt-5-mini\")\n * prompt: string — prompt template (resolved with ctx)\n * system: string — optional system prompt template\n * max_tokens: number — optional, default 4096\n * temperature: number — optional\n * tools: array — optional tool definitions for the LLM\n */\nasync function executeLlmBatchStep(\n config: Record<string, unknown>, ctx: TemplateContext,\n): Promise<StepResult> {\n const model = config.model as string;\n if (!model) return { success: false, error: \"No model in llm_batch step config\" };\n\n const promptTemplate = (config.prompt_template || config.prompt || \"\") as string;\n const prompt = resolveTemplate(promptTemplate, ctx) as string;\n if (!prompt) return { success: false, error: \"No prompt resolved for llm_batch step\" };\n\n const systemTemplate = config.system as string | undefined;\n const system = systemTemplate ? resolveTemplate(systemTemplate, ctx) as string : undefined;\n\n const maxTokens = (config.max_tokens as number) || 4096;\n const temperature = config.temperature as number | undefined;\n const tools = config.tools as unknown[] | undefined;\n\n // Determine provider from model ID\n const provider = getProvider(model);\n const batchProvider = (provider === \"openai\") ? \"openai\" as const : \"anthropic\" as const;\n\n const requestId = `wf_${randomUUID().replace(/-/g, \"\").slice(0, 16)}`;\n\n try {\n const result = await batchClient.processSingle(\n requestId,\n batchProvider,\n model,\n [{ role: \"user\", content: prompt }],\n { system, tools, max_tokens: maxTokens, temperature },\n );\n\n if (result.success) {\n return {\n success: true,\n output: {\n response: result.text || \"\",\n content: result.content,\n usage: result.usage,\n batch_request_id: requestId,\n },\n };\n } else {\n return { success: false, error: result.error || \"Batch LLM request failed\" };\n }\n } catch (err) {\n return { success: false, error: sanitizeError(err) };\n }\n}\n\n// ============================================================================\n// PHASE 2: APPROVAL STEP EXECUTOR\n// ============================================================================\n\nasync function executeApprovalStep(\n supabase: SupabaseClient, step: StepClaim, ctx: TemplateContext,\n): Promise<StepResult | \"waiting\"> {\n const config = step.step_config;\n\n // Second pass — step was resumed after approval response\n if (step.input && typeof step.input === \"object\" && (step.input as any).approval_status) {\n const approvalData = step.input as { approval_status: string; approval_data?: unknown; responded_by?: string };\n const isApproved = approvalData.approval_status === \"approved\" || approvalData.approval_status === \"approve\";\n return {\n success: true,\n output: {\n approved: isApproved,\n status: approvalData.approval_status,\n response_data: approvalData.approval_data,\n responded_by: approvalData.responded_by,\n },\n branch: isApproved ? (config.on_approve as string) : (config.on_reject as string),\n };\n }\n\n // First pass — create approval request and wait\n const title = resolveTemplate((config.title || \"Approval Required\") as string, ctx) as string;\n const description = config.description ? resolveTemplate(config.description as string, ctx) as string : null;\n const prompt = config.prompt ? resolveTemplate(config.prompt as string, ctx) as string : null;\n const options = config.options || [\"approve\", \"reject\"];\n const timeoutSeconds = (config.timeout_seconds as number) || 86400;\n const timeoutAction = (config.timeout_action as string) || \"fail\";\n const channels = config.notification_channels || [\"push\"];\n\n const expiresAt = new Date(Date.now() + timeoutSeconds * 1000).toISOString();\n\n await supabase.from(\"workflow_approval_requests\").insert({\n store_id: step.store_id,\n run_id: step.run_id,\n step_run_id: step.step_run_id,\n workflow_id: step.workflow_id,\n title,\n description,\n prompt,\n options,\n form_schema: config.form_schema || null,\n assigned_to: config.assigned_to || null,\n assigned_role: config.assigned_role || null,\n expires_at: expiresAt,\n timeout_action: timeoutAction,\n notification_channels: channels,\n });\n\n // Generate guest approval URLs (signed, no auth required) — only if signing secret is configured\n const guestUrls: Record<string, string> = {};\n const optionsList = Array.isArray(options) ? options as string[] : [\"approve\", \"reject\"];\n for (const opt of optionsList) {\n const url = generateGuestApprovalUrl(step.step_run_id, opt, expiresAt);\n if (url) guestUrls[opt] = url;\n }\n\n // Set step to waiting\n await supabase.from(\"workflow_step_runs\").update({\n status: \"waiting\",\n output: { waiting_for: \"approval\", title, expires_at: expiresAt, guest_urls: guestUrls },\n }).eq(\"id\", step.step_run_id);\n\n return \"waiting\";\n}\n\n// ============================================================================\n// PHASE 7: ENHANCED CODE EXECUTION\n// ============================================================================\n\n// Re-export pool management for index.ts to initialize on startup\nexport { initWorkerPool, getPoolStats, shutdownPool };\n\n// ============================================================================\n// CRON EXPRESSION PARSER — 5-field (min hour dom mon dow)\n// No external dependencies. Supports: *, */N, N-M, N,M, N\n// ============================================================================\n\nfunction parseCronField(field: string, min: number, max: number): number[] {\n const values: Set<number> = new Set();\n for (const part of field.split(\",\")) {\n const trimmed = part.trim();\n if (trimmed === \"*\") {\n for (let i = min; i <= max; i++) values.add(i);\n } else if (trimmed.includes(\"/\")) {\n const [range, stepStr] = trimmed.split(\"/\");\n const step = parseInt(stepStr, 10);\n if (isNaN(step) || step <= 0) continue;\n let start = min, end = max;\n if (range !== \"*\") {\n if (range.includes(\"-\")) {\n [start, end] = range.split(\"-\").map(Number);\n } else {\n start = parseInt(range, 10);\n }\n }\n for (let i = start; i <= end; i += step) values.add(i);\n } else if (trimmed.includes(\"-\")) {\n const [s, e] = trimmed.split(\"-\").map(Number);\n for (let i = s; i <= e; i++) values.add(i);\n } else {\n const n = parseInt(trimmed, 10);\n if (!isNaN(n) && n >= min && n <= max) values.add(n);\n }\n }\n return [...values].sort((a, b) => a - b);\n}\n\n/**\n * Compute the next occurrence of a 5-field cron expression after `after`.\n * Returns null if expression is invalid or no match found within 366 days.\n */\n/**\n * Get the UTC offset in minutes for an IANA timezone at a specific instant.\n * Uses Intl.DateTimeFormat.formatToParts to extract wall-clock components,\n * then diffs against the UTC components of the same instant. No string parsing.\n */\nfunction getUtcOffsetMinutes(date: Date, tz: string): number {\n // Extract wall-clock parts in the target timezone\n const fmt = new Intl.DateTimeFormat(\"en-US\", {\n timeZone: tz, year: \"numeric\", month: \"numeric\", day: \"numeric\",\n hour: \"numeric\", minute: \"numeric\", second: \"numeric\", hour12: false,\n });\n const p = Object.fromEntries(fmt.formatToParts(date).map(x => [x.type, parseInt(x.value, 10)]));\n // Build a pseudo-UTC timestamp from the wall-clock parts\n const wallMs = Date.UTC(p.year, p.month - 1, p.day, p.hour % 24, p.minute, p.second);\n // The offset is how far ahead the wall clock is from the actual UTC instant\n return (wallMs - date.getTime()) / 60_000;\n}\n\nexport function getNextCronTime(expression: string, after: Date = new Date(), timezone?: string): Date | null {\n const parts = expression.trim().split(/\\s+/);\n if (parts.length !== 5) return null;\n\n const minutes = parseCronField(parts[0], 0, 59);\n const hours = parseCronField(parts[1], 0, 23);\n const doms = parseCronField(parts[2], 1, 31);\n const months = parseCronField(parts[3], 1, 12);\n const dows = parseCronField(parts[4], 0, 6); // 0=Sunday\n\n if (!minutes.length || !hours.length || !doms.length || !months.length || !dows.length) return null;\n\n // DOM/DOW: POSIX semantics — when both are restricted, match EITHER (OR).\n // When only one is restricted, match only that one.\n const domRestricted = parts[2] !== \"*\";\n const dowRestricted = parts[4] !== \"*\";\n const useDomDowOr = domRestricted && dowRestricted;\n\n // Validate timezone\n let effectiveTz = \"UTC\";\n if (timezone) {\n try { Intl.DateTimeFormat(undefined, { timeZone: timezone }); effectiveTz = timezone; } catch { /* invalid tz, stay UTC */ }\n }\n\n // Strategy: work in \"local time\" coordinates using a fake Date whose UTC fields\n // represent the wall-clock time in the target timezone. This lets us use the fast\n // jump-by-month/day/hour logic. Once we find a match, we convert back to real UTC.\n //\n // The offset is recomputed each time we cross a day boundary to handle DST transitions.\n let offsetMin = effectiveTz === \"UTC\" ? 0 : getUtcOffsetMinutes(after, effectiveTz);\n const localEpoch = after.getTime() + offsetMin * 60_000;\n const candidate = new Date(localEpoch);\n candidate.setUTCSeconds(0, 0);\n candidate.setUTCMinutes(candidate.getUTCMinutes() + 1); // 1 minute after `after`\n\n const maxMs = after.getTime() + 366 * 86_400_000;\n let lastOffsetDay = candidate.getUTCDate(); // Track day for offset recomputation\n\n // Iterate in local-time coordinates (fast jumps — same algorithm as before)\n while (true) {\n // Recompute offset on day boundaries to handle DST transitions correctly\n const currentDay = candidate.getUTCDate();\n if (effectiveTz !== \"UTC\" && currentDay !== lastOffsetDay) {\n // Convert current candidate back to approximate UTC, then get fresh offset\n const approxUtc = new Date(candidate.getTime() - offsetMin * 60_000);\n const newOffset = getUtcOffsetMinutes(approxUtc, effectiveTz);\n if (newOffset !== offsetMin) {\n // DST changed — adjust candidate to maintain correct local-time coordinates\n const drift = (newOffset - offsetMin) * 60_000;\n candidate.setTime(candidate.getTime() + drift);\n offsetMin = newOffset;\n }\n lastOffsetDay = candidate.getUTCDate();\n }\n\n // Safety: check if we've exceeded 366 days\n const realUtc = candidate.getTime() - offsetMin * 60_000;\n if (realUtc > maxMs) return null;\n\n const mo = candidate.getUTCMonth() + 1;\n const day = candidate.getUTCDate();\n const hr = candidate.getUTCHours();\n const mi = candidate.getUTCMinutes();\n const dow = candidate.getUTCDay();\n\n if (!months.includes(mo)) {\n candidate.setUTCMonth(candidate.getUTCMonth() + 1, 1);\n candidate.setUTCHours(0, 0, 0, 0);\n continue;\n }\n\n const domMatch = doms.includes(day);\n const dowMatch = dows.includes(dow);\n const dayMatch = useDomDowOr ? (domMatch || dowMatch) : (domMatch && dowMatch);\n if (!dayMatch) {\n candidate.setUTCDate(candidate.getUTCDate() + 1);\n candidate.setUTCHours(0, 0, 0, 0);\n continue;\n }\n\n if (!hours.includes(hr)) {\n candidate.setUTCHours(candidate.getUTCHours() + 1, 0, 0, 0);\n continue;\n }\n\n if (!minutes.includes(mi)) {\n candidate.setUTCMinutes(candidate.getUTCMinutes() + 1, 0, 0);\n continue;\n }\n\n // Match found in local coordinates — convert back to real UTC.\n if (effectiveTz === \"UTC\") return candidate;\n\n const result = new Date(candidate.getTime() - offsetMin * 60_000);\n\n // Verify: the result in UTC should map back to the same local time we matched.\n // DST spring-forward (gap): 2:00-3:00 doesn't exist → verifyOffset differs → we skip.\n // DST fall-back (ambiguity): 1:00-2:00 exists twice → first occurrence wins (same as cronie).\n const verifyOffset = getUtcOffsetMinutes(result, effectiveTz);\n if (verifyOffset !== offsetMin) {\n candidate.setUTCMinutes(candidate.getUTCMinutes() + 1, 0, 0);\n continue;\n }\n\n return result;\n }\n}\n\n// ============================================================================\n// SCHEDULE TRIGGER PROCESSING — fires due cron workflows\n// ============================================================================\n\nexport async function processScheduleTriggers(supabase: SupabaseClient): Promise<number> {\n // Find workflows that are past due — supports both cron (recurring) and one-time (run_at)\n const { data: dueWorkflows } = await supabase.from(\"workflows\")\n .select(\"id, store_id, cron_expression, timezone\")\n .not(\"next_run_at\", \"is\", null)\n .lte(\"next_run_at\", new Date().toISOString())\n .eq(\"is_active\", true)\n .eq(\"status\", \"active\")\n .limit(10);\n\n if (!dueWorkflows?.length) return 0;\n\n let fired = 0;\n for (const wf of dueWorkflows) {\n try {\n const isOneTime = !wf.cron_expression;\n\n // Start the run\n const { data: result, error } = await supabase.rpc(\"start_workflow_run\", {\n p_workflow_id: wf.id,\n p_store_id: wf.store_id,\n p_trigger_type: \"schedule\",\n p_trigger_payload: {\n cron: wf.cron_expression || null,\n one_time: isOneTime,\n scheduled_at: new Date().toISOString(),\n },\n p_idempotency_key: wf.cron_expression\n ? `schedule:${wf.id}:${new Date().toISOString().slice(0, 16)}` // Minute-granularity dedup for cron\n : `schedule:${wf.id}:one_time`,\n });\n\n if (error || !result?.success) {\n log.error({ workflowId: wf.id, err: error?.message || result?.error }, \"failed to start scheduled workflow\");\n // Still update next_run_at to prevent infinite retries\n } else {\n fired++;\n // Generate trace_id for the new run\n const traceId = randomUUID();\n await supabase.from(\"workflow_runs\").update({ trace_id: traceId }).eq(\"id\", result.run_id);\n // Inline execution\n try { await executeInlineChain(supabase, result.run_id); } catch (err) { log.error({ runId: result.run_id, err: (err as Error).message }, \"inline chain failed for scheduled run\"); }\n }\n\n if (isOneTime) {\n // One-time schedule: clear next_run_at and deactivate\n await supabase.from(\"workflows\").update({\n last_scheduled_at: new Date().toISOString(),\n next_run_at: null,\n is_active: false,\n status: \"paused\",\n }).eq(\"id\", wf.id);\n } else {\n // Recurring cron: compute next run time\n const nextRun = getNextCronTime(wf.cron_expression, new Date(), wf.timezone || undefined);\n await supabase.from(\"workflows\").update({\n last_scheduled_at: new Date().toISOString(),\n next_run_at: nextRun?.toISOString() || null,\n }).eq(\"id\", wf.id);\n }\n } catch (err) {\n log.error({ workflowId: wf.id, err: sanitizeError(err) }, \"error processing scheduled workflow\");\n }\n }\n\n return fired;\n}\n\n// ============================================================================\n// WORKFLOW TIMEOUT ENFORCEMENT — cancel overtime runs\n// ============================================================================\n\nconst DEFAULT_MAX_RUN_DURATION_SEC = 3600; // 1 hour hard ceiling for any workflow run\n\nexport async function enforceWorkflowTimeouts(supabase: SupabaseClient): Promise<number> {\n // Find running workflows that exceeded their duration limit\n const { data: timedOut } = await supabase.from(\"workflow_runs\")\n .select(\"id, workflow_id, store_id, started_at, workflows!inner(max_run_duration_seconds, name)\")\n .eq(\"status\", \"running\")\n .not(\"started_at\", \"is\", null)\n .limit(50);\n\n if (!timedOut?.length) return 0;\n\n let count = 0;\n const now = Date.now();\n\n for (const run of timedOut) {\n const wf = (run as any).workflows;\n // Use configured max_duration or fall back to the hard ceiling\n const maxDuration = (wf?.max_run_duration_seconds && wf.max_run_duration_seconds > 0)\n ? wf.max_run_duration_seconds\n : DEFAULT_MAX_RUN_DURATION_SEC;\n\n const elapsed = now - new Date(run.started_at).getTime();\n if (elapsed < maxDuration * 1000) continue;\n\n // This run has timed out\n await completeWorkflowRun(\n supabase, run.id, run.workflow_id, run.store_id,\n \"timed_out\",\n `Workflow exceeded max duration of ${maxDuration}s (ran for ${Math.round(elapsed / 1000)}s)`,\n );\n\n // Archive to DLQ\n await archiveToDlq(supabase, run.id, run.workflow_id, run.store_id, wf?.name);\n\n count++;\n log.warn({ runId: run.id, elapsedSec: Math.round(elapsed / 1000), maxDuration }, \"workflow run timed out\");\n }\n\n // Detect zombie runs: \"running\" with no active steps (all steps are terminal)\n const { data: zombieRuns } = await supabase.from(\"workflow_runs\")\n .select(\"id, workflow_id, store_id, started_at, workflows!inner(name)\")\n .eq(\"status\", \"running\")\n .not(\"started_at\", \"is\", null)\n .limit(50);\n\n if (zombieRuns?.length) {\n for (const run of zombieRuns) {\n const elapsed = now - new Date(run.started_at).getTime();\n if (elapsed < 120_000) continue; // Only check runs older than 2 min\n\n const { data: activeSteps } = await supabase.from(\"workflow_step_runs\")\n .select(\"id\").eq(\"run_id\", run.id)\n .in(\"status\", [\"pending\", \"running\", \"retrying\", \"waiting\"]).limit(1);\n\n if (!activeSteps?.length) {\n // No active steps but run is still \"running\" — finalize it\n await checkWorkflowCompletion(supabase, run.id, run.workflow_id);\n count++;\n log.warn({ runId: run.id, elapsedSec: Math.round(elapsed / 1000) }, \"finalized zombie workflow run\");\n }\n }\n }\n\n return count;\n}\n\n// ============================================================================\n// ORPHANED STEP CLEANUP — cancel step_runs whose parent run is terminal\n// ============================================================================\n\nlet lastOrphanCleanupAt = 0;\nconst ORPHAN_CLEANUP_INTERVAL_MS = 60_000; // Run at most once per minute\n\nexport async function cleanupOrphanedSteps(supabase: SupabaseClient): Promise<number> {\n if (Date.now() - lastOrphanCleanupAt < ORPHAN_CLEANUP_INTERVAL_MS) return 0;\n lastOrphanCleanupAt = Date.now();\n\n // Find step_runs in non-terminal status whose parent run IS terminal.\n // The !inner join + .in filter on the JOINED table ensures Postgres only returns\n // rows where the run status is already terminal — no in-app filtering needed.\n const { data: orphans } = await supabase.from(\"workflow_step_runs\")\n .select(\"id, run_id, step_key, status, workflow_runs!workflow_step_runs_run_id_fkey!inner(status)\")\n .in(\"status\", [\"pending\", \"retrying\", \"waiting\"])\n .in(\"workflow_runs.status\", [\"success\", \"failed\", \"cancelled\", \"timed_out\"])\n .limit(100);\n\n if (!orphans?.length) return 0;\n\n let cleaned = 0;\n for (const step of orphans) {\n const runStatus = (step as any).workflow_runs?.status;\n await supabase.from(\"workflow_step_runs\").update({\n status: \"cancelled\",\n error_message: `Orphaned: parent run already ${runStatus}`,\n completed_at: new Date().toISOString(),\n }).eq(\"id\", step.id);\n cleaned++;\n }\n\n if (cleaned > 0) {\n log.info({ cleaned }, \"cleaned up orphaned step runs\");\n }\n return cleaned;\n}\n\n// ============================================================================\n// DLQ RETRY MECHANISM — retry transient DLQ failures\n// ============================================================================\n\nlet lastDlqRetryAt = 0;\nconst DLQ_RETRY_INTERVAL_MS = 60_000; // Run at most once per minute\nconst DLQ_RETRY_BATCH_SIZE = 5;\nconst DLQ_MAX_RETRY_ATTEMPTS = 3;\n\nexport async function processDlqRetries(supabase: SupabaseClient): Promise<number> {\n // Throttle: only run once per minute\n if (Date.now() - lastDlqRetryAt < DLQ_RETRY_INTERVAL_MS) return 0;\n lastDlqRetryAt = Date.now();\n\n // Fetch retryable DLQ entries: transient errors (timeout, network), not yet exhausted\n const { data: entries } = await supabase.from(\"workflow_dlq\")\n .select(\"id, workflow_id, store_id, trigger_type, trigger_payload, error_message, retry_count, last_retry_at\")\n .or(\"error_message.ilike.%timed out%,error_message.ilike.%timeout%,error_message.ilike.%network%,error_message.ilike.%ECONNREFUSED%,error_message.ilike.%fetch failed%\")\n .eq(\"status\", \"pending\")\n .lt(\"retry_count\", DLQ_MAX_RETRY_ATTEMPTS)\n .order(\"created_at\", { ascending: true })\n .limit(DLQ_RETRY_BATCH_SIZE);\n\n if (!entries?.length) return 0;\n\n let retried = 0;\n const now = Date.now();\n for (const entry of entries) {\n try {\n // Enforce per-entry exponential backoff: 2min, 4min, 8min\n if (entry.last_retry_at) {\n const backoffMs = Math.pow(2, entry.retry_count || 0) * 120_000;\n const elapsed = now - new Date(entry.last_retry_at).getTime();\n if (elapsed < backoffMs) continue; // Too soon for this entry\n }\n\n const { data: result, error } = await supabase.rpc(\"start_workflow_run\", {\n p_workflow_id: entry.workflow_id,\n p_store_id: entry.store_id,\n p_trigger_type: entry.trigger_type || \"dlq_retry\",\n p_trigger_payload: { ...(entry.trigger_payload || {}), _dlq_retry: true, _dlq_entry_id: entry.id },\n p_idempotency_key: `dlq_retry:${entry.id}:${(entry.retry_count || 0) + 1}`,\n });\n\n if (error || !result?.success) {\n // Update retry count but keep in DLQ\n await supabase.from(\"workflow_dlq\").update({\n retry_count: (entry.retry_count || 0) + 1,\n last_error: error?.message || result?.error || \"retry failed\",\n last_retry_at: new Date().toISOString(),\n }).eq(\"id\", entry.id);\n continue;\n }\n\n // Success — mark DLQ entry as retried\n await supabase.from(\"workflow_dlq\").update({\n status: \"retried\",\n retry_count: (entry.retry_count || 0) + 1,\n retried_run_id: result.run_id,\n last_retry_at: new Date().toISOString(),\n }).eq(\"id\", entry.id);\n\n // Execute inline\n if (result.run_id) {\n const traceId = randomUUID();\n await supabase.from(\"workflow_runs\").update({ trace_id: traceId }).eq(\"id\", result.run_id);\n try { await executeInlineChain(supabase, result.run_id); } catch (err) {\n log.error({ runId: result.run_id, err: (err as Error).message }, \"inline chain failed for DLQ retry\");\n }\n }\n\n retried++;\n log.info({ dlqEntryId: entry.id, workflowId: entry.workflow_id, retryCount: (entry.retry_count || 0) + 1 }, \"DLQ entry retried\");\n } catch (err) {\n log.warn({ dlqEntryId: entry.id, err: sanitizeError(err) }, \"DLQ retry error\");\n await supabase.from(\"workflow_dlq\").update({\n retry_count: (entry.retry_count || 0) + 1,\n last_retry_at: new Date().toISOString(),\n last_error: sanitizeError(err),\n }).eq(\"id\", entry.id);\n }\n }\n\n return retried;\n}\n\n// ============================================================================\n// EVENT TRIGGER PROCESSING — match inbound events to workflow subscriptions\n// ============================================================================\n\nexport async function processEventTriggers(supabase: SupabaseClient): Promise<number> {\n // Atomically claim a batch of pending events using FOR UPDATE SKIP LOCKED\n // Falls back to SELECT+UPDATE if the RPC doesn't exist yet\n let events: { id: string; store_id: string; event_type: string; event_payload: Record<string, unknown>; source: string }[] | null = null;\n\n const { data: claimed, error: claimErr } = await supabase.rpc(\"claim_pending_events\", { batch_size: 20 });\n if (!claimErr && claimed?.length) {\n events = claimed;\n } else {\n // Fallback: non-atomic claim (SELECT then UPDATE)\n if (claimErr) log.debug({ err: claimErr.message }, \"claim_pending_events RPC unavailable, using fallback\");\n const { data: fallbackEvents } = await supabase.from(\"automation_events\")\n .select(\"id, store_id, event_type, event_payload, source\")\n .eq(\"status\", \"pending\")\n .order(\"created_at\", { ascending: true })\n .limit(20);\n if (fallbackEvents?.length) {\n const eventIds = fallbackEvents.map(e => e.id);\n await supabase.from(\"automation_events\")\n .update({ status: \"processing\" })\n .in(\"id\", eventIds);\n events = fallbackEvents;\n }\n }\n\n if (!events?.length) return 0;\n\n // P2 FIX: Batch-load ALL active subscriptions once instead of per-event queries.\n // Group by (store_id, event_type) for O(1) in-memory lookup per event.\n const uniqueStoreIds = Array.from(new Set(events.map(e => e.store_id)));\n const uniqueEventTypes = Array.from(new Set(events.map(e => e.event_type)));\n const { data: allSubs } = await supabase.from(\"workflow_event_subscriptions\")\n .select(\"id, workflow_id, filter_expression, store_id, event_type\")\n .in(\"store_id\", uniqueStoreIds)\n .in(\"event_type\", uniqueEventTypes)\n .eq(\"is_active\", true);\n\n // Build lookup map: \"store_id:event_type\" -> subscriptions[]\n const subsMap = new Map<string, typeof allSubs>();\n for (const sub of (allSubs || [])) {\n const key = `${sub.store_id}:${sub.event_type}`;\n if (!subsMap.has(key)) subsMap.set(key, []);\n subsMap.get(key)!.push(sub);\n }\n\n let processed = 0;\n\n for (const event of events) {\n try {\n // P2 FIX: In-memory lookup instead of per-event DB query\n const subs = subsMap.get(`${event.store_id}:${event.event_type}`) || [];\n\n if (!subs.length) {\n // No subscribers — mark processed and move on\n await supabase.from(\"automation_events\")\n .update({ status: \"processed\", processed_at: new Date().toISOString() })\n .eq(\"id\", event.id);\n processed++;\n continue;\n }\n\n for (const sub of subs) {\n // Optional filter expression evaluation\n if (sub.filter_expression) {\n try {\n const ctx: TemplateContext = {\n trigger: event.event_payload || {},\n steps: {},\n };\n const pass = evaluateCondition(sub.filter_expression, ctx);\n if (!pass) continue; // Filter didn't match — skip this subscription\n } catch {\n // Filter eval error — skip rather than block\n continue;\n }\n }\n\n // Start a workflow run for each matching subscription\n const idempotencyKey = `event:${event.id}:${sub.workflow_id}`;\n const { data: result, error: startErr } = await supabase.rpc(\"start_workflow_run\", {\n p_workflow_id: sub.workflow_id,\n p_store_id: event.store_id,\n p_trigger_type: \"event\",\n p_trigger_payload: {\n ...(event.event_payload || {}),\n _event_id: event.id,\n _event_type: event.event_type,\n _event_source: event.source,\n },\n p_idempotency_key: idempotencyKey,\n });\n\n if (startErr || !result?.success) {\n log.error({ workflowId: sub.workflow_id, eventId: event.id, err: startErr?.message || result?.error }, \"failed to start event-triggered workflow\");\n continue;\n }\n\n // Assign trace ID and run inline chain for immediate execution\n if (result.run_id && !result.deduplicated) {\n const traceId = randomUUID();\n await supabase.from(\"workflow_runs\").update({ trace_id: traceId }).eq(\"id\", result.run_id);\n try { await executeInlineChain(supabase, result.run_id); } catch (err) { log.error({ runId: result.run_id, err: (err as Error).message }, \"inline chain failed for event run\"); }\n }\n }\n\n // Mark event as processed\n await supabase.from(\"automation_events\")\n .update({ status: \"processed\", processed_at: new Date().toISOString() })\n .eq(\"id\", event.id);\n processed++;\n\n } catch (err) {\n // Mark event as failed\n await supabase.from(\"automation_events\")\n .update({\n status: \"failed\",\n processed_at: new Date().toISOString(),\n error_message: sanitizeError(err),\n })\n .eq(\"id\", event.id);\n log.error({ eventId: event.id, err: sanitizeError(err) }, \"error processing event trigger\");\n }\n }\n\n return processed;\n}\n\n// ============================================================================\n// DEAD LETTER QUEUE — archive failed runs for investigation\n// ============================================================================\n\nasync function archiveToDlq(\n supabase: SupabaseClient, runId: string, workflowId: string, storeId: string, workflowName?: string,\n): Promise<void> {\n const { data: run } = await supabase.from(\"workflow_runs\")\n .select(\"error_message, error_step_key, trigger_type, trigger_payload, step_outputs, duration_ms\")\n .eq(\"id\", runId).single();\n if (!run) return;\n\n const { error } = await supabase.from(\"workflow_dlq\").insert({\n store_id: storeId,\n run_id: runId,\n workflow_id: workflowId,\n workflow_name: workflowName || null,\n error_message: run.error_message,\n error_step_key: run.error_step_key,\n trigger_type: run.trigger_type,\n trigger_payload: run.trigger_payload || {},\n step_outputs: run.step_outputs || {},\n run_duration_ms: run.duration_ms,\n });\n if (error) log.warn({ err: error.message, runId, workflowId }, \"archiveToDlq insert failed\");\n}\n\n/**\n * Process-isolated JS code execution via persistent worker pool.\n * Falls back to one-shot fork if pool is unavailable.\n * A crash, OOM, or infinite loop in user code cannot take down the server.\n */\nasync function executeCodeStepIsolated(config: Record<string, unknown>, ctx: TemplateContext): Promise<StepResult> {\n const code = config.code as string;\n if (!code) return { success: false, error: \"No code in code step config\" };\n\n const language = (config.language as string) || \"javascript\";\n if (language === \"python\") {\n // P0 FIX: Python regex sandbox is trivially bypassable (string concatenation,\n // __builtins__, globals() aliasing). Hard-fail until a real Python sandbox\n // (e.g. Pyodide/WASM or containerized execution) is available.\n return { success: false, error: \"Python code execution is temporarily disabled — sandbox under hardening. Use JavaScript code steps instead.\" };\n }\n\n const timeoutMs = (config.timeout_ms as number) || CODE_TIMEOUT_MS;\n\n try {\n const result = await executeWithPool({\n code,\n context: { steps: ctx.steps, trigger: ctx.trigger, input: ctx.input },\n timeoutMs,\n });\n // P3 FIX: Enforce same 100KB output cap as Python code steps\n if (result.success && result.output) {\n const outputStr = JSON.stringify(result.output);\n if (outputStr.length > CODE_OUTPUT_MAX) {\n result.output = { result: outputStr.slice(0, CODE_OUTPUT_MAX) + \"\\n[output truncated at 100KB]\", truncated: true };\n }\n }\n return result;\n } catch (err) {\n // P0 FIX: Hard failure — no in-process fallback (SSRF risk via unrestricted fetch in sandbox)\n log.error({ err: (err as Error).message }, \"worker pool execution failed, no fallback\");\n return { success: false, error: \"Code execution unavailable — worker pool failed\" };\n }\n}\n\n// P0 FIX: executeCodeStepInProcess removed — in-process fallback was a security risk\n// (unrestricted fetch in sandbox = SSRF). All code steps now require the worker pool.\n\nasync function executePythonCode(_code: string, _ctx: TemplateContext): Promise<StepResult> {\n return { success: false, error: \"Python code execution is disabled — sandbox under hardening\" };\n}\n\n// ============================================================================\n// CIRCUIT BREAKER (per user_tool)\n// ============================================================================\n\nasync function checkToolCircuitBreaker(\n supabase: SupabaseClient, toolId: string,\n): Promise<{ allowed: boolean; reason?: string }> {\n const { data } = await supabase.from(\"user_tools\")\n .select(\"circuit_breaker_state, circuit_breaker_tripped_at, circuit_breaker_cooldown_seconds\")\n .eq(\"id\", toolId).single();\n if (!data) return { allowed: true };\n\n if (data.circuit_breaker_state === \"open\") {\n const trippedAt = new Date(data.circuit_breaker_tripped_at).getTime();\n const cooldownMs = (data.circuit_breaker_cooldown_seconds || 300) * 1000;\n if (Date.now() < trippedAt + cooldownMs) {\n return { allowed: false, reason: `Circuit breaker open (cooldown until ${new Date(trippedAt + cooldownMs).toISOString()})` };\n }\n await supabase.from(\"user_tools\").update({ circuit_breaker_state: \"half_open\" }).eq(\"id\", toolId);\n }\n return { allowed: true };\n}\n\n// P1 FIX: Transient error patterns — these indicate network/infra issues, not broken tools.\n// Circuit breaker should only trip on persistent tool-level errors (auth, 404, bad config).\nconst TRANSIENT_ERROR_PATTERNS = [\n /timed?\\s*out/i, /timeout/i, /ECONNREFUSED/i, /ECONNRESET/i, /ETIMEDOUT/i,\n /fetch failed/i, /network/i, /socket hang up/i, /EPIPE/i, /EHOSTUNREACH/i,\n /503 Service Unavailable/i, /502 Bad Gateway/i, /429 Too Many Requests/i,\n];\n\nfunction isTransientError(errorMessage?: string | null): boolean {\n if (!errorMessage) return false;\n return TRANSIENT_ERROR_PATTERNS.some(pattern => pattern.test(errorMessage));\n}\n\nasync function updateToolCircuitBreaker(\n supabase: SupabaseClient, toolId: string, success: boolean, errorMessage?: string,\n): Promise<void> {\n if (success) {\n await supabase.from(\"user_tools\").update({ circuit_breaker_state: \"closed\", circuit_breaker_failures: 0 }).eq(\"id\", toolId);\n return;\n }\n\n // P1 FIX: Skip circuit breaker increment for transient errors (network, timeout, etc.)\n if (isTransientError(errorMessage)) {\n log.debug({ toolId, error: errorMessage }, \"skipping circuit breaker increment for transient error\");\n return;\n }\n\n const { data } = await supabase.from(\"user_tools\")\n .select(\"circuit_breaker_failures, circuit_breaker_threshold\").eq(\"id\", toolId).single();\n if (!data) return;\n const newFailures = (data.circuit_breaker_failures || 0) + 1;\n if (newFailures >= (data.circuit_breaker_threshold || 5)) {\n await supabase.from(\"user_tools\").update({\n circuit_breaker_state: \"open\", circuit_breaker_failures: newFailures,\n circuit_breaker_tripped_at: new Date().toISOString(),\n }).eq(\"id\", toolId);\n queueSpan(auditRowToSpan({\n action: \"workflow.circuit_breaker.tripped\", severity: \"warning\",\n resource_type: \"user_tool\", resource_id: toolId, source: \"workflow_engine\",\n service_name: \"workflow-engine\", span_kind: \"INTERNAL\", status_code: \"OK\",\n start_time: new Date().toISOString(), end_time: new Date().toISOString(),\n details: { failures: newFailures, threshold: data.circuit_breaker_threshold },\n }));\n } else {\n await supabase.from(\"user_tools\").update({ circuit_breaker_failures: newFailures }).eq(\"id\", toolId);\n }\n}\n\nasync function handleWorkflowCircuitBreaker(\n supabase: SupabaseClient, workflowId: string, success: boolean, errorMessage?: string | null,\n): Promise<void> {\n if (success) {\n await supabase.from(\"workflows\").update({ circuit_breaker_state: \"closed\", circuit_breaker_failures: 0 }).eq(\"id\", workflowId);\n return;\n }\n\n // P1 FIX: Skip circuit breaker increment for transient errors\n if (isTransientError(errorMessage)) {\n log.debug({ workflowId, error: errorMessage }, \"skipping workflow circuit breaker increment for transient error\");\n return;\n }\n\n const { data } = await supabase.from(\"workflows\")\n .select(\"circuit_breaker_failures, circuit_breaker_threshold\").eq(\"id\", workflowId).single();\n if (!data) return;\n const newFailures = (data.circuit_breaker_failures || 0) + 1;\n if (newFailures >= (data.circuit_breaker_threshold || 5)) {\n await supabase.from(\"workflows\").update({\n circuit_breaker_state: \"open\", circuit_breaker_failures: newFailures,\n circuit_breaker_tripped_at: new Date().toISOString(),\n }).eq(\"id\", workflowId);\n queueSpan(auditRowToSpan({\n action: \"workflow.circuit_breaker.tripped\", severity: \"warning\",\n resource_type: \"workflow\", resource_id: workflowId, source: \"workflow_engine\",\n service_name: \"workflow-engine\", span_kind: \"INTERNAL\", status_code: \"OK\",\n start_time: new Date().toISOString(), end_time: new Date().toISOString(),\n details: { failures: newFailures, threshold: data.circuit_breaker_threshold },\n }));\n } else {\n await supabase.from(\"workflows\").update({ circuit_breaker_failures: newFailures }).eq(\"id\", workflowId);\n }\n}\n\n// ============================================================================\n// CORE ENGINE\n// ============================================================================\n\n/**\n * Reclaim steps stuck in \"running\" status longer than their timeout + buffer.\n * This handles steps that crashed mid-execution (e.g., server restart, OOM).\n * Steps are reset to \"retrying\" so the worker can re-execute them.\n */\nasync function reclaimStaleSteps(supabase: SupabaseClient): Promise<number> {\n // P0 FIX: Use step.timeout_seconds * 2 (min 300s) as stale threshold to prevent\n // double-execution. The old 60s buffer was too aggressive for long-running steps.\n const MIN_STALE_THRESHOLD_MS = 300_000; // 5 min minimum before reclaim\n const MAX_STALE_AGE_MS = 1_200_000; // Hard ceiling: 20 min = always stale\n\n const { data: staleSteps } = await supabase.from(\"workflow_step_runs\")\n .select(`\n id, step_key, run_id, attempt_count, max_attempts, started_at,\n workflow_steps!inner(timeout_seconds)\n `)\n .eq(\"status\", \"running\")\n .not(\"started_at\", \"is\", null)\n .limit(50);\n\n if (!staleSteps?.length) return 0;\n\n let reclaimed = 0;\n const now = Date.now();\n\n for (const step of staleSteps) {\n const timeoutSec = (step as any).workflow_steps?.timeout_seconds || 120;\n // P0 FIX: threshold = max(300s, timeout * 2) — gives step enough time to complete\n const staleThreshold = Math.min(Math.max(MIN_STALE_THRESHOLD_MS, timeoutSec * 2000), MAX_STALE_AGE_MS);\n const elapsed = now - new Date(step.started_at).getTime();\n\n if (elapsed < staleThreshold) continue;\n\n const exhaustedRetries = step.attempt_count >= step.max_attempts;\n if (exhaustedRetries) {\n // No retries left — mark as failed\n await supabase.from(\"workflow_step_runs\").update({\n status: \"failed\",\n error_message: `Step stale: running for ${Math.round(elapsed / 1000)}s with no response (retries exhausted)`,\n completed_at: new Date().toISOString(),\n }).eq(\"id\", step.id);\n } else {\n // Reset to retrying so worker picks it up again\n await supabase.from(\"workflow_step_runs\").update({\n status: \"retrying\",\n error_message: `Step stale: running for ${Math.round(elapsed / 1000)}s with no response (auto-reclaimed)`,\n next_retry_at: new Date(now + 5000).toISOString(),\n }).eq(\"id\", step.id);\n }\n reclaimed++;\n log.warn({ stepRunId: step.id, stepKey: step.step_key, runId: step.run_id, elapsedSec: Math.round(elapsed / 1000), exhaustedRetries }, \"reclaimed stale step\");\n }\n return reclaimed;\n}\n\nexport async function processWorkflowSteps(\n supabase: SupabaseClient, batchSize: number = 10,\n): Promise<{ processed: number; errors: number; reclaimed?: number }> {\n // Reclaim stale steps first so they become available for claiming\n const reclaimed = await reclaimStaleSteps(supabase).catch(e => {\n log.warn({ err: (e as Error).message }, \"reclaimStaleSteps failed\");\n return 0;\n });\n\n const { data: claimedRaw, error: claimErr } = await supabase.rpc(\"claim_pending_steps\", {\n batch_size: batchSize,\n });\n if (claimErr) {\n log.error({ err: claimErr.message }, \"workflow claim error\");\n return { processed: 0, errors: 1, reclaimed };\n }\n\n let claimed: StepClaim[] = Array.isArray(claimedRaw) ? claimedRaw : [];\n if (claimed.length === 0) return { processed: 0, errors: 0, reclaimed };\n\n // Circuit breaker enforcement — skip steps from workflows with open breakers\n const workflowIds = [...new Set(claimed.map(s => s.workflow_id))];\n const { data: openBreakers } = await supabase.from(\"workflows\")\n .select(\"id\")\n .in(\"id\", workflowIds)\n .eq(\"circuit_breaker_state\", \"open\");\n if (openBreakers?.length) {\n const blockedIds = new Set(openBreakers.map(w => w.id));\n const blocked = claimed.filter(s => blockedIds.has(s.workflow_id));\n claimed = claimed.filter(s => !blockedIds.has(s.workflow_id));\n // Mark blocked steps as skipped and finalize affected runs\n const affectedRuns = new Map<string, string>();\n for (const step of blocked) {\n await supabase.from(\"workflow_step_runs\").update({\n status: \"skipped\",\n error_message: \"Workflow circuit breaker is open — step skipped\",\n completed_at: new Date().toISOString(),\n }).eq(\"id\", step.step_run_id);\n affectedRuns.set(step.run_id, step.workflow_id);\n }\n // Check completion for affected runs — prevents zombie \"running\" state\n for (const [runId, workflowId] of affectedRuns) {\n await checkWorkflowCompletion(supabase, runId, workflowId).catch(e =>\n log.warn({ runId, err: (e as Error).message }, \"completion check after circuit breaker skip failed\"));\n }\n if (blocked.length) log.warn({ skippedSteps: blocked.length, blockedWorkflows: blockedIds.size }, \"circuit breaker skipped steps\");\n if (claimed.length === 0) return { processed: blocked.length, errors: 0, reclaimed };\n }\n\n log.info({ stepCount: claimed.length }, \"processing workflow steps\");\n let errors = 0;\n\n // Batch-fetch trace_ids for all runs in this batch\n const runIds = [...new Set(claimed.map(s => s.run_id))];\n const { data: runTraces } = await supabase.from(\"workflow_runs\")\n .select(\"id, trace_id\").in(\"id\", runIds);\n const traceMap = new Map((runTraces || []).map(r => [r.id, r.trace_id as string | undefined]));\n\n // Partition: email tool steps from for_each need sequential processing with delays\n // to avoid overwhelming Resend's 2 req/s rate limit\n const isForEachEmailStep = (s: StepClaim) =>\n s.parent_step_run_id && s.step_type === \"tool\" &&\n String(s.step_config?.tool_name || \"\").includes(\"email\");\n\n const emailForEachSteps = claimed.filter(isForEachEmailStep);\n const otherSteps = claimed.filter(s => !isForEachEmailStep(s));\n\n const processStep = async (step: StepClaim) => {\n try {\n await applyVersionOverrides(supabase, step);\n await executeAndAdvance(supabase, step, traceMap.get(step.run_id));\n } catch (err) {\n errors++;\n const errMsg = sanitizeError(err);\n log.error({ stepKey: step.step_key, runId: step.run_id, err: errMsg }, \"step execution error\");\n await supabase.from(\"workflow_step_runs\").update({\n status: \"failed\", error_message: errMsg,\n completed_at: new Date().toISOString(), duration_ms: 0,\n }).eq(\"id\", step.step_run_id);\n // Surface error to clients (SSE broadcast + structured error_details on step run)\n await surfaceStepError(supabase, step, errMsg);\n // Check if this failure finalizes the run (prevents zombie runs from uncaught errors)\n await checkWorkflowCompletion(supabase, step.run_id, step.workflow_id).catch(e =>\n log.warn({ runId: step.run_id, err: (e as Error).message }, \"completion check after step error failed\"));\n }\n };\n\n // Process non-email steps in parallel (existing behavior)\n await Promise.all(otherSteps.map(processStep));\n\n // Process email for_each children sequentially with 550ms throttle\n for (let i = 0; i < emailForEachSteps.length; i++) {\n if (i > 0) await new Promise(r => setTimeout(r, 550));\n await processStep(emailForEachSteps[i]);\n }\n\n return { processed: claimed.length, errors };\n}\n\n/**\n * Check waiting steps: sub_workflow children completed, parallel/for_each children done.\n * Called by the persistent worker loop alongside processWorkflowSteps.\n */\nexport async function processWaitingSteps(supabase: SupabaseClient): Promise<number> {\n let resolved = 0;\n\n // 0. Expire pending approvals (Phase 2)\n try {\n await supabase.rpc(\"expire_pending_approvals\");\n } catch (err) {\n // Non-fatal — RPC may not exist yet if migration not applied\n log.warn({ err: sanitizeError(err) }, \"expire_pending_approvals error\");\n }\n\n // 1. Sub-workflow steps waiting for child runs to complete\n const { data: subWfSteps } = await supabase\n .from(\"workflow_step_runs\")\n .select(\"id, run_id, step_key, child_run_id, step_type\")\n .eq(\"status\", \"waiting\")\n .eq(\"step_type\", \"sub_workflow\")\n .not(\"child_run_id\", \"is\", null)\n .limit(50);\n\n if (subWfSteps?.length) {\n const childRunIds = subWfSteps.map(s => s.child_run_id).filter(Boolean) as string[];\n const { data: childRuns } = await supabase\n .from(\"workflow_runs\")\n .select(\"id, status, step_outputs, error_message\")\n .in(\"id\", childRunIds)\n .in(\"status\", [\"success\", \"failed\"]);\n\n if (childRuns?.length) {\n const runMap = new Map(childRuns.map(r => [r.id, r]));\n for (const step of subWfSteps) {\n const childRun = runMap.get(step.child_run_id!);\n if (!childRun) continue;\n\n const success = childRun.status === \"success\";\n await supabase.from(\"workflow_step_runs\").update({\n status: success ? \"success\" : \"failed\",\n output: childRun.step_outputs,\n error_message: success ? null : childRun.error_message,\n completed_at: new Date().toISOString(),\n }).eq(\"id\", step.id);\n\n // Accumulate output + advance\n await accumulateAndAdvance(supabase, step.id, step.run_id, step.step_key,\n success, childRun.step_outputs, childRun.error_message);\n resolved++;\n }\n }\n }\n\n // 2. P1 FIX: Use aggregate RPC to eliminate N+1 queries (was 4 queries per parent)\n const { data: aggregatedParents, error: aggErr } = await supabase.rpc(\"get_waiting_parents_with_children\");\n\n if (aggErr) {\n // Fallback to old N+1 pattern if RPC doesn't exist yet\n log.debug({ err: aggErr.message }, \"get_waiting_parents_with_children RPC unavailable, using fallback\");\n const { data: waitingParents } = await supabase\n .from(\"workflow_step_runs\")\n .select(\"id, run_id, step_key, step_type, output\")\n .eq(\"status\", \"waiting\")\n .in(\"step_type\", [\"parallel\", \"for_each\"])\n .limit(50);\n\n if (waitingParents?.length) {\n for (const parent of waitingParents) {\n const { count: totalChildren } = await supabase\n .from(\"workflow_step_runs\")\n .select(\"id\", { count: \"exact\", head: true })\n .eq(\"parent_step_run_id\", parent.id);\n const { count: doneChildren } = await supabase\n .from(\"workflow_step_runs\")\n .select(\"id\", { count: \"exact\", head: true })\n .eq(\"parent_step_run_id\", parent.id)\n .in(\"status\", [\"success\", \"failed\", \"skipped\", \"cancelled\"]);\n if (totalChildren && doneChildren && doneChildren >= totalChildren) {\n const { data: childOutputs } = await supabase\n .from(\"workflow_step_runs\")\n .select(\"step_key, output, status, error_message\")\n .eq(\"parent_step_run_id\", parent.id)\n .order(\"created_at\", { ascending: true });\n const outputs = (childOutputs || []).map(c => c.output);\n const failedKids = (childOutputs || []).filter(c => c.status === \"failed\");\n const allSuccess = failedKids.length === 0;\n await supabase.from(\"workflow_step_runs\").update({\n status: allSuccess ? \"success\" : \"failed\",\n output: { children: outputs, total: totalChildren, failed: failedKids.length },\n error_message: allSuccess ? null : failedKids[0]?.error_message,\n completed_at: new Date().toISOString(),\n }).eq(\"id\", parent.id);\n await accumulateAndAdvance(supabase, parent.id, parent.run_id, parent.step_key,\n allSuccess, { children: outputs }, allSuccess ? null : failedKids[0]?.error_message);\n resolved++;\n }\n }\n }\n } else if (aggregatedParents?.length) {\n for (const parent of aggregatedParents) {\n if (parent.total_children > 0 && parent.done_children >= parent.total_children) {\n const childOutputsArr = (parent.child_outputs || []) as any[];\n const outputs = childOutputsArr.map((c: any) => c.output);\n const allSuccess = parent.failed_children === 0;\n const firstError = childOutputsArr.find((c: any) => c.status === \"failed\")?.error_message;\n\n await supabase.from(\"workflow_step_runs\").update({\n status: allSuccess ? \"success\" : \"failed\",\n output: { children: outputs, total: parent.total_children, failed: parent.failed_children },\n error_message: allSuccess ? null : firstError,\n completed_at: new Date().toISOString(),\n }).eq(\"id\", parent.parent_id);\n\n await accumulateAndAdvance(supabase, parent.parent_id, parent.parent_run_id, parent.parent_step_key,\n allSuccess, { children: outputs }, allSuccess ? null : firstError);\n resolved++;\n }\n }\n }\n\n return resolved;\n}\n\n/** Helper: after a waiting step resolves, accumulate output and advance the workflow. */\nasync function accumulateAndAdvance(\n supabase: SupabaseClient, stepRunId: string, runId: string, stepKey: string,\n success: boolean, output: unknown, errorMessage?: string | null,\n): Promise<void> {\n // Load run to get current step_outputs + workflow_id + on_success/on_failure\n const { data: run } = await supabase.from(\"workflow_runs\")\n .select(\"workflow_id, step_outputs, store_id\").eq(\"id\", runId).single();\n if (!run) return;\n\n const { data: stepDef } = await supabase.from(\"workflow_step_runs\")\n .select(\"step_id, step_key\").eq(\"id\", stepRunId).single();\n if (!stepDef) return;\n\n // Phase 4: Try versioned step def first, fall back to live table\n let wsDef: { on_success?: string | null; on_failure?: string | null; max_retries?: number } | null = null;\n const versionedSteps = await loadVersionedSteps(supabase, runId);\n if (versionedSteps) {\n const vStep = versionedSteps.find((s: any) => s.step_key === stepKey);\n if (vStep) wsDef = { on_success: vStep.on_success, on_failure: vStep.on_failure, max_retries: vStep.max_retries };\n }\n if (!wsDef) {\n const { data } = await supabase.from(\"workflow_steps\")\n .select(\"on_success, on_failure, max_retries\").eq(\"id\", stepDef.step_id).single();\n wsDef = data;\n }\n\n // P1 FIX: Atomic step output accumulation — use jsonb_set instead of read-modify-write\n // This prevents lost updates when multiple steps complete concurrently\n const stepOutput = { output, status: success ? \"success\" : \"failed\" };\n await supabase.rpc(\"accumulate_step_output\", {\n p_run_id: runId,\n p_step_key: stepKey,\n p_step_output: stepOutput,\n }).then(({ error: rpcErr }) => {\n // Fallback to direct update if RPC doesn't exist yet (migration pending)\n if (rpcErr) {\n const newOutputs = { ...(run.step_outputs || {}), [stepKey]: stepOutput };\n return supabase.from(\"workflow_runs\").update({ step_outputs: newOutputs }).eq(\"id\", runId);\n }\n });\n\n if (success) {\n if (wsDef?.on_success) {\n await createNextStepRunByKey(supabase, runId, run.workflow_id, wsDef.on_success);\n } else {\n await checkWorkflowCompletion(supabase, runId, run.workflow_id);\n }\n } else {\n if (wsDef?.on_failure) {\n await createNextStepRunByKey(supabase, runId, run.workflow_id, wsDef.on_failure);\n } else {\n await completeWorkflowRun(supabase, runId, run.workflow_id, run.store_id, \"failed\", errorMessage, stepKey);\n }\n }\n}\n\nexport async function executeAndAdvance(supabase: SupabaseClient, step: StepClaim, traceId?: string): Promise<void> {\n const startTime = Date.now();\n\n // Phase 3.3: OTEL span for step execution\n const span = startSpan(\"workflow.step.execute\", {\n \"workflow.run_id\": step.run_id,\n \"workflow.step_key\": step.step_key,\n \"workflow.step_type\": step.step_type,\n \"workflow.attempt\": step.attempt_count,\n ...(traceId ? { \"workflow.trace_id\": traceId } : {}),\n });\n\n // Event journal — step started\n await logWorkflowEvent(supabase, step.run_id, \"step_started\", {\n step_key: step.step_key, step_type: step.step_type, attempt: step.attempt_count,\n }, step.step_run_id);\n\n // Step result caching — skip successful steps on retry (idempotent re-execution)\n if (step.attempt_count > 1) {\n const { data: prevRun } = await supabase.from(\"workflow_step_runs\")\n .select(\"status, output\").eq(\"run_id\", step.run_id).eq(\"step_key\", step.step_key)\n .eq(\"status\", \"success\").neq(\"id\", step.step_run_id).limit(1);\n if (prevRun?.length) {\n log.info({ stepKey: step.step_key, runId: step.run_id }, \"step already succeeded, using cached result\");\n await supabase.from(\"workflow_step_runs\").update({\n status: \"success\", output: prevRun[0].output,\n completed_at: new Date().toISOString(), duration_ms: Date.now() - startTime,\n }).eq(\"id\", step.step_run_id);\n await logWorkflowEvent(supabase, step.run_id, \"step_cached\", { step_key: step.step_key }, step.step_run_id);\n const nextStepKey = step.on_success;\n if (!nextStepKey) {\n await checkWorkflowCompletion(supabase, step.run_id, step.workflow_id);\n } else {\n await createNextStepRunByKey(supabase, step.run_id, step.workflow_id, nextStepKey);\n }\n return;\n }\n }\n\n // Flow control — check concurrency/rate limits before execution\n const flowCheck = await checkFlowControl(supabase, step);\n if (!flowCheck.allowed) {\n // Requeue step with short delay for flow control backoff\n await supabase.from(\"workflow_step_runs\").update({\n status: \"retrying\",\n next_retry_at: new Date(Date.now() + 2000).toISOString(), // retry in 2s\n output: { flow_control: flowCheck.reason },\n }).eq(\"id\", step.step_run_id);\n await logWorkflowEvent(supabase, step.run_id, \"step_throttled\", { reason: flowCheck.reason }, step.step_run_id);\n return;\n }\n\n // Build template context\n const ctx: TemplateContext = {\n steps: {},\n trigger: step.trigger_payload || {},\n input: step.input || undefined,\n workflow: {\n id: step.workflow_id,\n store_id: step.store_id,\n },\n run: {\n id: step.run_id,\n workflow_id: step.workflow_id,\n store_id: step.store_id,\n },\n };\n if (step.step_outputs && typeof step.step_outputs === \"object\") {\n for (const [key, val] of Object.entries(step.step_outputs)) {\n if (val && typeof val === \"object\") {\n ctx.steps[key] = val as { output?: unknown; status?: string; duration_ms?: number };\n }\n }\n }\n\n let result: StepResult;\n\n // Enforce step-level timeout from step column (default 30s)\n const stepTimeoutSec = step.timeout_seconds || (step.step_config.timeout_seconds as number) || 30;\n const stepTimeoutMs = stepTimeoutSec * 1000;\n let stepTimer: ReturnType<typeof setTimeout> | undefined;\n const stepTimeoutPromise = new Promise<never>((_, reject) => {\n stepTimer = setTimeout(() => reject(new Error(`Step timed out after ${stepTimeoutSec}s`)), stepTimeoutMs);\n });\n\n try {\n\n switch (step.step_type) {\n case \"tool\":\n result = await Promise.race([executeToolStep(supabase, step.step_config, ctx, step.store_id, traceId), stepTimeoutPromise]);\n break;\n case \"condition\":\n result = executeConditionStep(step.step_config, ctx);\n break;\n case \"transform\":\n result = executeTransformStep(step.step_config, ctx);\n break;\n\n case \"delay\": {\n // First attempt: set the delay. Second attempt (after delay): success.\n if (step.attempt_count <= 1) {\n const delaySec = (step.step_config.seconds as number) || 60;\n await supabase.from(\"workflow_step_runs\").update({\n status: \"retrying\",\n output: { delay_seconds: delaySec, resume_at: new Date(Date.now() + delaySec * 1000).toISOString() },\n next_retry_at: new Date(Date.now() + delaySec * 1000).toISOString(),\n }).eq(\"id\", step.step_run_id);\n clearTimeout(stepTimer);\n return; // Worker picks it up after delay\n }\n result = { success: true, output: { delayed: true, seconds: step.step_config.seconds } };\n break;\n }\n\n case \"agent\":\n result = await Promise.race([executeAgentStep(step.step_config, ctx, step.store_id, supabase, step, traceId), stepTimeoutPromise]);\n break;\n\n case \"sub_workflow\": {\n const childWfId = resolveTemplate((step.step_config.workflow_id || \"\") as string, ctx) as string;\n if (!childWfId) { result = { success: false, error: \"No workflow_id in sub_workflow config\" }; break; }\n\n const payloadTemplate = (step.step_config.trigger_payload_template || step.step_config.trigger_payload || {}) as Record<string, unknown>;\n const payload = resolveTemplate(payloadTemplate, ctx);\n\n const { data: startResult } = await supabase.rpc(\"start_workflow_run\", {\n p_workflow_id: childWfId,\n p_store_id: step.store_id,\n p_trigger_type: \"sub_workflow\",\n p_trigger_payload: payload,\n });\n\n if (!startResult?.success) {\n result = { success: false, error: startResult?.error || \"Failed to start sub-workflow\" };\n break;\n }\n\n // Set to waiting — processWaitingSteps will resolve when child completes\n await supabase.from(\"workflow_step_runs\").update({\n status: \"waiting\",\n child_run_id: startResult.run_id,\n output: { child_run_id: startResult.run_id, child_workflow_id: childWfId },\n }).eq(\"id\", step.step_run_id);\n clearTimeout(stepTimer);\n return;\n }\n\n case \"parallel\": {\n const stepKeys = (step.step_config.step_keys || step.step_config.child_steps || []) as string[];\n if (stepKeys.length === 0) { result = { success: true, output: { parallel: true, steps: [] } }; break; }\n if (stepKeys.length > MAX_PARALLEL_CHILDREN) {\n result = { success: false, error: `Parallel step has ${stepKeys.length} children, exceeding limit of ${MAX_PARALLEL_CHILDREN}` }; break;\n }\n\n const { data: steps } = await supabase.from(\"workflow_steps\")\n .select(\"id, step_key, step_type, max_retries\")\n .eq(\"workflow_id\", step.workflow_id).in(\"step_key\", stepKeys);\n\n if (steps?.length) {\n await supabase.from(\"workflow_step_runs\").insert(\n steps.map(s => ({\n run_id: step.run_id, step_id: s.id, step_key: s.step_key,\n step_type: s.step_type, status: \"pending\" as const,\n max_attempts: s.max_retries ?? 3, parent_step_run_id: step.step_run_id,\n }))\n );\n }\n\n await supabase.from(\"workflow_step_runs\").update({\n status: \"waiting\", output: { waiting_for: stepKeys },\n }).eq(\"id\", step.step_run_id);\n clearTimeout(stepTimer);\n return; // processWaitingSteps resolves when all children complete\n }\n\n case \"for_each\": {\n const itemsExpr = step.step_config.items as string;\n const targetStepKey = step.step_config.step_key as string;\n if (!itemsExpr || !targetStepKey) {\n result = { success: false, error: \"for_each requires items and step_key in config\" }; break;\n }\n\n const items = resolveTemplate(itemsExpr, ctx);\n if (!Array.isArray(items)) {\n result = { success: false, error: `for_each items resolved to ${typeof items}, expected array` }; break;\n }\n if (items.length === 0) {\n result = { success: true, output: { children: [], total: 0 } }; break;\n }\n\n // P2 FIX: Enforce max items limit to prevent runaway step creation\n const maxItems = (step.step_config.max_items as number) || MAX_FOR_EACH_ITEMS;\n if (items.length > maxItems) {\n result = { success: false, error: `for_each exceeded maximum of ${maxItems} items (got ${items.length}). Increase limit in step config or paginate.` }; break;\n }\n\n // Look up target step definition\n const { data: targetStep } = await supabase.from(\"workflow_steps\")\n .select(\"id, step_key, step_type, max_retries\")\n .eq(\"workflow_id\", step.workflow_id).eq(\"step_key\", targetStepKey).single();\n\n if (!targetStep) {\n result = { success: false, error: `for_each target step '${targetStepKey}' not found` }; break;\n }\n\n // Create a step_run per item with the item as input\n await supabase.from(\"workflow_step_runs\").insert(\n items.map((item, idx) => ({\n run_id: step.run_id, step_id: targetStep.id,\n step_key: `${targetStepKey}[${idx}]`, step_type: targetStep.step_type,\n status: \"pending\" as const, max_attempts: targetStep.max_retries ?? 3,\n parent_step_run_id: step.step_run_id, input: item,\n }))\n );\n\n await supabase.from(\"workflow_step_runs\").update({\n status: \"waiting\", output: { waiting_for_count: items.length, target_step: targetStepKey },\n }).eq(\"id\", step.step_run_id);\n clearTimeout(stepTimer);\n return;\n }\n\n case \"code\": {\n result = await Promise.race([executeCodeStepIsolated(step.step_config, ctx), stepTimeoutPromise]);\n break;\n }\n\n case \"webhook_out\":\n result = await Promise.race([executeWebhookOutStep(step.step_config, ctx), stepTimeoutPromise]);\n break;\n\n case \"noop\":\n result = executeNoopStep();\n break;\n\n case \"llm_batch\":\n result = await Promise.race([executeLlmBatchStep(step.step_config, ctx), stepTimeoutPromise]);\n break;\n\n case \"approval\": {\n const approvalResult = await executeApprovalStep(supabase, step, ctx);\n if (approvalResult === \"waiting\") { clearTimeout(stepTimer); return; }\n result = approvalResult;\n break;\n }\n\n // Custom step — POSTs workflow context to a user-defined URL and uses the response\n case \"custom\": {\n const customUrl = resolveTemplate((step.step_config.url || step.step_config.endpoint) as string, ctx) as string;\n if (!customUrl) { result = { success: false, error: \"Custom step requires url in config\" }; break; }\n // P0 FIX: Use async validateUrl (DNS resolve-then-check) instead of sync isBlockedUrl\n const customSsrfError = await validateUrl(customUrl);\n if (customSsrfError) { result = { success: false, error: `Custom step blocked: ${customSsrfError}` }; break; }\n try {\n const customHeaders: Record<string, string> = { \"Content-Type\": \"application/json\" };\n if (step.step_config.headers && typeof step.step_config.headers === \"object\") {\n for (const [k, v] of Object.entries(step.step_config.headers as Record<string, string>)) {\n customHeaders[k] = resolveTemplate(v, ctx) as string;\n }\n }\n const customBody = JSON.stringify({\n step_key: step.step_key,\n run_id: step.run_id,\n workflow_id: step.workflow_id,\n input: step.input,\n step_outputs: step.step_outputs,\n trigger_payload: step.trigger_payload,\n config: step.step_config.payload_config || {},\n });\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), 30_000);\n const resp = await fetch(customUrl, { method: \"POST\", headers: customHeaders, body: customBody, signal: ctrl.signal });\n clearTimeout(timer);\n const respData = resp.headers.get(\"content-type\")?.includes(\"json\")\n ? await resp.json() : await resp.text();\n if (!resp.ok) {\n result = { success: false, error: `Custom step HTTP ${resp.status}: ${String(respData).substring(0, 500)}` };\n } else {\n // Support branch routing from custom step response\n const branch = typeof respData === \"object\" && respData?.branch ? respData.branch as string : undefined;\n result = { success: true, output: respData, branch };\n }\n } catch (err: any) {\n result = { success: false, error: err.name === \"AbortError\" ? \"Custom step timed out\" : sanitizeError(err) };\n }\n break;\n }\n\n // Waitpoint — generalized wait-for-external-signal (subsumes approval, webhook callback, cross-workflow)\n case \"waitpoint\": {\n // Second pass — resumed with completion data\n if (step.input && typeof step.input === \"object\" && (step.input as any).waitpoint_completed) {\n result = { success: true, output: (step.input as any).waitpoint_data || {} };\n break;\n }\n // First pass — create waitpoint token and pause\n const waitpointToken = randomUUID();\n const waitpointTimeout = (step.step_config.timeout_seconds as number) || 86400;\n const waitpointExpires = new Date(Date.now() + waitpointTimeout * 1000).toISOString();\n await supabase.from(\"waitpoint_tokens\").insert({\n token: waitpointToken,\n run_id: step.run_id,\n step_run_id: step.step_run_id,\n store_id: step.store_id,\n expires_at: waitpointExpires,\n label: (step.step_config.label as string) || step.step_key,\n });\n await supabase.from(\"workflow_step_runs\").update({\n status: \"waiting\",\n output: { waiting_for: \"waitpoint\", token: waitpointToken, expires_at: waitpointExpires },\n }).eq(\"id\", step.step_run_id);\n await logWorkflowEvent(supabase, step.run_id, \"waitpoint_created\", { token: waitpointToken }, step.step_run_id);\n clearTimeout(stepTimer);\n return;\n }\n\n default:\n result = { success: false, error: `Unknown step type: ${step.step_type}` };\n }\n\n } catch (timeoutErr: any) {\n result = { success: false, error: timeoutErr.message || `Step timed out after ${stepTimeoutSec}s` };\n } finally {\n clearTimeout(stepTimer);\n }\n\n const durationMs = Date.now() - startTime;\n\n // Phase 3.3: End OTEL span with result attributes\n if (result.success) {\n span.end({ \"workflow.duration_ms\": durationMs, \"workflow.status\": \"success\" });\n } else {\n span.setError(result.error || \"step failed\");\n span.end({ \"workflow.duration_ms\": durationMs, \"workflow.status\": \"failed\" });\n }\n\n // Event journal — step completed\n await logWorkflowEvent(supabase, step.run_id, result.success ? \"step_completed\" : \"step_failed\", {\n step_key: step.step_key, duration_ms: durationMs,\n ...(result.error ? { error: result.error } : {}),\n ...(result.branch ? { branch: result.branch } : {}),\n }, step.step_run_id);\n\n // Persist step result\n await supabase.from(\"workflow_step_runs\").update({\n status: result.success ? \"success\" : \"failed\",\n output: result.output || null,\n error_message: result.error || null,\n completed_at: new Date().toISOString(),\n duration_ms: durationMs,\n }).eq(\"id\", step.step_run_id);\n\n // P4 FIX: Atomically merge step output using jsonb_set to prevent race conditions\n // Two concurrent steps can no longer overwrite each other's outputs\n const stepOutput = { output: result.output, status: result.success ? \"success\" : \"failed\", duration_ms: durationMs };\n const { error: rpcError } = await supabase.rpc(\"accumulate_step_output\", {\n p_run_id: step.run_id,\n p_step_key: step.step_key,\n p_step_output: stepOutput,\n });\n if (rpcError) {\n // Retry once — transient connection errors are common under load\n log.warn({ err: rpcError.message, runId: step.run_id, stepKey: step.step_key }, \"accumulate_step_output RPC error, retrying once\");\n const { error: retryError } = await supabase.rpc(\"accumulate_step_output\", {\n p_run_id: step.run_id,\n p_step_key: step.step_key,\n p_step_output: stepOutput,\n });\n if (retryError) {\n // Final fallback: advisory-lock-guarded RPC prevents parallel step race conditions\n log.warn({ err: retryError.message, runId: step.run_id, stepKey: step.step_key }, \"accumulate_step_output retry failed, using locked fallback\");\n const { error: lockError } = await supabase.rpc(\"accumulate_step_output_locked\", {\n p_run_id: step.run_id,\n p_step_key: step.step_key,\n p_step_output: stepOutput,\n });\n if (lockError) {\n // P0 FIX: Throw so the step is marked as failed, not falsely as success\n throw new Error(`Failed to accumulate step output after all fallbacks: ${lockError.message}`);\n }\n }\n }\n\n // Checkpoint — snapshot state after each step for replay/debugging\n if (result.success) {\n const { error: cpError } = await supabase.from(\"workflow_checkpoints\").insert({\n run_id: step.run_id, step_run_id: step.step_run_id, step_key: step.step_key,\n step_outputs: { ...(step.step_outputs || {}), [step.step_key]: { output: result.output, status: \"success\", duration_ms: durationMs } },\n trigger_payload: step.trigger_payload,\n sequence_number: Object.keys(step.step_outputs || {}).length + 1,\n });\n if (cpError) log.warn({ err: cpError.message, runId: step.run_id, stepKey: step.step_key }, \"checkpoint insert failed\");\n }\n\n // Telemetry → ClickHouse\n queueSpan(auditRowToSpan({\n action: `workflow.step.${result.success ? \"completed\" : \"failed\"}`,\n severity: result.success ? \"info\" : \"error\",\n store_id: step.store_id, resource_type: \"workflow_step_run\",\n resource_id: step.step_run_id, source: \"workflow_engine\", duration_ms: durationMs,\n request_id: traceId || null,\n service_name: \"workflow-engine\", span_kind: \"INTERNAL\",\n status_code: result.success ? \"OK\" : \"ERROR\",\n start_time: new Date(Date.now() - durationMs).toISOString(),\n end_time: new Date().toISOString(),\n error_type: result.error ? classifyErrorType(result.error) : undefined,\n details: { workflow_id: step.workflow_id, run_id: step.run_id, step_key: step.step_key, step_type: step.step_type, attempt: step.attempt_count },\n error_message: result.error || null,\n }));\n\n // Surface step errors to clients via SSE broadcast + structured error_details\n if (!result.success && result.error) {\n await surfaceStepError(supabase, step, result.error);\n }\n\n // Child steps (parallel/for_each) — just save result, parent handles advancement\n if (step.parent_step_run_id) {\n // If child failed and has retries left, retry it (respects retry_policy)\n if (!result.success && step.attempt_count < step.max_attempts) {\n const retryPolicy = step.step_config.retry_policy as { backoff_type?: string; backoff_base_seconds?: number; max_backoff_seconds?: number } | undefined;\n const backoffType = retryPolicy?.backoff_type || \"exponential\";\n const baseDelay = retryPolicy?.backoff_base_seconds || step.retry_delay_seconds || 10;\n const maxBackoff = retryPolicy?.max_backoff_seconds || 300;\n let backoffDelay: number;\n switch (backoffType) {\n case \"fixed\": backoffDelay = baseDelay; break;\n case \"linear\": backoffDelay = baseDelay * step.attempt_count; break;\n default: backoffDelay = baseDelay * Math.pow(2, step.attempt_count - 1); break;\n }\n backoffDelay = Math.min(backoffDelay, maxBackoff);\n // P3 FIX: Add jitter (50%-100% of computed delay) to prevent thundering herd\n backoffDelay *= (0.5 + Math.random() * 0.5);\n await supabase.from(\"workflow_step_runs\").update({\n status: \"retrying\",\n next_retry_at: new Date(Date.now() + backoffDelay * 1000).toISOString(),\n }).eq(\"id\", step.step_run_id);\n }\n return; // Parent's processWaitingSteps handles advancement\n }\n\n // Handle failure — configurable retry policy\n if (!result.success) {\n if (step.attempt_count < step.max_attempts) {\n // Check retry_on filter — only retry if error matches pattern (if configured)\n const retryPolicy = step.step_config.retry_policy as { backoff_type?: string; backoff_base_seconds?: number; max_backoff_seconds?: number; retry_on?: string[] } | undefined;\n const retryOn = retryPolicy?.retry_on;\n const shouldRetry = !retryOn?.length || retryOn.some(pattern => result.error?.includes(pattern));\n\n if (shouldRetry) {\n const backoffType = retryPolicy?.backoff_type || \"exponential\";\n const baseDelay = retryPolicy?.backoff_base_seconds || step.retry_delay_seconds || 10;\n const maxBackoff = retryPolicy?.max_backoff_seconds || 300; // 5 min cap\n let backoffDelay: number;\n switch (backoffType) {\n case \"fixed\": backoffDelay = baseDelay; break;\n case \"linear\": backoffDelay = baseDelay * step.attempt_count; break;\n default: backoffDelay = baseDelay * Math.pow(2, step.attempt_count - 1); break; // exponential\n }\n backoffDelay = Math.min(backoffDelay, maxBackoff);\n // P3 FIX: Add jitter (50%-100% of computed delay) to prevent thundering herd\n backoffDelay *= (0.5 + Math.random() * 0.5);\n await supabase.from(\"workflow_step_runs\").update({\n status: \"retrying\",\n next_retry_at: new Date(Date.now() + backoffDelay * 1000).toISOString(),\n }).eq(\"id\", step.step_run_id);\n await logWorkflowEvent(supabase, step.run_id, \"step_retrying\", {\n step_key: step.step_key, attempt: step.attempt_count, backoff_type: backoffType, delay_seconds: backoffDelay,\n }, step.step_run_id);\n return;\n }\n // retry_on filter didn't match — fall through to failure handling\n }\n\n if (step.on_failure) {\n await createNextStepRunByKey(supabase, step.run_id, step.workflow_id, step.on_failure);\n } else {\n await completeWorkflowRun(supabase, step.run_id, step.workflow_id, step.store_id, \"failed\", result.error, step.step_key);\n }\n return;\n }\n\n // Advance — condition steps use branch, otherwise on_success\n const nextStepKey = result.branch || step.on_success;\n if (!nextStepKey) {\n await checkWorkflowCompletion(supabase, step.run_id, step.workflow_id);\n return;\n }\n await createNextStepRunByKey(supabase, step.run_id, step.workflow_id, nextStepKey);\n}\n\n// ============================================================================\n// WORKFLOW ADVANCEMENT HELPERS\n// ============================================================================\n\n// P1 FIX: Per-run in-memory cache for versioned steps (30s TTL)\n// Prevents 4x redundant DB calls per step execution\n// P0 FIX: Capped at 500 entries with LRU eviction to prevent unbounded memory growth\nconst VERSION_CACHE_MAX_SIZE = 500;\nconst versionedStepsCache = new Map<string, { data: any[] | null; expiresAt: number }>();\nconst VERSION_CACHE_TTL_MS = 30_000;\n\nexport function clearStepCache(): void {\n versionedStepsCache.clear();\n}\n\n/** Insert into cache with LRU eviction when size exceeds limit */\nfunction versionedStepsCacheSet(key: string, value: { data: any[] | null; expiresAt: number }): void {\n // If key already exists, delete first so re-insertion moves it to end (most recent)\n if (versionedStepsCache.has(key)) {\n versionedStepsCache.delete(key);\n }\n versionedStepsCache.set(key, value);\n // Evict oldest entries (Map iteration order = insertion order) if over limit\n if (versionedStepsCache.size > VERSION_CACHE_MAX_SIZE) {\n const excess = versionedStepsCache.size - VERSION_CACHE_MAX_SIZE;\n let removed = 0;\n for (const k of versionedStepsCache.keys()) {\n if (removed >= excess) break;\n versionedStepsCache.delete(k);\n removed++;\n }\n }\n}\n\n// Periodic cleanup to prevent memory leaks\nsetInterval(() => {\n const now = Date.now();\n for (const [key, entry] of versionedStepsCache) {\n if (now > entry.expiresAt) versionedStepsCache.delete(key);\n }\n}, 60_000);\n\n/**\n * Load the versioned steps array for a run. Returns null if no version.\n * Uses per-run in-memory cache with 30s TTL.\n */\nasync function loadVersionedSteps(\n supabase: SupabaseClient, runId: string,\n): Promise<any[] | null> {\n const cached = versionedStepsCache.get(runId);\n if (cached && Date.now() < cached.expiresAt) return cached.data;\n\n const { data: run } = await supabase.from(\"workflow_runs\")\n .select(\"version_id\").eq(\"id\", runId).single();\n if (!run?.version_id) {\n versionedStepsCacheSet(runId, { data: null, expiresAt: Date.now() + VERSION_CACHE_TTL_MS });\n return null;\n }\n\n const { data: version } = await supabase.from(\"workflow_versions\")\n .select(\"steps\").eq(\"id\", run.version_id).single();\n const result = (version?.steps && Array.isArray(version.steps)) ? version.steps as any[] : null;\n versionedStepsCacheSet(runId, { data: result, expiresAt: Date.now() + VERSION_CACHE_TTL_MS });\n return result;\n}\n\n/**\n * Apply versioned overrides to a claimed step. If the run has a version_id,\n * replaces step_config, on_success, on_failure with values from the snapshot.\n */\nasync function applyVersionOverrides(supabase: SupabaseClient, step: StepClaim): Promise<void> {\n const versionedSteps = await loadVersionedSteps(supabase, step.run_id);\n if (!versionedSteps) return;\n\n const vStep = versionedSteps.find((s: any) => s.step_key === step.step_key);\n if (vStep) {\n step.step_config = vStep.step_config || step.step_config;\n step.on_success = vStep.on_success ?? step.on_success;\n step.on_failure = vStep.on_failure ?? step.on_failure;\n }\n}\n\n/**\n * Resolve a step definition by key. If the run has a version_id, load from\n * the versioned snapshot. Otherwise, load from the live workflow_steps table.\n */\nasync function resolveStepDef(\n supabase: SupabaseClient, runId: string, workflowId: string, stepKey: string,\n): Promise<{ id: string; step_key: string; step_type: string; max_retries: number } | null> {\n const versionedSteps = await loadVersionedSteps(supabase, runId);\n\n if (versionedSteps) {\n const step = versionedSteps.find((s: any) => s.step_key === stepKey);\n if (step) {\n return { id: step.id, step_key: step.step_key, step_type: step.step_type, max_retries: step.max_retries ?? 3 };\n }\n return null;\n }\n\n // Live table\n const { data } = await supabase.from(\"workflow_steps\")\n .select(\"id, step_key, step_type, max_retries\")\n .eq(\"workflow_id\", workflowId).eq(\"step_key\", stepKey).single();\n return data;\n}\n\nasync function createNextStepRunByKey(\n supabase: SupabaseClient, runId: string, workflowId: string, stepKey: string,\n): Promise<string | null> {\n const nextStep = await resolveStepDef(supabase, runId, workflowId, stepKey);\n\n if (!nextStep) {\n log.error({ stepKey, workflowId }, \"step not found in workflow\");\n const { data: run } = await supabase.from(\"workflow_runs\").select(\"store_id\").eq(\"id\", runId).single();\n await completeWorkflowRun(supabase, runId, workflowId, run?.store_id, \"failed\", `Step '${stepKey}' not found`);\n return null;\n }\n\n // Check step count limit\n const { data: run } = await supabase.from(\"workflow_runs\")\n .select(\"store_id\").eq(\"id\", runId).single();\n const { count } = await supabase.from(\"workflow_step_runs\")\n .select(\"id\", { count: \"exact\", head: true }).eq(\"run_id\", runId);\n\n const { data: wf } = await supabase.from(\"workflows\")\n .select(\"max_steps_per_run\").eq(\"id\", workflowId).single();\n\n if ((count || 0) >= (wf?.max_steps_per_run || 50)) {\n await completeWorkflowRun(supabase, runId, workflowId, run?.store_id, \"failed\", `Step limit exceeded (${wf?.max_steps_per_run || 50})`);\n return null;\n }\n\n const { data: inserted } = await supabase.from(\"workflow_step_runs\").insert({\n run_id: runId, step_id: nextStep.id, step_key: nextStep.step_key,\n step_type: nextStep.step_type, status: \"pending\", max_attempts: nextStep.max_retries ?? 3,\n }).select(\"id\").single();\n\n return inserted?.id || null;\n}\n\n// ============================================================================\n// PHASE 1: INLINE EXECUTION — execute steps immediately, no 5s wait\n// ============================================================================\n\n/**\n * Claim a single pending step for a specific run using atomic RPC.\n * P0 FIX: Uses claim_step_for_run RPC with FOR UPDATE SKIP LOCKED + attempt_count increment.\n * Replaces the old SELECT-then-UPDATE pattern that never incremented attempt_count (infinite retries).\n */\nasync function claimStepForRun(\n supabase: SupabaseClient, runId: string,\n): Promise<StepClaim | null> {\n const { data, error } = await supabase.rpc(\"claim_step_for_run\", { p_run_id: runId });\n\n if (error) {\n log.error({ err: error.message, runId }, \"claim_step_for_run RPC failed\");\n return null;\n }\n\n // RPC returns an array of rows; we expect 0 or 1\n const row = Array.isArray(data) ? data[0] : data;\n if (!row) return null;\n\n return {\n step_run_id: row.step_run_id,\n run_id: row.run_id,\n workflow_id: row.workflow_id,\n store_id: row.store_id,\n step_id: row.step_id,\n step_key: row.step_key,\n step_type: row.step_type,\n step_config: row.step_config || {},\n on_success: row.on_success,\n on_failure: row.on_failure,\n timeout_seconds: row.timeout_seconds || 60,\n input_schema: row.input_schema,\n step_outputs: row.step_outputs || {},\n trigger_payload: row.trigger_payload || {},\n attempt_count: row.attempt_count || 1,\n max_attempts: row.max_attempts || 3,\n max_steps_per_run: row.max_steps_per_run || 50,\n input: row.input,\n parent_step_run_id: row.parent_step_run_id,\n retry_delay_seconds: row.retry_delay_seconds || 10,\n };\n}\n\n/**\n * Execute the first pending step of a run inline, then chain subsequent steps.\n * Depth guard prevents unbounded recursion — worker loop catches anything left.\n */\nexport async function executeInlineChain(\n supabase: SupabaseClient, runId: string, depth: number = 0, traceId?: string,\n): Promise<void> {\n if (depth >= MAX_INLINE_DEPTH) {\n log.warn({ runId, depthLimit: MAX_INLINE_DEPTH }, \"inline depth limit reached, deferring to worker\");\n return;\n }\n\n // Resolve traceId from run record if not passed (first depth only to avoid repeated queries)\n if (!traceId && depth === 0) {\n const { data: runData } = await supabase.from(\"workflow_runs\")\n .select(\"trace_id\").eq(\"id\", runId).single();\n traceId = runData?.trace_id || undefined;\n }\n\n // H1 FIX: Claim step specifically for this run — cannot steal from other runs\n const step = await claimStepForRun(supabase, runId);\n if (!step) return; // No pending steps for this run\n\n // Phase 4: Override step_config/on_success/on_failure from version snapshot\n await applyVersionOverrides(supabase, step);\n\n try {\n await executeAndAdvance(supabase, step, traceId);\n } catch (err) {\n const errMsg = sanitizeError(err);\n log.error({ stepKey: step.step_key, runId, err: errMsg }, \"inline step execution error\");\n await supabase.from(\"workflow_step_runs\").update({\n status: \"failed\", error_message: errMsg,\n completed_at: new Date().toISOString(), duration_ms: 0,\n }).eq(\"id\", step.step_run_id);\n // Surface error to clients (SSE broadcast + structured error_details on step run)\n await surfaceStepError(supabase, step, errMsg);\n return;\n }\n\n // Steps that go async (delay, sub_workflow, parallel, for_each, approval) don't chain\n const asyncTypes = new Set([\"delay\", \"sub_workflow\", \"parallel\", \"for_each\", \"approval\", \"waitpoint\"]);\n if (asyncTypes.has(step.step_type)) return;\n\n // Chain to next step\n await executeInlineChain(supabase, runId, depth + 1, traceId);\n}\n\nasync function checkWorkflowCompletion(\n supabase: SupabaseClient, runId: string, workflowId: string,\n): Promise<void> {\n // P1 FIX: Single atomic query to count all step statuses — eliminates race windows\n // between multiple queries that could see inconsistent state\n const { data: allSteps } = await supabase.from(\"workflow_step_runs\")\n .select(\"step_key, step_id, status, error_message\")\n .eq(\"run_id\", runId);\n\n if (!allSteps?.length) {\n // No steps at all — mark as success (empty workflow)\n const { data: run } = await supabase.from(\"workflow_runs\").select(\"store_id\").eq(\"id\", runId).single();\n await completeWorkflowRun(supabase, runId, workflowId, run?.store_id, \"success\");\n return;\n }\n\n // Count in-memory from single query result\n const activeStatuses = new Set([\"pending\", \"running\", \"retrying\", \"waiting\"]);\n const activeSteps = allSteps.filter(s => activeStatuses.has(s.status));\n if (activeSteps.length > 0) return; // Still in progress\n\n // All steps are terminal — determine outcome\n const skippedSteps = allSteps.filter(s => s.status === \"skipped\");\n const failedSteps = allSteps.filter(s => s.status === \"failed\");\n\n // Filter to unhandled failures — steps where on_failure is null (no error handler)\n // M14 FIX: Use versioned step defs when available\n let failed: typeof failedSteps = [];\n if (failedSteps.length) {\n const versionedSteps = await loadVersionedSteps(supabase, runId);\n\n if (versionedSteps) {\n // Use versioned definitions\n const vStepMap = new Map(versionedSteps.map((s: any) => [s.step_key, s]));\n failed = failedSteps.filter(s => {\n const vStep = vStepMap.get(s.step_key);\n return !vStep?.on_failure;\n });\n } else {\n // Fall back to live table\n const stepIds = failedSteps.map(s => s.step_id).filter(Boolean);\n if (stepIds.length) {\n const { data: stepDefs } = await supabase.from(\"workflow_steps\")\n .select(\"id, on_failure\").in(\"id\", stepIds);\n const defMap = new Map((stepDefs || []).map(d => [d.id, d]));\n\n failed = failedSteps.filter(s => {\n const def = defMap.get(s.step_id);\n return !def?.on_failure;\n });\n }\n }\n }\n\n const { data: run } = await supabase.from(\"workflow_runs\").select(\"store_id\").eq(\"id\", runId).single();\n\n if (failed.length) {\n await completeWorkflowRun(supabase, runId, workflowId, run?.store_id, \"failed\", failed[0].error_message, failed[0].step_key);\n } else if (skippedSteps.length) {\n // All remaining steps were skipped (circuit breaker) — fail the run\n await completeWorkflowRun(supabase, runId, workflowId, run?.store_id, \"failed\",\n `${skippedSteps.length} step(s) skipped by circuit breaker`, skippedSteps[0].step_key);\n } else {\n await completeWorkflowRun(supabase, runId, workflowId, run?.store_id, \"success\");\n }\n}\n\nexport async function completeWorkflowRun(\n supabase: SupabaseClient, runId: string, workflowId: string, storeId: string | undefined,\n status: \"success\" | \"failed\" | \"cancelled\" | \"timed_out\",\n errorMessage?: string | null, errorStepKey?: string | null, traceId?: string,\n): Promise<void> {\n const { data: run } = await supabase.from(\"workflow_runs\")\n .select(\"started_at, trace_id, metadata\").eq(\"id\", runId).single();\n const durationMs = run?.started_at ? Date.now() - new Date(run.started_at).getTime() : null;\n const resolvedTraceId = traceId || run?.trace_id || null;\n\n // Aggregate error_count and error_log from failed step runs\n const { data: failedStepRuns } = await supabase.from(\"workflow_step_runs\")\n .select(\"step_key, step_type, error_message, error_details\")\n .eq(\"run_id\", runId)\n .eq(\"status\", \"failed\");\n\n const errorCount = failedStepRuns?.length || 0;\n const errorLog = (failedStepRuns || []).map(sr => ({\n step_name: sr.step_key,\n step_type: sr.step_type,\n error_message: sr.error_message,\n ...(sr.error_details ? { details: sr.error_details } : {}),\n }));\n\n const updatedMetadata = {\n ...((run?.metadata as Record<string, unknown>) || {}),\n error_count: errorCount,\n ...(errorLog.length ? { error_log: errorLog } : {}),\n };\n\n // Guard against double-completion: only update if still running\n const { data: updatedRows, error: updateErr } = await supabase.from(\"workflow_runs\").update({\n status, error_message: errorMessage || null, error_step_key: errorStepKey || null,\n completed_at: new Date().toISOString(), duration_ms: durationMs, current_step_key: null,\n metadata: updatedMetadata,\n }).eq(\"id\", runId).eq(\"status\", \"running\").select(\"id\");\n\n if (updateErr) {\n log.warn({ err: updateErr.message, runId, status }, \"completeWorkflowRun update failed\");\n return;\n }\n if (!updatedRows || updatedRows.length === 0) {\n log.warn({ runId, status }, \"completeWorkflowRun skipped — run already completed by another caller\");\n return;\n }\n\n // Cancel remaining pending steps\n await supabase.from(\"workflow_step_runs\").update({ status: \"cancelled\" })\n .eq(\"run_id\", runId).in(\"status\", [\"pending\", \"retrying\", \"waiting\"]);\n\n // Event journal — run completed\n await logWorkflowEvent(supabase, runId, `run_${status}`, {\n workflow_id: workflowId, duration_ms: durationMs,\n ...(errorMessage ? { error: errorMessage } : {}),\n });\n\n // Circuit breaker\n if (workflowId) await handleWorkflowCircuitBreaker(supabase, workflowId, status === \"success\", errorMessage);\n\n // Telemetry → ClickHouse\n queueSpan(auditRowToSpan({\n action: `workflow.run.${status}`, severity: status === \"success\" ? \"info\" : \"error\",\n store_id: storeId || null, resource_type: \"workflow_run\", resource_id: runId,\n source: \"workflow_engine\", duration_ms: durationMs,\n request_id: resolvedTraceId,\n service_name: \"workflow-engine\", span_kind: \"INTERNAL\",\n status_code: status === \"success\" ? \"OK\" : \"ERROR\",\n start_time: new Date(Date.now() - (durationMs || 0)).toISOString(),\n end_time: new Date().toISOString(),\n error_type: errorMessage ? classifyErrorType(errorMessage) : undefined,\n details: { workflow_id: workflowId, run_id: runId },\n error_message: errorMessage || null,\n }));\n\n // Error notifications\n if (status === \"failed\" && workflowId) {\n await sendErrorNotification(supabase, workflowId, runId, storeId, errorMessage, errorStepKey);\n // Auto-archive to Dead Letter Queue\n if (storeId) {\n try {\n await archiveToDlq(supabase, runId, workflowId, storeId);\n } catch (e: any) {\n log.warn({ err: e?.message, runId }, \"archiveToDlq failed\");\n }\n }\n }\n}\n\nasync function sendErrorNotification(\n supabase: SupabaseClient, workflowId: string, runId: string,\n storeId: string | undefined, errorMessage?: string | null, errorStepKey?: string | null,\n): Promise<void> {\n const { data: wf } = await supabase.from(\"workflows\")\n .select(\"name, on_error_webhook_url, on_error_email\").eq(\"id\", workflowId).single();\n if (!wf) return;\n\n const errorPayload = {\n event: \"workflow.run.failed\",\n workflow_id: workflowId, workflow_name: wf.name,\n run_id: runId, error_message: errorMessage, error_step: errorStepKey,\n timestamp: new Date().toISOString(),\n };\n\n // Webhook notification (with SSRF protection)\n const errorWebhookSsrf = wf.on_error_webhook_url ? await validateUrl(wf.on_error_webhook_url) : \"no URL\";\n if (wf.on_error_webhook_url && !errorWebhookSsrf) {\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 10_000);\n await fetch(wf.on_error_webhook_url, {\n method: \"POST\", headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(errorPayload), signal: controller.signal,\n });\n clearTimeout(timer);\n } catch (err) {\n log.error({ err: sanitizeError(err), workflowId }, \"error notification webhook failed\");\n }\n }\n\n // Email notification\n if (wf.on_error_email && _executeTool && storeId) {\n try {\n await _executeTool(supabase, \"email\", {\n action: \"send\", to: wf.on_error_email,\n subject: `Workflow \"${wf.name}\" failed`,\n text: `Workflow \"${wf.name}\" failed at step \"${errorStepKey || \"unknown\"}\".\\n\\nError: ${errorMessage || \"Unknown error\"}\\n\\nRun ID: ${runId}\\nTime: ${new Date().toISOString()}`,\n }, storeId);\n } catch (err) {\n log.error({ err: sanitizeError(err), workflowId }, \"error notification email failed\");\n }\n }\n}\n\n// ============================================================================\n// WEBHOOK INGESTION\n// ============================================================================\n\nexport async function handleWebhookIngestion(\n supabase: SupabaseClient, slug: string, rawBody: string, headers: Record<string, string>,\n storeId?: string,\n): Promise<{ status: number; body: Record<string, unknown> }> {\n // P0 FIX: Multi-tenancy — scope webhook lookup by store_id when available\n let endpointQuery = supabase.from(\"webhook_endpoints\")\n .select(\"*\").eq(\"slug\", slug).eq(\"is_active\", true);\n if (storeId) {\n endpointQuery = endpointQuery.eq(\"store_id\", storeId);\n }\n const { data: endpoints } = await endpointQuery.limit(1);\n const endpoint = endpoints?.[0];\n if (!endpoint) return { status: 404, body: { error: \"Webhook endpoint not found\" } };\n\n // Rate limit — in-memory sliding window (no DB round-trip)\n const now = Date.now();\n let counter = webhookRateCounters.get(endpoint.id);\n if (!counter) { counter = { timestamps: [] }; webhookRateCounters.set(endpoint.id, counter); }\n counter.timestamps = counter.timestamps.filter(t => t > now - 60_000);\n if (counter.timestamps.length >= endpoint.max_requests_per_minute) {\n return { status: 429, body: { error: \"Rate limit exceeded\" } };\n }\n counter.timestamps.push(now);\n\n // HMAC verification\n if (endpoint.verify_signature) {\n const signature = headers[\"x-webhook-signature\"] || headers[\"x-hub-signature-256\"] || \"\";\n if (!signature) return { status: 401, body: { error: \"Missing signature\" } };\n\n const expected = `sha256=${createHmac(\"sha256\", endpoint.signing_secret).update(rawBody).digest(\"hex\")}`;\n try {\n const sigBuf = Buffer.from(signature);\n const expBuf = Buffer.from(expected);\n if (sigBuf.length !== expBuf.length || !timingSafeEqual(sigBuf, expBuf)) {\n return { status: 401, body: { error: \"Invalid signature\" } };\n }\n } catch { return { status: 401, body: { error: \"Invalid signature\" } }; }\n }\n\n // P3 FIX: Reject oversized payloads before parsing to prevent memory exhaustion\n const MAX_TRIGGER_PAYLOAD_BYTES = 10_000_000; // 10MB\n if (rawBody.length > MAX_TRIGGER_PAYLOAD_BYTES) {\n return { status: 413, body: { error: `Trigger payload too large (${rawBody.length} bytes, max 10MB)` } };\n }\n\n let payload: Record<string, unknown>;\n try { payload = JSON.parse(rawBody); } catch { payload = { raw: rawBody }; }\n\n if (endpoint.payload_transform && typeof endpoint.payload_transform === \"object\") {\n payload = resolveTemplate(endpoint.payload_transform, { steps: {}, trigger: payload }) as Record<string, unknown>;\n }\n\n // Update stats\n await supabase.from(\"webhook_endpoints\").update({\n last_received_at: new Date().toISOString(),\n total_received: (endpoint.total_received || 0) + 1,\n }).eq(\"id\", endpoint.id);\n\n // Telemetry → ClickHouse\n queueSpan(auditRowToSpan({\n action: \"webhook.received\", severity: \"info\", store_id: endpoint.store_id,\n resource_type: \"webhook_endpoint\", resource_id: endpoint.id, source: \"webhook\",\n service_name: \"workflow-engine\", span_kind: \"SERVER\", status_code: \"OK\",\n start_time: new Date().toISOString(), end_time: new Date().toISOString(),\n input_bytes: rawBody.length,\n details: { slug, workflow_id: endpoint.workflow_id },\n }));\n\n // Start workflow\n const { data: startResult } = await supabase.rpc(\"start_workflow_run\", {\n p_workflow_id: endpoint.workflow_id, p_store_id: endpoint.store_id,\n p_trigger_type: \"webhook\", p_trigger_payload: payload,\n });\n if (!startResult?.success) {\n return { status: 422, body: { error: startResult?.error || \"Failed to start workflow\" } };\n }\n\n const runId = startResult.run_id;\n\n // Sync response — poll until workflow completes or timeout\n if (endpoint.sync_response) {\n const timeoutMs = (endpoint.sync_timeout_seconds || 30) * 1000;\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n await new Promise(r => setTimeout(r, 500));\n\n const { data: run } = await supabase.from(\"workflow_runs\")\n .select(\"status, step_outputs, error_message\").eq(\"id\", runId).single();\n\n if (run?.status === \"success\") {\n return { status: 200, body: { success: true, run_id: runId, output: run.step_outputs } };\n }\n if (run?.status === \"failed\") {\n return { status: 422, body: { success: false, run_id: runId, error: run.error_message, output: run.step_outputs } };\n }\n }\n\n return { status: 202, body: { success: true, run_id: runId, status: \"running\", message: \"Workflow still in progress\" } };\n }\n\n return { status: 200, body: { success: true, run_id: runId, deduplicated: startResult.deduplicated || false } };\n}\n"],"mappings":"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","ignoreList":[]}