@pikku/core 0.12.71 → 0.12.74

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 (819) hide show
  1. package/CHANGELOG.md +848 -0
  2. package/dist/crypto-utils.d.ts +30 -5
  3. package/dist/crypto-utils.js +146 -41
  4. package/dist/dev/hot-reload.js +11 -30
  5. package/dist/dev/module-runner.d.ts +3 -7
  6. package/dist/dev/module-runner.js +4 -10
  7. package/dist/dev/reload-meta.d.ts +8 -20
  8. package/dist/dev/reload-meta.js +9 -29
  9. package/dist/errors/error-handler.d.ts +5 -30
  10. package/dist/errors/error-handler.js +16 -32
  11. package/dist/errors/errors.d.ts +32 -151
  12. package/dist/errors/errors.js +55 -157
  13. package/dist/function/abort-scope.d.ts +47 -0
  14. package/dist/function/abort-scope.js +63 -0
  15. package/dist/function/function-runner.js +40 -30
  16. package/dist/function/functions.types.d.ts +44 -136
  17. package/dist/function/functions.types.js +0 -58
  18. package/dist/function/list.types.d.ts +12 -62
  19. package/dist/function/list.types.js +4 -25
  20. package/dist/handle-error.d.ts +0 -11
  21. package/dist/handle-error.js +6 -18
  22. package/dist/index.d.ts +5 -2
  23. package/dist/index.js +4 -1
  24. package/dist/middleware/auth-apikey.d.ts +3 -18
  25. package/dist/middleware/auth-apikey.js +0 -17
  26. package/dist/middleware/auth-bearer.d.ts +6 -41
  27. package/dist/middleware/auth-bearer.js +3 -40
  28. package/dist/middleware/auth-cookie.d.ts +5 -27
  29. package/dist/middleware/auth-cookie.js +2 -26
  30. package/dist/middleware/cors.d.ts +7 -34
  31. package/dist/middleware/cors.js +7 -34
  32. package/dist/middleware/remote-auth.d.ts +3 -1
  33. package/dist/middleware/remote-auth.js +3 -2
  34. package/dist/middleware/telemetry.d.ts +8 -33
  35. package/dist/middleware/telemetry.js +2 -31
  36. package/dist/middleware-runner.d.ts +4 -55
  37. package/dist/middleware-runner.js +5 -74
  38. package/dist/permissions.d.ts +3 -44
  39. package/dist/permissions.js +19 -71
  40. package/dist/pikku-request.d.ts +0 -6
  41. package/dist/pikku-request.js +0 -6
  42. package/dist/pikku-state.d.ts +0 -26
  43. package/dist/pikku-state.js +2 -30
  44. package/dist/remote.d.ts +3 -5
  45. package/dist/remote.js +8 -7
  46. package/dist/schema.d.ts +7 -17
  47. package/dist/schema.js +30 -18
  48. package/dist/scopes.d.ts +4 -23
  49. package/dist/scopes.js +7 -48
  50. package/dist/services/ai-agent-runner-service.d.ts +20 -0
  51. package/dist/services/ai-embedding-service.d.ts +2 -25
  52. package/dist/services/audit-service.js +1 -2
  53. package/dist/services/content-service.d.ts +1 -46
  54. package/dist/services/credential-service.d.ts +3 -40
  55. package/dist/services/deployment-service.d.ts +3 -9
  56. package/dist/services/gateway-service.d.ts +0 -15
  57. package/dist/services/http-personas.d.ts +80 -0
  58. package/dist/services/http-personas.js +233 -0
  59. package/dist/services/in-memory-queue-service.d.ts +0 -14
  60. package/dist/services/in-memory-queue-service.js +1 -15
  61. package/dist/services/in-memory-trigger-service.d.ts +0 -18
  62. package/dist/services/in-memory-trigger-service.js +1 -18
  63. package/dist/services/in-memory-workflow-service.d.ts +0 -16
  64. package/dist/services/in-memory-workflow-service.js +4 -33
  65. package/dist/services/index.d.ts +5 -6
  66. package/dist/services/index.js +2 -5
  67. package/dist/services/istanbul-coverage-service.d.ts +1 -5
  68. package/dist/services/istanbul-coverage-service.js +2 -8
  69. package/dist/services/jwt-service.d.ts +1 -16
  70. package/dist/services/local-content.d.ts +13 -2
  71. package/dist/services/local-content.js +40 -13
  72. package/dist/services/local-gateway-service.d.ts +0 -16
  73. package/dist/services/local-gateway-service.js +2 -17
  74. package/dist/services/local-secrets.d.ts +0 -4
  75. package/dist/services/local-secrets.js +0 -4
  76. package/dist/services/logger-console.d.ts +3 -7
  77. package/dist/services/logger-console.js +3 -7
  78. package/dist/services/logger.d.ts +2 -37
  79. package/dist/services/meta-service.d.ts +23 -26
  80. package/dist/services/meta-service.js +22 -36
  81. package/dist/services/personas-service.d.ts +134 -0
  82. package/dist/services/personas-service.js +40 -0
  83. package/dist/services/pikku-user-id.js +0 -4
  84. package/dist/services/queue-webhook-service.d.ts +2 -36
  85. package/dist/services/queue-webhook-service.js +9 -41
  86. package/dist/services/scheduler-service.d.ts +1 -50
  87. package/dist/services/scheduler-service.js +0 -10
  88. package/dist/services/schema-service.d.ts +1 -24
  89. package/dist/services/scope-service.d.ts +49 -34
  90. package/dist/services/scoped-secret-service.d.ts +0 -4
  91. package/dist/services/scoped-secret-service.js +0 -4
  92. package/dist/services/secret-host-binding.d.ts +8 -0
  93. package/dist/services/secret-host-binding.js +36 -0
  94. package/dist/services/secret-service.d.ts +5 -33
  95. package/dist/services/secretless.d.ts +6 -0
  96. package/dist/services/secretless.js +21 -0
  97. package/dist/services/stub-tracker.d.ts +7 -18
  98. package/dist/services/stub-tracker.js +8 -18
  99. package/dist/services/system-role-guard.d.ts +33 -0
  100. package/dist/services/system-role-guard.js +38 -0
  101. package/dist/services/trigger-service.d.ts +0 -12
  102. package/dist/services/typed-secret-service.d.ts +0 -7
  103. package/dist/services/typed-secret-service.js +1 -7
  104. package/dist/services/v8-coverage-service.d.ts +2 -3
  105. package/dist/services/v8-coverage-service.js +1 -2
  106. package/dist/services/variables-service.d.ts +1 -8
  107. package/dist/services/webhook-service.d.ts +19 -63
  108. package/dist/services/webhook-service.js +6 -20
  109. package/dist/services/workflow-service.d.ts +3 -15
  110. package/dist/testing/service-tests.js +0 -17
  111. package/dist/time-utils.d.ts +0 -16
  112. package/dist/time-utils.js +1 -19
  113. package/dist/types/core.types.d.ts +99 -219
  114. package/dist/types/core.types.js +0 -42
  115. package/dist/types/state.types.d.ts +4 -9
  116. package/dist/utils/hmac.d.ts +4 -10
  117. package/dist/utils/hmac.js +4 -10
  118. package/dist/utils/safe-fetch.d.ts +7 -35
  119. package/dist/utils/safe-fetch.js +13 -53
  120. package/dist/utils.d.ts +1 -6
  121. package/dist/utils.js +6 -15
  122. package/dist/wirings/actor-flow/actor-flow.types.d.ts +1 -34
  123. package/dist/wirings/actor-flow/index.d.ts +0 -9
  124. package/dist/wirings/actor-flow/run-conversation.d.ts +5 -5
  125. package/dist/wirings/actor-flow/run-conversation.js +14 -7
  126. package/dist/wirings/ai-agent/ai-agent-agui.d.ts +0 -5
  127. package/dist/wirings/ai-agent/ai-agent-agui.js +34 -12
  128. package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +7 -0
  129. package/dist/wirings/ai-agent/ai-agent-helpers.js +7 -0
  130. package/dist/wirings/ai-agent/ai-agent-interrupt.d.ts +153 -0
  131. package/dist/wirings/ai-agent/ai-agent-interrupt.js +256 -0
  132. package/dist/wirings/ai-agent/ai-agent-memory.js +0 -2
  133. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +0 -9
  134. package/dist/wirings/ai-agent/ai-agent-model-config.js +1 -9
  135. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +10 -99
  136. package/dist/wirings/ai-agent/ai-agent-prepare.js +58 -131
  137. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +2 -1
  138. package/dist/wirings/ai-agent/ai-agent-registry.js +5 -1
  139. package/dist/wirings/ai-agent/ai-agent-runner.js +49 -20
  140. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +25 -2
  141. package/dist/wirings/ai-agent/ai-agent-stream.js +153 -63
  142. package/dist/wirings/ai-agent/ai-agent.types.d.ts +84 -4
  143. package/dist/wirings/ai-agent/index.d.ts +6 -4
  144. package/dist/wirings/ai-agent/index.js +5 -4
  145. package/dist/wirings/ai-agent/voice-input.d.ts +39 -1
  146. package/dist/wirings/ai-agent/voice-input.js +46 -3
  147. package/dist/wirings/ai-agent/voice-output.d.ts +54 -1
  148. package/dist/wirings/ai-agent/voice-output.js +153 -50
  149. package/dist/wirings/channel/channel-common.d.ts +7 -20
  150. package/dist/wirings/channel/channel-common.js +7 -21
  151. package/dist/wirings/channel/channel-handler.js +25 -6
  152. package/dist/wirings/channel/channel-host-rpc.d.ts +25 -0
  153. package/dist/wirings/channel/channel-host-rpc.js +38 -0
  154. package/dist/wirings/channel/channel-middleware-runner.d.ts +0 -12
  155. package/dist/wirings/channel/channel-middleware-runner.js +0 -12
  156. package/dist/wirings/channel/channel-rpc-registry.d.ts +31 -0
  157. package/dist/wirings/channel/channel-rpc-registry.js +89 -0
  158. package/dist/wirings/channel/channel-rpc-responder.d.ts +15 -0
  159. package/dist/wirings/channel/channel-rpc-responder.js +71 -0
  160. package/dist/wirings/channel/channel-rpc-service.d.ts +40 -0
  161. package/dist/wirings/channel/channel-rpc-service.js +106 -0
  162. package/dist/wirings/channel/channel-rpc-validators.d.ts +14 -0
  163. package/dist/wirings/channel/channel-rpc-validators.js +30 -0
  164. package/dist/wirings/channel/channel-rpc.d.ts +5 -0
  165. package/dist/wirings/channel/channel-rpc.js +5 -0
  166. package/dist/wirings/channel/channel-rpc.types.d.ts +90 -0
  167. package/dist/wirings/channel/channel-rpc.types.js +50 -0
  168. package/dist/wirings/channel/channel-runner.d.ts +0 -4
  169. package/dist/wirings/channel/channel-runner.js +0 -14
  170. package/dist/wirings/channel/channel-store.d.ts +0 -10
  171. package/dist/wirings/channel/channel.types.d.ts +12 -1
  172. package/dist/wirings/channel/define-channel-routes.d.ts +0 -20
  173. package/dist/wirings/channel/define-channel-routes.js +0 -20
  174. package/dist/wirings/channel/eventhub-service.d.ts +0 -18
  175. package/dist/wirings/channel/index.d.ts +4 -1
  176. package/dist/wirings/channel/index.js +2 -0
  177. package/dist/wirings/channel/local/local-channel-runner.js +3 -1
  178. package/dist/wirings/channel/local/local-eventhub-service.d.ts +0 -33
  179. package/dist/wirings/channel/local/local-eventhub-service.js +2 -36
  180. package/dist/wirings/channel/log-channels.d.ts +0 -4
  181. package/dist/wirings/channel/log-channels.js +0 -4
  182. package/dist/wirings/channel/pikku-abstract-channel-handler.js +6 -0
  183. package/dist/wirings/channel/serverless/serverless-channel-runner.js +2 -5
  184. package/dist/wirings/cli/channel/cli-approval.d.ts +41 -0
  185. package/dist/wirings/cli/channel/cli-approval.js +81 -0
  186. package/dist/wirings/cli/channel/cli-channel-runner.d.ts +0 -4
  187. package/dist/wirings/cli/channel/cli-channel-runner.js +3 -25
  188. package/dist/wirings/cli/channel/cli-raw-channel-runner.d.ts +47 -9
  189. package/dist/wirings/cli/channel/cli-raw-channel-runner.js +24 -16
  190. package/dist/wirings/cli/channel/cli-raw-client-runner.d.ts +20 -0
  191. package/dist/wirings/cli/channel/cli-raw-client-runner.js +121 -0
  192. package/dist/wirings/cli/channel/index.d.ts +4 -0
  193. package/dist/wirings/cli/channel/index.js +2 -0
  194. package/dist/wirings/cli/cli-runner.d.ts +20 -20
  195. package/dist/wirings/cli/cli-runner.js +28 -89
  196. package/dist/wirings/cli/cli.types.d.ts +14 -3
  197. package/dist/wirings/cli/command-parser.d.ts +1 -10
  198. package/dist/wirings/cli/command-parser.js +10 -87
  199. package/dist/wirings/cli/define-cli-commands.d.ts +1 -17
  200. package/dist/wirings/cli/define-cli-commands.js +1 -17
  201. package/dist/wirings/credential/credential.types.d.ts +0 -12
  202. package/dist/wirings/credential/define-credential.d.ts +48 -0
  203. package/dist/wirings/credential/define-credential.js +47 -0
  204. package/dist/wirings/credential/index.d.ts +1 -1
  205. package/dist/wirings/credential/index.js +1 -1
  206. package/dist/wirings/credential/validate-credential-definitions.d.ts +2 -4
  207. package/dist/wirings/gateway/gateway-runner.d.ts +1 -20
  208. package/dist/wirings/gateway/gateway-runner.js +8 -105
  209. package/dist/wirings/gateway/gateway.types.d.ts +7 -80
  210. package/dist/wirings/http/http-routes.d.ts +0 -63
  211. package/dist/wirings/http/http-routes.js +0 -63
  212. package/dist/wirings/http/http-runner.d.ts +1 -100
  213. package/dist/wirings/http/http-runner.js +12 -166
  214. package/dist/wirings/http/http.types.d.ts +16 -55
  215. package/dist/wirings/http/index.d.ts +2 -1
  216. package/dist/wirings/http/index.js +1 -1
  217. package/dist/wirings/http/log-http-routes.d.ts +0 -4
  218. package/dist/wirings/http/log-http-routes.js +0 -4
  219. package/dist/wirings/http/pikku-fetch-http-request.d.ts +6 -36
  220. package/dist/wirings/http/pikku-fetch-http-request.js +56 -50
  221. package/dist/wirings/http/pikku-fetch-http-response.js +0 -3
  222. package/dist/wirings/http/routers/path-to-regex.js +2 -13
  223. package/dist/wirings/http/web-request.d.ts +0 -8
  224. package/dist/wirings/http/web-request.js +25 -17
  225. package/dist/wirings/mcp/mcp-runner.d.ts +2 -0
  226. package/dist/wirings/mcp/mcp-runner.js +6 -16
  227. package/dist/wirings/mcp/mcp.types.d.ts +2 -35
  228. package/dist/wirings/oauth2/oauth2.types.d.ts +0 -28
  229. package/dist/wirings/oauth2/oauth2.types.js +0 -3
  230. package/dist/wirings/persona/define-personas.d.ts +28 -0
  231. package/dist/wirings/persona/define-personas.js +27 -0
  232. package/dist/wirings/persona/index.d.ts +21 -0
  233. package/dist/wirings/persona/index.js +17 -0
  234. package/dist/wirings/persona/persona-email.d.ts +37 -0
  235. package/dist/wirings/persona/persona-email.js +69 -0
  236. package/dist/wirings/persona/persona-environments.d.ts +45 -0
  237. package/dist/wirings/persona/persona-environments.js +81 -0
  238. package/dist/wirings/persona/persona-mailbox.d.ts +101 -0
  239. package/dist/wirings/persona/persona-mailbox.js +53 -0
  240. package/dist/wirings/persona/persona.types.d.ts +125 -0
  241. package/dist/wirings/persona/persona.types.js +1 -0
  242. package/dist/wirings/persona/validate-personas.d.ts +53 -0
  243. package/dist/wirings/persona/validate-personas.js +94 -0
  244. package/dist/wirings/queue/index.d.ts +3 -0
  245. package/dist/wirings/queue/index.js +2 -3
  246. package/dist/wirings/queue/queue-identity.d.ts +28 -0
  247. package/dist/wirings/queue/queue-identity.js +102 -0
  248. package/dist/wirings/queue/queue-runner.d.ts +0 -19
  249. package/dist/wirings/queue/queue-runner.js +9 -30
  250. package/dist/wirings/queue/queue.types.d.ts +18 -89
  251. package/dist/wirings/queue/register-queue-helper.d.ts +0 -12
  252. package/dist/wirings/queue/register-queue-helper.js +0 -11
  253. package/dist/wirings/queue/signed-queue-service.d.ts +16 -0
  254. package/dist/wirings/queue/signed-queue-service.js +42 -0
  255. package/dist/wirings/queue/validate-worker-config.d.ts +2 -23
  256. package/dist/wirings/queue/validate-worker-config.js +0 -14
  257. package/dist/wirings/role/define-system-role.d.ts +32 -0
  258. package/dist/wirings/role/define-system-role.js +31 -0
  259. package/dist/wirings/role/index.d.ts +3 -0
  260. package/dist/wirings/role/index.js +2 -0
  261. package/dist/wirings/role/role.types.d.ts +43 -0
  262. package/dist/wirings/role/role.types.js +1 -0
  263. package/dist/wirings/role/validate-role-definitions.d.ts +21 -0
  264. package/dist/wirings/role/validate-role-definitions.js +71 -0
  265. package/dist/wirings/rpc/addon-runner.d.ts +0 -19
  266. package/dist/wirings/rpc/addon-runner.js +0 -51
  267. package/dist/wirings/rpc/remote-addon-auth.d.ts +1 -12
  268. package/dist/wirings/rpc/remote-addon-auth.js +1 -9
  269. package/dist/wirings/rpc/rpc-runner.d.ts +11 -18
  270. package/dist/wirings/rpc/rpc-runner.js +88 -105
  271. package/dist/wirings/rpc/rpc-types.d.ts +7 -6
  272. package/dist/wirings/rpc/wire-addon.d.ts +25 -0
  273. package/dist/wirings/rpc/wire-addon.js +62 -0
  274. package/dist/wirings/rpc/wire-remote-addon.d.ts +3 -28
  275. package/dist/wirings/rpc/wire-remote-addon.js +0 -8
  276. package/dist/wirings/scheduler/log-schedulers.d.ts +0 -4
  277. package/dist/wirings/scheduler/log-schedulers.js +0 -4
  278. package/dist/wirings/scheduler/scheduler-runner.d.ts +0 -1
  279. package/dist/wirings/scheduler/scheduler-runner.js +0 -1
  280. package/dist/wirings/scheduler/scheduler.types.d.ts +1 -14
  281. package/dist/wirings/scope/define-scope.d.ts +32 -0
  282. package/dist/wirings/scope/define-scope.js +31 -0
  283. package/dist/wirings/scope/index.d.ts +1 -1
  284. package/dist/wirings/scope/index.js +1 -1
  285. package/dist/wirings/scope/scope.types.d.ts +7 -9
  286. package/dist/wirings/scope/validate-scope-definitions.d.ts +2 -21
  287. package/dist/wirings/scope/validate-scope-definitions.js +3 -21
  288. package/dist/wirings/secret/index.d.ts +1 -1
  289. package/dist/wirings/secret/index.js +1 -1
  290. package/dist/wirings/secret/secret.types.d.ts +19 -15
  291. package/dist/wirings/secret/secret.types.js +1 -1
  292. package/dist/wirings/secret/validate-secret-definitions.d.ts +2 -4
  293. package/dist/wirings/trigger/trigger-runner.d.ts +0 -27
  294. package/dist/wirings/trigger/trigger-runner.js +1 -24
  295. package/dist/wirings/trigger/trigger.types.d.ts +1 -82
  296. package/dist/wirings/trigger/trigger.types.js +0 -34
  297. package/dist/wirings/variable/index.d.ts +1 -1
  298. package/dist/wirings/variable/index.js +1 -1
  299. package/dist/wirings/variable/validate-variable-definitions.d.ts +2 -4
  300. package/dist/wirings/variable/variable.types.d.ts +1 -13
  301. package/dist/wirings/variable/variable.types.js +1 -1
  302. package/dist/wirings/virtual-user/index.d.ts +27 -0
  303. package/dist/wirings/virtual-user/index.js +8 -0
  304. package/dist/wirings/virtual-user/run-virtual-user.d.ts +92 -0
  305. package/dist/wirings/virtual-user/run-virtual-user.js +478 -0
  306. package/dist/wirings/virtual-user/virtual-user-agents.d.ts +38 -0
  307. package/dist/wirings/virtual-user/virtual-user-agents.js +24 -0
  308. package/dist/wirings/virtual-user/virtual-user-catalogue.d.ts +92 -0
  309. package/dist/wirings/virtual-user/virtual-user-catalogue.js +134 -0
  310. package/dist/wirings/virtual-user/virtual-user-derive.d.ts +26 -0
  311. package/dist/wirings/virtual-user/virtual-user-derive.js +137 -0
  312. package/dist/wirings/virtual-user/virtual-user-dispositions.d.ts +79 -0
  313. package/dist/wirings/virtual-user/virtual-user-dispositions.js +128 -0
  314. package/dist/wirings/virtual-user/virtual-user-intents.d.ts +78 -0
  315. package/dist/wirings/virtual-user/virtual-user-intents.js +142 -0
  316. package/dist/wirings/virtual-user/virtual-user-rng.d.ts +24 -0
  317. package/dist/wirings/virtual-user/virtual-user-rng.js +44 -0
  318. package/dist/wirings/virtual-user/virtual-user-target.d.ts +21 -0
  319. package/dist/wirings/virtual-user/virtual-user-target.js +34 -0
  320. package/dist/wirings/virtual-user/virtual-user.types.d.ts +199 -0
  321. package/dist/wirings/virtual-user/virtual-user.types.js +8 -0
  322. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +5 -5
  323. package/dist/wirings/workflow/dsl/workflow-runner.d.ts +0 -4
  324. package/dist/wirings/workflow/dsl/workflow-runner.js +0 -4
  325. package/dist/wirings/workflow/feature.d.ts +0 -19
  326. package/dist/wirings/workflow/feature.js +0 -19
  327. package/dist/wirings/workflow/graph/graph-node.d.ts +0 -98
  328. package/dist/wirings/workflow/graph/graph-node.js +0 -34
  329. package/dist/wirings/workflow/graph/graph-runner.js +6 -41
  330. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +0 -4
  331. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -58
  332. package/dist/wirings/workflow/graph/workflow-graph.types.js +0 -6
  333. package/dist/wirings/workflow/index.d.ts +5 -7
  334. package/dist/wirings/workflow/index.js +3 -17
  335. package/dist/wirings/workflow/pikku-scenario-service.d.ts +87 -5
  336. package/dist/wirings/workflow/pikku-scenario-service.js +204 -42
  337. package/dist/wirings/workflow/pikku-workflow-service.d.ts +7 -459
  338. package/dist/wirings/workflow/pikku-workflow-service.js +58 -551
  339. package/dist/wirings/workflow/run-timeline.d.ts +0 -47
  340. package/dist/wirings/workflow/run-timeline.js +0 -22
  341. package/dist/wirings/workflow/scenario-cookie-jar.d.ts +0 -23
  342. package/dist/wirings/workflow/scenario-cookie-jar.js +0 -16
  343. package/dist/wirings/workflow/scenario-poll.d.ts +0 -15
  344. package/dist/wirings/workflow/scenario-poll.js +0 -12
  345. package/dist/wirings/workflow/scenario-prose.d.ts +0 -28
  346. package/dist/wirings/workflow/scenario-prose.js +0 -18
  347. package/dist/wirings/workflow/scenario-step-guards.d.ts +0 -13
  348. package/dist/wirings/workflow/scenario-step-guards.js +1 -14
  349. package/dist/wirings/workflow/scenario-step.types.d.ts +72 -6
  350. package/dist/wirings/workflow/scenario-step.types.js +5 -1
  351. package/dist/wirings/workflow/scenario-surface.d.ts +16 -0
  352. package/dist/wirings/workflow/scenario-surface.js +56 -0
  353. package/dist/wirings/workflow/workflow-invocation-id.d.ts +0 -18
  354. package/dist/wirings/workflow/workflow-invocation-id.js +2 -22
  355. package/dist/wirings/workflow/workflow-queue-workers.d.ts +0 -20
  356. package/dist/wirings/workflow/workflow-queue-workers.js +0 -19
  357. package/dist/wirings/workflow/workflow.types.d.ts +0 -197
  358. package/knowledge/decisions/index.md +19 -0
  359. package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +49 -0
  360. package/knowledge/decisions/internals/actor-flow-conversations-seed-a-hidden-kickoff-message.md +23 -0
  361. package/knowledge/decisions/internals/actor-flow-drives-the-target-through-a-transport-seam.md +24 -0
  362. package/knowledge/decisions/internals/actor-flow-verdicts-are-llm-self-evaluations.md +25 -0
  363. package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +26 -0
  364. package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +33 -0
  365. package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +28 -0
  366. package/knowledge/decisions/internals/ai-agent-agui-bridge-obeys-the-client-ordering-contract.md +29 -0
  367. package/knowledge/decisions/internals/ai-agent-audio-chunks-carry-the-format-the-provider-returned.md +20 -0
  368. package/knowledge/decisions/internals/ai-agent-credential-suspensions-hide-the-tool-result.md +26 -0
  369. package/knowledge/decisions/internals/ai-agent-delegate-and-supervise-hide-different-text.md +26 -0
  370. package/knowledge/decisions/internals/ai-agent-llm-tool-arguments-have-nulls-stripped.md +23 -0
  371. package/knowledge/decisions/internals/ai-agent-model-config-stays-a-single-resolution-seam.md +25 -0
  372. package/knowledge/decisions/internals/ai-agent-onerror-hooks-cannot-change-the-failure.md +22 -0
  373. package/knowledge/decisions/internals/ai-agent-runner-methods-must-keep-their-receiver.md +22 -0
  374. package/knowledge/decisions/internals/ai-agent-stream-persistence-is-best-effort.md +27 -0
  375. package/knowledge/decisions/internals/ai-agent-sub-agents-inherit-the-parent-context-block.md +26 -0
  376. package/knowledge/decisions/internals/ai-agent-tool-execute-failures-are-logged-unconditionally.md +25 -0
  377. package/knowledge/decisions/internals/ai-agent-voice-input-transcribes-audio-parts-in-place.md +22 -0
  378. package/knowledge/decisions/internals/ai-agent-working-memory-is-persisted-only-when-valid.md +25 -0
  379. package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +30 -0
  380. package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +31 -0
  381. package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +29 -0
  382. package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +28 -0
  383. package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +27 -0
  384. package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +28 -0
  385. package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +34 -0
  386. package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +29 -0
  387. package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +34 -0
  388. package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +44 -0
  389. package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +39 -0
  390. package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +42 -0
  391. package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +39 -0
  392. package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +43 -0
  393. package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +38 -0
  394. package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +44 -0
  395. package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +27 -0
  396. package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +32 -0
  397. package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +28 -0
  398. package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +31 -0
  399. package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +26 -0
  400. package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +32 -0
  401. package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +28 -0
  402. package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +30 -0
  403. package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +26 -0
  404. package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +28 -0
  405. package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +32 -0
  406. package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +26 -0
  407. package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +25 -0
  408. package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +26 -0
  409. package/knowledge/decisions/internals/index.md +113 -0
  410. package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +25 -0
  411. package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +26 -0
  412. package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +24 -0
  413. package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +28 -0
  414. package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +27 -0
  415. package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +31 -0
  416. package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +32 -0
  417. package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +27 -0
  418. package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +26 -0
  419. package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +27 -0
  420. package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +30 -0
  421. package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +28 -0
  422. package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +30 -0
  423. package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +29 -0
  424. package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +27 -0
  425. package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +40 -0
  426. package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +26 -0
  427. package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +33 -0
  428. package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +26 -0
  429. package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +26 -0
  430. package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +25 -0
  431. package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +58 -0
  432. package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +34 -0
  433. package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +42 -0
  434. package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +38 -0
  435. package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +29 -0
  436. package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +42 -0
  437. package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +25 -0
  438. package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +29 -0
  439. package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +43 -0
  440. package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +29 -0
  441. package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +42 -0
  442. package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +33 -0
  443. package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +32 -0
  444. package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +31 -0
  445. package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +39 -0
  446. package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +29 -0
  447. package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +33 -0
  448. package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +37 -0
  449. package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +50 -0
  450. package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +43 -0
  451. package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +32 -0
  452. package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +18 -0
  453. package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +34 -0
  454. package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +26 -0
  455. package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +33 -0
  456. package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +27 -0
  457. package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +34 -0
  458. package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +38 -0
  459. package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +30 -0
  460. package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +26 -0
  461. package/knowledge/decisions/security/actor-flow-missing-approval-decisions-default-to-denied.md +22 -0
  462. package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +27 -0
  463. package/knowledge/decisions/security/actor-sign-in-only-works-for-actor-flagged-users.md +27 -0
  464. package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +43 -0
  465. package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +52 -0
  466. package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +46 -0
  467. package/knowledge/decisions/security/ai-agent-approval-forwarding-requires-a-symbol-brand.md +27 -0
  468. package/knowledge/decisions/security/ai-agent-credential-requests-are-symbol-branded.md +37 -0
  469. package/knowledge/decisions/security/ai-agent-gate-requires-a-session-only-when-auth-is-true.md +31 -0
  470. package/knowledge/decisions/security/ai-agent-ownership-failures-never-echo-the-resource.md +23 -0
  471. package/knowledge/decisions/security/ai-agent-resume-re-runs-the-authorization-gate.md +22 -0
  472. package/knowledge/decisions/security/ai-agent-sessionless-deployments-have-no-thread-ownership.md +39 -0
  473. package/knowledge/decisions/security/ai-agent-thread-ownership-composes-the-session-principal.md +30 -0
  474. package/knowledge/decisions/security/ai-agent-tool-filtering-reads-the-live-function-config.md +24 -0
  475. package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +30 -0
  476. package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +49 -0
  477. package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +76 -0
  478. package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +39 -0
  479. package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +37 -0
  480. package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +31 -0
  481. package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +30 -0
  482. package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +40 -0
  483. package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +33 -0
  484. package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +46 -0
  485. package/knowledge/decisions/security/index.md +55 -0
  486. package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +27 -0
  487. package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +40 -0
  488. package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +31 -0
  489. package/knowledge/decisions/security/pikku-carries-actor-scopes-as-data-and-the-app-grants-them.md +26 -0
  490. package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +69 -0
  491. package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +39 -0
  492. package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +34 -0
  493. package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +49 -0
  494. package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +30 -0
  495. package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +28 -0
  496. package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +34 -0
  497. package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +37 -0
  498. package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +25 -0
  499. package/knowledge/decisions/security/workflow-actor-steps-always-use-the-real-transport.md +34 -0
  500. package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +40 -0
  501. package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +32 -0
  502. package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-actor-and-per-scenario.md +32 -0
  503. package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +31 -0
  504. package/knowledge/index.md +24 -0
  505. package/knowledge/questions/index.md +15 -0
  506. package/package.json +4 -2
  507. package/run-tests.sh +0 -0
  508. package/src/crypto-utils.test.ts +460 -19
  509. package/src/crypto-utils.ts +283 -55
  510. package/src/data-classification.ts +1 -7
  511. package/src/dev/hot-reload.test.ts +0 -4
  512. package/src/dev/hot-reload.ts +11 -30
  513. package/src/dev/module-runner.ts +7 -32
  514. package/src/dev/reload-meta.ts +9 -29
  515. package/src/errors/error-handler.ts +20 -35
  516. package/src/errors/error.test.ts +30 -1
  517. package/src/errors/errors.ts +73 -157
  518. package/src/function/abort-scope.test.ts +97 -0
  519. package/src/function/abort-scope.ts +80 -0
  520. package/src/function/function-runner.test.ts +75 -7
  521. package/src/function/function-runner.ts +73 -30
  522. package/src/function/functions.types.ts +56 -136
  523. package/src/function/list.types.test.ts +3 -25
  524. package/src/function/list.types.ts +12 -62
  525. package/src/gopass-secrets-removed.test.ts +51 -0
  526. package/src/handle-error.test.ts +108 -1
  527. package/src/handle-error.ts +8 -18
  528. package/src/index.ts +60 -1
  529. package/src/middleware/auth-apikey.test.ts +0 -1
  530. package/src/middleware/auth-apikey.ts +0 -17
  531. package/src/middleware/auth-bearer.test.ts +0 -3
  532. package/src/middleware/auth-bearer.ts +3 -40
  533. package/src/middleware/auth-cookie.test.ts +0 -6
  534. package/src/middleware/auth-cookie.ts +2 -26
  535. package/src/middleware/cors.test.ts +34 -0
  536. package/src/middleware/cors.ts +12 -33
  537. package/src/middleware/remote-auth.test.ts +24 -9
  538. package/src/middleware/remote-auth.ts +10 -2
  539. package/src/middleware/telemetry.ts +2 -31
  540. package/src/middleware-runner.test.ts +0 -2
  541. package/src/middleware-runner.ts +5 -74
  542. package/src/permissions.test.ts +30 -0
  543. package/src/permissions.ts +24 -74
  544. package/src/pikku-request.ts +0 -6
  545. package/src/pikku-state.ts +2 -30
  546. package/src/production-barrels-stay-lean.test.ts +110 -0
  547. package/src/remote.test.ts +172 -0
  548. package/src/remote.ts +17 -7
  549. package/src/schema.test.ts +103 -0
  550. package/src/schema.ts +35 -18
  551. package/src/scopes.ts +7 -48
  552. package/src/services/ai-agent-runner-service.ts +20 -0
  553. package/src/services/ai-embedding-service.ts +3 -25
  554. package/src/services/audit-service.ts +1 -2
  555. package/src/services/content-service.ts +1 -46
  556. package/src/services/credential-service.ts +3 -40
  557. package/src/services/credential-wire-service.test.ts +0 -2
  558. package/src/services/deployment-service.ts +3 -9
  559. package/src/services/gateway-service.ts +0 -15
  560. package/src/services/{http-scenario-actors-converse.test.ts → http-personas-converse.test.ts} +38 -9
  561. package/src/services/{http-scenario-actors.test.ts → http-personas.test.ts} +39 -22
  562. package/src/services/{http-scenario-actors.ts → http-personas.ts} +85 -45
  563. package/src/services/in-memory-queue-service.ts +1 -15
  564. package/src/services/in-memory-trigger-service.ts +1 -18
  565. package/src/services/in-memory-workflow-service.test.ts +0 -13
  566. package/src/services/in-memory-workflow-service.ts +4 -38
  567. package/src/services/index.ts +20 -15
  568. package/src/services/istanbul-coverage-service.ts +2 -8
  569. package/src/services/jwt-service.ts +1 -16
  570. package/src/services/local-content.test.ts +159 -27
  571. package/src/services/local-content.ts +55 -23
  572. package/src/services/local-gateway-service.ts +2 -17
  573. package/src/services/local-secrets.ts +0 -4
  574. package/src/services/logger-console.test.ts +0 -1
  575. package/src/services/logger-console.ts +3 -7
  576. package/src/services/logger.ts +2 -37
  577. package/src/services/meta-service.test.ts +1 -5
  578. package/src/services/meta-service.ts +41 -61
  579. package/src/services/{scenario-actors-service.ts → personas-service.ts} +48 -43
  580. package/src/services/pikku-user-id.ts +0 -4
  581. package/src/services/queue-webhook-service.ts +9 -41
  582. package/src/services/scheduler-service.ts +1 -50
  583. package/src/services/schema-service.ts +1 -24
  584. package/src/services/scope-service.ts +50 -34
  585. package/src/services/scoped-secret-service.ts +0 -4
  586. package/src/services/secret-host-binding.test.ts +138 -0
  587. package/src/services/secret-host-binding.ts +51 -0
  588. package/src/services/secret-service.ts +5 -33
  589. package/src/services/secretless.test.ts +54 -0
  590. package/src/services/secretless.ts +29 -0
  591. package/src/services/stub-tracker.ts +8 -18
  592. package/src/services/system-role-guard.test.ts +93 -0
  593. package/src/services/system-role-guard.ts +71 -0
  594. package/src/services/trigger-service.ts +0 -12
  595. package/src/services/typed-secret-service.ts +1 -7
  596. package/src/services/v8-coverage-service.ts +3 -6
  597. package/src/services/variables-service.ts +1 -8
  598. package/src/services/webhook-service.ts +19 -63
  599. package/src/services/workflow-service.ts +3 -20
  600. package/src/testing/service-tests.ts +0 -26
  601. package/src/time-utils.ts +1 -19
  602. package/src/types/core.types.ts +116 -229
  603. package/src/types/state.types.ts +7 -9
  604. package/src/utils/hmac.ts +4 -10
  605. package/src/utils/safe-fetch.ts +13 -54
  606. package/src/utils.test.ts +11 -2
  607. package/src/utils.ts +6 -15
  608. package/src/wirings/actor-flow/actor-flow.types.ts +1 -34
  609. package/src/wirings/actor-flow/index.ts +0 -9
  610. package/src/wirings/actor-flow/run-conversation.test.ts +11 -6
  611. package/src/wirings/actor-flow/run-conversation.ts +19 -12
  612. package/src/wirings/ai-agent/ai-agent-agui.test.ts +75 -10
  613. package/src/wirings/ai-agent/ai-agent-agui.ts +36 -17
  614. package/src/wirings/ai-agent/ai-agent-helpers.ts +20 -0
  615. package/src/wirings/ai-agent/ai-agent-interrupt.test.ts +842 -0
  616. package/src/wirings/ai-agent/ai-agent-interrupt.ts +399 -0
  617. package/src/wirings/ai-agent/ai-agent-memory.ts +0 -2
  618. package/src/wirings/ai-agent/ai-agent-model-config.ts +1 -9
  619. package/src/wirings/ai-agent/ai-agent-prepare.test.ts +202 -31
  620. package/src/wirings/ai-agent/ai-agent-prepare.ts +82 -138
  621. package/src/wirings/ai-agent/ai-agent-registry.test.ts +191 -6
  622. package/src/wirings/ai-agent/ai-agent-registry.ts +18 -1
  623. package/src/wirings/ai-agent/ai-agent-resume-authorization.test.ts +0 -2
  624. package/src/wirings/ai-agent/ai-agent-runner.test.ts +11 -9
  625. package/src/wirings/ai-agent/ai-agent-runner.ts +67 -33
  626. package/src/wirings/ai-agent/ai-agent-stream.test.ts +205 -103
  627. package/src/wirings/ai-agent/ai-agent-stream.ts +192 -75
  628. package/src/wirings/ai-agent/ai-agent-thread-ownership.test.ts +301 -0
  629. package/src/wirings/ai-agent/ai-agent.types.ts +85 -4
  630. package/src/wirings/ai-agent/index.ts +35 -3
  631. package/src/wirings/ai-agent/voice-input.test.ts +72 -7
  632. package/src/wirings/ai-agent/voice-input.ts +48 -3
  633. package/src/wirings/ai-agent/voice-output.test.ts +422 -0
  634. package/src/wirings/ai-agent/voice-output.ts +216 -56
  635. package/src/wirings/channel/channel-common.ts +15 -20
  636. package/src/wirings/channel/channel-handler.test.ts +50 -0
  637. package/src/wirings/channel/channel-handler.ts +32 -11
  638. package/src/wirings/channel/channel-host-rpc.test.ts +150 -0
  639. package/src/wirings/channel/channel-host-rpc.ts +69 -0
  640. package/src/wirings/channel/channel-middleware-runner.test.ts +0 -1
  641. package/src/wirings/channel/channel-middleware-runner.ts +0 -12
  642. package/src/wirings/channel/channel-rpc-registry.ts +116 -0
  643. package/src/wirings/channel/channel-rpc-responder.ts +117 -0
  644. package/src/wirings/channel/channel-rpc-service.ts +146 -0
  645. package/src/wirings/channel/channel-rpc-validators.ts +65 -0
  646. package/src/wirings/channel/channel-rpc.test.ts +820 -0
  647. package/src/wirings/channel/channel-rpc.ts +5 -0
  648. package/src/wirings/channel/channel-rpc.types.ts +150 -0
  649. package/src/wirings/channel/channel-runner.ts +0 -14
  650. package/src/wirings/channel/channel-store.ts +0 -10
  651. package/src/wirings/channel/channel.types.ts +19 -8
  652. package/src/wirings/channel/define-channel-routes.ts +0 -20
  653. package/src/wirings/channel/eventhub-service.ts +0 -18
  654. package/src/wirings/channel/index.ts +35 -0
  655. package/src/wirings/channel/local/local-channel-handler.ts +3 -1
  656. package/src/wirings/channel/local/local-channel-runner.test.ts +0 -10
  657. package/src/wirings/channel/local/local-channel-runner.ts +3 -1
  658. package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -13
  659. package/src/wirings/channel/local/local-eventhub-service.ts +2 -37
  660. package/src/wirings/channel/log-channels.ts +0 -4
  661. package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +83 -2
  662. package/src/wirings/channel/pikku-abstract-channel-handler.ts +7 -0
  663. package/src/wirings/channel/serverless/serverless-channel-runner.ts +2 -5
  664. package/src/wirings/cli/channel/cli-approval.test.ts +177 -0
  665. package/src/wirings/cli/channel/cli-approval.ts +135 -0
  666. package/src/wirings/cli/channel/cli-channel-runner.ts +4 -26
  667. package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +169 -0
  668. package/src/wirings/cli/channel/cli-raw-channel-runner.ts +59 -16
  669. package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +480 -0
  670. package/src/wirings/cli/channel/cli-raw-client-runner.ts +155 -0
  671. package/src/wirings/cli/channel/index.ts +9 -0
  672. package/src/wirings/cli/cli-runner.test.ts +0 -1
  673. package/src/wirings/cli/cli-runner.ts +46 -88
  674. package/src/wirings/cli/cli.types.ts +14 -3
  675. package/src/wirings/cli/command-parser.test.ts +0 -4
  676. package/src/wirings/cli/command-parser.ts +11 -91
  677. package/src/wirings/cli/define-cli-commands.ts +1 -17
  678. package/src/wirings/credential/credential.types.ts +0 -12
  679. package/src/wirings/credential/{wire-credential.ts → define-credential.ts} +7 -7
  680. package/src/wirings/credential/index.ts +1 -1
  681. package/src/wirings/credential/validate-credential-definitions.ts +2 -4
  682. package/src/wirings/gateway/gateway-runner.test.ts +1 -21
  683. package/src/wirings/gateway/gateway-runner.ts +8 -110
  684. package/src/wirings/gateway/gateway.types.ts +7 -80
  685. package/src/wirings/http/http-routes.test.ts +0 -3
  686. package/src/wirings/http/http-routes.ts +0 -86
  687. package/src/wirings/http/http-runner.test.ts +0 -1
  688. package/src/wirings/http/http-runner.ts +12 -168
  689. package/src/wirings/http/http.types.ts +17 -62
  690. package/src/wirings/http/index.ts +5 -1
  691. package/src/wirings/http/log-http-routes.ts +0 -4
  692. package/src/wirings/http/pikku-fetch-http-request.test.ts +88 -7
  693. package/src/wirings/http/pikku-fetch-http-request.ts +74 -50
  694. package/src/wirings/http/pikku-fetch-http-response.test.ts +1 -1
  695. package/src/wirings/http/pikku-fetch-http-response.ts +0 -3
  696. package/src/wirings/http/routers/path-to-regex.test.ts +4 -17
  697. package/src/wirings/http/routers/path-to-regex.ts +2 -13
  698. package/src/wirings/http/web-request.test.ts +33 -2
  699. package/src/wirings/http/web-request.ts +30 -17
  700. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -1
  701. package/src/wirings/mcp/mcp-runner.test.ts +40 -0
  702. package/src/wirings/mcp/mcp-runner.ts +9 -15
  703. package/src/wirings/mcp/mcp.types.ts +7 -42
  704. package/src/wirings/oauth2/oauth2.types.ts +0 -30
  705. package/src/wirings/persona/define-personas.ts +29 -0
  706. package/src/wirings/persona/index.ts +62 -0
  707. package/src/wirings/persona/persona-email.ts +87 -0
  708. package/src/wirings/persona/persona-environments.test.ts +183 -0
  709. package/src/wirings/persona/persona-environments.ts +138 -0
  710. package/src/wirings/persona/persona-mailbox.ts +156 -0
  711. package/src/wirings/persona/persona.test.ts +220 -0
  712. package/src/wirings/persona/persona.types.ts +131 -0
  713. package/src/wirings/persona/validate-personas.ts +133 -0
  714. package/src/wirings/queue/index.ts +13 -3
  715. package/src/wirings/queue/queue-identity.test.ts +453 -0
  716. package/src/wirings/queue/queue-identity.ts +173 -0
  717. package/src/wirings/queue/queue-runner.ts +12 -31
  718. package/src/wirings/queue/queue.types.ts +19 -89
  719. package/src/wirings/queue/register-queue-helper.ts +0 -14
  720. package/src/wirings/queue/signed-queue-service.ts +59 -0
  721. package/src/wirings/queue/validate-worker-config.ts +2 -28
  722. package/src/wirings/role/define-system-role.ts +33 -0
  723. package/src/wirings/role/index.ts +13 -0
  724. package/src/wirings/role/role.test.ts +104 -0
  725. package/src/wirings/role/role.types.ts +47 -0
  726. package/src/wirings/role/validate-role-definitions.ts +93 -0
  727. package/src/wirings/rpc/addon-auth-tags.test.ts +223 -0
  728. package/src/wirings/rpc/addon-runner.ts +0 -56
  729. package/src/wirings/rpc/addon-scopes.test.ts +225 -0
  730. package/src/wirings/rpc/remote-addon-auth.ts +1 -13
  731. package/src/wirings/rpc/rpc-runner.test.ts +186 -2
  732. package/src/wirings/rpc/rpc-runner.ts +145 -127
  733. package/src/wirings/rpc/rpc-types.ts +11 -6
  734. package/src/wirings/rpc/wire-addon.test.ts +43 -1
  735. package/src/wirings/rpc/wire-addon.ts +99 -0
  736. package/src/wirings/rpc/wire-remote-addon.ts +9 -29
  737. package/src/wirings/scheduler/log-schedulers.ts +0 -4
  738. package/src/wirings/scheduler/scheduler-runner.test.ts +1 -8
  739. package/src/wirings/scheduler/scheduler-runner.ts +0 -2
  740. package/src/wirings/scheduler/scheduler.types.ts +1 -14
  741. package/src/wirings/scope/{wire-scope.ts → define-scope.ts} +5 -6
  742. package/src/wirings/scope/index.ts +1 -1
  743. package/src/wirings/scope/scope.test.ts +1 -2
  744. package/src/wirings/scope/scope.types.ts +7 -9
  745. package/src/wirings/scope/validate-scope-definitions.ts +3 -21
  746. package/src/wirings/secret/index.ts +1 -1
  747. package/src/wirings/secret/secret.types.ts +19 -15
  748. package/src/wirings/secret/validate-secret-definitions.ts +2 -4
  749. package/src/wirings/trigger/trigger-runner.ts +1 -27
  750. package/src/wirings/trigger/trigger.types.ts +1 -82
  751. package/src/wirings/variable/index.ts +1 -1
  752. package/src/wirings/variable/validate-variable-definitions.ts +2 -4
  753. package/src/wirings/variable/variable.types.ts +1 -13
  754. package/src/wirings/virtual-user/index.ts +76 -0
  755. package/src/wirings/virtual-user/run-virtual-user.test.ts +765 -0
  756. package/src/wirings/virtual-user/run-virtual-user.ts +671 -0
  757. package/src/wirings/virtual-user/virtual-user-agents.test.ts +65 -0
  758. package/src/wirings/virtual-user/virtual-user-agents.ts +57 -0
  759. package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +215 -0
  760. package/src/wirings/virtual-user/virtual-user-catalogue.ts +184 -0
  761. package/src/wirings/virtual-user/virtual-user-derive.test.ts +398 -0
  762. package/src/wirings/virtual-user/virtual-user-derive.ts +173 -0
  763. package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +63 -0
  764. package/src/wirings/virtual-user/virtual-user-dispositions.ts +213 -0
  765. package/src/wirings/virtual-user/virtual-user-intents.test.ts +208 -0
  766. package/src/wirings/virtual-user/virtual-user-intents.ts +185 -0
  767. package/src/wirings/virtual-user/virtual-user-rng.test.ts +72 -0
  768. package/src/wirings/virtual-user/virtual-user-rng.ts +50 -0
  769. package/src/wirings/virtual-user/virtual-user-target.ts +47 -0
  770. package/src/wirings/virtual-user/virtual-user.types.ts +219 -0
  771. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +5 -4
  772. package/src/wirings/workflow/dsl/workflow-runner.ts +0 -4
  773. package/src/wirings/workflow/feature.ts +0 -19
  774. package/src/wirings/workflow/graph/graph-node.ts +0 -136
  775. package/src/wirings/workflow/graph/graph-runner.test.ts +20 -19
  776. package/src/wirings/workflow/graph/graph-runner.ts +6 -41
  777. package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -4
  778. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -58
  779. package/src/wirings/workflow/index.ts +10 -44
  780. package/src/wirings/workflow/pikku-scenario-service.ts +235 -52
  781. package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -39
  782. package/src/wirings/workflow/pikku-workflow-service.ts +77 -674
  783. package/src/wirings/workflow/run-timeline.test.ts +7 -19
  784. package/src/wirings/workflow/run-timeline.ts +0 -56
  785. package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -1
  786. package/src/wirings/workflow/scenario-cookie-jar.ts +0 -25
  787. package/src/wirings/workflow/scenario-expectations.test.ts +2 -7
  788. package/src/wirings/workflow/scenario-hooks.test.ts +2 -7
  789. package/src/wirings/workflow/scenario-poll.test.ts +0 -2
  790. package/src/wirings/workflow/scenario-poll.ts +0 -15
  791. package/src/wirings/workflow/scenario-prose.ts +0 -28
  792. package/src/wirings/workflow/scenario-service.test.ts +2 -9
  793. package/src/wirings/workflow/scenario-step-guards.ts +1 -14
  794. package/src/wirings/workflow/scenario-step.test.ts +159 -14
  795. package/src/wirings/workflow/scenario-step.types.ts +82 -6
  796. package/src/wirings/workflow/scenario-surface.test.ts +145 -0
  797. package/src/wirings/workflow/scenario-surface.ts +71 -0
  798. package/src/wirings/workflow/workflow-dispatch-durability.test.ts +14 -15
  799. package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -4
  800. package/src/wirings/workflow/workflow-inline-authority.test.ts +169 -0
  801. package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -2
  802. package/src/wirings/workflow/workflow-invocation-id.ts +2 -22
  803. package/src/wirings/workflow/workflow-mirror.test.ts +0 -7
  804. package/src/wirings/workflow/workflow-on-error.test.ts +0 -9
  805. package/src/wirings/workflow/workflow-queue-workers.ts +0 -21
  806. package/src/wirings/workflow/workflow-replay-snapshot.test.ts +8 -7
  807. package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -5
  808. package/src/wirings/workflow/workflow-run-context.test.ts +5 -10
  809. package/src/wirings/workflow/workflow-run-polling.test.ts +0 -5
  810. package/src/wirings/workflow/workflow-step-ordinal.test.ts +19 -4
  811. package/src/wirings/workflow/workflow-step-session.test.ts +0 -7
  812. package/src/wirings/workflow/workflow.types.ts +0 -203
  813. package/tsconfig.tsbuildinfo +1 -1
  814. package/src/middleware/timeout.ts +0 -22
  815. package/src/pikku-response.ts +0 -5
  816. package/src/services/gopass-secrets.ts +0 -78
  817. package/src/wirings/mcp/mcp-endpoint-registry.test.d.ts +0 -1
  818. package/src/wirings/workflow/dsl/index.ts +0 -36
  819. package/src/wirings/workflow/graph/index.ts +0 -15
@@ -1,50 +1,26 @@
1
1
  import type { PikkuWire, SerializedError } from '../../types/core.types.js';
2
2
  import type { ApprovalOutcome, CoreWorkflow, PikkuWorkflowWire, StepState, StepStatus, WorkflowPlannedStep, WorkflowRun, WorkflowRunMirror, WorkflowRunStatus, WorkflowRunWire, WorkflowStatus, WorkflowVersionStatus, WorkflowQueueOptions, WorkflowStepOptions } from './workflow.types.js';
3
3
  import type { WorkflowService } from '../../services/workflow-service.js';
4
- import type { ScenarioActors } from '../../services/scenario-actors-service.js';
4
+ import type { ScenarioPersonas } from '../../services/personas-service.js';
5
5
  import { PikkuError } from '../../errors/error-handler.js';
6
6
  import { type RunTimeline, type ReconstructedRunState } from './run-timeline.js';
7
7
  import type { GroupConcurrencyConfig, JobGroup, JobOptions } from '../queue/queue.types.js';
8
- /**
9
- * Default number of retries for a workflow step when none is specified. The
10
- * workflow — not the queue — owns retry policy; a step inherits this unless it
11
- * sets its own `retries` (including `retries: 0` to opt out entirely). Picked >0
12
- * so a transient failure (a DB blip, a downstream restart, a deploy) is ridden
13
- * out by default; safe because every step gets a stable `invocationId` to dedupe on.
14
- */
15
8
  export declare const DEFAULT_STEP_RETRIES = 5;
16
- /**
17
- * Exception thrown when workflow needs to pause for async step
18
- */
19
9
  export declare class WorkflowAsyncException extends Error {
20
10
  readonly runId: string;
21
11
  readonly stepName: string;
22
12
  constructor(runId: string, stepName: string);
23
13
  }
24
- /**
25
- * Exception thrown when workflow is cancelled
26
- */
27
14
  export declare class WorkflowCancelledException extends Error {
28
15
  readonly runId: string;
29
16
  readonly reason?: string | undefined;
30
17
  constructor(runId: string, reason?: string | undefined);
31
18
  }
32
- /**
33
- * Exception thrown when workflow is suspended
34
- */
35
19
  export declare class WorkflowSuspendedException extends Error {
36
20
  readonly runId: string;
37
21
  readonly reason: string;
38
22
  constructor(runId: string, reason: string);
39
23
  }
40
- /**
41
- * Thrown when a step (or the orchestrator) could not be enqueued — the queue
42
- * itself failed (e.g. pg-boss is momentarily down), NOT the step's own logic.
43
- * This is transient infrastructure failure: the run is left untouched (the step
44
- * stays `pending`, the run stays running) and the orchestrator job is rethrown
45
- * so the queue redelivers it and the workflow replays from its snapshot. Treat
46
- * it as non-terminal — never mark the run `failed` for it.
47
- */
48
24
  export declare class WorkflowDispatchException extends Error {
49
25
  readonly runId: string;
50
26
  readonly stepName: string;
@@ -52,9 +28,6 @@ export declare class WorkflowDispatchException extends Error {
52
28
  cause?: unknown;
53
29
  });
54
30
  }
55
- /**
56
- * Error class for workflow not found
57
- */
58
31
  export declare class WorkflowNotFoundError extends PikkuError {
59
32
  constructor(name: string);
60
33
  }
@@ -70,12 +43,6 @@ export declare class WorkflowRunFailedError extends PikkuError {
70
43
  export declare class WorkflowRunCancelledError extends PikkuError {
71
44
  constructor();
72
45
  }
73
- /**
74
- * A decision arrived for an approval gate that has already resolved. The gate
75
- * caches its outcome as the step result and never re-reads run state, so the
76
- * decision could not take effect — it is rejected rather than accepted and
77
- * dropped.
78
- */
79
46
  export declare class WorkflowApprovalResolvedError extends PikkuError {
80
47
  payload: {
81
48
  reason: string;
@@ -88,11 +55,6 @@ export declare class WorkflowServiceNotInitialized extends Error {
88
55
  export declare class WorkflowStepNameNotString extends Error {
89
56
  constructor(stepName: any);
90
57
  }
91
- /**
92
- * Everything an extension needs to run something of its own around a run's
93
- * function: the registration it was resolved from, the run itself (so `input`
94
- * is the same object the function is called with), and the wire it is given.
95
- */
96
58
  export interface RunLifecycleContext {
97
59
  runId: string;
98
60
  run: WorkflowRun;
@@ -101,65 +63,36 @@ export interface RunLifecycleContext {
101
63
  wire: PikkuWire;
102
64
  packageName: string | null;
103
65
  }
104
- /**
105
- * The slice of the run engine an extension is allowed to drive, handed to it at
106
- * construction. It exists so that recording a durable step stays available to
107
- * an extension without `inlineStep` and friends becoming public API on every
108
- * workflow service a production app instantiates.
109
- */
110
66
  export interface WorkflowRunEngine {
111
67
  inlineStep(runId: string, logicalStepName: string, fn: Function, stepOptions?: WorkflowStepOptions, data?: any, funcName?: string): Promise<any>;
112
68
  updateRunStatus(runId: string, status: WorkflowStatus, output?: any, error?: SerializedError): Promise<void>;
113
69
  onChildWorkflowFailed(run: WorkflowRun, error: unknown): Promise<void>;
114
70
  verifyStepName(stepName: unknown): void;
115
71
  }
116
- /**
117
- * A capability layered onto a run without being a workflow service itself.
118
- *
119
- * The engine names nothing about what an extension is for: a bundler drops an
120
- * unused *module* but never an unused class member, so the alternative — a
121
- * subclass carrying the capability — puts it in every server built on Pikku
122
- * whether or not the app ever uses it. Scenarios are the one implementation
123
- * today (`PikkuScenarioService` in `@pikku/core/scenario`).
124
- */
125
72
  export interface WorkflowRunExtension {
126
- /** Per-run state resolved once the run has an id. */
127
73
  attachRunContext(runId: string, workflowMeta: any, options?: Record<string, any>): Promise<void>;
128
- /** Release whatever `attachRunContext` stored. */
129
74
  detachRunContext(runId: string): void;
130
- /** Contribute extra members to the wire a run's function is invoked with. */
131
75
  decorateRunWire(wire: PikkuWire, context: {
132
76
  runId: string;
133
77
  workflowMeta: any;
134
78
  workflowWire: PikkuWorkflowWire;
135
79
  }): void;
136
- /** Contribute extra members to the workflow wire itself, in place. */
137
80
  decorateWorkflowWire(workflowWire: PikkuWorkflowWire, context: {
138
81
  name: string;
139
82
  runId: string;
140
83
  rpcService: any;
141
84
  addonNamespace?: string | null;
142
85
  }): void;
143
- /**
144
- * Called immediately before the run's function, inside the run lock. Throwing
145
- * skips the function and fails the run.
146
- */
147
86
  onBeforeRunFunc(context: RunLifecycleContext): Promise<void>;
148
- /**
149
- * Called once the run reaches a terminal state, in a `finally`, so it runs
150
- * whether the function passed or threw. `interrupted` means the run suspended
151
- * or went async and is still mid-flight. Throwing here propagates, replacing
152
- * a pending failure, so an extension that must not mask one handles that
153
- * itself.
154
- */
155
87
  onAfterRunFunc(context: RunLifecycleContext, outcome: 'completed' | 'failed' | 'interrupted', failure: unknown): Promise<void>;
156
88
  }
157
89
  export declare abstract class PikkuWorkflowService implements WorkflowService {
158
90
  private runExtension?;
159
91
  private runContexts;
160
92
  private contextFor;
161
- /** Drop a run's context once nothing is holding it open. */
162
93
  private releaseContext;
94
+ private enterExecution;
95
+ private exitExecution;
163
96
  protected get logger(): import("../../services/logger.js").Logger;
164
97
  protected mirror?: WorkflowRunMirror;
165
98
  protected readonly queueStrategy: 'per-workflow' | 'shared-groups';
@@ -169,36 +102,10 @@ export declare abstract class PikkuWorkflowService implements WorkflowService {
169
102
  wireQueues?: boolean;
170
103
  mirror?: WorkflowRunMirror;
171
104
  } & WorkflowQueueOptions);
172
- /**
173
- * Perform a state write, then shadow it to the mirror.
174
- *
175
- * The mirror is an observability sink, never a second source of truth, and
176
- * both halves of that follow from this one shape: it is only ever told about
177
- * a write that already landed, and a mirror that is down or throwing cannot
178
- * fail — or even be seen by — the workflow it is watching.
179
- *
180
- * @param write - the authoritative write; its result is what the caller gets
181
- * @param mirror - shadows the write, given the live mirror and what was written
182
- */
183
105
  private mirrored;
184
- /**
185
- * Wire the queue-based orchestrator/step/sleeper workers.
186
- * Subclasses that orchestrate without queues (e.g. Durable Objects) should
187
- * pass `wireQueues: false` to the base constructor and skip this entirely.
188
- * Call this explicitly after adding addons dynamically.
189
- */
190
106
  wireQueueWorkers(): void;
191
- /**
192
- * Check if a run is executing inline (without queues)
193
- */
194
- protected isInline(runId: string): boolean;
195
- /**
196
- * Register a run as inline (for graph-runner to use)
197
- */
107
+ protected isInline(runId: string): Promise<boolean>;
198
108
  registerInlineRun(runId: string): void;
199
- /**
200
- * Unregister a run from inline tracking
201
- */
202
109
  unregisterInlineRun(runId: string): void;
203
110
  registerWorkflowVersions(): Promise<void>;
204
111
  createRun(workflowName: string, input: any, inline: boolean, graphHash: string, wire: WorkflowRunWire, options?: {
@@ -209,189 +116,48 @@ export declare abstract class PikkuWorkflowService implements WorkflowService {
209
116
  deterministic?: boolean;
210
117
  plannedSteps?: WorkflowPlannedStep[];
211
118
  }): Promise<string>;
212
- /**
213
- * Get a workflow run by ID
214
- * @param id - Run ID
215
- * @returns Workflow run or null if not found
216
- */
217
119
  abstract getRun(id: string): Promise<WorkflowRun | null>;
218
- /**
219
- * Get minimal workflow run status with step summaries.
220
- * Used by the public API — the console addon provides the full verbose view.
221
- */
222
120
  getRunStatus(id: string): Promise<WorkflowRunStatus | null>;
223
- /**
224
- * Build the run's time-travel event stream from durable history.
225
- * @param id - Run ID
226
- * @returns Ordered timeline, or null if the run doesn't exist
227
- */
228
121
  getRunTimeline(id: string): Promise<RunTimeline | null>;
229
- /**
230
- * Reconstruct the run's state at a point in its timeline.
231
- * @param id - Run ID
232
- * @param at - A seq index (inclusive) or a Date (inclusive); omit for the
233
- * final state.
234
- * @returns Reconstructed state, or null if the run doesn't exist
235
- */
236
122
  reconstructRunStateAt(id: string, at?: number | Date): Promise<ReconstructedRunState | null>;
237
- /**
238
- * Get workflow run history (all step attempts in chronological order)
239
- * @param runId - Run ID
240
- * @returns Array of step states with step names, ordered oldest to newest
241
- */
242
123
  abstract getRunHistory(runId: string): Promise<Array<StepState & {
243
124
  stepName: string;
244
125
  }>>;
245
- /**
246
- * Update workflow run status
247
- * @param id - Run ID
248
- * @param status - New status
249
- */
250
126
  updateRunStatus(id: string, status: WorkflowStatus, output?: any, error?: SerializedError): Promise<void>;
251
127
  protected abstract updateRunStatusImpl(id: string, status: WorkflowStatus, output?: any, error?: SerializedError): Promise<void>;
252
- /**
253
- * Insert initial step state (called by orchestrator)
254
- * Creates pending step in both workflow_step and workflow_step_history
255
- * @param runId - Run ID
256
- * @param stepName - Step cache key
257
- * @param rpcName - The name this step was dispatched by: an RPC for a
258
- * `workflow.do` step, a step function for a scenario step, null for a
259
- * closure. Nothing dispatches off this value — it is recorded so a reader
260
- * can join a step back to the function that ran it.
261
- * @param data - Step input data
262
- * @param stepOptions - Step options (retries, retryDelay)
263
- * @returns Step state with generated stepId
264
- */
265
128
  insertStepState(runId: string, stepName: string, rpcName: string | null, data: any, stepOptions?: WorkflowStepOptions, fromStepName?: string): Promise<StepState>;
266
129
  protected abstract insertStepStateImpl(runId: string, stepName: string, rpcName: string | null, data: any, stepOptions?: WorkflowStepOptions, fromStepName?: string): Promise<StepState>;
267
- /**
268
- * Get step state by cache key (read-only)
269
- * @param runId - Run ID
270
- * @param stepName - Step cache key (from workflow.do)
271
- * @returns Step state with attemptCount calculated from history
272
- */
273
130
  abstract getStepState(runId: string, stepName: string): Promise<StepState>;
274
- /**
275
- * Mark step as running
276
- * Updates both workflow_step and workflow_step_history
277
- * @param stepId - Step ID
278
- */
279
131
  setStepRunning(stepId: string): Promise<void>;
280
132
  protected abstract setStepRunningImpl(stepId: string): Promise<void>;
281
- /**
282
- * Mark step as scheduled (queued for execution)
283
- * Updates both workflow_step and workflow_step_history
284
- * @param stepId - Step ID
285
- */
286
133
  setStepScheduled(stepId: string): Promise<void>;
287
134
  protected abstract setStepScheduledImpl(stepId: string): Promise<void>;
288
- /**
289
- * Store step result and mark as succeeded
290
- * Updates both workflow_step and workflow_step_history
291
- * @param stepId - Step ID
292
- * @param result - Step result
293
- */
294
135
  setStepResult(stepId: string, result: any): Promise<void>;
295
136
  protected abstract setStepResultImpl(stepId: string, result: any): Promise<void>;
296
- /**
297
- * Set the child workflow run ID on a step
298
- * @param stepId - Step ID
299
- * @param childRunId - Child workflow run ID
300
- */
301
137
  setStepChildRunId(stepId: string, childRunId: string): Promise<void>;
302
138
  protected abstract setStepChildRunIdImpl(stepId: string, childRunId: string): Promise<void>;
303
- /**
304
- * Store step error and mark as failed
305
- * Updates both workflow_step and workflow_step_history
306
- * @param stepId - Step ID
307
- * @param error - Error object
308
- */
309
139
  setStepError(stepId: string, error: Error): Promise<void>;
310
140
  protected abstract setStepErrorImpl(stepId: string, error: Error): Promise<void>;
311
- /**
312
- * Create a new retry attempt for a failed step
313
- * Inserts new pending step in both workflow_step and workflow_step_history
314
- * Resets status to 'pending' with new stepId
315
- * Copies metadata (rpcName, data, retries, retryDelay) from failed attempt
316
- * @param failedStepId - Failed step ID to copy from
317
- * @returns New step state for the retry attempt
318
- */
319
141
  createRetryAttempt(failedStepId: string, status: 'pending' | 'running'): Promise<StepState>;
320
142
  protected abstract createRetryAttemptImpl(failedStepId: string, status: 'pending' | 'running'): Promise<StepState>;
321
- /**
322
- * Execute function within a run lock to prevent concurrent modifications
323
- * @param id - Run ID
324
- * @param fn - Function to execute
325
- * @returns Function result
326
- */
327
143
  abstract withRunLock<T>(id: string, fn: () => Promise<T>): Promise<T>;
328
- /**
329
- * Execute function within a step lock to prevent concurrent step execution
330
- * @param runId - Run ID
331
- * @param stepName - Step name
332
- * @param fn - Function to execute
333
- * @returns Function result
334
- */
335
144
  abstract withStepLock<T>(runId: string, stepName: string, fn: () => Promise<T>): Promise<T>;
336
- /**
337
- * Close any open connections
338
- */
339
145
  abstract close(): Promise<void>;
340
- /**
341
- * Get completed graph state (lightweight - no results)
342
- * @param runId - Run ID
343
- * @returns Completed node IDs and their branch keys
344
- */
345
146
  abstract getCompletedGraphState(runId: string): Promise<{
346
147
  completedNodeIds: string[];
347
148
  failedNodeIds: string[];
348
149
  branchKeys: Record<string, string>;
349
150
  }>;
350
- /**
351
- * Filter candidate nodes to only those without existing steps
352
- * @param runId - Run ID
353
- * @param nodeIds - Candidate node IDs to check
354
- * @returns Node IDs that don't have a step yet
355
- */
356
- abstract getNodesWithoutSteps(runId: string, nodeIds: string[]): Promise<string[]>;
357
- /**
358
- * List every step instance of a run (any status) with its predecessor.
359
- * Drives bounded graph revisits: the runner counts instances per logical node
360
- * and treats each `fromStepName → node` as a once-fired transition.
361
- * @param runId - Run ID
362
- */
363
151
  abstract getStepInstances(runId: string): Promise<Array<{
364
152
  stepName: string;
365
153
  status: StepStatus;
366
154
  fromStepName?: string;
367
155
  }>>;
368
- /**
369
- * Get results for specific nodes
370
- * @param runId - Run ID
371
- * @param nodeIds - Node IDs to fetch results for
372
- * @returns Map of nodeId to result
373
- */
374
156
  abstract getNodeResults(runId: string, nodeIds: string[]): Promise<Record<string, any>>;
375
- /**
376
- * Set the branch key for a graph node step
377
- * @param stepId - Step ID
378
- * @param branchKey - Branch key selected by graph.branch()
379
- */
380
157
  setBranchTaken(stepId: string, branchKey: string): Promise<void>;
381
158
  protected abstract setBranchTakenImpl(stepId: string, branchKey: string): Promise<void>;
382
- /**
383
- * Update a state variable in the workflow run's state
384
- * @param runId - Run ID
385
- * @param name - Variable name
386
- * @param value - Value to store
387
- */
388
159
  updateRunState(runId: string, name: string, value: unknown): Promise<void>;
389
160
  protected abstract updateRunStateImpl(runId: string, name: string, value: unknown): Promise<void>;
390
- /**
391
- * Get the entire state object for a workflow run
392
- * @param runId - Run ID
393
- * @returns The state object with all variables
394
- */
395
161
  abstract getRunState(runId: string): Promise<Record<string, unknown>>;
396
162
  upsertWorkflowVersion(name: string, graphHash: string, graph: any, source: string, status?: WorkflowVersionStatus): Promise<void>;
397
163
  protected abstract upsertWorkflowVersionImpl(name: string, graphHash: string, graph: any, source: string, status?: WorkflowVersionStatus): Promise<void>;
@@ -401,81 +167,19 @@ export declare abstract class PikkuWorkflowService implements WorkflowService {
401
167
  graph: any;
402
168
  source: string;
403
169
  } | null>;
404
- /**
405
- * Resume a paused workflow by triggering the orchestrator
406
- * @param runId - Run ID
407
- */
408
170
  resumeWorkflow(runId: string, workflowName?: string): Promise<void>;
409
- /**
410
- * Resolve a step's retry policy into queue job options. The workflow is the
411
- * sole source of truth for retries: an explicitly-set `retries` (including 0)
412
- * is always honored, an unset one defaults to {@link DEFAULT_STEP_RETRIES},
413
- * and we ALWAYS pass `attempts` so the queue can never fall back to its own
414
- * default — which would re-run a step the workflow said not to retry. Backoff
415
- * defaults to exponential whenever there's at least one retry, so retries ride
416
- * out a transient outage instead of firing instantly.
417
- */
418
171
  protected resolveStepJobOptions(stepOptions?: WorkflowStepOptions): JobOptions;
419
172
  queueStepWorker(runId: string, stepName: string, rpcName: string, data: any, stepOptions?: WorkflowStepOptions, fromStepName?: string): Promise<void>;
420
- /**
421
- * Execute a workflow sleep step completion
422
- * Sets the step result to null and resumes the workflow
423
- * @param data - Sleeper input data
424
- */
425
173
  executeWorkflowSleepCompleted(runId: string, stepId: string): Promise<void>;
426
- /**
427
- * Schedule orchestrator retry with delay
428
- * @param runId - Run ID
429
- * @param retryDelay - Delay in milliseconds or duration string (optional)
430
- */
431
174
  protected scheduleOrchestratorRetry(runId: string, retryDelay?: number | string, workflowName?: string): Promise<void>;
432
- /**
433
- * Dispatch a workflow step to be executed asynchronously.
434
- *
435
- * Default implementation enqueues a step worker job via the queue service.
436
- * Subclasses with non-queue transports (e.g. Durable Objects) override this
437
- * to dispatch via their own mechanism (RPC to a step worker, etc.).
438
- *
439
- * On return, the workflow is paused via `WorkflowAsyncException` thrown by
440
- * the caller; the step transport is responsible for calling back into the
441
- * orchestrator (via `resumeWorkflow` or equivalent) when the step completes.
442
- *
443
- * @returns true if dispatch was async (caller should pause), false to fall
444
- * through to the inline execution path.
445
- */
446
175
  protected dispatchStep(runId: string, stepName: string, rpcName: string, data: unknown, stepOptions?: WorkflowStepOptions, fromStepName?: string): Promise<boolean>;
447
- /**
448
- * Schedule a workflow sleep wakeup at the given duration.
449
- *
450
- * Default implementation uses the scheduler service to enqueue a delayed
451
- * sleeper RPC. Subclasses with native timer primitives (e.g. Durable Object
452
- * alarms) override this to schedule directly without going through queues.
453
- *
454
- * @returns true if the wakeup was scheduled remotely (caller should pause),
455
- * false to fall through to inline `setTimeout` behavior.
456
- */
457
176
  protected scheduleSleep(runId: string, stepId: string, duration: number | string): Promise<boolean>;
458
- /**
459
- * Install the one extension a run may have, built from a handle onto the run
460
- * engine so that `inlineStep` and friends stay protected rather than becoming
461
- * public API. Returns the extension, so the caller keeps a typed reference to
462
- * whatever it just built.
463
- */
464
177
  setRunExtension<T extends WorkflowRunExtension>(create: (engine: WorkflowRunEngine) => T): T;
465
178
  getRunExtension(): WorkflowRunExtension | undefined;
466
- /**
467
- * Start a new workflow run
468
- * Automatically detects workflow type (DSL or graph) from meta and executes accordingly
469
- * @param options.inline - If true, execute workflow directly without queue service
470
- * @param options.startNode - Starting node ID for graph workflows (from wire config)
471
- * @param options.onRunCreated - Called with the run id the moment the run exists.
472
- * An inline run that fails throws instead of returning, so this is the only
473
- * way a caller can still read that run back — its steps, and which one failed.
474
- */
475
179
  startWorkflow<I>(name: string, input: I, wire: WorkflowRunWire, rpcService: any, options?: {
476
180
  inline?: boolean;
477
181
  startNode?: string;
478
- actors?: ScenarioActors;
182
+ actors?: ScenarioPersonas;
479
183
  onRunCreated?: (runId: string) => void;
480
184
  }): Promise<{
481
185
  runId: string;
@@ -484,199 +188,43 @@ export declare abstract class PikkuWorkflowService implements WorkflowService {
484
188
  pollIntervalMs?: number;
485
189
  wire?: WorkflowRunWire;
486
190
  }): Promise<any>;
487
- /**
488
- * Read a run until it reaches an end state, backing off as it drags on.
489
- *
490
- * A fixed interval is wrong at both ends: it makes a workflow that finished
491
- * in milliseconds wait out the whole interval anyway, and it keeps reading a
492
- * long-running one at full rate for as long as it lasts. Starting short and
493
- * growing to `maxIntervalMs` returns quick runs promptly while a slow run's
494
- * read cost grows logarithmically rather than linearly with its duration.
495
- */
496
191
  protected awaitRunEnd(runId: string, maxIntervalMs: number): Promise<WorkflowRun>;
497
- /**
498
- * Wait between two reads of a run.
499
- *
500
- * Its own method so the backoff schedule can be asserted on directly. Timing
501
- * a poll loop by the clock measures the host's scheduler as much as the
502
- * policy — `setTimeout(40)` routinely returns late on a loaded runner — which
503
- * makes the obvious test both slow and flaky.
504
- */
505
192
  protected waitBeforeNextRead(ms: number): Promise<void>;
506
- /**
507
- * Every step of a run in one read, or `null` if this backend has no bulk read.
508
- *
509
- * A replay walks the DSL body from the top, and each step it passes asks for
510
- * its own row — so a run of N steps costs N reads per replay and O(N^2) over
511
- * its lifetime. Backends that can answer this in a single query collapse that
512
- * to one read per replay.
513
- */
514
193
  protected listStepStates(_runId: string): Promise<Array<StepState & {
515
194
  stepName: string;
516
195
  }> | null>;
517
- /**
518
- * Begin a replay pass: fresh ordinal counters, and one read of the steps the
519
- * run has already taken so the walk back to where it left off is served from
520
- * memory. Safe because a pass reaches each step key at most once, and the
521
- * steps it replays past are `succeeded` and therefore immutable.
522
- */
523
196
  private beginReplay;
524
197
  private endReplay;
525
- /**
526
- * The step row for `stepName`, creating it if the run has not reached it
527
- * before. Served from the replay snapshot when one is loaded.
528
- */
529
198
  private loadOrCreateStep;
530
- /**
531
- * The run's immutable half — which workflow it is, the wire it was started
532
- * on, its input. `getRun` is otherwise called several times per step for
533
- * answers that were all fixed at creation, so a replay reads it once and
534
- * hands the same object to everyone who only needs that half.
535
- *
536
- * Anyone who needs `status`, `output`, `error` or `state` must call `getRun`:
537
- * those move while the run executes, and a cached copy would be a lie.
538
- */
539
199
  private getRunIdentity;
540
- /** The step the DSL walk last reached (the predecessor for the next step). */
541
200
  private lastStepName;
542
- /**
543
- * Physical, replay-stable key for the Nth reach of `logicalStepName` in a run:
544
- * bare name for the first reach (ordinal 0, unchanged behavior), `name#N` for
545
- * repeats — so the same literal step name can be invoked multiple times without
546
- * the rows clobbering. Deterministic given a deterministic DSL body.
547
- */
548
201
  private nextStepKey;
549
202
  runWorkflowJob(runId: string, rpcService: any): Promise<void>;
550
203
  private runWorkflowJobInner;
551
204
  private onChildWorkflowCompleted;
552
205
  protected onChildWorkflowFailed(childRun: WorkflowRun, error: Error): Promise<void>;
553
206
  private runVersionMismatchFallback;
554
- /**
555
- * Execute a single workflow step (called by worker)
556
- * Handles idempotency, RPC execution, result storage, retry logic, and orchestrator triggering
557
- */
558
207
  executeWorkflowStep(runId: string, stepName: string, rpcName: string, data: any, rpcService: any): Promise<void>;
559
- /**
560
- * Orchestrate workflow execution (called by orchestrator)
561
- * Runs workflow job and handles async exceptions
562
- */
208
+ private executeWorkflowStepInner;
563
209
  orchestrateWorkflow(runId: string, rpcService: any): Promise<void>;
564
210
  private verifyQueueService;
565
- /**
566
- * Invoke a step's RPC with the workflow-step wire (step identity + provenance).
567
- * Identical for the queue executor and the inline executor — the only thing
568
- * that differs between transports is who calls it, not the call itself.
569
- */
570
211
  private invokeStepRpc;
571
- /**
572
- * Inline (straight-through) step execution with an in-process retry loop —
573
- * shared by inline RPC steps and inline function steps. Same scaffolding
574
- * (running → result, or fail → retry-attempt → backoff → retry) wrapped
575
- * around a step-specific `doWork` body. Stays O(K): no suspend/replay.
576
- *
577
- * `onError` is an optional hook for terminal errors that must NOT retry
578
- * (e.g. RPC-not-found → suspend the run for redeploy). If it throws, the
579
- * loop exits immediately without recording a step error or retrying.
580
- */
581
212
  private runInlineRetryLoop;
582
- /**
583
- * Run a failed step's compensation handler as a durable step of its own.
584
- *
585
- * Durable rather than a bare invoke so a replay does not compensate twice —
586
- * a handler is typically a refund or a rollback. `onError` is deliberately
587
- * not forwarded: a compensation handler cannot itself compensate.
588
- */
589
213
  private runStepCompensation;
590
214
  private rpcStep;
591
- protected inlineStep(runId: string, logicalStepName: string, fn: Function, stepOptions?: WorkflowStepOptions,
592
- /**
593
- * The input this step was called with, recorded on the run so a reporter can
594
- * name the values under test. A closure step has none; a scenario step does.
595
- */
596
- data?: any,
597
- /**
598
- * The name this step was dispatched by, for the kinds of inline step that
599
- * have one. A closure step has no name; a scenario step is a step RPC, so
600
- * it records the step function that ran — which is the only way to join a
601
- * step back to its declaration when its durable name was built at runtime
602
- * (a step called in a loop reaches the run as `sees @pikku/addon-todos`,
603
- * declared as `sees ${packageName}`).
604
- */
605
- rpcName?: string | null): Promise<any>;
215
+ protected inlineStep(runId: string, logicalStepName: string, fn: Function, stepOptions?: WorkflowStepOptions, data?: any, rpcName?: string | null): Promise<any>;
606
216
  private sleepStep;
607
- /**
608
- * Derive the durable step name for a suspend point from its `reason`, so each
609
- * distinct reason is its own step row — letting one workflow have multiple
610
- * independent suspends (e.g. wait-for-build, then wait-for-approval), and
611
- * supporting dynamic reasons in loops (`suspend(`Wait for ${i}`)`) exactly
612
- * like dynamic `do()` step names. The reason is used raw (it's just a text
613
- * step name), only namespaced so it can't collide with a `do`/`sleep` step of
614
- * the same name. Like `do()` / `sleep()`, the reason is the step's stable
615
- * identity: it MUST be derived deterministically so it's the same every time
616
- * the workflow replays through that point.
617
- */
618
217
  private getSuspendStepName;
619
218
  private suspendStep;
620
- /**
621
- * Wake a run later by enqueuing a delayed orchestrator pass. Deliberately NOT
622
- * {@link scheduleSleep}: that resolves the step it is given, which for an
623
- * approval would resolve the gate itself. This only nudges the run to replay
624
- * and re-evaluate — the gate stays the sole judge of its own outcome.
625
- *
626
- * Best-effort by design. Expiry is decided from the recorded deadline on
627
- * replay, so losing this wake costs liveness (the run sits until something
628
- * else resumes it), never correctness.
629
- */
630
219
  private scheduleRunWake;
631
- /**
632
- * Durable step name for an approval gate. Namespaced separately from suspend
633
- * so the two can't collide, and derived from `reason` for the same reason
634
- * {@link getSuspendStepName} is: it must be stable across replays.
635
- */
636
220
  private getApprovalStepName;
637
- /**
638
- * Run-state key holding an approval gate's record. Hex-encoded because the
639
- * Mongo backend restricts state keys to `/^[a-zA-Z0-9_]+$/` and a `reason` is
640
- * arbitrary human text. One key per gate, so two gates resolving concurrently
641
- * can't clobber each other through a read-modify-write.
642
- */
643
221
  private approvalStateKey;
644
- /**
645
- * Record a decision against an approval gate and wake the run. Called from
646
- * outside the workflow (an HTTP route, an RPC), so the schema value is NOT in
647
- * scope here — the payload is stored raw and validated on replay inside the
648
- * workflow body, which is the only place the schema exists. An invalid payload
649
- * therefore leaves the gate closed rather than failing the run.
650
- *
651
- * `reason` addresses the first reach of that gate. An approval reached more
652
- * than once under the same reason (e.g. in a loop) gets `#N`-suffixed step
653
- * rows that this cannot currently target.
654
- */
655
222
  approveStep(runId: string, reason: string, decision: unknown): Promise<void>;
656
223
  private approvalStep;
657
224
  createWorkflowWire(name: string, runId: string, rpcService: any, addonNamespace?: string | null): PikkuWorkflowWire;
658
225
  protected verifyStepName(stepName: string): void;
659
226
  private getConfig;
660
- /**
661
- * Get the orchestrator queue name for a specific workflow.
662
- * Checks queue meta for a per-workflow queue first (e.g. wf-orchestrator-{name}),
663
- * falls back to the shared orchestrator queue.
664
- *
665
- * Reads from `queue.meta` (always populated globally) rather than
666
- * `queue.registrations` (only populated for queues this unit consumes).
667
- * In a per-unit deploy the orchestrator unit doesn't consume per-step
668
- * queues — but it produces to them — so registrations would miss them.
669
- */
670
227
  protected getOrchestratorQueueName(workflowName?: string): string;
671
228
  protected getStepWorkerQueueName(rpcName?: string): string;
672
- /**
673
- * Fairness key for a job on a shared queue. Under `'per-workflow'` the queue
674
- * name already isolates workflows, so no group is needed — returning one
675
- * anyway would cap a workflow inside its own dedicated queue.
676
- *
677
- * The tier repeats the id so a workflow can be given its own limit purely
678
- * from config, with no per-workflow wiring; an unmatched tier falls back to
679
- * the default limit.
680
- */
681
229
  protected getJobGroup(id?: string): JobGroup | undefined;
682
230
  }