@pikku/core 0.12.72 → 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 (811) hide show
  1. package/CHANGELOG.md +793 -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 +37 -32
  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 -13
  21. package/dist/handle-error.js +0 -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 +5 -39
  47. package/dist/schema.js +5 -39
  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 +0 -99
  213. package/dist/wirings/http/http-runner.js +9 -165
  214. package/dist/wirings/http/http.types.d.ts +14 -55
  215. package/dist/wirings/http/log-http-routes.d.ts +0 -4
  216. package/dist/wirings/http/log-http-routes.js +0 -4
  217. package/dist/wirings/http/pikku-fetch-http-request.d.ts +0 -40
  218. package/dist/wirings/http/pikku-fetch-http-request.js +0 -58
  219. package/dist/wirings/http/pikku-fetch-http-response.js +0 -3
  220. package/dist/wirings/http/routers/path-to-regex.js +2 -13
  221. package/dist/wirings/http/web-request.d.ts +0 -8
  222. package/dist/wirings/http/web-request.js +25 -17
  223. package/dist/wirings/mcp/mcp-runner.d.ts +1 -4
  224. package/dist/wirings/mcp/mcp-runner.js +1 -14
  225. package/dist/wirings/mcp/mcp.types.d.ts +2 -35
  226. package/dist/wirings/oauth2/oauth2.types.d.ts +0 -28
  227. package/dist/wirings/oauth2/oauth2.types.js +0 -3
  228. package/dist/wirings/persona/define-personas.d.ts +28 -0
  229. package/dist/wirings/persona/define-personas.js +27 -0
  230. package/dist/wirings/persona/index.d.ts +21 -0
  231. package/dist/wirings/persona/index.js +17 -0
  232. package/dist/wirings/persona/persona-email.d.ts +37 -0
  233. package/dist/wirings/persona/persona-email.js +69 -0
  234. package/dist/wirings/persona/persona-environments.d.ts +45 -0
  235. package/dist/wirings/persona/persona-environments.js +81 -0
  236. package/dist/wirings/persona/persona-mailbox.d.ts +101 -0
  237. package/dist/wirings/persona/persona-mailbox.js +53 -0
  238. package/dist/wirings/persona/persona.types.d.ts +125 -0
  239. package/dist/wirings/persona/persona.types.js +1 -0
  240. package/dist/wirings/persona/validate-personas.d.ts +53 -0
  241. package/dist/wirings/persona/validate-personas.js +94 -0
  242. package/dist/wirings/queue/index.d.ts +3 -0
  243. package/dist/wirings/queue/index.js +2 -3
  244. package/dist/wirings/queue/queue-identity.d.ts +28 -0
  245. package/dist/wirings/queue/queue-identity.js +102 -0
  246. package/dist/wirings/queue/queue-runner.d.ts +0 -19
  247. package/dist/wirings/queue/queue-runner.js +9 -30
  248. package/dist/wirings/queue/queue.types.d.ts +18 -89
  249. package/dist/wirings/queue/register-queue-helper.d.ts +0 -12
  250. package/dist/wirings/queue/register-queue-helper.js +0 -11
  251. package/dist/wirings/queue/signed-queue-service.d.ts +16 -0
  252. package/dist/wirings/queue/signed-queue-service.js +42 -0
  253. package/dist/wirings/queue/validate-worker-config.d.ts +2 -23
  254. package/dist/wirings/queue/validate-worker-config.js +0 -14
  255. package/dist/wirings/role/define-system-role.d.ts +32 -0
  256. package/dist/wirings/role/define-system-role.js +31 -0
  257. package/dist/wirings/role/index.d.ts +3 -0
  258. package/dist/wirings/role/index.js +2 -0
  259. package/dist/wirings/role/role.types.d.ts +43 -0
  260. package/dist/wirings/role/role.types.js +1 -0
  261. package/dist/wirings/role/validate-role-definitions.d.ts +21 -0
  262. package/dist/wirings/role/validate-role-definitions.js +71 -0
  263. package/dist/wirings/rpc/addon-runner.d.ts +0 -19
  264. package/dist/wirings/rpc/addon-runner.js +0 -51
  265. package/dist/wirings/rpc/remote-addon-auth.d.ts +1 -12
  266. package/dist/wirings/rpc/remote-addon-auth.js +1 -9
  267. package/dist/wirings/rpc/rpc-runner.d.ts +11 -18
  268. package/dist/wirings/rpc/rpc-runner.js +88 -105
  269. package/dist/wirings/rpc/rpc-types.d.ts +7 -6
  270. package/dist/wirings/rpc/wire-addon.d.ts +25 -0
  271. package/dist/wirings/rpc/wire-addon.js +62 -0
  272. package/dist/wirings/rpc/wire-remote-addon.d.ts +3 -28
  273. package/dist/wirings/rpc/wire-remote-addon.js +0 -8
  274. package/dist/wirings/scheduler/log-schedulers.d.ts +0 -4
  275. package/dist/wirings/scheduler/log-schedulers.js +0 -4
  276. package/dist/wirings/scheduler/scheduler-runner.d.ts +0 -1
  277. package/dist/wirings/scheduler/scheduler-runner.js +0 -1
  278. package/dist/wirings/scheduler/scheduler.types.d.ts +1 -14
  279. package/dist/wirings/scope/define-scope.d.ts +32 -0
  280. package/dist/wirings/scope/define-scope.js +31 -0
  281. package/dist/wirings/scope/index.d.ts +1 -1
  282. package/dist/wirings/scope/index.js +1 -1
  283. package/dist/wirings/scope/scope.types.d.ts +7 -9
  284. package/dist/wirings/scope/validate-scope-definitions.d.ts +2 -21
  285. package/dist/wirings/scope/validate-scope-definitions.js +3 -21
  286. package/dist/wirings/secret/index.d.ts +1 -1
  287. package/dist/wirings/secret/index.js +1 -1
  288. package/dist/wirings/secret/secret.types.d.ts +19 -15
  289. package/dist/wirings/secret/secret.types.js +1 -1
  290. package/dist/wirings/secret/validate-secret-definitions.d.ts +2 -4
  291. package/dist/wirings/trigger/trigger-runner.d.ts +0 -27
  292. package/dist/wirings/trigger/trigger-runner.js +1 -24
  293. package/dist/wirings/trigger/trigger.types.d.ts +1 -82
  294. package/dist/wirings/trigger/trigger.types.js +0 -34
  295. package/dist/wirings/variable/index.d.ts +1 -1
  296. package/dist/wirings/variable/index.js +1 -1
  297. package/dist/wirings/variable/validate-variable-definitions.d.ts +2 -4
  298. package/dist/wirings/variable/variable.types.d.ts +1 -13
  299. package/dist/wirings/variable/variable.types.js +1 -1
  300. package/dist/wirings/virtual-user/index.d.ts +27 -0
  301. package/dist/wirings/virtual-user/index.js +8 -0
  302. package/dist/wirings/virtual-user/run-virtual-user.d.ts +92 -0
  303. package/dist/wirings/virtual-user/run-virtual-user.js +478 -0
  304. package/dist/wirings/virtual-user/virtual-user-agents.d.ts +38 -0
  305. package/dist/wirings/virtual-user/virtual-user-agents.js +24 -0
  306. package/dist/wirings/virtual-user/virtual-user-catalogue.d.ts +92 -0
  307. package/dist/wirings/virtual-user/virtual-user-catalogue.js +134 -0
  308. package/dist/wirings/virtual-user/virtual-user-derive.d.ts +26 -0
  309. package/dist/wirings/virtual-user/virtual-user-derive.js +137 -0
  310. package/dist/wirings/virtual-user/virtual-user-dispositions.d.ts +79 -0
  311. package/dist/wirings/virtual-user/virtual-user-dispositions.js +128 -0
  312. package/dist/wirings/virtual-user/virtual-user-intents.d.ts +78 -0
  313. package/dist/wirings/virtual-user/virtual-user-intents.js +142 -0
  314. package/dist/wirings/virtual-user/virtual-user-rng.d.ts +24 -0
  315. package/dist/wirings/virtual-user/virtual-user-rng.js +44 -0
  316. package/dist/wirings/virtual-user/virtual-user-target.d.ts +21 -0
  317. package/dist/wirings/virtual-user/virtual-user-target.js +34 -0
  318. package/dist/wirings/virtual-user/virtual-user.types.d.ts +199 -0
  319. package/dist/wirings/virtual-user/virtual-user.types.js +8 -0
  320. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +5 -5
  321. package/dist/wirings/workflow/dsl/workflow-runner.d.ts +0 -4
  322. package/dist/wirings/workflow/dsl/workflow-runner.js +0 -4
  323. package/dist/wirings/workflow/feature.d.ts +0 -19
  324. package/dist/wirings/workflow/feature.js +0 -19
  325. package/dist/wirings/workflow/graph/graph-node.d.ts +0 -98
  326. package/dist/wirings/workflow/graph/graph-node.js +0 -34
  327. package/dist/wirings/workflow/graph/graph-runner.js +6 -41
  328. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +0 -4
  329. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -58
  330. package/dist/wirings/workflow/graph/workflow-graph.types.js +0 -6
  331. package/dist/wirings/workflow/index.d.ts +5 -7
  332. package/dist/wirings/workflow/index.js +3 -17
  333. package/dist/wirings/workflow/pikku-scenario-service.d.ts +87 -5
  334. package/dist/wirings/workflow/pikku-scenario-service.js +204 -42
  335. package/dist/wirings/workflow/pikku-workflow-service.d.ts +7 -459
  336. package/dist/wirings/workflow/pikku-workflow-service.js +58 -551
  337. package/dist/wirings/workflow/run-timeline.d.ts +0 -47
  338. package/dist/wirings/workflow/run-timeline.js +0 -22
  339. package/dist/wirings/workflow/scenario-cookie-jar.d.ts +0 -23
  340. package/dist/wirings/workflow/scenario-cookie-jar.js +0 -16
  341. package/dist/wirings/workflow/scenario-poll.d.ts +0 -15
  342. package/dist/wirings/workflow/scenario-poll.js +0 -12
  343. package/dist/wirings/workflow/scenario-prose.d.ts +0 -28
  344. package/dist/wirings/workflow/scenario-prose.js +0 -18
  345. package/dist/wirings/workflow/scenario-step-guards.d.ts +0 -13
  346. package/dist/wirings/workflow/scenario-step-guards.js +1 -14
  347. package/dist/wirings/workflow/scenario-step.types.d.ts +72 -6
  348. package/dist/wirings/workflow/scenario-step.types.js +5 -1
  349. package/dist/wirings/workflow/scenario-surface.d.ts +16 -0
  350. package/dist/wirings/workflow/scenario-surface.js +56 -0
  351. package/dist/wirings/workflow/workflow-invocation-id.d.ts +0 -18
  352. package/dist/wirings/workflow/workflow-invocation-id.js +2 -22
  353. package/dist/wirings/workflow/workflow-queue-workers.d.ts +0 -20
  354. package/dist/wirings/workflow/workflow-queue-workers.js +0 -19
  355. package/dist/wirings/workflow/workflow.types.d.ts +0 -197
  356. package/knowledge/decisions/index.md +19 -0
  357. package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +49 -0
  358. package/knowledge/decisions/internals/actor-flow-conversations-seed-a-hidden-kickoff-message.md +23 -0
  359. package/knowledge/decisions/internals/actor-flow-drives-the-target-through-a-transport-seam.md +24 -0
  360. package/knowledge/decisions/internals/actor-flow-verdicts-are-llm-self-evaluations.md +25 -0
  361. package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +26 -0
  362. package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +33 -0
  363. package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +28 -0
  364. package/knowledge/decisions/internals/ai-agent-agui-bridge-obeys-the-client-ordering-contract.md +29 -0
  365. package/knowledge/decisions/internals/ai-agent-audio-chunks-carry-the-format-the-provider-returned.md +20 -0
  366. package/knowledge/decisions/internals/ai-agent-credential-suspensions-hide-the-tool-result.md +26 -0
  367. package/knowledge/decisions/internals/ai-agent-delegate-and-supervise-hide-different-text.md +26 -0
  368. package/knowledge/decisions/internals/ai-agent-llm-tool-arguments-have-nulls-stripped.md +23 -0
  369. package/knowledge/decisions/internals/ai-agent-model-config-stays-a-single-resolution-seam.md +25 -0
  370. package/knowledge/decisions/internals/ai-agent-onerror-hooks-cannot-change-the-failure.md +22 -0
  371. package/knowledge/decisions/internals/ai-agent-runner-methods-must-keep-their-receiver.md +22 -0
  372. package/knowledge/decisions/internals/ai-agent-stream-persistence-is-best-effort.md +27 -0
  373. package/knowledge/decisions/internals/ai-agent-sub-agents-inherit-the-parent-context-block.md +26 -0
  374. package/knowledge/decisions/internals/ai-agent-tool-execute-failures-are-logged-unconditionally.md +25 -0
  375. package/knowledge/decisions/internals/ai-agent-voice-input-transcribes-audio-parts-in-place.md +22 -0
  376. package/knowledge/decisions/internals/ai-agent-working-memory-is-persisted-only-when-valid.md +25 -0
  377. package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +30 -0
  378. package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +31 -0
  379. package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +29 -0
  380. package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +28 -0
  381. package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +27 -0
  382. package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +28 -0
  383. package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +34 -0
  384. package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +29 -0
  385. package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +34 -0
  386. package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +44 -0
  387. package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +39 -0
  388. package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +42 -0
  389. package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +39 -0
  390. package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +43 -0
  391. package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +38 -0
  392. package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +44 -0
  393. package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +27 -0
  394. package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +32 -0
  395. package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +28 -0
  396. package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +31 -0
  397. package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +26 -0
  398. package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +32 -0
  399. package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +28 -0
  400. package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +30 -0
  401. package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +26 -0
  402. package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +28 -0
  403. package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +32 -0
  404. package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +26 -0
  405. package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +25 -0
  406. package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +26 -0
  407. package/knowledge/decisions/internals/index.md +113 -0
  408. package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +25 -0
  409. package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +26 -0
  410. package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +24 -0
  411. package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +28 -0
  412. package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +27 -0
  413. package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +31 -0
  414. package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +32 -0
  415. package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +27 -0
  416. package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +26 -0
  417. package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +27 -0
  418. package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +30 -0
  419. package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +28 -0
  420. package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +30 -0
  421. package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +29 -0
  422. package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +27 -0
  423. package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +40 -0
  424. package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +26 -0
  425. package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +33 -0
  426. package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +26 -0
  427. package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +26 -0
  428. package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +25 -0
  429. package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +58 -0
  430. package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +34 -0
  431. package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +42 -0
  432. package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +38 -0
  433. package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +29 -0
  434. package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +42 -0
  435. package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +25 -0
  436. package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +29 -0
  437. package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +43 -0
  438. package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +29 -0
  439. package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +42 -0
  440. package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +33 -0
  441. package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +32 -0
  442. package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +31 -0
  443. package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +39 -0
  444. package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +29 -0
  445. package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +33 -0
  446. package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +37 -0
  447. package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +50 -0
  448. package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +43 -0
  449. package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +32 -0
  450. package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +18 -0
  451. package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +34 -0
  452. package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +26 -0
  453. package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +33 -0
  454. package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +27 -0
  455. package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +34 -0
  456. package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +38 -0
  457. package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +30 -0
  458. package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +26 -0
  459. package/knowledge/decisions/security/actor-flow-missing-approval-decisions-default-to-denied.md +22 -0
  460. package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +27 -0
  461. package/knowledge/decisions/security/actor-sign-in-only-works-for-actor-flagged-users.md +27 -0
  462. package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +43 -0
  463. package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +52 -0
  464. package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +46 -0
  465. package/knowledge/decisions/security/ai-agent-approval-forwarding-requires-a-symbol-brand.md +27 -0
  466. package/knowledge/decisions/security/ai-agent-credential-requests-are-symbol-branded.md +37 -0
  467. package/knowledge/decisions/security/ai-agent-gate-requires-a-session-only-when-auth-is-true.md +31 -0
  468. package/knowledge/decisions/security/ai-agent-ownership-failures-never-echo-the-resource.md +23 -0
  469. package/knowledge/decisions/security/ai-agent-resume-re-runs-the-authorization-gate.md +22 -0
  470. package/knowledge/decisions/security/ai-agent-sessionless-deployments-have-no-thread-ownership.md +39 -0
  471. package/knowledge/decisions/security/ai-agent-thread-ownership-composes-the-session-principal.md +30 -0
  472. package/knowledge/decisions/security/ai-agent-tool-filtering-reads-the-live-function-config.md +24 -0
  473. package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +30 -0
  474. package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +49 -0
  475. package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +76 -0
  476. package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +39 -0
  477. package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +37 -0
  478. package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +31 -0
  479. package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +30 -0
  480. package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +40 -0
  481. package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +33 -0
  482. package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +46 -0
  483. package/knowledge/decisions/security/index.md +55 -0
  484. package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +27 -0
  485. package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +40 -0
  486. package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +31 -0
  487. package/knowledge/decisions/security/pikku-carries-actor-scopes-as-data-and-the-app-grants-them.md +26 -0
  488. package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +69 -0
  489. package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +39 -0
  490. package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +34 -0
  491. package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +49 -0
  492. package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +30 -0
  493. package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +28 -0
  494. package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +34 -0
  495. package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +37 -0
  496. package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +25 -0
  497. package/knowledge/decisions/security/workflow-actor-steps-always-use-the-real-transport.md +34 -0
  498. package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +40 -0
  499. package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +32 -0
  500. package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-actor-and-per-scenario.md +32 -0
  501. package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +31 -0
  502. package/knowledge/index.md +24 -0
  503. package/knowledge/questions/index.md +15 -0
  504. package/package.json +4 -1
  505. package/run-tests.sh +0 -0
  506. package/src/crypto-utils.test.ts +460 -19
  507. package/src/crypto-utils.ts +283 -55
  508. package/src/data-classification.ts +1 -7
  509. package/src/dev/hot-reload.test.ts +0 -4
  510. package/src/dev/hot-reload.ts +11 -30
  511. package/src/dev/module-runner.ts +7 -32
  512. package/src/dev/reload-meta.ts +9 -29
  513. package/src/errors/error-handler.ts +20 -35
  514. package/src/errors/error.test.ts +30 -1
  515. package/src/errors/errors.ts +73 -157
  516. package/src/function/abort-scope.test.ts +97 -0
  517. package/src/function/abort-scope.ts +80 -0
  518. package/src/function/function-runner.test.ts +0 -7
  519. package/src/function/function-runner.ts +62 -32
  520. package/src/function/functions.types.ts +56 -136
  521. package/src/function/list.types.test.ts +3 -25
  522. package/src/function/list.types.ts +12 -62
  523. package/src/handle-error.ts +0 -18
  524. package/src/index.ts +60 -1
  525. package/src/middleware/auth-apikey.test.ts +0 -1
  526. package/src/middleware/auth-apikey.ts +0 -17
  527. package/src/middleware/auth-bearer.test.ts +0 -3
  528. package/src/middleware/auth-bearer.ts +3 -40
  529. package/src/middleware/auth-cookie.test.ts +0 -6
  530. package/src/middleware/auth-cookie.ts +2 -26
  531. package/src/middleware/cors.test.ts +34 -0
  532. package/src/middleware/cors.ts +12 -33
  533. package/src/middleware/remote-auth.test.ts +24 -9
  534. package/src/middleware/remote-auth.ts +10 -2
  535. package/src/middleware/telemetry.ts +2 -31
  536. package/src/middleware-runner.test.ts +0 -2
  537. package/src/middleware-runner.ts +5 -74
  538. package/src/permissions.test.ts +30 -0
  539. package/src/permissions.ts +24 -74
  540. package/src/pikku-request.ts +0 -6
  541. package/src/pikku-state.ts +2 -30
  542. package/src/production-barrels-stay-lean.test.ts +110 -0
  543. package/src/remote.test.ts +172 -0
  544. package/src/remote.ts +17 -7
  545. package/src/schema.ts +5 -39
  546. package/src/scopes.ts +7 -48
  547. package/src/services/ai-agent-runner-service.ts +20 -0
  548. package/src/services/ai-embedding-service.ts +3 -25
  549. package/src/services/audit-service.ts +1 -2
  550. package/src/services/content-service.ts +1 -46
  551. package/src/services/credential-service.ts +3 -40
  552. package/src/services/credential-wire-service.test.ts +0 -2
  553. package/src/services/deployment-service.ts +3 -9
  554. package/src/services/gateway-service.ts +0 -15
  555. package/src/services/{http-scenario-actors-converse.test.ts → http-personas-converse.test.ts} +38 -9
  556. package/src/services/{http-scenario-actors.test.ts → http-personas.test.ts} +39 -22
  557. package/src/services/{http-scenario-actors.ts → http-personas.ts} +85 -45
  558. package/src/services/in-memory-queue-service.ts +1 -15
  559. package/src/services/in-memory-trigger-service.ts +1 -18
  560. package/src/services/in-memory-workflow-service.test.ts +0 -13
  561. package/src/services/in-memory-workflow-service.ts +4 -38
  562. package/src/services/index.ts +20 -15
  563. package/src/services/istanbul-coverage-service.ts +2 -8
  564. package/src/services/jwt-service.ts +1 -16
  565. package/src/services/local-content.test.ts +159 -27
  566. package/src/services/local-content.ts +55 -23
  567. package/src/services/local-gateway-service.ts +2 -17
  568. package/src/services/local-secrets.ts +0 -4
  569. package/src/services/logger-console.test.ts +0 -1
  570. package/src/services/logger-console.ts +3 -7
  571. package/src/services/logger.ts +2 -37
  572. package/src/services/meta-service.test.ts +1 -5
  573. package/src/services/meta-service.ts +41 -61
  574. package/src/services/{scenario-actors-service.ts → personas-service.ts} +48 -43
  575. package/src/services/pikku-user-id.ts +0 -4
  576. package/src/services/queue-webhook-service.ts +9 -41
  577. package/src/services/scheduler-service.ts +1 -50
  578. package/src/services/schema-service.ts +1 -24
  579. package/src/services/scope-service.ts +50 -34
  580. package/src/services/scoped-secret-service.ts +0 -4
  581. package/src/services/secret-host-binding.test.ts +138 -0
  582. package/src/services/secret-host-binding.ts +51 -0
  583. package/src/services/secret-service.ts +5 -33
  584. package/src/services/secretless.test.ts +54 -0
  585. package/src/services/secretless.ts +29 -0
  586. package/src/services/stub-tracker.ts +8 -18
  587. package/src/services/system-role-guard.test.ts +93 -0
  588. package/src/services/system-role-guard.ts +71 -0
  589. package/src/services/trigger-service.ts +0 -12
  590. package/src/services/typed-secret-service.ts +1 -7
  591. package/src/services/v8-coverage-service.ts +3 -6
  592. package/src/services/variables-service.ts +1 -8
  593. package/src/services/webhook-service.ts +19 -63
  594. package/src/services/workflow-service.ts +3 -20
  595. package/src/testing/service-tests.ts +0 -26
  596. package/src/time-utils.ts +1 -19
  597. package/src/types/core.types.ts +116 -229
  598. package/src/types/state.types.ts +7 -9
  599. package/src/utils/hmac.ts +4 -10
  600. package/src/utils/safe-fetch.ts +13 -54
  601. package/src/utils.test.ts +11 -2
  602. package/src/utils.ts +6 -15
  603. package/src/wirings/actor-flow/actor-flow.types.ts +1 -34
  604. package/src/wirings/actor-flow/index.ts +0 -9
  605. package/src/wirings/actor-flow/run-conversation.test.ts +11 -6
  606. package/src/wirings/actor-flow/run-conversation.ts +19 -12
  607. package/src/wirings/ai-agent/ai-agent-agui.test.ts +75 -10
  608. package/src/wirings/ai-agent/ai-agent-agui.ts +36 -17
  609. package/src/wirings/ai-agent/ai-agent-helpers.ts +20 -0
  610. package/src/wirings/ai-agent/ai-agent-interrupt.test.ts +842 -0
  611. package/src/wirings/ai-agent/ai-agent-interrupt.ts +399 -0
  612. package/src/wirings/ai-agent/ai-agent-memory.ts +0 -2
  613. package/src/wirings/ai-agent/ai-agent-model-config.ts +1 -9
  614. package/src/wirings/ai-agent/ai-agent-prepare.test.ts +202 -31
  615. package/src/wirings/ai-agent/ai-agent-prepare.ts +82 -138
  616. package/src/wirings/ai-agent/ai-agent-registry.test.ts +191 -6
  617. package/src/wirings/ai-agent/ai-agent-registry.ts +18 -1
  618. package/src/wirings/ai-agent/ai-agent-resume-authorization.test.ts +0 -2
  619. package/src/wirings/ai-agent/ai-agent-runner.test.ts +11 -9
  620. package/src/wirings/ai-agent/ai-agent-runner.ts +67 -33
  621. package/src/wirings/ai-agent/ai-agent-stream.test.ts +205 -103
  622. package/src/wirings/ai-agent/ai-agent-stream.ts +192 -75
  623. package/src/wirings/ai-agent/ai-agent-thread-ownership.test.ts +301 -0
  624. package/src/wirings/ai-agent/ai-agent.types.ts +85 -4
  625. package/src/wirings/ai-agent/index.ts +35 -3
  626. package/src/wirings/ai-agent/voice-input.test.ts +72 -7
  627. package/src/wirings/ai-agent/voice-input.ts +48 -3
  628. package/src/wirings/ai-agent/voice-output.test.ts +422 -0
  629. package/src/wirings/ai-agent/voice-output.ts +216 -56
  630. package/src/wirings/channel/channel-common.ts +15 -20
  631. package/src/wirings/channel/channel-handler.test.ts +50 -0
  632. package/src/wirings/channel/channel-handler.ts +32 -11
  633. package/src/wirings/channel/channel-host-rpc.test.ts +150 -0
  634. package/src/wirings/channel/channel-host-rpc.ts +69 -0
  635. package/src/wirings/channel/channel-middleware-runner.test.ts +0 -1
  636. package/src/wirings/channel/channel-middleware-runner.ts +0 -12
  637. package/src/wirings/channel/channel-rpc-registry.ts +116 -0
  638. package/src/wirings/channel/channel-rpc-responder.ts +117 -0
  639. package/src/wirings/channel/channel-rpc-service.ts +146 -0
  640. package/src/wirings/channel/channel-rpc-validators.ts +65 -0
  641. package/src/wirings/channel/channel-rpc.test.ts +820 -0
  642. package/src/wirings/channel/channel-rpc.ts +5 -0
  643. package/src/wirings/channel/channel-rpc.types.ts +150 -0
  644. package/src/wirings/channel/channel-runner.ts +0 -14
  645. package/src/wirings/channel/channel-store.ts +0 -10
  646. package/src/wirings/channel/channel.types.ts +19 -8
  647. package/src/wirings/channel/define-channel-routes.ts +0 -20
  648. package/src/wirings/channel/eventhub-service.ts +0 -18
  649. package/src/wirings/channel/index.ts +35 -0
  650. package/src/wirings/channel/local/local-channel-handler.ts +3 -1
  651. package/src/wirings/channel/local/local-channel-runner.test.ts +0 -10
  652. package/src/wirings/channel/local/local-channel-runner.ts +3 -1
  653. package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -13
  654. package/src/wirings/channel/local/local-eventhub-service.ts +2 -37
  655. package/src/wirings/channel/log-channels.ts +0 -4
  656. package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +83 -2
  657. package/src/wirings/channel/pikku-abstract-channel-handler.ts +7 -0
  658. package/src/wirings/channel/serverless/serverless-channel-runner.ts +2 -5
  659. package/src/wirings/cli/channel/cli-approval.test.ts +177 -0
  660. package/src/wirings/cli/channel/cli-approval.ts +135 -0
  661. package/src/wirings/cli/channel/cli-channel-runner.ts +4 -26
  662. package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +169 -0
  663. package/src/wirings/cli/channel/cli-raw-channel-runner.ts +59 -16
  664. package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +480 -0
  665. package/src/wirings/cli/channel/cli-raw-client-runner.ts +155 -0
  666. package/src/wirings/cli/channel/index.ts +9 -0
  667. package/src/wirings/cli/cli-runner.test.ts +0 -1
  668. package/src/wirings/cli/cli-runner.ts +46 -88
  669. package/src/wirings/cli/cli.types.ts +14 -3
  670. package/src/wirings/cli/command-parser.test.ts +0 -4
  671. package/src/wirings/cli/command-parser.ts +11 -91
  672. package/src/wirings/cli/define-cli-commands.ts +1 -17
  673. package/src/wirings/credential/credential.types.ts +0 -12
  674. package/src/wirings/credential/{wire-credential.ts → define-credential.ts} +7 -7
  675. package/src/wirings/credential/index.ts +1 -1
  676. package/src/wirings/credential/validate-credential-definitions.ts +2 -4
  677. package/src/wirings/gateway/gateway-runner.test.ts +1 -21
  678. package/src/wirings/gateway/gateway-runner.ts +8 -110
  679. package/src/wirings/gateway/gateway.types.ts +7 -80
  680. package/src/wirings/http/http-routes.test.ts +0 -3
  681. package/src/wirings/http/http-routes.ts +0 -86
  682. package/src/wirings/http/http-runner.test.ts +0 -1
  683. package/src/wirings/http/http-runner.ts +8 -167
  684. package/src/wirings/http/http.types.ts +15 -62
  685. package/src/wirings/http/log-http-routes.ts +0 -4
  686. package/src/wirings/http/pikku-fetch-http-request.test.ts +2 -10
  687. package/src/wirings/http/pikku-fetch-http-request.ts +0 -58
  688. package/src/wirings/http/pikku-fetch-http-response.test.ts +1 -1
  689. package/src/wirings/http/pikku-fetch-http-response.ts +0 -3
  690. package/src/wirings/http/routers/path-to-regex.test.ts +4 -17
  691. package/src/wirings/http/routers/path-to-regex.ts +2 -13
  692. package/src/wirings/http/web-request.test.ts +33 -2
  693. package/src/wirings/http/web-request.ts +30 -17
  694. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -1
  695. package/src/wirings/mcp/mcp-runner.ts +2 -17
  696. package/src/wirings/mcp/mcp.types.ts +7 -42
  697. package/src/wirings/oauth2/oauth2.types.ts +0 -30
  698. package/src/wirings/persona/define-personas.ts +29 -0
  699. package/src/wirings/persona/index.ts +62 -0
  700. package/src/wirings/persona/persona-email.ts +87 -0
  701. package/src/wirings/persona/persona-environments.test.ts +183 -0
  702. package/src/wirings/persona/persona-environments.ts +138 -0
  703. package/src/wirings/persona/persona-mailbox.ts +156 -0
  704. package/src/wirings/persona/persona.test.ts +220 -0
  705. package/src/wirings/persona/persona.types.ts +131 -0
  706. package/src/wirings/persona/validate-personas.ts +133 -0
  707. package/src/wirings/queue/index.ts +13 -3
  708. package/src/wirings/queue/queue-identity.test.ts +453 -0
  709. package/src/wirings/queue/queue-identity.ts +173 -0
  710. package/src/wirings/queue/queue-runner.ts +12 -31
  711. package/src/wirings/queue/queue.types.ts +19 -89
  712. package/src/wirings/queue/register-queue-helper.ts +0 -14
  713. package/src/wirings/queue/signed-queue-service.ts +59 -0
  714. package/src/wirings/queue/validate-worker-config.ts +2 -28
  715. package/src/wirings/role/define-system-role.ts +33 -0
  716. package/src/wirings/role/index.ts +13 -0
  717. package/src/wirings/role/role.test.ts +104 -0
  718. package/src/wirings/role/role.types.ts +47 -0
  719. package/src/wirings/role/validate-role-definitions.ts +93 -0
  720. package/src/wirings/rpc/addon-auth-tags.test.ts +223 -0
  721. package/src/wirings/rpc/addon-runner.ts +0 -56
  722. package/src/wirings/rpc/addon-scopes.test.ts +225 -0
  723. package/src/wirings/rpc/remote-addon-auth.ts +1 -13
  724. package/src/wirings/rpc/rpc-runner.test.ts +186 -2
  725. package/src/wirings/rpc/rpc-runner.ts +145 -127
  726. package/src/wirings/rpc/rpc-types.ts +11 -6
  727. package/src/wirings/rpc/wire-addon.test.ts +43 -1
  728. package/src/wirings/rpc/wire-addon.ts +99 -0
  729. package/src/wirings/rpc/wire-remote-addon.ts +9 -29
  730. package/src/wirings/scheduler/log-schedulers.ts +0 -4
  731. package/src/wirings/scheduler/scheduler-runner.test.ts +1 -8
  732. package/src/wirings/scheduler/scheduler-runner.ts +0 -2
  733. package/src/wirings/scheduler/scheduler.types.ts +1 -14
  734. package/src/wirings/scope/{wire-scope.ts → define-scope.ts} +5 -6
  735. package/src/wirings/scope/index.ts +1 -1
  736. package/src/wirings/scope/scope.test.ts +1 -2
  737. package/src/wirings/scope/scope.types.ts +7 -9
  738. package/src/wirings/scope/validate-scope-definitions.ts +3 -21
  739. package/src/wirings/secret/index.ts +1 -1
  740. package/src/wirings/secret/secret.types.ts +19 -15
  741. package/src/wirings/secret/validate-secret-definitions.ts +2 -4
  742. package/src/wirings/trigger/trigger-runner.ts +1 -27
  743. package/src/wirings/trigger/trigger.types.ts +1 -82
  744. package/src/wirings/variable/index.ts +1 -1
  745. package/src/wirings/variable/validate-variable-definitions.ts +2 -4
  746. package/src/wirings/variable/variable.types.ts +1 -13
  747. package/src/wirings/virtual-user/index.ts +76 -0
  748. package/src/wirings/virtual-user/run-virtual-user.test.ts +765 -0
  749. package/src/wirings/virtual-user/run-virtual-user.ts +671 -0
  750. package/src/wirings/virtual-user/virtual-user-agents.test.ts +65 -0
  751. package/src/wirings/virtual-user/virtual-user-agents.ts +57 -0
  752. package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +215 -0
  753. package/src/wirings/virtual-user/virtual-user-catalogue.ts +184 -0
  754. package/src/wirings/virtual-user/virtual-user-derive.test.ts +398 -0
  755. package/src/wirings/virtual-user/virtual-user-derive.ts +173 -0
  756. package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +63 -0
  757. package/src/wirings/virtual-user/virtual-user-dispositions.ts +213 -0
  758. package/src/wirings/virtual-user/virtual-user-intents.test.ts +208 -0
  759. package/src/wirings/virtual-user/virtual-user-intents.ts +185 -0
  760. package/src/wirings/virtual-user/virtual-user-rng.test.ts +72 -0
  761. package/src/wirings/virtual-user/virtual-user-rng.ts +50 -0
  762. package/src/wirings/virtual-user/virtual-user-target.ts +47 -0
  763. package/src/wirings/virtual-user/virtual-user.types.ts +219 -0
  764. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +5 -4
  765. package/src/wirings/workflow/dsl/workflow-runner.ts +0 -4
  766. package/src/wirings/workflow/feature.ts +0 -19
  767. package/src/wirings/workflow/graph/graph-node.ts +0 -136
  768. package/src/wirings/workflow/graph/graph-runner.test.ts +20 -19
  769. package/src/wirings/workflow/graph/graph-runner.ts +6 -41
  770. package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -4
  771. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -58
  772. package/src/wirings/workflow/index.ts +10 -44
  773. package/src/wirings/workflow/pikku-scenario-service.ts +235 -52
  774. package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -39
  775. package/src/wirings/workflow/pikku-workflow-service.ts +77 -674
  776. package/src/wirings/workflow/run-timeline.test.ts +7 -19
  777. package/src/wirings/workflow/run-timeline.ts +0 -56
  778. package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -1
  779. package/src/wirings/workflow/scenario-cookie-jar.ts +0 -25
  780. package/src/wirings/workflow/scenario-expectations.test.ts +2 -7
  781. package/src/wirings/workflow/scenario-hooks.test.ts +2 -7
  782. package/src/wirings/workflow/scenario-poll.test.ts +0 -2
  783. package/src/wirings/workflow/scenario-poll.ts +0 -15
  784. package/src/wirings/workflow/scenario-prose.ts +0 -28
  785. package/src/wirings/workflow/scenario-service.test.ts +2 -9
  786. package/src/wirings/workflow/scenario-step-guards.ts +1 -14
  787. package/src/wirings/workflow/scenario-step.test.ts +159 -14
  788. package/src/wirings/workflow/scenario-step.types.ts +82 -6
  789. package/src/wirings/workflow/scenario-surface.test.ts +145 -0
  790. package/src/wirings/workflow/scenario-surface.ts +71 -0
  791. package/src/wirings/workflow/workflow-dispatch-durability.test.ts +14 -15
  792. package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -4
  793. package/src/wirings/workflow/workflow-inline-authority.test.ts +169 -0
  794. package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -2
  795. package/src/wirings/workflow/workflow-invocation-id.ts +2 -22
  796. package/src/wirings/workflow/workflow-mirror.test.ts +0 -7
  797. package/src/wirings/workflow/workflow-on-error.test.ts +0 -9
  798. package/src/wirings/workflow/workflow-queue-workers.ts +0 -21
  799. package/src/wirings/workflow/workflow-replay-snapshot.test.ts +8 -7
  800. package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -5
  801. package/src/wirings/workflow/workflow-run-context.test.ts +5 -10
  802. package/src/wirings/workflow/workflow-run-polling.test.ts +0 -5
  803. package/src/wirings/workflow/workflow-step-ordinal.test.ts +19 -4
  804. package/src/wirings/workflow/workflow-step-session.test.ts +0 -7
  805. package/src/wirings/workflow/workflow.types.ts +0 -203
  806. package/tsconfig.tsbuildinfo +1 -1
  807. package/src/middleware/timeout.ts +0 -22
  808. package/src/pikku-response.ts +0 -5
  809. package/src/wirings/mcp/mcp-endpoint-registry.test.d.ts +0 -1
  810. package/src/wirings/workflow/dsl/index.ts +0 -36
  811. package/src/wirings/workflow/graph/index.ts +0 -15
@@ -1,15 +1,17 @@
1
1
  import type {
2
2
  CoreServices,
3
- CoreSingletonServices,
3
+ CoreSecretlessSingletonServices,
4
4
  CoreUserSession,
5
5
  CorePikkuMiddleware,
6
6
  PikkuWire,
7
7
  PickRequired,
8
+ SecretlessServices,
8
9
  } from '../types/core.types.js'
9
10
  import type { PikkuRPC } from '../wirings/rpc/rpc-types.js'
10
11
  import type { StandardSchemaV1 } from '@standard-schema/spec'
11
12
  import type { PikkuError } from '../errors/error-handler.js'
12
13
  import type { CoreNodeConfig } from '../wirings/node/node.types.js'
14
+ import type { ScenarioSurface } from '../wirings/workflow/scenario-step.types.js'
13
15
 
14
16
  /**
15
17
  * @deprecated Use StandardSchemaV1 from @standard-schema/spec instead.
@@ -17,18 +19,11 @@ import type { CoreNodeConfig } from '../wirings/node/node.types.js'
17
19
  */
18
20
  export type ZodLike<T = any> = StandardSchemaV1<T, T>
19
21
 
20
- /**
21
- * Represents a core API function that performs an operation using core services and a user session.
22
- *
23
- * @template In - The input type.
24
- * @template Out - The output type.
25
- * @template Services - The services type, defaults to `CoreServices`.
26
- * @template Wire - The wire type, defaults to `PikkuWire<In, Out>`.
27
- */
28
22
  export type CorePikkuFunction<
29
23
  In,
30
24
  Out,
31
- Services extends CoreSingletonServices = CoreServices,
25
+ Services extends CoreSecretlessSingletonServices =
26
+ SecretlessServices<CoreServices>,
32
27
  Session extends CoreUserSession = CoreUserSession,
33
28
  Wire extends PikkuWire<In, Out, true, Session, PikkuRPC, null, string> =
34
29
  PikkuWire<In, Out, true, Session>,
@@ -38,18 +33,11 @@ export type CorePikkuFunction<
38
33
  wire: Wire
39
34
  ) => Wire['channel'] extends null ? Promise<Out> : Promise<Out> | Promise<void>
40
35
 
41
- /**
42
- * Represents a core API function that can be used without a session.
43
- *
44
- * @template In - The input type.
45
- * @template Out - The output type.
46
- * @template Services - The services type, defaults to `CoreServices`.
47
- * @template Wire - The wire type, defaults to `PikkuWire<In, Out>`.
48
- */
49
36
  export type CorePikkuFunctionSessionless<
50
37
  In,
51
38
  Out,
52
- Services extends CoreSingletonServices = CoreServices,
39
+ Services extends CoreSecretlessSingletonServices =
40
+ SecretlessServices<CoreServices>,
53
41
  Session extends CoreUserSession = CoreUserSession,
54
42
  Wire extends PikkuWire<In, Out, false, Session, PikkuRPC, null, string> =
55
43
  PikkuWire<In, Out, false, Session>,
@@ -59,69 +47,30 @@ export type CorePikkuFunctionSessionless<
59
47
  wire: Wire
60
48
  ) => Wire['channel'] extends null ? Promise<Out> : Promise<Out> | Promise<void>
61
49
 
62
- /**
63
- * Represents a function that checks permissions for a given operation.
64
- *
65
- * @template In - The input type.
66
- * @template Services - The services type, defaults to `CoreServices`.
67
- * @template Session - The session type, defaults to `CoreUserSession`.
68
- */
69
50
  export type CorePikkuPermission<
70
51
  In = any,
71
- Services extends CoreSingletonServices = CoreServices,
52
+ Services extends CoreSecretlessSingletonServices =
53
+ SecretlessServices<CoreServices>,
72
54
  Wire extends PikkuWire<In, never, false, any, PikkuRPC, never, never> =
73
55
  PikkuWire<In, never, false, any, PikkuRPC, never, never>,
74
56
  > = (services: Services, data: In, wire: Wire) => Promise<boolean>
75
57
 
76
- /**
77
- * Configuration object for creating a permission with metadata
78
- *
79
- * @template In - The input type.
80
- * @template Services - The services type, defaults to `CoreServices`.
81
- * @template Session - The session type, defaults to `CoreUserSession`.
82
- */
83
58
  export type CorePikkuPermissionConfig<
84
59
  In = any,
85
- Services extends CoreSingletonServices = CoreServices,
60
+ Services extends CoreSecretlessSingletonServices =
61
+ SecretlessServices<CoreServices>,
86
62
  Wire extends PikkuWire<In, never, false, any, PikkuRPC, never, never> =
87
63
  PikkuWire<In, never, false, any, PikkuRPC, never, never>,
88
64
  > = {
89
- /** The permission function */
90
65
  func: CorePikkuPermission<In, Services, Wire>
91
- /** Optional human-readable name for the permission */
92
66
  name?: string
93
- /** Optional description of what the permission checks */
94
67
  description?: string
95
68
  }
96
69
 
97
- /**
98
- * Factory function for creating permissions with tree-shaking support
99
- * Supports both direct function and configuration object syntax
100
- *
101
- * @example
102
- * ```typescript
103
- * // Direct function syntax
104
- * export const adminPermission = pikkuPermission(
105
- * async ({ logger }, _data, { getSession }) => {
106
- * const currentSession = await getSession()
107
- * return currentSession?.role === 'admin'
108
- * }
109
- * )
110
- *
111
- * // Configuration object syntax with metadata
112
- * export const adminPermission = pikkuPermission({
113
- * name: 'Admin Permission',
114
- * description: 'Checks if user has admin role',
115
- * func: async ({ logger }, _data, { getSession }) => {
116
- * const currentSession = await getSession()
117
- * return currentSession?.role === 'admin'
118
- * }
119
- * })
120
- * ```
121
- */
122
70
  export const pikkuPermission = <
123
71
  In = any,
124
- Services extends CoreSingletonServices = CoreServices,
72
+ Services extends CoreSecretlessSingletonServices =
73
+ SecretlessServices<CoreServices>,
125
74
  Wire extends PickRequired<
126
75
  PikkuWire<In, never, false, any, PikkuRPC, never, never>,
127
76
  'session'
@@ -137,41 +86,14 @@ export const pikkuPermission = <
137
86
  return typeof permission === 'function' ? permission : permission.func
138
87
  }
139
88
 
140
- /**
141
- * A factory function that takes input and returns a permission
142
- * Used when permissions need configuration/input parameters
143
- *
144
- * @template In - The input type for the factory.
145
- * @template Services - The services type, defaults to `CoreServices`.
146
- * @template Session - The session type, defaults to `CoreUserSession`.
147
- */
148
89
  export type CorePikkuPermissionFactory<
149
90
  In = any,
150
- Services extends CoreSingletonServices = CoreServices,
91
+ Services extends CoreSecretlessSingletonServices =
92
+ SecretlessServices<CoreServices>,
151
93
  Wire extends PikkuWire<In, never, false, any, PikkuRPC, never, never> =
152
94
  PikkuWire<In, never, false, any, PikkuRPC, never, never>,
153
95
  > = (input: In) => CorePikkuPermission<any, Services, Wire>
154
96
 
155
- /**
156
- * Factory function for creating permission factories
157
- * Use this when your permission needs configuration/input parameters
158
- *
159
- * @example
160
- * ```typescript
161
- * export const requireRole = pikkuPermissionFactory<{ role: string }>(({
162
- * role
163
- * }) => {
164
- * return pikkuPermission(async ({ logger }, data, { getSession }) => {
165
- * const currentSession = await getSession()
166
- * if (!currentSession || currentSession.role !== role) {
167
- * logger.warn(`Permission denied: required role '${role}'`)
168
- * return false
169
- * }
170
- * return true
171
- * })
172
- * })
173
- * ```
174
- */
175
97
  export const pikkuPermissionFactory = <In = any>(
176
98
  factory: CorePikkuPermissionFactory<In>
177
99
  ): CorePikkuPermissionFactory<In> => {
@@ -179,33 +101,19 @@ export const pikkuPermissionFactory = <In = any>(
179
101
  }
180
102
 
181
103
  /**
182
- * A function that generates a human-readable description of a pending approval action.
183
- * Used by AI agents to show meaningful approval prompts instead of raw tool arguments.
184
- *
185
- * @template In - The input type (same as the function it describes).
186
- * @template Services - The services type, defaults to `CoreSingletonServices`.
104
+ * Renders a human-readable approval prompt for an AI agent, in place of the
105
+ * raw tool arguments.
187
106
  */
188
107
  export type CorePikkuApprovalDescription<
189
108
  In = any,
190
- Services extends CoreSingletonServices = CoreSingletonServices,
109
+ Services extends CoreSecretlessSingletonServices =
110
+ CoreSecretlessSingletonServices,
191
111
  > = (services: Services, data: In) => Promise<string>
192
112
 
193
- /**
194
- * Factory function for creating approval description functions with tree-shaking support.
195
- *
196
- * @example
197
- * ```typescript
198
- * export const deleteTodoApproval = pikkuApprovalDescription(
199
- * async ({ todoStore }, { id }) => {
200
- * const todo = await todoStore.get(id)
201
- * return `Delete todo: "${todo.title}"`
202
- * }
203
- * )
204
- * ```
205
- */
206
113
  export const pikkuApprovalDescription = <
207
114
  In = any,
208
- Services extends CoreSingletonServices = CoreSingletonServices,
115
+ Services extends CoreSecretlessSingletonServices =
116
+ CoreSecretlessSingletonServices,
209
117
  >(
210
118
  fn: CorePikkuApprovalDescription<In, Services>
211
119
  ): CorePikkuApprovalDescription<In, Services> => {
@@ -213,12 +121,14 @@ export const pikkuApprovalDescription = <
213
121
  }
214
122
 
215
123
  export type CorePikkuAuth<
216
- Services extends CoreSingletonServices = CoreServices,
124
+ Services extends CoreSecretlessSingletonServices =
125
+ SecretlessServices<CoreServices>,
217
126
  Session extends CoreUserSession = CoreUserSession,
218
127
  > = (services: Services, session: Session) => Promise<boolean> | boolean
219
128
 
220
129
  export type CorePikkuAuthConfig<
221
- Services extends CoreSingletonServices = CoreServices,
130
+ Services extends CoreSecretlessSingletonServices =
131
+ SecretlessServices<CoreServices>,
222
132
  Session extends CoreUserSession = CoreUserSession,
223
133
  > = {
224
134
  func: CorePikkuAuth<Services, Session>
@@ -227,7 +137,8 @@ export type CorePikkuAuthConfig<
227
137
  }
228
138
 
229
139
  export const pikkuAuth = <
230
- Services extends CoreSingletonServices = CoreServices,
140
+ Services extends CoreSecretlessSingletonServices =
141
+ SecretlessServices<CoreServices>,
231
142
  Session extends CoreUserSession = CoreUserSession,
232
143
  >(
233
144
  auth:
@@ -249,9 +160,9 @@ export type CorePermissionGroup<PikkuPermission = CorePikkuPermission<any>> =
249
160
  | undefined
250
161
 
251
162
  /**
252
- * A lifecycle hook: the same call signature as the function it hangs off, but
253
- * its return value is discarded. A hook is setup/teardown, not a step — it has
254
- * no id, no meta and no schema, so it is never recorded and never replayed.
163
+ * A lifecycle hook: same call signature as the function it hangs off, return
164
+ * value discarded. Setup/teardown, not a step — no id, no meta, no schema, so
165
+ * it is never recorded and never replayed.
255
166
  */
256
167
  export type CorePikkuFunctionHook<Services = any, Data = any, Wire = any> = (
257
168
  services: Services,
@@ -273,15 +184,24 @@ export type CorePikkuFunctionConfig<
273
184
  OutputSchema extends StandardSchemaV1 | undefined = undefined,
274
185
  Scope extends string = string,
275
186
  > = {
276
- /** Short human-readable name (e.g. "Create Todo") */
277
187
  title?: string
278
- /** Longer-form description of what the function does */
279
188
  description?: string
280
189
  /** Explicit logical name override; lets multiple exports share a versioned base */
281
190
  override?: string
282
191
  version?: number
283
192
  tags?: string[]
284
193
  expose?: boolean
194
+ /**
195
+ * The function performs its own authorization in its body — verifying a
196
+ * signed token, checking a webhook signature, matching an invite code — so
197
+ * it is not open despite carrying no session, scope or permission.
198
+ *
199
+ * Purely declarative: nothing at runtime reads it, and it grants nothing. It
200
+ * exists so the claim is written down where an audit can find it, and so
201
+ * codegen stops warning about a gate it has no way to see. Asserting it
202
+ * falsely disables the one check that would have caught the mistake.
203
+ */
204
+ selfAuthenticated?: boolean
285
205
  remote?: boolean
286
206
  mcp?: boolean
287
207
  readonly?: boolean
@@ -293,8 +213,12 @@ export type CorePikkuFunctionConfig<
293
213
  workflowRetries?: number
294
214
  /** Timeout for this function when used as a workflow step (e.g. '30s', '5m'). */
295
215
  workflowTimeout?: string
296
- /** Scenario steps only: this step drives a browser, so the runner must provision one before calling it. */
297
- browser?: boolean
216
+ /**
217
+ * Scenario steps only: which surfaces this step declares a binding for. The
218
+ * runner uses it to pick a binding, decide whether to provision a browser,
219
+ * and report how much of the flow each surface actually covers.
220
+ */
221
+ surfaces?: ScenarioSurface[]
298
222
  audit?:
299
223
  | boolean
300
224
  | {
@@ -309,26 +233,22 @@ export type CorePikkuFunctionConfig<
309
233
  */
310
234
  before?: CorePikkuFunctionHook
311
235
  /**
312
- * Scenarios only: always runs after the scenario body, in a `finally`.
313
- * Throwing fails a run that would otherwise have passed; on an
314
- * already-failed run it attaches as the `cause` and never replaces the
315
- * original error.
236
+ * Scenarios only: always runs after the body, in a `finally`. Throwing fails
237
+ * an otherwise-passing run; on an already-failed run it attaches as `cause`
238
+ * and never replaces the original error.
316
239
  */
317
240
  after?: CorePikkuFunctionHook
318
241
  /**
319
- * Scenarios only: why this scenario is held out of a default run. It is
320
- * reported as skipped rather than quietly omitted, and naming it directly
321
- * with `--flows` runs it anyway.
242
+ * Scenarios only: why this scenario is held out of a default run. Reported
243
+ * as skipped rather than quietly omitted; naming it in `--flows` runs it.
322
244
  */
323
245
  skip?: string
324
246
  auth?: boolean
325
247
  /**
326
- * Scopes the session must hold to run this function. All of them are
327
- * required (AND), and they are checked before `permissions` unlike
328
- * permissions, which OR together, a scope can only narrow access.
329
- *
330
- * Narrowed to the generated `ScopeId` union in a project's own
331
- * `pikku-types.gen.ts`, so an undeclared scope is a compile error.
248
+ * Scopes the session must hold; all are required (AND) and checked before
249
+ * `permissions`, which OR together a scope can only narrow access.
250
+ * Narrowed to the generated `ScopeId` union, so an undeclared scope is a
251
+ * compile error.
332
252
  */
333
253
  scopes?: Scope[]
334
254
  permissions?: CorePermissionGroup<PikkuPermission>
@@ -1,15 +1,11 @@
1
1
  /**
2
- * Type-level tests for list-function primitives.
3
- *
4
- * No runtime assertions — the point is that valid shapes compile and
5
- * invalid shapes fail with `@ts-expect-error`. The file is excluded
6
- * from `yarn build` via tsconfig's `**∕*.test.ts` pattern.
2
+ * Type-level tests: no runtime assertions — valid shapes must compile and
3
+ * invalid shapes must fail with `@ts-expect-error`. Excluded from `yarn build`
4
+ * via tsconfig's test-file pattern.
7
5
  */
8
6
 
9
7
  import type { ListInput, ListOutput, Filter } from './list.types.js'
10
8
 
11
- // -- ListInput ---------------------------------------------------------------
12
-
13
9
  type SessionFilter = {
14
10
  status?: string[]
15
11
  therapistId?: string
@@ -32,22 +28,18 @@ void _basic
32
28
  const _empty: ListInput = {}
33
29
  void _empty
34
30
 
35
- // sort.column must be from the declared union
36
31
  // @ts-expect-error — 'created_at' is not in SessionSort
37
32
  const _badSort: ListInput<SessionFilter, SessionSort> = {
38
33
  sort: [{ column: 'created_at', direction: 'asc' }],
39
34
  }
40
35
  void _badSort
41
36
 
42
- // sort.direction must be 'asc' or 'desc'
43
37
  // @ts-expect-error — 'descending' is not a valid direction
44
38
  const _badDirection: ListInput<SessionFilter, SessionSort> = {
45
39
  sort: [{ column: 'user', direction: 'descending' }],
46
40
  }
47
41
  void _badDirection
48
42
 
49
- // -- ListOutput --------------------------------------------------------------
50
-
51
43
  interface Session {
52
44
  id: string
53
45
  user: string
@@ -61,39 +53,29 @@ const _output: ListOutput<Session> = {
61
53
  }
62
54
  void _output
63
55
 
64
- // nextCursor is required (must be string or null, not undefined-only)
65
56
  // @ts-expect-error — missing nextCursor
66
57
  const _badOutput: ListOutput<Session> = {
67
58
  rows: [],
68
59
  }
69
60
  void _badOutput
70
61
 
71
- // -- Filter: leaves ----------------------------------------------------------
72
-
73
- // Simple equality
74
62
  const _leafEq: Filter<SessionFilter> = { therapistId: 'kim' }
75
63
  void _leafEq
76
64
 
77
- // Array = IN shorthand
78
65
  const _leafIn: Filter<SessionFilter> = { status: ['pending', 'processed'] }
79
66
  void _leafIn
80
67
 
81
- // Operator object
82
68
  const _leafOp: Filter<SessionFilter> = {
83
69
  uploadedAt: { gt: '2026-04-10', lte: '2026-04-17' },
84
70
  }
85
71
  void _leafOp
86
72
 
87
- // Null = IS NULL
88
73
  const _leafNull: Filter<SessionFilter> = { therapistId: null }
89
74
  void _leafNull
90
75
 
91
- // NOT on a value
92
76
  const _leafNot: Filter<SessionFilter> = { therapistId: { not: 'kim' } }
93
77
  void _leafNot
94
78
 
95
- // -- Filter: AND (array) -----------------------------------------------------
96
-
97
79
  const _and: Filter<SessionFilter> = [
98
80
  { status: ['pending'] },
99
81
  { therapistId: 'kim' },
@@ -101,16 +83,12 @@ const _and: Filter<SessionFilter> = [
101
83
  ]
102
84
  void _and
103
85
 
104
- // -- Filter: OR (object with arbitrary label keys) --------------------------
105
-
106
86
  const _or: Filter<SessionFilter> = {
107
87
  viaKim: { therapistId: 'kim' },
108
88
  viaPark: { therapistId: 'park' },
109
89
  }
110
90
  void _or
111
91
 
112
- // -- Filter: nested AND/OR ---------------------------------------------------
113
-
114
92
  const _nested: Filter<SessionFilter> = [
115
93
  { status: ['pending'] },
116
94
  {
@@ -1,37 +1,10 @@
1
1
  /**
2
- * List-function primitives.
3
- *
4
- * A "list function" is any Pikku function that returns a paginated
5
- * collection. Adopting this shape unlocks a shared vocabulary across
6
- * MCP tools, AI agents, typed RPC clients, and widget libraries — they
7
- * all reason about cursor, filter, sort, and search uniformly.
8
- *
9
- * Under the hood, a list function is still a normal `pikkuFunc`. These
10
- * types are purely structural constraints; no runtime behaviour change.
11
- *
12
- * @example
13
- * ```ts
14
- * import { pikkuFunc } from '#pikku'
15
- * import type { ListInput, ListOutput } from '@pikku/core'
16
- *
17
- * export const listSessions = pikkuFunc<
18
- * ListInput<{ status?: SessionStatus[] }, 'user' | 'status' | 'uploaded_at'>,
19
- * ListOutput<Session>
20
- * >({
21
- * func: async ({ kysely }, input) => {
22
- * // input.sort / input.filter / input.cursor / input.search are typed
23
- * return { rows, nextCursor, totalCount }
24
- * },
25
- * })
26
- * ```
2
+ * A list function is an ordinary `pikkuFunc` whose input and output adopt
3
+ * these shapes. They are purely structural — no runtime behaviour attaches to
4
+ * them and exist so MCP tools, agents, RPC clients and widget libraries all
5
+ * reason about cursor, filter, sort and search the same way.
27
6
  */
28
7
 
29
- /**
30
- * Shape every list function accepts as input.
31
- *
32
- * @template F - User-defined filter shape. Each key is a filterable field.
33
- * @template S - String union of sortable column names.
34
- */
35
8
  export interface ListInput<
36
9
  F extends Record<string, unknown> = Record<string, never>,
37
10
  S extends string = never,
@@ -42,15 +15,11 @@ export interface ListInput<
42
15
  limit?: number
43
16
  /** Ordered sort criteria — first entry is primary. */
44
17
  sort?: Array<{ column: S; direction: 'asc' | 'desc' }>
45
- /** Structured filter tree. See {@link Filter}. */
46
18
  filter?: Filter<F>
47
19
  /** Unstructured text search across server-configured fields. */
48
20
  search?: string
49
21
  }
50
22
 
51
- /**
52
- * Shape every list function returns.
53
- */
54
23
  export interface ListOutput<Row> {
55
24
  rows: Row[]
56
25
  /** Null when no more pages. */
@@ -60,12 +29,9 @@ export interface ListOutput<Row> {
60
29
  }
61
30
 
62
31
  /**
63
- * Leaf predicate value on a single field.
64
- *
65
- * Operator keywords (`equals`, `not`, `in`, `notIn`, `gt`, `gte`, `lt`,
66
- * `lte`, `contains`, `startsWith`, `endsWith`, `mode`) mirror Prisma's
67
- * vocabulary for dev familiarity. These keys are reserved and cannot be
68
- * used as user field names in a Filter's `F` type.
32
+ * Leaf predicate on a single field. The operator keywords mirror Prisma's
33
+ * vocabulary; they are reserved and cannot be used as user field names in a
34
+ * Filter's `F` type.
69
35
  */
70
36
  export type LeafValue<T> =
71
37
  | T
@@ -87,33 +53,17 @@ export type LeafValue<T> =
87
53
  }
88
54
 
89
55
  /**
90
- * A single-key object keyed by a field name from F, value is a leaf
91
- * predicate. Single-key so the runtime discriminator is unambiguous:
92
- * multi-key objects are OR groups.
56
+ * A single-key object keyed by a field of F. Single-key so the runtime
57
+ * discriminator is unambiguous — multi-key objects are OR groups.
93
58
  */
94
59
  export type LeafFilter<F extends Record<string, unknown>> = {
95
60
  [K in keyof F]: { [Key in K]: LeafValue<F[K]> }
96
61
  }[keyof F]
97
62
 
98
63
  /**
99
- * Recursive filter tree.
100
- *
101
- * - `Array<Filter<F>>` AND of children.
102
- * - `{ [label: string]: Filter<F> }` — OR of children. Keys are arbitrary
103
- * labels (unique strings), ignored at evaluation time.
104
- * - `LeafFilter<F>` — single-key predicate on a declared field.
105
- *
106
- * @example "status = pending AND (therapist = kim OR therapist = park) AND uploaded_at > 2026-04-10"
107
- * ```ts
108
- * const filter: Filter<{ status: string; therapistId: string; uploadedAt: string }> = [
109
- * { status: 'pending' },
110
- * {
111
- * kim: { therapistId: 'kim' },
112
- * park: { therapistId: 'park' },
113
- * },
114
- * { uploadedAt: { gt: '2026-04-10' } },
115
- * ]
116
- * ```
64
+ * Recursive filter tree: an array is an AND of its children; an object is an
65
+ * OR of its children, keyed by arbitrary unique labels that are ignored at
66
+ * evaluation time; a single-key object is a leaf predicate.
117
67
  */
118
68
  export type Filter<F extends Record<string, unknown>> =
119
69
  | LeafFilter<F>
@@ -4,19 +4,6 @@ import { NotFoundError } from './errors/errors.js'
4
4
  import type { Logger } from './services/logger.js'
5
5
  import type { PikkuHTTP } from './wirings/http/http.types.js'
6
6
 
7
- /**
8
- * Handle errors that occur during route processing
9
- *
10
- * @param {any} e - The error that occurred
11
- * @param {PikkuHTTP | undefined} http - HTTP wire object
12
- * @param {string} traceId - Unique ID for tracking this error
13
- * @param {Logger} logger - Logger service
14
- * @param {number[]} logWarningsForStatusCodes - HTTP status codes to log as warnings
15
- * @param {boolean} respondWith404 - Whether to respond with 404 for NotFoundError
16
- * @param {boolean} bubbleError - Whether to throw the error after handling
17
- * @param {boolean} exposeErrors - Whether to include internal error details (message, stack and
18
- * payload of 5xx errors) in the response body. Ignored in production.
19
- */
20
7
  export const handleHTTPError = (
21
8
  e: any,
22
9
  http: PikkuHTTP | undefined,
@@ -27,18 +14,15 @@ export const handleHTTPError = (
27
14
  bubbleError: boolean,
28
15
  exposeErrors: boolean = false
29
16
  ) => {
30
- // Skip 404 handling if configured to do so
31
17
  if (e instanceof NotFoundError && !respondWith404) {
32
18
  return
33
19
  }
34
20
 
35
- // Get appropriate error response
36
21
  const errorResponse = getErrorResponse(e)
37
22
  if (errorResponse != null) {
38
23
  const clientFacing =
39
24
  errorResponse.status < 500 || (exposeErrors && !isProduction())
40
25
 
41
- // Set status and response body
42
26
  http?.response?.status(errorResponse.status)
43
27
  http?.response?.json({
44
28
  name: e instanceof Error ? e.name : undefined,
@@ -53,7 +37,6 @@ export const handleHTTPError = (
53
37
  errorId: traceId,
54
38
  })
55
39
 
56
- // Log certain status codes as warnings
57
40
  if (logWarningsForStatusCodes.includes(errorResponse.status)) {
58
41
  if (traceId) {
59
42
  logger.warn(`Warning id: ${traceId}`)
@@ -61,7 +44,6 @@ export const handleHTTPError = (
61
44
  logger.warn(e instanceof Error ? e.message : e)
62
45
  }
63
46
  } else {
64
- // Handle unexpected errors
65
47
  logger.error(e instanceof Error ? e.message : e)
66
48
  http?.response?.status(500)
67
49
 
package/src/index.ts CHANGED
@@ -10,8 +10,10 @@ export type {
10
10
  CorePikkuMiddlewareFactory,
11
11
  CorePikkuMiddlewareGroup,
12
12
  CoreServices,
13
+ CoreSecretlessSingletonServices,
13
14
  CoreSingletonServices,
14
15
  CoreUserSession,
16
+ SecretlessServices,
15
17
  CreateConfig,
16
18
  ServerLifecycle,
17
19
  FunctionMeta,
@@ -89,6 +91,13 @@ export {
89
91
  parseVersionedId,
90
92
  } from './version.js'
91
93
  export { runPikkuFunc } from './function/function-runner.js'
94
+ export {
95
+ AbandonedError,
96
+ beginChanges,
97
+ getAbortScope,
98
+ runInAbortScope,
99
+ type AbortScope,
100
+ } from './function/abort-scope.js'
92
101
  export { runCLICommand, pikkuCLIRender } from './wirings/cli/cli-runner.js'
93
102
  export { fetch } from './wirings/http/http-runner.js'
94
103
  export {
@@ -103,7 +112,49 @@ export type {
103
112
  } from './wirings/mcp/mcp.types.js'
104
113
  export { runQueueJob } from './wirings/queue/queue-runner.js'
105
114
  export { runScheduledTask } from './wirings/scheduler/scheduler-runner.js'
106
- export { NotFoundError } from './errors/errors.js'
115
+ export {
116
+ AIProviderAuthError,
117
+ AIProviderNotConfiguredError,
118
+ BadGatewayError,
119
+ BadRequestError,
120
+ ConflictError,
121
+ ExpectationFailedError,
122
+ ForbiddenError,
123
+ GatewayTimeoutError,
124
+ GoneError,
125
+ HTTPVersionNotSupportedError,
126
+ InternalServerError,
127
+ InvalidMiddlewareWireError,
128
+ InvalidOriginError,
129
+ InvalidSessionError,
130
+ LengthRequiredError,
131
+ LocalEnvironmentOnlyError,
132
+ LockedError,
133
+ MaxComputeTimeReachedError,
134
+ MethodNotAllowedError,
135
+ MissingCredentialError,
136
+ MissingSchemaError,
137
+ MissingScopeError,
138
+ MissingServiceError,
139
+ MissingSessionError,
140
+ NotAcceptableError,
141
+ NotFoundError,
142
+ NotImplementedError,
143
+ PayloadTooLargeError,
144
+ PaymentRequiredError,
145
+ PikkuMissingMetaError,
146
+ PreconditionFailedError,
147
+ ProxyAuthenticationRequiredError,
148
+ RangeNotSatisfiableError,
149
+ ReadonlySessionError,
150
+ RequestTimeoutError,
151
+ ServiceUnavailableError,
152
+ TooManyRequestsError,
153
+ URITooLongError,
154
+ UnauthorizedError,
155
+ UnprocessableContentError,
156
+ UnsupportedMediaTypeError,
157
+ } from './errors/errors.js'
107
158
  export { PikkuError, isExpectedError } from './errors/error-handler.js'
108
159
  export type { EventHubService } from './wirings/channel/eventhub-service.js'
109
160
  export type { QueueService } from './wirings/queue/queue.types.js'
@@ -118,6 +169,14 @@ export type {
118
169
  SendTextEmailInput,
119
170
  } from './services/email-service.js'
120
171
  export type { SecretService } from './services/secret-service.js'
172
+ export {
173
+ SecretAccessDeniedError,
174
+ withoutSecrets,
175
+ } from './services/secretless.js'
176
+ export {
177
+ SecretHostNotAllowedError,
178
+ assertSecretAllowedForHost,
179
+ } from './services/secret-host-binding.js'
121
180
  export type { VariablesService } from './services/variables-service.js'
122
181
  export type {
123
182
  ContentService,