@pikku/core 0.12.72 → 0.12.77

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 (848) hide show
  1. package/CHANGELOG.md +1171 -0
  2. package/dist/column-form.d.ts +32 -0
  3. package/dist/column-form.js +42 -0
  4. package/dist/crypto-utils.d.ts +43 -7
  5. package/dist/crypto-utils.js +163 -42
  6. package/dist/data-classification.d.ts +44 -0
  7. package/dist/dev/hot-reload.js +11 -30
  8. package/dist/dev/module-runner.d.ts +3 -7
  9. package/dist/dev/module-runner.js +4 -10
  10. package/dist/dev/reload-meta.d.ts +8 -20
  11. package/dist/dev/reload-meta.js +9 -29
  12. package/dist/errors/error-handler.d.ts +5 -30
  13. package/dist/errors/error-handler.js +16 -32
  14. package/dist/errors/errors.d.ts +32 -151
  15. package/dist/errors/errors.js +55 -157
  16. package/dist/function/abort-scope.d.ts +47 -0
  17. package/dist/function/abort-scope.js +63 -0
  18. package/dist/function/function-runner.js +37 -32
  19. package/dist/function/functions.types.d.ts +57 -136
  20. package/dist/function/functions.types.js +0 -58
  21. package/dist/function/index.d.ts +1 -1
  22. package/dist/function/list.types.d.ts +12 -62
  23. package/dist/function/list.types.js +4 -25
  24. package/dist/handle-error.d.ts +0 -13
  25. package/dist/handle-error.js +0 -18
  26. package/dist/index.d.ts +11 -5
  27. package/dist/index.js +7 -2
  28. package/dist/middleware/auth-apikey.d.ts +3 -18
  29. package/dist/middleware/auth-apikey.js +0 -17
  30. package/dist/middleware/auth-bearer.d.ts +6 -41
  31. package/dist/middleware/auth-bearer.js +5 -41
  32. package/dist/middleware/auth-cookie.d.ts +5 -27
  33. package/dist/middleware/auth-cookie.js +2 -26
  34. package/dist/middleware/cors.d.ts +7 -34
  35. package/dist/middleware/cors.js +7 -34
  36. package/dist/middleware/remote-auth.d.ts +3 -1
  37. package/dist/middleware/remote-auth.js +4 -3
  38. package/dist/middleware/telemetry.d.ts +8 -33
  39. package/dist/middleware/telemetry.js +2 -31
  40. package/dist/middleware-runner.d.ts +4 -55
  41. package/dist/middleware-runner.js +5 -74
  42. package/dist/permissions.d.ts +3 -44
  43. package/dist/permissions.js +19 -71
  44. package/dist/pikku-request.d.ts +0 -6
  45. package/dist/pikku-request.js +0 -6
  46. package/dist/pikku-state.d.ts +0 -26
  47. package/dist/pikku-state.js +2 -30
  48. package/dist/remote.d.ts +3 -5
  49. package/dist/remote.js +9 -8
  50. package/dist/schema.d.ts +5 -39
  51. package/dist/schema.js +5 -39
  52. package/dist/scopes.d.ts +4 -23
  53. package/dist/scopes.js +7 -48
  54. package/dist/secret-value.d.ts +56 -0
  55. package/dist/secret-value.js +46 -0
  56. package/dist/services/ai-agent-runner-service.d.ts +20 -0
  57. package/dist/services/ai-embedding-service.d.ts +2 -25
  58. package/dist/services/audit-service.d.ts +74 -4
  59. package/dist/services/audit-service.js +8 -7
  60. package/dist/services/content-service.d.ts +1 -46
  61. package/dist/services/credential-service.d.ts +3 -40
  62. package/dist/services/credential-wire-service.d.ts +5 -0
  63. package/dist/services/credential-wire-service.js +9 -1
  64. package/dist/services/deployment-service.d.ts +3 -9
  65. package/dist/services/email-service.d.ts +2 -1
  66. package/dist/services/gateway-service.d.ts +0 -15
  67. package/dist/services/http-personas.d.ts +80 -0
  68. package/dist/services/http-personas.js +233 -0
  69. package/dist/services/in-memory-queue-service.d.ts +0 -14
  70. package/dist/services/in-memory-queue-service.js +1 -15
  71. package/dist/services/in-memory-trigger-service.d.ts +0 -18
  72. package/dist/services/in-memory-trigger-service.js +1 -18
  73. package/dist/services/in-memory-workflow-service.d.ts +0 -16
  74. package/dist/services/in-memory-workflow-service.js +4 -33
  75. package/dist/services/index.d.ts +8 -9
  76. package/dist/services/index.js +3 -6
  77. package/dist/services/istanbul-coverage-service.d.ts +1 -5
  78. package/dist/services/istanbul-coverage-service.js +2 -8
  79. package/dist/services/jwt-service.d.ts +1 -16
  80. package/dist/services/local-content-request-handler.d.ts +29 -0
  81. package/dist/services/local-content-request-handler.js +176 -0
  82. package/dist/services/local-content.d.ts +13 -2
  83. package/dist/services/local-content.js +40 -13
  84. package/dist/services/local-gateway-service.d.ts +0 -16
  85. package/dist/services/local-gateway-service.js +2 -17
  86. package/dist/services/local-secrets.d.ts +4 -7
  87. package/dist/services/local-secrets.js +7 -7
  88. package/dist/services/logger-console.d.ts +3 -7
  89. package/dist/services/logger-console.js +3 -7
  90. package/dist/services/logger.d.ts +22 -40
  91. package/dist/services/meta-service.d.ts +23 -26
  92. package/dist/services/meta-service.js +22 -36
  93. package/dist/services/personas-service.d.ts +134 -0
  94. package/dist/services/personas-service.js +40 -0
  95. package/dist/services/pikku-user-id.js +0 -4
  96. package/dist/services/queue-webhook-service.d.ts +2 -36
  97. package/dist/services/queue-webhook-service.js +10 -42
  98. package/dist/services/scheduler-service.d.ts +1 -50
  99. package/dist/services/scheduler-service.js +0 -10
  100. package/dist/services/schema-service.d.ts +1 -24
  101. package/dist/services/scope-service.d.ts +49 -34
  102. package/dist/services/scoped-secret-service.d.ts +4 -7
  103. package/dist/services/scoped-secret-service.js +0 -4
  104. package/dist/services/secret-host-binding.d.ts +8 -0
  105. package/dist/services/secret-host-binding.js +36 -0
  106. package/dist/services/secret-service.d.ts +12 -35
  107. package/dist/services/secretless.d.ts +6 -0
  108. package/dist/services/secretless.js +21 -0
  109. package/dist/services/stub-tracker.d.ts +7 -18
  110. package/dist/services/stub-tracker.js +8 -18
  111. package/dist/services/system-role-guard.d.ts +33 -0
  112. package/dist/services/system-role-guard.js +38 -0
  113. package/dist/services/trigger-service.d.ts +0 -12
  114. package/dist/services/typed-secret-service.d.ts +5 -11
  115. package/dist/services/typed-secret-service.js +1 -7
  116. package/dist/services/v8-coverage-service.d.ts +2 -3
  117. package/dist/services/v8-coverage-service.js +1 -2
  118. package/dist/services/variables-service.d.ts +1 -8
  119. package/dist/services/webhook-service.d.ts +21 -64
  120. package/dist/services/webhook-service.js +6 -20
  121. package/dist/services/workflow-service.d.ts +3 -15
  122. package/dist/testing/service-tests.js +6 -23
  123. package/dist/time-utils.d.ts +0 -16
  124. package/dist/time-utils.js +1 -19
  125. package/dist/types/core.types.d.ts +120 -219
  126. package/dist/types/core.types.js +0 -42
  127. package/dist/types/state.types.d.ts +4 -9
  128. package/dist/utils/hmac.d.ts +4 -10
  129. package/dist/utils/hmac.js +4 -10
  130. package/dist/utils/safe-fetch.d.ts +7 -35
  131. package/dist/utils/safe-fetch.js +13 -53
  132. package/dist/utils.d.ts +1 -6
  133. package/dist/utils.js +6 -15
  134. package/dist/wirings/actor-flow/actor-flow.types.d.ts +1 -34
  135. package/dist/wirings/actor-flow/index.d.ts +0 -9
  136. package/dist/wirings/actor-flow/run-conversation.d.ts +5 -5
  137. package/dist/wirings/actor-flow/run-conversation.js +14 -7
  138. package/dist/wirings/ai-agent/ai-agent-agui.d.ts +0 -5
  139. package/dist/wirings/ai-agent/ai-agent-agui.js +46 -12
  140. package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +7 -0
  141. package/dist/wirings/ai-agent/ai-agent-helpers.js +7 -0
  142. package/dist/wirings/ai-agent/ai-agent-interrupt.d.ts +153 -0
  143. package/dist/wirings/ai-agent/ai-agent-interrupt.js +256 -0
  144. package/dist/wirings/ai-agent/ai-agent-memory.js +0 -2
  145. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +0 -9
  146. package/dist/wirings/ai-agent/ai-agent-model-config.js +1 -9
  147. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +10 -99
  148. package/dist/wirings/ai-agent/ai-agent-prepare.js +65 -132
  149. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +2 -1
  150. package/dist/wirings/ai-agent/ai-agent-registry.js +5 -1
  151. package/dist/wirings/ai-agent/ai-agent-runner.js +63 -22
  152. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +25 -2
  153. package/dist/wirings/ai-agent/ai-agent-stream.js +180 -64
  154. package/dist/wirings/ai-agent/ai-agent.types.d.ts +124 -4
  155. package/dist/wirings/ai-agent/index.d.ts +6 -4
  156. package/dist/wirings/ai-agent/index.js +5 -4
  157. package/dist/wirings/ai-agent/voice-input.d.ts +59 -1
  158. package/dist/wirings/ai-agent/voice-input.js +90 -12
  159. package/dist/wirings/ai-agent/voice-output.d.ts +69 -1
  160. package/dist/wirings/ai-agent/voice-output.js +162 -50
  161. package/dist/wirings/channel/channel-common.d.ts +7 -20
  162. package/dist/wirings/channel/channel-common.js +7 -21
  163. package/dist/wirings/channel/channel-handler.js +25 -6
  164. package/dist/wirings/channel/channel-host-rpc.d.ts +25 -0
  165. package/dist/wirings/channel/channel-host-rpc.js +38 -0
  166. package/dist/wirings/channel/channel-middleware-runner.d.ts +0 -12
  167. package/dist/wirings/channel/channel-middleware-runner.js +0 -12
  168. package/dist/wirings/channel/channel-rpc-registry.d.ts +31 -0
  169. package/dist/wirings/channel/channel-rpc-registry.js +89 -0
  170. package/dist/wirings/channel/channel-rpc-responder.d.ts +15 -0
  171. package/dist/wirings/channel/channel-rpc-responder.js +71 -0
  172. package/dist/wirings/channel/channel-rpc-service.d.ts +40 -0
  173. package/dist/wirings/channel/channel-rpc-service.js +106 -0
  174. package/dist/wirings/channel/channel-rpc-validators.d.ts +14 -0
  175. package/dist/wirings/channel/channel-rpc-validators.js +30 -0
  176. package/dist/wirings/channel/channel-rpc.d.ts +5 -0
  177. package/dist/wirings/channel/channel-rpc.js +5 -0
  178. package/dist/wirings/channel/channel-rpc.types.d.ts +90 -0
  179. package/dist/wirings/channel/channel-rpc.types.js +50 -0
  180. package/dist/wirings/channel/channel-runner.d.ts +0 -4
  181. package/dist/wirings/channel/channel-runner.js +0 -14
  182. package/dist/wirings/channel/channel-store.d.ts +0 -10
  183. package/dist/wirings/channel/channel.types.d.ts +12 -1
  184. package/dist/wirings/channel/define-channel-routes.d.ts +0 -20
  185. package/dist/wirings/channel/define-channel-routes.js +0 -20
  186. package/dist/wirings/channel/eventhub-service.d.ts +0 -18
  187. package/dist/wirings/channel/index.d.ts +4 -1
  188. package/dist/wirings/channel/index.js +2 -0
  189. package/dist/wirings/channel/local/local-channel-runner.js +3 -1
  190. package/dist/wirings/channel/local/local-eventhub-service.d.ts +0 -33
  191. package/dist/wirings/channel/local/local-eventhub-service.js +2 -36
  192. package/dist/wirings/channel/log-channels.d.ts +0 -4
  193. package/dist/wirings/channel/log-channels.js +0 -4
  194. package/dist/wirings/channel/pikku-abstract-channel-handler.js +6 -0
  195. package/dist/wirings/channel/serverless/serverless-channel-runner.js +2 -5
  196. package/dist/wirings/cli/channel/cli-approval.d.ts +41 -0
  197. package/dist/wirings/cli/channel/cli-approval.js +81 -0
  198. package/dist/wirings/cli/channel/cli-channel-runner.d.ts +0 -4
  199. package/dist/wirings/cli/channel/cli-channel-runner.js +3 -25
  200. package/dist/wirings/cli/channel/cli-raw-channel-runner.d.ts +47 -9
  201. package/dist/wirings/cli/channel/cli-raw-channel-runner.js +24 -16
  202. package/dist/wirings/cli/channel/cli-raw-client-runner.d.ts +38 -0
  203. package/dist/wirings/cli/channel/cli-raw-client-runner.js +129 -0
  204. package/dist/wirings/cli/channel/index.d.ts +5 -0
  205. package/dist/wirings/cli/channel/index.js +2 -0
  206. package/dist/wirings/cli/cli-runner.d.ts +20 -20
  207. package/dist/wirings/cli/cli-runner.js +28 -89
  208. package/dist/wirings/cli/cli.types.d.ts +14 -3
  209. package/dist/wirings/cli/command-parser.d.ts +1 -10
  210. package/dist/wirings/cli/command-parser.js +10 -87
  211. package/dist/wirings/cli/define-cli-commands.d.ts +1 -17
  212. package/dist/wirings/cli/define-cli-commands.js +1 -17
  213. package/dist/wirings/credential/credential.types.d.ts +0 -12
  214. package/dist/wirings/credential/define-credential.d.ts +48 -0
  215. package/dist/wirings/credential/define-credential.js +47 -0
  216. package/dist/wirings/credential/index.d.ts +1 -1
  217. package/dist/wirings/credential/index.js +1 -1
  218. package/dist/wirings/credential/validate-credential-definitions.d.ts +2 -4
  219. package/dist/wirings/gateway/gateway-runner.d.ts +1 -20
  220. package/dist/wirings/gateway/gateway-runner.js +8 -105
  221. package/dist/wirings/gateway/gateway.types.d.ts +7 -80
  222. package/dist/wirings/http/http-routes.d.ts +0 -63
  223. package/dist/wirings/http/http-routes.js +0 -63
  224. package/dist/wirings/http/http-runner.d.ts +0 -99
  225. package/dist/wirings/http/http-runner.js +9 -165
  226. package/dist/wirings/http/http.types.d.ts +14 -55
  227. package/dist/wirings/http/log-http-routes.d.ts +0 -4
  228. package/dist/wirings/http/log-http-routes.js +0 -4
  229. package/dist/wirings/http/pikku-fetch-http-request.d.ts +0 -40
  230. package/dist/wirings/http/pikku-fetch-http-request.js +0 -58
  231. package/dist/wirings/http/pikku-fetch-http-response.js +0 -3
  232. package/dist/wirings/http/routers/path-to-regex.js +2 -13
  233. package/dist/wirings/http/web-request.d.ts +0 -8
  234. package/dist/wirings/http/web-request.js +25 -17
  235. package/dist/wirings/mcp/mcp-runner.d.ts +1 -4
  236. package/dist/wirings/mcp/mcp-runner.js +1 -14
  237. package/dist/wirings/mcp/mcp.types.d.ts +2 -35
  238. package/dist/wirings/oauth2/oauth2.types.d.ts +0 -28
  239. package/dist/wirings/oauth2/oauth2.types.js +0 -3
  240. package/dist/wirings/persona/define-personas.d.ts +32 -0
  241. package/dist/wirings/persona/define-personas.js +31 -0
  242. package/dist/wirings/persona/index.d.ts +21 -0
  243. package/dist/wirings/persona/index.js +17 -0
  244. package/dist/wirings/persona/persona-email.d.ts +37 -0
  245. package/dist/wirings/persona/persona-email.js +69 -0
  246. package/dist/wirings/persona/persona-environments.d.ts +45 -0
  247. package/dist/wirings/persona/persona-environments.js +81 -0
  248. package/dist/wirings/persona/persona-mailbox.d.ts +101 -0
  249. package/dist/wirings/persona/persona-mailbox.js +53 -0
  250. package/dist/wirings/persona/persona.types.d.ts +136 -0
  251. package/dist/wirings/persona/persona.types.js +1 -0
  252. package/dist/wirings/persona/validate-personas.d.ts +53 -0
  253. package/dist/wirings/persona/validate-personas.js +94 -0
  254. package/dist/wirings/queue/index.d.ts +3 -0
  255. package/dist/wirings/queue/index.js +2 -3
  256. package/dist/wirings/queue/queue-identity.d.ts +28 -0
  257. package/dist/wirings/queue/queue-identity.js +103 -0
  258. package/dist/wirings/queue/queue-runner.d.ts +0 -19
  259. package/dist/wirings/queue/queue-runner.js +9 -30
  260. package/dist/wirings/queue/queue.types.d.ts +20 -90
  261. package/dist/wirings/queue/register-queue-helper.d.ts +0 -12
  262. package/dist/wirings/queue/register-queue-helper.js +0 -11
  263. package/dist/wirings/queue/signed-queue-service.d.ts +17 -0
  264. package/dist/wirings/queue/signed-queue-service.js +42 -0
  265. package/dist/wirings/queue/validate-worker-config.d.ts +2 -23
  266. package/dist/wirings/queue/validate-worker-config.js +0 -14
  267. package/dist/wirings/role/define-system-role.d.ts +32 -0
  268. package/dist/wirings/role/define-system-role.js +31 -0
  269. package/dist/wirings/role/index.d.ts +3 -0
  270. package/dist/wirings/role/index.js +2 -0
  271. package/dist/wirings/role/role.types.d.ts +43 -0
  272. package/dist/wirings/role/role.types.js +1 -0
  273. package/dist/wirings/role/validate-role-definitions.d.ts +21 -0
  274. package/dist/wirings/role/validate-role-definitions.js +71 -0
  275. package/dist/wirings/rpc/addon-runner.d.ts +0 -19
  276. package/dist/wirings/rpc/addon-runner.js +0 -51
  277. package/dist/wirings/rpc/remote-addon-auth.d.ts +3 -13
  278. package/dist/wirings/rpc/remote-addon-auth.js +7 -11
  279. package/dist/wirings/rpc/rpc-runner.d.ts +11 -18
  280. package/dist/wirings/rpc/rpc-runner.js +88 -105
  281. package/dist/wirings/rpc/rpc-types.d.ts +7 -6
  282. package/dist/wirings/rpc/wire-addon.d.ts +25 -0
  283. package/dist/wirings/rpc/wire-addon.js +62 -0
  284. package/dist/wirings/rpc/wire-remote-addon.d.ts +3 -28
  285. package/dist/wirings/rpc/wire-remote-addon.js +0 -8
  286. package/dist/wirings/scheduler/log-schedulers.d.ts +0 -4
  287. package/dist/wirings/scheduler/log-schedulers.js +0 -4
  288. package/dist/wirings/scheduler/scheduler-runner.d.ts +0 -1
  289. package/dist/wirings/scheduler/scheduler-runner.js +0 -1
  290. package/dist/wirings/scheduler/scheduler.types.d.ts +1 -14
  291. package/dist/wirings/scope/define-scope.d.ts +32 -0
  292. package/dist/wirings/scope/define-scope.js +31 -0
  293. package/dist/wirings/scope/index.d.ts +1 -1
  294. package/dist/wirings/scope/index.js +1 -1
  295. package/dist/wirings/scope/scope.types.d.ts +7 -9
  296. package/dist/wirings/scope/validate-scope-definitions.d.ts +2 -21
  297. package/dist/wirings/scope/validate-scope-definitions.js +3 -21
  298. package/dist/wirings/secret/index.d.ts +1 -1
  299. package/dist/wirings/secret/index.js +1 -1
  300. package/dist/wirings/secret/secret.types.d.ts +19 -15
  301. package/dist/wirings/secret/secret.types.js +1 -1
  302. package/dist/wirings/secret/validate-secret-definitions.d.ts +2 -4
  303. package/dist/wirings/trigger/trigger-runner.d.ts +0 -27
  304. package/dist/wirings/trigger/trigger-runner.js +1 -24
  305. package/dist/wirings/trigger/trigger.types.d.ts +1 -82
  306. package/dist/wirings/trigger/trigger.types.js +0 -34
  307. package/dist/wirings/variable/index.d.ts +1 -1
  308. package/dist/wirings/variable/index.js +1 -1
  309. package/dist/wirings/variable/validate-variable-definitions.d.ts +2 -4
  310. package/dist/wirings/variable/variable.types.d.ts +1 -13
  311. package/dist/wirings/variable/variable.types.js +1 -1
  312. package/dist/wirings/virtual-user/index.d.ts +30 -0
  313. package/dist/wirings/virtual-user/index.js +10 -0
  314. package/dist/wirings/virtual-user/prepare-virtual-user-run.d.ts +54 -0
  315. package/dist/wirings/virtual-user/prepare-virtual-user-run.js +49 -0
  316. package/dist/wirings/virtual-user/run-virtual-user.d.ts +92 -0
  317. package/dist/wirings/virtual-user/run-virtual-user.js +478 -0
  318. package/dist/wirings/virtual-user/virtual-user-agents.d.ts +38 -0
  319. package/dist/wirings/virtual-user/virtual-user-agents.js +24 -0
  320. package/dist/wirings/virtual-user/virtual-user-catalogue.d.ts +92 -0
  321. package/dist/wirings/virtual-user/virtual-user-catalogue.js +134 -0
  322. package/dist/wirings/virtual-user/virtual-user-derive.d.ts +26 -0
  323. package/dist/wirings/virtual-user/virtual-user-derive.js +137 -0
  324. package/dist/wirings/virtual-user/virtual-user-dispositions.d.ts +79 -0
  325. package/dist/wirings/virtual-user/virtual-user-dispositions.js +128 -0
  326. package/dist/wirings/virtual-user/virtual-user-intents.d.ts +78 -0
  327. package/dist/wirings/virtual-user/virtual-user-intents.js +142 -0
  328. package/dist/wirings/virtual-user/virtual-user-rng.d.ts +24 -0
  329. package/dist/wirings/virtual-user/virtual-user-rng.js +44 -0
  330. package/dist/wirings/virtual-user/virtual-user-run-store.d.ts +90 -0
  331. package/dist/wirings/virtual-user/virtual-user-run-store.js +1 -0
  332. package/dist/wirings/virtual-user/virtual-user-target.d.ts +21 -0
  333. package/dist/wirings/virtual-user/virtual-user-target.js +34 -0
  334. package/dist/wirings/virtual-user/virtual-user.types.d.ts +199 -0
  335. package/dist/wirings/virtual-user/virtual-user.types.js +8 -0
  336. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +19 -15
  337. package/dist/wirings/workflow/dsl/workflow-runner.d.ts +0 -4
  338. package/dist/wirings/workflow/dsl/workflow-runner.js +0 -4
  339. package/dist/wirings/workflow/feature.d.ts +0 -19
  340. package/dist/wirings/workflow/feature.js +0 -19
  341. package/dist/wirings/workflow/graph/graph-node.d.ts +0 -98
  342. package/dist/wirings/workflow/graph/graph-node.js +0 -34
  343. package/dist/wirings/workflow/graph/graph-runner.js +6 -41
  344. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +0 -4
  345. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -58
  346. package/dist/wirings/workflow/graph/workflow-graph.types.js +0 -6
  347. package/dist/wirings/workflow/index.d.ts +5 -7
  348. package/dist/wirings/workflow/index.js +3 -17
  349. package/dist/wirings/workflow/pikku-scenario-service.d.ts +87 -5
  350. package/dist/wirings/workflow/pikku-scenario-service.js +204 -43
  351. package/dist/wirings/workflow/pikku-workflow-service.d.ts +7 -459
  352. package/dist/wirings/workflow/pikku-workflow-service.js +58 -551
  353. package/dist/wirings/workflow/run-timeline.d.ts +0 -47
  354. package/dist/wirings/workflow/run-timeline.js +0 -22
  355. package/dist/wirings/workflow/scenario-cookie-jar.d.ts +0 -23
  356. package/dist/wirings/workflow/scenario-cookie-jar.js +0 -16
  357. package/dist/wirings/workflow/scenario-poll.d.ts +0 -15
  358. package/dist/wirings/workflow/scenario-poll.js +0 -12
  359. package/dist/wirings/workflow/scenario-prose.d.ts +0 -28
  360. package/dist/wirings/workflow/scenario-prose.js +1 -19
  361. package/dist/wirings/workflow/scenario-step-guards.d.ts +0 -13
  362. package/dist/wirings/workflow/scenario-step-guards.js +1 -14
  363. package/dist/wirings/workflow/scenario-step.types.d.ts +84 -12
  364. package/dist/wirings/workflow/scenario-step.types.js +5 -1
  365. package/dist/wirings/workflow/scenario-surface.d.ts +16 -0
  366. package/dist/wirings/workflow/scenario-surface.js +56 -0
  367. package/dist/wirings/workflow/workflow-invocation-id.d.ts +0 -18
  368. package/dist/wirings/workflow/workflow-invocation-id.js +2 -22
  369. package/dist/wirings/workflow/workflow-queue-workers.d.ts +0 -20
  370. package/dist/wirings/workflow/workflow-queue-workers.js +0 -19
  371. package/dist/wirings/workflow/workflow.types.d.ts +5 -195
  372. package/knowledge/decisions/index.md +19 -0
  373. package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +49 -0
  374. package/knowledge/decisions/internals/a-virtual-user-run-is-not-a-workflow-and-not-a-queued-job.md +48 -0
  375. package/knowledge/decisions/internals/actor-flow-conversations-seed-a-hidden-kickoff-message.md +23 -0
  376. package/knowledge/decisions/internals/actor-flow-drives-the-target-through-a-transport-seam.md +24 -0
  377. package/knowledge/decisions/internals/actor-flow-verdicts-are-llm-self-evaluations.md +25 -0
  378. package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +26 -0
  379. package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +33 -0
  380. package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +28 -0
  381. package/knowledge/decisions/internals/ai-agent-agui-bridge-obeys-the-client-ordering-contract.md +29 -0
  382. package/knowledge/decisions/internals/ai-agent-audio-chunks-carry-the-format-the-provider-returned.md +20 -0
  383. package/knowledge/decisions/internals/ai-agent-credential-suspensions-hide-the-tool-result.md +26 -0
  384. package/knowledge/decisions/internals/ai-agent-delegate-and-supervise-hide-different-text.md +26 -0
  385. package/knowledge/decisions/internals/ai-agent-llm-tool-arguments-have-nulls-stripped.md +23 -0
  386. package/knowledge/decisions/internals/ai-agent-model-config-stays-a-single-resolution-seam.md +25 -0
  387. package/knowledge/decisions/internals/ai-agent-onerror-hooks-cannot-change-the-failure.md +22 -0
  388. package/knowledge/decisions/internals/ai-agent-runner-methods-must-keep-their-receiver.md +22 -0
  389. package/knowledge/decisions/internals/ai-agent-stream-persistence-is-best-effort.md +27 -0
  390. package/knowledge/decisions/internals/ai-agent-sub-agents-inherit-the-parent-context-block.md +26 -0
  391. package/knowledge/decisions/internals/ai-agent-tool-execute-failures-are-logged-unconditionally.md +25 -0
  392. package/knowledge/decisions/internals/ai-agent-voice-input-transcribes-audio-parts-in-place.md +22 -0
  393. package/knowledge/decisions/internals/ai-agent-working-memory-is-persisted-only-when-valid.md +25 -0
  394. package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +30 -0
  395. package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +31 -0
  396. package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +29 -0
  397. package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +28 -0
  398. package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +27 -0
  399. package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +28 -0
  400. package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +34 -0
  401. package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +29 -0
  402. package/knowledge/decisions/internals/core-column-form-is-an-axis-of-its-own.md +84 -0
  403. package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +41 -0
  404. package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +44 -0
  405. package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +39 -0
  406. package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +42 -0
  407. package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +39 -0
  408. package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +43 -0
  409. package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +38 -0
  410. package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +44 -0
  411. package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +27 -0
  412. package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +32 -0
  413. package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +28 -0
  414. package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +31 -0
  415. package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +26 -0
  416. package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +32 -0
  417. package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +28 -0
  418. package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +30 -0
  419. package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +26 -0
  420. package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +28 -0
  421. package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +32 -0
  422. package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +26 -0
  423. package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +25 -0
  424. package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +26 -0
  425. package/knowledge/decisions/internals/index.md +117 -0
  426. package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +25 -0
  427. package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +26 -0
  428. package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +24 -0
  429. package/knowledge/decisions/internals/one-project-shape-check-two-validators.md +53 -0
  430. package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +28 -0
  431. package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +27 -0
  432. package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +31 -0
  433. package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +32 -0
  434. package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +27 -0
  435. package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +26 -0
  436. package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +27 -0
  437. package/knowledge/decisions/internals/scenarios-live-in-files-named-for-them.md +48 -0
  438. package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +30 -0
  439. package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +28 -0
  440. package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +30 -0
  441. package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +29 -0
  442. package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +27 -0
  443. package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +40 -0
  444. package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +26 -0
  445. package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +33 -0
  446. package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +26 -0
  447. package/knowledge/decisions/internals/validate-checks-personas-through-a-shared-module.md +43 -0
  448. package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +26 -0
  449. package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +25 -0
  450. package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +58 -0
  451. package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +34 -0
  452. package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +42 -0
  453. package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +38 -0
  454. package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +29 -0
  455. package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +42 -0
  456. package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +25 -0
  457. package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +29 -0
  458. package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +43 -0
  459. package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +29 -0
  460. package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +42 -0
  461. package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +33 -0
  462. package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +32 -0
  463. package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +31 -0
  464. package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +39 -0
  465. package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +29 -0
  466. package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +33 -0
  467. package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +37 -0
  468. package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +50 -0
  469. package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +43 -0
  470. package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +32 -0
  471. package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +18 -0
  472. package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +34 -0
  473. package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +26 -0
  474. package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +33 -0
  475. package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +27 -0
  476. package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +34 -0
  477. package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +38 -0
  478. package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +30 -0
  479. package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +26 -0
  480. package/knowledge/decisions/security/actor-flow-missing-approval-decisions-default-to-denied.md +22 -0
  481. package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +27 -0
  482. package/knowledge/decisions/security/actor-sign-in-only-works-for-actor-flagged-users.md +27 -0
  483. package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +43 -0
  484. package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +52 -0
  485. package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +46 -0
  486. package/knowledge/decisions/security/ai-agent-approval-forwarding-requires-a-symbol-brand.md +27 -0
  487. package/knowledge/decisions/security/ai-agent-credential-requests-are-symbol-branded.md +37 -0
  488. package/knowledge/decisions/security/ai-agent-gate-requires-a-session-only-when-auth-is-true.md +31 -0
  489. package/knowledge/decisions/security/ai-agent-ownership-failures-never-echo-the-resource.md +23 -0
  490. package/knowledge/decisions/security/ai-agent-resume-re-runs-the-authorization-gate.md +22 -0
  491. package/knowledge/decisions/security/ai-agent-sessionless-deployments-have-no-thread-ownership.md +39 -0
  492. package/knowledge/decisions/security/ai-agent-thread-ownership-composes-the-session-principal.md +30 -0
  493. package/knowledge/decisions/security/ai-agent-tool-filtering-reads-the-live-function-config.md +24 -0
  494. package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +30 -0
  495. package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +49 -0
  496. package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +76 -0
  497. package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +39 -0
  498. package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +37 -0
  499. package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +31 -0
  500. package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +30 -0
  501. package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +40 -0
  502. package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +33 -0
  503. package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +46 -0
  504. package/knowledge/decisions/security/index.md +55 -0
  505. package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +27 -0
  506. package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +40 -0
  507. package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +31 -0
  508. package/knowledge/decisions/security/pikku-carries-actor-scopes-as-data-and-the-app-grants-them.md +26 -0
  509. package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +69 -0
  510. package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +39 -0
  511. package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +34 -0
  512. package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +49 -0
  513. package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +30 -0
  514. package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +28 -0
  515. package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +34 -0
  516. package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +37 -0
  517. package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +25 -0
  518. package/knowledge/decisions/security/workflow-actor-steps-always-use-the-real-transport.md +34 -0
  519. package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +40 -0
  520. package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +32 -0
  521. package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-actor-and-per-scenario.md +32 -0
  522. package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +31 -0
  523. package/knowledge/index.md +24 -0
  524. package/knowledge/questions/index.md +15 -0
  525. package/package.json +6 -2
  526. package/run-tests.sh +0 -0
  527. package/src/column-form.test.ts +97 -0
  528. package/src/column-form.ts +58 -0
  529. package/src/crypto-utils.test.ts +460 -19
  530. package/src/crypto-utils.ts +306 -59
  531. package/src/data-classification.ts +45 -7
  532. package/src/dev/hot-reload.test.ts +0 -4
  533. package/src/dev/hot-reload.ts +11 -30
  534. package/src/dev/module-runner.ts +7 -32
  535. package/src/dev/reload-meta.ts +9 -29
  536. package/src/errors/error-handler.ts +20 -35
  537. package/src/errors/error.test.ts +30 -1
  538. package/src/errors/errors.ts +73 -157
  539. package/src/function/abort-scope.test.ts +97 -0
  540. package/src/function/abort-scope.ts +80 -0
  541. package/src/function/function-runner.test.ts +0 -7
  542. package/src/function/function-runner.ts +62 -32
  543. package/src/function/functions.types.ts +95 -138
  544. package/src/function/index.ts +1 -0
  545. package/src/function/list.types.test.ts +3 -25
  546. package/src/function/list.types.ts +12 -62
  547. package/src/handle-error.ts +0 -18
  548. package/src/index.ts +84 -3
  549. package/src/middleware/auth-apikey.test.ts +0 -1
  550. package/src/middleware/auth-apikey.ts +0 -17
  551. package/src/middleware/auth-bearer.test.ts +3 -5
  552. package/src/middleware/auth-bearer.ts +5 -41
  553. package/src/middleware/auth-cookie.test.ts +0 -6
  554. package/src/middleware/auth-cookie.ts +2 -26
  555. package/src/middleware/cors.test.ts +34 -0
  556. package/src/middleware/cors.ts +12 -33
  557. package/src/middleware/remote-auth.test.ts +26 -10
  558. package/src/middleware/remote-auth.ts +11 -3
  559. package/src/middleware/telemetry.ts +2 -31
  560. package/src/middleware-runner.test.ts +0 -2
  561. package/src/middleware-runner.ts +5 -74
  562. package/src/permissions.test.ts +30 -0
  563. package/src/permissions.ts +24 -74
  564. package/src/pikku-request.ts +0 -6
  565. package/src/pikku-state.ts +2 -30
  566. package/src/production-barrels-stay-lean.test.ts +110 -0
  567. package/src/remote.test.ts +173 -0
  568. package/src/remote.ts +18 -8
  569. package/src/schema.ts +5 -39
  570. package/src/scopes.ts +7 -48
  571. package/src/secret-value.test.ts +204 -0
  572. package/src/secret-value.ts +111 -0
  573. package/src/services/ai-agent-runner-service.ts +20 -0
  574. package/src/services/ai-embedding-service.ts +3 -25
  575. package/src/services/audit-service.ts +88 -11
  576. package/src/services/content-service.ts +1 -46
  577. package/src/services/credential-service.ts +3 -40
  578. package/src/services/credential-wire-service.test.ts +0 -2
  579. package/src/services/credential-wire-service.ts +9 -1
  580. package/src/services/deployment-service.ts +3 -9
  581. package/src/services/email-service.ts +3 -1
  582. package/src/services/gateway-service.ts +0 -15
  583. package/src/services/{http-scenario-actors-converse.test.ts → http-personas-converse.test.ts} +38 -9
  584. package/src/services/{http-scenario-actors.test.ts → http-personas.test.ts} +39 -22
  585. package/src/services/{http-scenario-actors.ts → http-personas.ts} +85 -45
  586. package/src/services/in-memory-queue-service.ts +1 -15
  587. package/src/services/in-memory-trigger-service.ts +1 -18
  588. package/src/services/in-memory-workflow-service.test.ts +0 -13
  589. package/src/services/in-memory-workflow-service.ts +4 -38
  590. package/src/services/index.ts +23 -18
  591. package/src/services/istanbul-coverage-service.ts +2 -8
  592. package/src/services/jwt-service.ts +1 -16
  593. package/src/services/local-content-request-handler.test.ts +202 -0
  594. package/src/services/local-content-request-handler.ts +267 -0
  595. package/src/services/local-content.test.ts +159 -27
  596. package/src/services/local-content.ts +55 -23
  597. package/src/services/local-gateway-service.ts +2 -17
  598. package/src/services/local-secrets.test.ts +20 -5
  599. package/src/services/local-secrets.ts +15 -11
  600. package/src/services/logger-console.test.ts +0 -1
  601. package/src/services/logger-console.ts +3 -7
  602. package/src/services/logger.ts +31 -46
  603. package/src/services/meta-service.test.ts +1 -5
  604. package/src/services/meta-service.ts +41 -61
  605. package/src/services/{scenario-actors-service.ts → personas-service.ts} +48 -43
  606. package/src/services/pikku-user-id.ts +0 -4
  607. package/src/services/queue-webhook-service.test.ts +2 -1
  608. package/src/services/queue-webhook-service.ts +10 -42
  609. package/src/services/scheduler-service.ts +1 -50
  610. package/src/services/schema-service.ts +1 -24
  611. package/src/services/scope-service.ts +50 -34
  612. package/src/services/scoped-secret-service.ts +4 -7
  613. package/src/services/secret-host-binding.test.ts +138 -0
  614. package/src/services/secret-host-binding.ts +51 -0
  615. package/src/services/secret-service.ts +12 -35
  616. package/src/services/secretless.test.ts +54 -0
  617. package/src/services/secretless.ts +29 -0
  618. package/src/services/stub-tracker.ts +8 -18
  619. package/src/services/system-role-guard.test.ts +93 -0
  620. package/src/services/system-role-guard.ts +71 -0
  621. package/src/services/trigger-service.ts +0 -12
  622. package/src/services/typed-secret-service.ts +12 -14
  623. package/src/services/v8-coverage-service.ts +3 -6
  624. package/src/services/variables-service.ts +1 -8
  625. package/src/services/webhook-service.ts +23 -64
  626. package/src/services/workflow-service.ts +3 -20
  627. package/src/testing/service-tests.ts +6 -32
  628. package/src/time-utils.ts +1 -19
  629. package/src/types/core.types.ts +137 -229
  630. package/src/types/state.types.ts +7 -9
  631. package/src/utils/hmac.ts +4 -10
  632. package/src/utils/safe-fetch.ts +13 -54
  633. package/src/utils.test.ts +11 -2
  634. package/src/utils.ts +6 -15
  635. package/src/wirings/actor-flow/actor-flow.types.ts +1 -34
  636. package/src/wirings/actor-flow/index.ts +0 -9
  637. package/src/wirings/actor-flow/run-conversation.test.ts +11 -6
  638. package/src/wirings/actor-flow/run-conversation.ts +19 -12
  639. package/src/wirings/ai-agent/ai-agent-agui.test.ts +91 -10
  640. package/src/wirings/ai-agent/ai-agent-agui.ts +49 -17
  641. package/src/wirings/ai-agent/ai-agent-helpers.ts +20 -0
  642. package/src/wirings/ai-agent/ai-agent-interrupt.test.ts +842 -0
  643. package/src/wirings/ai-agent/ai-agent-interrupt.ts +399 -0
  644. package/src/wirings/ai-agent/ai-agent-memory.ts +0 -2
  645. package/src/wirings/ai-agent/ai-agent-model-config.ts +1 -9
  646. package/src/wirings/ai-agent/ai-agent-prepare.test.ts +202 -31
  647. package/src/wirings/ai-agent/ai-agent-prepare.ts +89 -139
  648. package/src/wirings/ai-agent/ai-agent-registry.test.ts +191 -6
  649. package/src/wirings/ai-agent/ai-agent-registry.ts +18 -1
  650. package/src/wirings/ai-agent/ai-agent-resume-authorization.test.ts +0 -2
  651. package/src/wirings/ai-agent/ai-agent-runner.test.ts +11 -9
  652. package/src/wirings/ai-agent/ai-agent-runner.ts +85 -35
  653. package/src/wirings/ai-agent/ai-agent-stream.test.ts +205 -103
  654. package/src/wirings/ai-agent/ai-agent-stream.ts +224 -76
  655. package/src/wirings/ai-agent/ai-agent-thread-ownership.test.ts +301 -0
  656. package/src/wirings/ai-agent/ai-agent.types.ts +130 -5
  657. package/src/wirings/ai-agent/index.ts +37 -3
  658. package/src/wirings/ai-agent/voice-input.test.ts +137 -7
  659. package/src/wirings/ai-agent/voice-input.ts +96 -12
  660. package/src/wirings/ai-agent/voice-output.test.ts +512 -0
  661. package/src/wirings/ai-agent/voice-output.ts +243 -56
  662. package/src/wirings/channel/channel-common.ts +15 -20
  663. package/src/wirings/channel/channel-handler.test.ts +50 -0
  664. package/src/wirings/channel/channel-handler.ts +32 -11
  665. package/src/wirings/channel/channel-host-rpc.test.ts +150 -0
  666. package/src/wirings/channel/channel-host-rpc.ts +69 -0
  667. package/src/wirings/channel/channel-middleware-runner.test.ts +0 -1
  668. package/src/wirings/channel/channel-middleware-runner.ts +0 -12
  669. package/src/wirings/channel/channel-rpc-registry.ts +116 -0
  670. package/src/wirings/channel/channel-rpc-responder.ts +117 -0
  671. package/src/wirings/channel/channel-rpc-service.ts +146 -0
  672. package/src/wirings/channel/channel-rpc-validators.ts +65 -0
  673. package/src/wirings/channel/channel-rpc.test.ts +820 -0
  674. package/src/wirings/channel/channel-rpc.ts +5 -0
  675. package/src/wirings/channel/channel-rpc.types.ts +150 -0
  676. package/src/wirings/channel/channel-runner.ts +0 -14
  677. package/src/wirings/channel/channel-store.ts +0 -10
  678. package/src/wirings/channel/channel.types.ts +19 -8
  679. package/src/wirings/channel/define-channel-routes.ts +0 -20
  680. package/src/wirings/channel/eventhub-service.ts +0 -18
  681. package/src/wirings/channel/index.ts +35 -0
  682. package/src/wirings/channel/local/local-channel-handler.ts +3 -1
  683. package/src/wirings/channel/local/local-channel-runner.test.ts +0 -10
  684. package/src/wirings/channel/local/local-channel-runner.ts +3 -1
  685. package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -13
  686. package/src/wirings/channel/local/local-eventhub-service.ts +2 -37
  687. package/src/wirings/channel/log-channels.ts +0 -4
  688. package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +83 -2
  689. package/src/wirings/channel/pikku-abstract-channel-handler.ts +7 -0
  690. package/src/wirings/channel/serverless/serverless-channel-runner.ts +2 -5
  691. package/src/wirings/cli/channel/cli-approval.test.ts +177 -0
  692. package/src/wirings/cli/channel/cli-approval.ts +135 -0
  693. package/src/wirings/cli/channel/cli-channel-runner.ts +4 -26
  694. package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +169 -0
  695. package/src/wirings/cli/channel/cli-raw-channel-runner.ts +59 -16
  696. package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +480 -0
  697. package/src/wirings/cli/channel/cli-raw-client-runner.ts +185 -0
  698. package/src/wirings/cli/channel/index.ts +13 -0
  699. package/src/wirings/cli/cli-runner.test.ts +0 -1
  700. package/src/wirings/cli/cli-runner.ts +46 -88
  701. package/src/wirings/cli/cli.types.ts +14 -3
  702. package/src/wirings/cli/command-parser.test.ts +0 -4
  703. package/src/wirings/cli/command-parser.ts +11 -91
  704. package/src/wirings/cli/define-cli-commands.ts +1 -17
  705. package/src/wirings/credential/credential.types.ts +0 -12
  706. package/src/wirings/credential/{wire-credential.ts → define-credential.ts} +7 -7
  707. package/src/wirings/credential/index.ts +1 -1
  708. package/src/wirings/credential/validate-credential-definitions.ts +2 -4
  709. package/src/wirings/gateway/gateway-runner.test.ts +1 -21
  710. package/src/wirings/gateway/gateway-runner.ts +8 -110
  711. package/src/wirings/gateway/gateway.types.ts +7 -80
  712. package/src/wirings/http/http-routes.test.ts +0 -3
  713. package/src/wirings/http/http-routes.ts +0 -86
  714. package/src/wirings/http/http-runner.test.ts +0 -1
  715. package/src/wirings/http/http-runner.ts +8 -167
  716. package/src/wirings/http/http.types.ts +15 -62
  717. package/src/wirings/http/log-http-routes.ts +0 -4
  718. package/src/wirings/http/pikku-fetch-http-request.test.ts +2 -10
  719. package/src/wirings/http/pikku-fetch-http-request.ts +0 -58
  720. package/src/wirings/http/pikku-fetch-http-response.test.ts +1 -1
  721. package/src/wirings/http/pikku-fetch-http-response.ts +0 -3
  722. package/src/wirings/http/routers/path-to-regex.test.ts +4 -17
  723. package/src/wirings/http/routers/path-to-regex.ts +2 -13
  724. package/src/wirings/http/web-request.test.ts +33 -2
  725. package/src/wirings/http/web-request.ts +30 -17
  726. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -1
  727. package/src/wirings/mcp/mcp-runner.ts +2 -17
  728. package/src/wirings/mcp/mcp.types.ts +7 -42
  729. package/src/wirings/oauth2/oauth2.types.ts +0 -30
  730. package/src/wirings/persona/define-personas.ts +33 -0
  731. package/src/wirings/persona/index.ts +62 -0
  732. package/src/wirings/persona/persona-email.ts +87 -0
  733. package/src/wirings/persona/persona-environments.test.ts +183 -0
  734. package/src/wirings/persona/persona-environments.ts +138 -0
  735. package/src/wirings/persona/persona-mailbox.ts +156 -0
  736. package/src/wirings/persona/persona.test.ts +220 -0
  737. package/src/wirings/persona/persona.types.ts +142 -0
  738. package/src/wirings/persona/validate-personas.ts +133 -0
  739. package/src/wirings/queue/index.ts +13 -3
  740. package/src/wirings/queue/queue-identity.test.ts +454 -0
  741. package/src/wirings/queue/queue-identity.ts +176 -0
  742. package/src/wirings/queue/queue-runner.ts +12 -31
  743. package/src/wirings/queue/queue.types.ts +25 -90
  744. package/src/wirings/queue/register-queue-helper.ts +0 -14
  745. package/src/wirings/queue/signed-queue-service.ts +60 -0
  746. package/src/wirings/queue/validate-worker-config.ts +2 -28
  747. package/src/wirings/role/define-system-role.ts +33 -0
  748. package/src/wirings/role/index.ts +13 -0
  749. package/src/wirings/role/role.test.ts +104 -0
  750. package/src/wirings/role/role.types.ts +47 -0
  751. package/src/wirings/role/validate-role-definitions.ts +93 -0
  752. package/src/wirings/rpc/addon-auth-tags.test.ts +223 -0
  753. package/src/wirings/rpc/addon-runner.ts +0 -56
  754. package/src/wirings/rpc/addon-scopes.test.ts +225 -0
  755. package/src/wirings/rpc/remote-addon-auth.ts +9 -16
  756. package/src/wirings/rpc/rpc-runner.test.ts +192 -6
  757. package/src/wirings/rpc/rpc-runner.ts +145 -127
  758. package/src/wirings/rpc/rpc-types.ts +11 -6
  759. package/src/wirings/rpc/wire-addon.test.ts +43 -1
  760. package/src/wirings/rpc/wire-addon.ts +99 -0
  761. package/src/wirings/rpc/wire-remote-addon.ts +9 -29
  762. package/src/wirings/scheduler/log-schedulers.ts +0 -4
  763. package/src/wirings/scheduler/scheduler-runner.test.ts +1 -8
  764. package/src/wirings/scheduler/scheduler-runner.ts +0 -2
  765. package/src/wirings/scheduler/scheduler.types.ts +1 -14
  766. package/src/wirings/scope/{wire-scope.ts → define-scope.ts} +5 -6
  767. package/src/wirings/scope/index.ts +1 -1
  768. package/src/wirings/scope/scope.test.ts +1 -2
  769. package/src/wirings/scope/scope.types.ts +7 -9
  770. package/src/wirings/scope/validate-scope-definitions.ts +3 -21
  771. package/src/wirings/secret/index.ts +1 -1
  772. package/src/wirings/secret/secret.types.ts +19 -15
  773. package/src/wirings/secret/validate-secret-definitions.ts +2 -4
  774. package/src/wirings/trigger/trigger-runner.ts +1 -27
  775. package/src/wirings/trigger/trigger.types.ts +1 -82
  776. package/src/wirings/variable/index.ts +1 -1
  777. package/src/wirings/variable/validate-variable-definitions.ts +2 -4
  778. package/src/wirings/variable/variable.types.ts +1 -13
  779. package/src/wirings/virtual-user/index.ts +88 -0
  780. package/src/wirings/virtual-user/prepare-virtual-user-run.test.ts +115 -0
  781. package/src/wirings/virtual-user/prepare-virtual-user-run.ts +95 -0
  782. package/src/wirings/virtual-user/run-virtual-user.test.ts +765 -0
  783. package/src/wirings/virtual-user/run-virtual-user.ts +671 -0
  784. package/src/wirings/virtual-user/virtual-user-agents.test.ts +65 -0
  785. package/src/wirings/virtual-user/virtual-user-agents.ts +57 -0
  786. package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +215 -0
  787. package/src/wirings/virtual-user/virtual-user-catalogue.ts +184 -0
  788. package/src/wirings/virtual-user/virtual-user-derive.test.ts +398 -0
  789. package/src/wirings/virtual-user/virtual-user-derive.ts +173 -0
  790. package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +63 -0
  791. package/src/wirings/virtual-user/virtual-user-dispositions.ts +213 -0
  792. package/src/wirings/virtual-user/virtual-user-intents.test.ts +208 -0
  793. package/src/wirings/virtual-user/virtual-user-intents.ts +185 -0
  794. package/src/wirings/virtual-user/virtual-user-rng.test.ts +72 -0
  795. package/src/wirings/virtual-user/virtual-user-rng.ts +50 -0
  796. package/src/wirings/virtual-user/virtual-user-run-store.ts +98 -0
  797. package/src/wirings/virtual-user/virtual-user-target.ts +47 -0
  798. package/src/wirings/virtual-user/virtual-user.types.ts +219 -0
  799. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +19 -20
  800. package/src/wirings/workflow/dsl/workflow-runner.ts +0 -4
  801. package/src/wirings/workflow/feature.ts +0 -19
  802. package/src/wirings/workflow/graph/graph-node.ts +0 -136
  803. package/src/wirings/workflow/graph/graph-runner.test.ts +20 -19
  804. package/src/wirings/workflow/graph/graph-runner.ts +6 -41
  805. package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -4
  806. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -58
  807. package/src/wirings/workflow/index.ts +10 -44
  808. package/src/wirings/workflow/pikku-scenario-service.ts +235 -61
  809. package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -39
  810. package/src/wirings/workflow/pikku-workflow-service.ts +77 -674
  811. package/src/wirings/workflow/run-timeline.test.ts +7 -19
  812. package/src/wirings/workflow/run-timeline.ts +0 -56
  813. package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -1
  814. package/src/wirings/workflow/scenario-cookie-jar.ts +0 -25
  815. package/src/wirings/workflow/scenario-expectations.test.ts +2 -7
  816. package/src/wirings/workflow/scenario-hooks.test.ts +2 -7
  817. package/src/wirings/workflow/scenario-poll.test.ts +0 -2
  818. package/src/wirings/workflow/scenario-poll.ts +0 -15
  819. package/src/wirings/workflow/scenario-prose.test.ts +5 -7
  820. package/src/wirings/workflow/scenario-prose.ts +1 -29
  821. package/src/wirings/workflow/scenario-service.test.ts +2 -10
  822. package/src/wirings/workflow/scenario-step-guards.ts +1 -14
  823. package/src/wirings/workflow/scenario-step.test.ts +163 -19
  824. package/src/wirings/workflow/scenario-step.types.ts +94 -12
  825. package/src/wirings/workflow/scenario-surface.test.ts +146 -0
  826. package/src/wirings/workflow/scenario-surface.ts +71 -0
  827. package/src/wirings/workflow/workflow-dispatch-durability.test.ts +14 -15
  828. package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -4
  829. package/src/wirings/workflow/workflow-inline-authority.test.ts +169 -0
  830. package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -2
  831. package/src/wirings/workflow/workflow-invocation-id.ts +2 -22
  832. package/src/wirings/workflow/workflow-mirror.test.ts +0 -7
  833. package/src/wirings/workflow/workflow-on-error.test.ts +0 -9
  834. package/src/wirings/workflow/workflow-queue-workers.ts +0 -21
  835. package/src/wirings/workflow/workflow-replay-snapshot.test.ts +8 -7
  836. package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -5
  837. package/src/wirings/workflow/workflow-run-context.test.ts +5 -10
  838. package/src/wirings/workflow/workflow-run-polling.test.ts +0 -5
  839. package/src/wirings/workflow/workflow-step-ordinal.test.ts +19 -4
  840. package/src/wirings/workflow/workflow-step-session.test.ts +0 -7
  841. package/src/wirings/workflow/workflow.types.ts +5 -201
  842. package/tsconfig.tsbuildinfo +1 -1
  843. package/tsconfig.type-tests.json +12 -0
  844. package/src/middleware/timeout.ts +0 -22
  845. package/src/pikku-response.ts +0 -5
  846. package/src/wirings/mcp/mcp-endpoint-registry.test.d.ts +0 -1
  847. package/src/wirings/workflow/dsl/index.ts +0 -36
  848. package/src/wirings/workflow/graph/index.ts +0 -15
@@ -25,6 +25,8 @@ import type {
25
25
  import type {
26
26
  PikkuBrowserWire,
27
27
  PikkuScenarioStepWire,
28
+ ScenarioStepKind,
29
+ ScenarioSurface,
28
30
  } from '../wirings/workflow/scenario-step.types.js'
29
31
  import type { PikkuGraphWire } from '../wirings/workflow/graph/workflow-graph.types.js'
30
32
  import type { PikkuTrigger } from '../wirings/trigger/trigger.types.js'
@@ -35,13 +37,14 @@ import type { AIStorageService } from '../services/ai-storage-service.js'
35
37
 
36
38
  import type { ContentService } from '../services/content-service.js'
37
39
  import type {
38
- ScenarioActorOf,
39
- ScenarioActors,
40
- } from '../services/scenario-actors-service.js'
40
+ ScenarioPersonaOf,
41
+ ScenarioPersonas,
42
+ } from '../services/personas-service.js'
41
43
  import type { AIAgentRunnerService } from '../services/ai-agent-runner-service.js'
42
44
  import type { AIEmbeddingService } from '../services/ai-embedding-service.js'
43
45
  import type { AIRunStateService } from '../services/ai-run-state-service.js'
44
46
  import type { AgentRunService } from '../wirings/ai-agent/ai-agent.types.js'
47
+ import type { VirtualUserRunStore } from '../wirings/virtual-user/virtual-user-run-store.js'
45
48
  import type { PikkuAIMiddlewareHooks } from '../wirings/ai-agent/ai-agent.types.js'
46
49
  import type { WorkflowRunService } from '../wirings/workflow/workflow.types.js'
47
50
  import type { CredentialService } from '../services/credential-service.js'
@@ -83,12 +86,6 @@ export interface FunctionWiresMeta {
83
86
  wires: string[]
84
87
  }
85
88
 
86
- /**
87
- * Metadata for middleware at any level
88
- * - type: 'http' = HTTP route middleware group (references httpGroup in pikkuState)
89
- * - type: 'tag' = Tag-based middleware group (references tagGroup in pikkuState)
90
- * - type: 'wire' = Wire-level individual middleware
91
- */
92
89
  export type MiddlewareMetadata =
93
90
  | {
94
91
  type: 'http'
@@ -96,30 +93,22 @@ export type MiddlewareMetadata =
96
93
  }
97
94
  | {
98
95
  type: 'tag'
99
- tag: string // Tag name
96
+ tag: string
100
97
  }
101
98
  | {
102
99
  type: 'wire'
103
100
  name: string
104
- inline?: boolean // true if inline middleware
101
+ inline?: boolean
105
102
  }
106
103
 
107
104
  /**
108
- * Metadata for permissions at any level
109
- * - type: 'http' = HTTP route permission group (references httpGroup in pikkuState)
110
- * - type: 'tag' = Tag-based permission group (references tagGroup in pikkuState)
111
- * - type: 'wire' = Wire-level individual permission
112
- */
113
- /**
114
- * A reference to a permission function a function declares, resolved by name.
115
- * Used at filter time (e.g. listing agent tools) to run the session-only
116
- * (pikkuAuth) predicates without request data. Permissions are function-scoped
117
- * only — there are no wire- or tag-level permission references.
105
+ * A reference to a permission function, resolved by name. Function-scoped
106
+ * only: there are no wire- or tag-level permission references.
118
107
  */
119
108
  export type PermissionMetadata = {
120
109
  type: 'wire'
121
110
  name: string
122
- inline?: boolean // true if inline permission
111
+ inline?: boolean
123
112
  }
124
113
 
125
114
  export type FunctionRuntimeMeta = {
@@ -129,21 +118,29 @@ export type FunctionRuntimeMeta = {
129
118
  /** Scopes the session must hold to run this function. All are required (AND). */
130
119
  scopes?: string[]
131
120
  expose?: boolean
121
+ /**
122
+ * A sessionless function's own `auth: true`. `sessionless` carries the
123
+ * baseline — a `pikkuFunc` always requires a session — and this carries the
124
+ * tightening a `pikkuSessionlessFunc` applies to itself. Both are needed to
125
+ * know whether a function is gated without running it.
126
+ */
127
+ auth?: boolean
128
+ /**
129
+ * The author's declaration that this function's permission check lives in its
130
+ * own body. Carries no runtime effect — it records a gate codegen cannot see,
131
+ * so an audit is not left to guess whether a sessionless function is open.
132
+ * Refused unless `allow.permissionsInBody` is set in `pikku.config.json`.
133
+ */
134
+ permissionsInBody?: boolean
132
135
  remote?: boolean
133
136
  /**
134
- * A step RPC: a name dispatched by a scenario run and refused everywhere
135
- * else. It sits alongside `expose` (public) and `remote` as a kind of RPC
136
- * rather than a separate concept — a step is invoked by name exactly as an
137
- * RPC is, which is why a run records the step function in its `rpcName`.
138
- * What makes it its own kind is that it is never network-callable: a step
139
- * may drive a browser or assert against fixtures.
137
+ * A step RPC: invoked by name only from a scenario run and refused
138
+ * everywhere else, so it is never network-callable.
140
139
  */
141
140
  scenarioStep?: boolean
142
141
  /**
143
- * The function behind a `pikkuScenario(...)` a scenario's own body, as
144
- * opposed to the steps it calls. Marked for the same reason as
145
- * `scenarioStep`: a scenario is only ever run by `pikku scenario run`, so it
146
- * has to be held back from the app bootstrap and from every deployed unit.
142
+ * The body of a `pikkuScenario(...)`. Only ever run by `pikku scenario run`,
143
+ * so it is held back from the app bootstrap and from every deployed unit.
147
144
  */
148
145
  scenario?: boolean
149
146
  mcp?: boolean
@@ -156,10 +153,43 @@ export type FunctionRuntimeMeta = {
156
153
  workflowRetries?: number
157
154
  /** Timeout when this function is used as a workflow step (e.g. '30s', '5m'). */
158
155
  workflowTimeout?: string
159
- /** Scenario steps only: this step drives a browser, so the runner must provision one and an actor is mandatory. */
160
- scenarioStepBrowser?: boolean
156
+ /**
157
+ * Scenario steps only: which surfaces this step declares a binding for.
158
+ *
159
+ * The reporter derives coverage from this — a `then` with no binding for the
160
+ * surface the run targeted was never actually witnessed there, which is a gap
161
+ * worth counting rather than excusing.
162
+ */
163
+ scenarioStepSurfaces?: ScenarioSurface[]
164
+ /**
165
+ * Scenario steps only: who acts. Absent means `persona` — the ordinary step,
166
+ * and the only kind that existed before the other two.
167
+ *
168
+ * A `platform` or `addon` step is the app or a third-party system acting, and
169
+ * it must never reach a virtual user's catalogue. That is not tidiness: a
170
+ * virtual user that can invoke "Stripe's webhook arrives" can forge its own
171
+ * payment success, and every finding downstream of that is worthless.
172
+ */
173
+ scenarioStepKind?: ScenarioStepKind
174
+ /** Addon steps only: the addon whose system acts — `wireAddon`'s `name`. */
175
+ scenarioStepAddon?: string
161
176
  /** Scenario steps only: the prose a reporter renders, with `{placeholders}` filled from the step's recorded input. */
162
177
  scenarioStepTemplate?: string
178
+ /**
179
+ * The function's `audit` config, resolved — `audit: true` reads as
180
+ * `{ durability: 'best-effort' }`. Absent means the function records nothing:
181
+ * `auditLog.write()` from an unmarked function is dropped with a warning, so
182
+ * this is the only place a reader can see which functions have a trail at all
183
+ * without running them.
184
+ *
185
+ * Informational. The runner resolves audit from the live function config, not
186
+ * from here, so meta and runtime cannot disagree about whether audit is on.
187
+ */
188
+ audit?: {
189
+ durability: AuditDurability
190
+ }
191
+ /** Keeps the full `SecretService`. Set by the inspector, read by the runner. */
192
+ secretBroker?: boolean
163
193
  version?: number
164
194
  approvalRequired?: boolean
165
195
  approvalDescription?: string
@@ -173,7 +203,8 @@ export type FunctionMeta = FunctionRuntimeMeta &
173
203
  Partial<
174
204
  {
175
205
  name: string
176
- functionType: 'user' | 'inline' | 'helper'
206
+ /** `remote`: a contract with no local body, answered by a connected client. */
207
+ functionType: 'user' | 'inline' | 'helper' | 'remote'
177
208
  funcWrapper: string
178
209
  services: FunctionServicesMeta
179
210
  wires: FunctionWiresMeta
@@ -196,19 +227,11 @@ export type FunctionMeta = FunctionRuntimeMeta &
196
227
  export type FunctionsRuntimeMeta = Record<string, FunctionRuntimeMeta>
197
228
  export type FunctionsMeta = Record<string, FunctionMeta>
198
229
 
199
- // Optimized runtime metadata with only essential fields
200
-
201
230
  export type MakeRequired<T, K extends keyof T> = Omit<T, K> &
202
231
  Required<Pick<T, K>>
203
232
 
204
- /**
205
- * Represents a JSON primitive type which can be a string, number, boolean, null, or undefined.
206
- */
207
233
  export type JSONPrimitive = string | number | boolean | null | undefined
208
234
 
209
- /**
210
- * Represents a JSON value which can be a primitive, an array, or an object.
211
- */
212
235
  export type JSONValue =
213
236
  | JSONPrimitive
214
237
  | JSONValue[]
@@ -216,28 +239,17 @@ export type JSONValue =
216
239
  [key: string]: JSONValue
217
240
  }
218
241
 
219
- /**
220
- * Utility type for making certain keys required and leaving the rest as optional.
221
- */
222
242
  export type PickRequired<T, K extends keyof T> = T & Required<Pick<T, K>>
223
243
 
224
- /**
225
- * Utility type for making certain keys optional while keeping the rest required.
226
- */
227
244
  export type PickOptional<T, K extends keyof T> = Partial<T> & Pick<T, K>
228
245
 
229
- /**
230
- * Utility type that ensures at least one key in the given type `T` is required.
231
- */
232
246
  export type RequireAtLeastOne<T> = {
233
247
  [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
234
248
  }[keyof T]
235
249
 
236
250
  /**
237
- * Runtime options for the Postgres adapter (@pikku/kysely-postgres).
238
- * The connection string itself stays the flat `postgresUrl` config field (the
239
- * contract the CLI's db commands read); this block is purely runtime pool
240
- * tuning that the CLI never touches.
251
+ * Runtime pool tuning for the Postgres adapter. The connection string stays
252
+ * the flat `postgresUrl` config field the contract the CLI's db commands read.
241
253
  */
242
254
  export interface PostgresConfig {
243
255
  /** Max connections in the postgres.js pool. Defaults to postgres.js's 10. */
@@ -264,25 +276,18 @@ export interface PostgresConfig {
264
276
  prepare?: boolean
265
277
  }
266
278
 
267
- /**
268
- * Interface for the core configuration settings of Pikku.
269
- */
270
279
  export type CoreConfig<Config extends Record<string, unknown> = {}> = {
271
- /** The log level for the application. */
272
280
  logLevel?: LogLevel
273
- /** Secrets used by the application (optional). */
274
- secrets?: {}
281
+ secrets?: {
282
+ /** Refuse a secret that declares no `allowedHosts` rather than treating it as unrestricted. */
283
+ requireAllowedHosts?: boolean
284
+ }
275
285
 
276
286
  workflow?: WorkflowServiceConfig
277
- /** Default retry and signing settings for outgoing webhooks. */
278
287
  webhook?: WebhookServiceConfig
279
- /** Runtime Postgres adapter options (pool sizing). */
280
288
  postgres?: PostgresConfig
281
289
  } & Config
282
290
 
283
- /**
284
- * Represents a core user session, which can be extended for more specific session information.
285
- */
286
291
  export interface CoreUserSession {
287
292
  userId?: string
288
293
  orgId?: string
@@ -290,112 +295,79 @@ export interface CoreUserSession {
290
295
  actor?: boolean
291
296
  /**
292
297
  * Scopes granted to this session, checked against a function's `scopes`.
293
- * Populated by whoever builds the session (e.g. better-auth's `mapSession`
294
- * resolving them via a ScopeService) — core reads them and never fetches.
298
+ * Populated by whoever builds the session core reads them, never fetches.
295
299
  */
296
300
  scopes?: string[]
297
301
  }
298
302
 
299
303
  /**
300
- * The shape pikku needs from whatever auth library a project wires: something
301
- * that can answer an HTTP request and expose its own endpoints as callable
302
- * methods. Kept structural so core stays independent of any one auth package —
303
- * `@pikku/better-auth`'s `BetterAuthInstance` is this type.
304
+ * Kept structural so core stays independent of any one auth package
305
+ * `@pikku/better-auth`'s `BetterAuthInstance` satisfies it.
304
306
  */
305
307
  export interface AuthInstance {
306
308
  handler: (request: Request) => Promise<Response>
307
309
  api: Record<string, any>
308
- /**
309
- * The auth library's resolved context. Optional because a hand-built instance
310
- * may omit it.
311
- */
312
310
  $context?: Promise<any>
313
311
  }
314
312
 
315
- /**
316
- * Interface for core singleton services provided by Pikku.
317
- */
318
313
  export interface CoreSingletonServices<Config extends CoreConfig = CoreConfig> {
319
- /** The schema library used to validate data */
320
314
  schema?: SchemaService
321
- /** The JWT service used to encode and decode tokens */
322
315
  jwt?: JWTService
323
- /** The core configuration for the application. */
324
316
  config: Config
325
- /** The logger used by the application. */
326
317
  logger: Logger
327
- /** The variable service to be used */
328
318
  variables: VariablesService
329
- /** The secrets service to retrieve secrets */
330
319
  secrets: SecretService
331
- /** The workflow orchestrator service */
332
320
  workflowService?: WorkflowService
333
- /** The queue service */
334
321
  queueService?: QueueService
335
- /** Event hub for realtime pub/sub across channels */
336
322
  eventHub?: EventHubService<Record<string, any>>
337
- /** The scheduler service */
338
323
  schedulerService?: SchedulerService
339
- /** The deployment service for service discovery */
340
324
  deploymentService?: DeploymentService
341
- /** AI agent storage service (threads, messages, working memory) */
342
325
  aiStorage?: AIStorageService
343
326
 
344
- /** Content service for file storage and retrieval */
345
327
  content?: ContentService
346
- /** AI agent runner service (model calls + tool loop) */
347
328
  aiAgentRunner?: AIAgentRunnerService
348
- /** Dedicated embedding service (vector stores use it at index & query time) */
349
329
  aiEmbedding?: AIEmbeddingService
350
- /** AI run state service (run lifecycle + approval persistence) */
351
330
  aiRunState?: AIRunStateService
352
- /** Agent run service (listing threads, runs, steps) */
353
331
  agentRunService?: AgentRunService
354
- /** Workflow run service (listing workflow runs) */
355
332
  workflowRunService?: WorkflowRunService
356
- /** Credential service for dynamic/managed credentials (OAuth tokens, per-user API keys) */
357
333
  credentialService?: CredentialService
358
- /** Email service for outbound messages and template-backed delivery */
359
334
  emailService?: EmailService
360
335
  /**
361
- * Webhook service for outgoing webhook delivery via a queue. A store-backed
362
- * implementation (e.g. `KyselyWebhookService`) additionally records delivery
363
- * history; the queue-only default throws on the delivery-read methods.
336
+ * Queue-backed outgoing webhook delivery. The queue-only default throws on
337
+ * the delivery-read methods; a store-backed implementation records history.
364
338
  */
365
339
  webhookService?: WebhookService
366
- /** Meta service for reading .pikku metadata files (filesystem on Node, R2/KV on CF) */
367
340
  metaService?: MetaService
341
+ /**
342
+ * Where virtual-user runs are recorded. A run is dispatched and answered for
343
+ * later, so this store is the only trace it leaves — see
344
+ * {@link VirtualUserRunStore}.
345
+ */
346
+ virtualUserRunStore?: VirtualUserRunStore
368
347
  /** V8 precise-coverage collector (`pikku dev --coverage` only) */
369
348
  coverageService?: CoverageService
370
- /** Audit service for durable or staged audit event capture */
371
349
  audit?: AuditService
372
350
  /**
373
- * Per-invocation audit log. Typically created in `createWireServices` via
374
- * `createInvocationAudit(audit, wire)` and returned as a wire service so the
375
- * runner flushes its buffer (via `close()`) when the invocation ends. Distinct
376
- * from `audit` (the durable sink): this is the request-scoped buffer that
377
- * writes into it.
351
+ * Request-scoped audit buffer that writes into `audit` (the durable sink).
352
+ * Returned as a wire service so the runner flushes it via `close()` when the
353
+ * invocation ends.
378
354
  */
379
355
  auditLog?: AuditLog
380
356
  /** Session store for persisting user sessions keyed by pikkuUserId */
381
357
  sessionStore?: SessionStore
382
358
  /**
383
- * Resolves and administers user scopes. Called when building a session (e.g.
384
- * better-auth's `mapSession`), never by the function runner.
359
+ * Resolves and administers user scopes. Called when building a session,
360
+ * never by the function runner.
385
361
  */
386
362
  scopeService?: ScopeService
387
363
  /**
388
- * The project's resolved auth instance, built once by the factory an auth
389
- * package registers (e.g. `pikkuBetterAuth`) and injected by the generated
390
- * `pikkuServices` wrapper which is why service factories are forbidden from
391
- * returning it themselves. Absent when the project wires no auth.
364
+ * Built once by the factory an auth package registers and injected by the
365
+ * generated `pikkuServices` wrapper service factories must not return it
366
+ * themselves. Absent when the project wires no auth.
392
367
  */
393
368
  auth?: () => Promise<AuthInstance>
394
369
  }
395
370
 
396
- /**
397
- * Represents different forms of wire within Pikku and the outside world.
398
- */
399
371
  export type PikkuWire<
400
372
  In = unknown,
401
373
  Out = unknown,
@@ -407,7 +379,7 @@ export type PikkuWire<
407
379
  TypedWorkflow extends PikkuWorkflowWire | never = PikkuWorkflowWire,
408
380
  TriggerOutput = unknown,
409
381
  TypedScenario extends PikkuScenarioWire | never = PikkuScenarioWire,
410
- TypedActors extends ScenarioActors = ScenarioActors,
382
+ TypedActors extends ScenarioPersonas = ScenarioPersonas,
411
383
  > = {
412
384
  /** Always present — lazily initialised on first access for every function invocation */
413
385
  rpc: TypedRPC
@@ -416,23 +388,24 @@ export type PikkuWire<
416
388
  wireId: string
417
389
  /** Trace ID for distributed tracing — propagated across remote RPC calls via x-trace-id header */
418
390
  traceId: string
419
- /** Function id for the current invocation */
420
391
  functionId: string
421
- /** The addon instance namespace (wireAddon name) currently executing, if any */
422
392
  addonNamespace: string
423
393
  http: PikkuHTTP<In>
424
394
  mcp: PikkuMCP<MCPTools>
395
+ // `channel.remote` is typed off the same generated map as `rpc.remote`, so
396
+ // calling back into the connected peer is checked against the app's own
397
+ // function contracts rather than being a string and an `any`.
425
398
  channel: [IsChannel] extends [null]
426
- ? PikkuChannel<unknown, Out>
427
- : PikkuChannel<unknown, Out> | undefined
399
+ ? PikkuChannel<unknown, Out, TypedRPC['remote']>
400
+ : PikkuChannel<unknown, Out, TypedRPC['remote']> | undefined
428
401
  scheduledTask: PikkuScheduledTask
429
402
  queue: PikkuQueue
430
- cli: PikkuCLI
403
+ cli: PikkuCLI<TypedRPC['remote']>
431
404
  workflow: TypedWorkflow
432
405
  scenario: TypedScenario
433
406
  actors: TypedActors
434
407
  /** Present on every scenario step invocation */
435
- scenarioStep: PikkuScenarioStepWire<ScenarioActorOf<TypedActors>>
408
+ scenarioStep: PikkuScenarioStepWire<ScenarioPersonaOf<TypedActors>>
436
409
  /** Present only when the runner provisioned a browser for this step */
437
410
  browser: PikkuBrowserWire
438
411
  workflowStep: WorkflowStepWire
@@ -442,15 +415,11 @@ export type PikkuWire<
442
415
  session: HasInitialSession extends true
443
416
  ? UserSession
444
417
  : UserSession | undefined
445
- /** Update and persist the current session */
446
418
  setSession: (session: UserSession) => Promise<void> | void
447
- /** Clear and persist the current session */
448
419
  clearSession: () => Promise<void> | void
449
420
  /** Fetch the latest session (may read from backing store) */
450
421
  getSession: () => Promise<UserSession> | UserSession | undefined
451
- /** Whether the session was modified during this run */
452
422
  hasSessionChanged: () => boolean
453
- /** The resolved user identity for credential lookups */
454
423
  pikkuUserId: string
455
424
  /** Set a credential value (available in middleware) */
456
425
  setCredential: (name: string, value: unknown) => void
@@ -460,20 +429,28 @@ export type PikkuWire<
460
429
  getCredentials: () =>
461
430
  | Record<string, unknown>
462
431
  | Promise<Record<string, unknown>>
463
- /** Resolved function audit metadata for this invocation, if enabled */
464
432
  audit: {
465
433
  durability: AuditDurability
466
434
  }
435
+ /**
436
+ * Declare that everything after this line changes something.
437
+ *
438
+ * Present only on functions that are not `readonly` — a read has nothing to
439
+ * declare. Throws `AbandonedError` if whatever asked for this work has
440
+ * already gone away (an interrupted agent run, a disconnected client), so the
441
+ * mutation never runs and the abort is clean. Otherwise it marks the call as
442
+ * mutating, so an interrupt landing after this point is reported rather than
443
+ * silently discarded.
444
+ *
445
+ * Cooperative: a function that never calls it is assumed to have changed
446
+ * something, which is the safe default.
447
+ */
448
+ beginChanges: () => Promise<void>
467
449
  }>
468
450
 
469
- /**
470
- * Wire object as constructed by runners, before rpc is lazily added by the function runner.
471
- */
451
+ /** Wire as constructed by runners, before the function runner lazily adds `rpc`. */
472
452
  export type PikkuRawWire = Omit<PikkuWire, 'rpc'>
473
453
 
474
- /**
475
- * A function that can wrap an wire and be called before or after
476
- */
477
454
  export type CorePikkuMiddleware<
478
455
  SingletonServices extends CoreSingletonServices = CoreSingletonServices,
479
456
  UserSession extends CoreUserSession = CoreUserSession,
@@ -484,14 +461,8 @@ export type CorePikkuMiddleware<
484
461
  ) => Promise<void>
485
462
 
486
463
  /**
487
- * Priority levels for middleware execution order.
488
- * Lower priority runs first (outermost in the onion model).
489
- *
490
- * - `highest` — Runs first (outermost). Use for telemetry, request tracing.
491
- * - `high` — Runs early. Use for CORS, rate limiting.
492
- * - `medium` — Default. Use for auth, most user middleware.
493
- * - `low` — Runs late. Use for post-auth processing.
494
- * - `lowest` — Runs last (innermost, closest to function). Use for inner telemetry.
464
+ * Execution order: `highest` runs first (outermost in the onion), `lowest`
465
+ * runs last, closest to the function.
495
466
  */
496
467
  export type MiddlewarePriority =
497
468
  | 'highest'
@@ -500,40 +471,23 @@ export type MiddlewarePriority =
500
471
  | 'low'
501
472
  | 'lowest'
502
473
 
503
- /**
504
- * Configuration object for creating middleware with metadata
505
- *
506
- * @template SingletonServices - The singleton services type
507
- * @template UserSession - The user session type
508
- */
509
474
  export type CorePikkuMiddlewareConfig<
510
475
  SingletonServices extends CoreSingletonServices = CoreSingletonServices,
511
476
  UserSession extends CoreUserSession = CoreUserSession,
512
477
  > = {
513
- /** The middleware function */
514
478
  func: CorePikkuMiddleware<SingletonServices, UserSession>
515
- /** Optional human-readable name for the middleware */
516
479
  name?: string
517
- /** Optional description of what the middleware does */
518
480
  description?: string
519
481
  /** Execution priority. Lower runs first (outermost). Defaults to 'medium'. */
520
482
  priority?: MiddlewarePriority
521
483
  }
522
484
 
523
- /**
524
- * A factory function that takes input and returns middleware
525
- * Used when middleware needs configuration/input parameters
526
- */
527
485
  export type CorePikkuMiddlewareFactory<
528
486
  In = any,
529
487
  SingletonServices extends CoreSingletonServices = CoreSingletonServices,
530
488
  UserSession extends CoreUserSession = CoreUserSession,
531
489
  > = (input: In) => CorePikkuMiddleware<SingletonServices, UserSession>
532
490
 
533
- /**
534
- * A group of middleware (combination of regular middleware and factories)
535
- * Used with addMiddleware() and addHTTPMiddleware() to group related middleware together
536
- */
537
491
  export type CorePikkuMiddlewareGroup<
538
492
  SingletonServices extends CoreSingletonServices = CoreSingletonServices,
539
493
  UserSession extends CoreUserSession = CoreUserSession,
@@ -542,31 +496,6 @@ export type CorePikkuMiddlewareGroup<
542
496
  | CorePikkuMiddlewareFactory<any, SingletonServices, UserSession>
543
497
  >
544
498
 
545
- /**
546
- * Factory function for creating middleware with tree-shaking support
547
- * Supports both direct function and configuration object syntax
548
- *
549
- * @example
550
- * ```typescript
551
- * // Direct function syntax
552
- * export const logMiddleware = pikkuMiddleware(
553
- * async ({ logger }, next) => {
554
- * logger.info('Request started')
555
- * await next()
556
- * }
557
- * )
558
- *
559
- * // Configuration object syntax with metadata
560
- * export const logMiddleware = pikkuMiddleware({
561
- * name: 'Request Logger',
562
- * description: 'Logs request information',
563
- * func: async ({ logger }, next) => {
564
- * logger.info('Request started')
565
- * await next()
566
- * }
567
- * })
568
- * ```
569
- */
570
499
  export const pikkuMiddleware = <
571
500
  SingletonServices extends CoreSingletonServices = CoreSingletonServices,
572
501
  UserSession extends CoreUserSession = CoreUserSession,
@@ -586,23 +515,6 @@ export const pikkuMiddleware = <
586
515
  return func
587
516
  }
588
517
 
589
- /**
590
- * Factory function for creating middleware factories
591
- * Use this when your middleware needs configuration/input parameters
592
- *
593
- * @example
594
- * ```typescript
595
- * export const logMiddleware = pikkuMiddlewareFactory<LogOptions>(({
596
- * message,
597
- * level = 'info'
598
- * }) => {
599
- * return pikkuMiddleware(async ({ logger }, next) => {
600
- * logger[level](message)
601
- * await next()
602
- * })
603
- * })
604
- * ```
605
- */
606
518
  export const pikkuMiddlewareFactory = <In = any>(
607
519
  factory: CorePikkuMiddlewareFactory<In>
608
520
  ): CorePikkuMiddlewareFactory<In> => {
@@ -633,20 +545,22 @@ export const pikkuAIMiddleware = <
633
545
  hooks: PikkuAIMiddlewareHooks<State, SingletonServices>
634
546
  ): PikkuAIMiddlewareHooks<State, SingletonServices> => hooks
635
547
 
636
- /**
637
- * Represents the core services used by Pikku, including singleton services.
638
- */
639
548
  export type CoreServices<SingletonServices = CoreSingletonServices> =
640
549
  SingletonServices
641
550
 
551
+ /** Strips `secrets` from a services type. */
552
+ export type SecretlessServices<Services> = Omit<Services, 'secrets'>
553
+
554
+ /** The constraint every function-, permission- and auth-facing type is bounded by. */
555
+ export type CoreSecretlessSingletonServices<
556
+ Config extends CoreConfig = CoreConfig,
557
+ > = SecretlessServices<CoreSingletonServices<Config>>
558
+
642
559
  export type WireServices<
643
560
  SingletonServices extends CoreSingletonServices = CoreSingletonServices,
644
561
  Services = CoreServices<SingletonServices>,
645
562
  > = Omit<Services, keyof SingletonServices | 'session'>
646
563
 
647
- /**
648
- * Defines a function type for creating singleton services from the given configuration.
649
- */
650
564
  export type CreateSingletonServices<
651
565
  Config extends CoreConfig,
652
566
  SingletonServices extends CoreSingletonServices,
@@ -655,9 +569,6 @@ export type CreateSingletonServices<
655
569
  existingServices?: Partial<SingletonServices>
656
570
  ) => Promise<SingletonServices>
657
571
 
658
- /**
659
- * Defines a function type for creating session-specific services.
660
- */
661
572
  export type CreateWireServices<
662
573
  SingletonServices extends CoreSingletonServices = CoreSingletonServices,
663
574
  Services extends CoreServices<SingletonServices> =
@@ -668,15 +579,11 @@ export type CreateWireServices<
668
579
  wire: PikkuRawWire
669
580
  ) => Promise<WireServices<Services, SingletonServices>>
670
581
 
671
- /**
672
- * Defines a function type for creating config.
673
- */
674
582
  export type CreateConfig<
675
583
  Config extends CoreConfig,
676
584
  RemainingArgs extends any[] = unknown[],
677
585
  > = (variables?: VariablesService, ...args: RemainingArgs) => Promise<Config>
678
586
 
679
- /** Server lifecycle hooks for startup and shutdown phases. */
680
587
  export type ServerLifecycle<
681
588
  SingletonServices extends CoreSingletonServices = CoreSingletonServices,
682
589
  > = {
@@ -686,9 +593,6 @@ export type ServerLifecycle<
686
593
  afterStop?: (services: SingletonServices) => void | Promise<void>
687
594
  }
688
595
 
689
- /**
690
- * Represents the documentation for a route, including summary, description, tags, and errors.
691
- */
692
596
  export type CommonWireMeta = {
693
597
  pikkuFuncId: string
694
598
  packageName?: string
@@ -704,9 +608,8 @@ export type CommonWireMeta = {
704
608
  }
705
609
 
706
610
  /**
707
- * Dependency security audit artifact — the shape of `.pikku/audit.json` written
708
- * by `pikku audit`. Canonical home for the type shared by the CLI (writer), the
709
- * console addon (reader), and the console UI (renderer).
611
+ * The shape of `.pikku/audit.json`. Shared by the CLI (writer), the console
612
+ * addon (reader) and the console UI (renderer).
710
613
  */
711
614
  export type SecuritySeverity = 'critical' | 'high' | 'moderate' | 'low' | 'info'
712
615
  export type SecurityUpdateLevel = 'major' | 'minor' | 'patch' | 'unknown'
@@ -752,16 +655,21 @@ export interface SecurityAuditReport {
752
655
  summary: SecurityAuditSummary
753
656
  }
754
657
 
755
- /**
756
- * Serialized error for storage
757
- */
758
658
  export interface SerializedError {
759
659
  message: string
760
660
  stack?: string
761
661
  code?: string
762
- // True when the original error was a deliberate, expected failure (a
763
- // PikkuError). Survives the step-boundary rehydration so the workflow runner
764
- // can log the message alone instead of a stack trace. See isExpectedError.
662
+ // Set for a deliberate PikkuError; survives step-boundary rehydration so
663
+ // the workflow runner logs the message alone rather than a stack trace.
765
664
  expected?: boolean
766
665
  [key: string]: any
767
666
  }
667
+
668
+ /**
669
+ * A generated schema's declaration site, used by the credential/secret/variable
670
+ * definition validators to point conflicting definitions at their source.
671
+ */
672
+ export interface SchemaRefLike {
673
+ variableName: string
674
+ sourceFile: string
675
+ }