@pikku/core 0.12.71 → 0.12.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (819) hide show
  1. package/CHANGELOG.md +848 -0
  2. package/dist/crypto-utils.d.ts +30 -5
  3. package/dist/crypto-utils.js +146 -41
  4. package/dist/dev/hot-reload.js +11 -30
  5. package/dist/dev/module-runner.d.ts +3 -7
  6. package/dist/dev/module-runner.js +4 -10
  7. package/dist/dev/reload-meta.d.ts +8 -20
  8. package/dist/dev/reload-meta.js +9 -29
  9. package/dist/errors/error-handler.d.ts +5 -30
  10. package/dist/errors/error-handler.js +16 -32
  11. package/dist/errors/errors.d.ts +32 -151
  12. package/dist/errors/errors.js +55 -157
  13. package/dist/function/abort-scope.d.ts +47 -0
  14. package/dist/function/abort-scope.js +63 -0
  15. package/dist/function/function-runner.js +40 -30
  16. package/dist/function/functions.types.d.ts +44 -136
  17. package/dist/function/functions.types.js +0 -58
  18. package/dist/function/list.types.d.ts +12 -62
  19. package/dist/function/list.types.js +4 -25
  20. package/dist/handle-error.d.ts +0 -11
  21. package/dist/handle-error.js +6 -18
  22. package/dist/index.d.ts +5 -2
  23. package/dist/index.js +4 -1
  24. package/dist/middleware/auth-apikey.d.ts +3 -18
  25. package/dist/middleware/auth-apikey.js +0 -17
  26. package/dist/middleware/auth-bearer.d.ts +6 -41
  27. package/dist/middleware/auth-bearer.js +3 -40
  28. package/dist/middleware/auth-cookie.d.ts +5 -27
  29. package/dist/middleware/auth-cookie.js +2 -26
  30. package/dist/middleware/cors.d.ts +7 -34
  31. package/dist/middleware/cors.js +7 -34
  32. package/dist/middleware/remote-auth.d.ts +3 -1
  33. package/dist/middleware/remote-auth.js +3 -2
  34. package/dist/middleware/telemetry.d.ts +8 -33
  35. package/dist/middleware/telemetry.js +2 -31
  36. package/dist/middleware-runner.d.ts +4 -55
  37. package/dist/middleware-runner.js +5 -74
  38. package/dist/permissions.d.ts +3 -44
  39. package/dist/permissions.js +19 -71
  40. package/dist/pikku-request.d.ts +0 -6
  41. package/dist/pikku-request.js +0 -6
  42. package/dist/pikku-state.d.ts +0 -26
  43. package/dist/pikku-state.js +2 -30
  44. package/dist/remote.d.ts +3 -5
  45. package/dist/remote.js +8 -7
  46. package/dist/schema.d.ts +7 -17
  47. package/dist/schema.js +30 -18
  48. package/dist/scopes.d.ts +4 -23
  49. package/dist/scopes.js +7 -48
  50. package/dist/services/ai-agent-runner-service.d.ts +20 -0
  51. package/dist/services/ai-embedding-service.d.ts +2 -25
  52. package/dist/services/audit-service.js +1 -2
  53. package/dist/services/content-service.d.ts +1 -46
  54. package/dist/services/credential-service.d.ts +3 -40
  55. package/dist/services/deployment-service.d.ts +3 -9
  56. package/dist/services/gateway-service.d.ts +0 -15
  57. package/dist/services/http-personas.d.ts +80 -0
  58. package/dist/services/http-personas.js +233 -0
  59. package/dist/services/in-memory-queue-service.d.ts +0 -14
  60. package/dist/services/in-memory-queue-service.js +1 -15
  61. package/dist/services/in-memory-trigger-service.d.ts +0 -18
  62. package/dist/services/in-memory-trigger-service.js +1 -18
  63. package/dist/services/in-memory-workflow-service.d.ts +0 -16
  64. package/dist/services/in-memory-workflow-service.js +4 -33
  65. package/dist/services/index.d.ts +5 -6
  66. package/dist/services/index.js +2 -5
  67. package/dist/services/istanbul-coverage-service.d.ts +1 -5
  68. package/dist/services/istanbul-coverage-service.js +2 -8
  69. package/dist/services/jwt-service.d.ts +1 -16
  70. package/dist/services/local-content.d.ts +13 -2
  71. package/dist/services/local-content.js +40 -13
  72. package/dist/services/local-gateway-service.d.ts +0 -16
  73. package/dist/services/local-gateway-service.js +2 -17
  74. package/dist/services/local-secrets.d.ts +0 -4
  75. package/dist/services/local-secrets.js +0 -4
  76. package/dist/services/logger-console.d.ts +3 -7
  77. package/dist/services/logger-console.js +3 -7
  78. package/dist/services/logger.d.ts +2 -37
  79. package/dist/services/meta-service.d.ts +23 -26
  80. package/dist/services/meta-service.js +22 -36
  81. package/dist/services/personas-service.d.ts +134 -0
  82. package/dist/services/personas-service.js +40 -0
  83. package/dist/services/pikku-user-id.js +0 -4
  84. package/dist/services/queue-webhook-service.d.ts +2 -36
  85. package/dist/services/queue-webhook-service.js +9 -41
  86. package/dist/services/scheduler-service.d.ts +1 -50
  87. package/dist/services/scheduler-service.js +0 -10
  88. package/dist/services/schema-service.d.ts +1 -24
  89. package/dist/services/scope-service.d.ts +49 -34
  90. package/dist/services/scoped-secret-service.d.ts +0 -4
  91. package/dist/services/scoped-secret-service.js +0 -4
  92. package/dist/services/secret-host-binding.d.ts +8 -0
  93. package/dist/services/secret-host-binding.js +36 -0
  94. package/dist/services/secret-service.d.ts +5 -33
  95. package/dist/services/secretless.d.ts +6 -0
  96. package/dist/services/secretless.js +21 -0
  97. package/dist/services/stub-tracker.d.ts +7 -18
  98. package/dist/services/stub-tracker.js +8 -18
  99. package/dist/services/system-role-guard.d.ts +33 -0
  100. package/dist/services/system-role-guard.js +38 -0
  101. package/dist/services/trigger-service.d.ts +0 -12
  102. package/dist/services/typed-secret-service.d.ts +0 -7
  103. package/dist/services/typed-secret-service.js +1 -7
  104. package/dist/services/v8-coverage-service.d.ts +2 -3
  105. package/dist/services/v8-coverage-service.js +1 -2
  106. package/dist/services/variables-service.d.ts +1 -8
  107. package/dist/services/webhook-service.d.ts +19 -63
  108. package/dist/services/webhook-service.js +6 -20
  109. package/dist/services/workflow-service.d.ts +3 -15
  110. package/dist/testing/service-tests.js +0 -17
  111. package/dist/time-utils.d.ts +0 -16
  112. package/dist/time-utils.js +1 -19
  113. package/dist/types/core.types.d.ts +99 -219
  114. package/dist/types/core.types.js +0 -42
  115. package/dist/types/state.types.d.ts +4 -9
  116. package/dist/utils/hmac.d.ts +4 -10
  117. package/dist/utils/hmac.js +4 -10
  118. package/dist/utils/safe-fetch.d.ts +7 -35
  119. package/dist/utils/safe-fetch.js +13 -53
  120. package/dist/utils.d.ts +1 -6
  121. package/dist/utils.js +6 -15
  122. package/dist/wirings/actor-flow/actor-flow.types.d.ts +1 -34
  123. package/dist/wirings/actor-flow/index.d.ts +0 -9
  124. package/dist/wirings/actor-flow/run-conversation.d.ts +5 -5
  125. package/dist/wirings/actor-flow/run-conversation.js +14 -7
  126. package/dist/wirings/ai-agent/ai-agent-agui.d.ts +0 -5
  127. package/dist/wirings/ai-agent/ai-agent-agui.js +34 -12
  128. package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +7 -0
  129. package/dist/wirings/ai-agent/ai-agent-helpers.js +7 -0
  130. package/dist/wirings/ai-agent/ai-agent-interrupt.d.ts +153 -0
  131. package/dist/wirings/ai-agent/ai-agent-interrupt.js +256 -0
  132. package/dist/wirings/ai-agent/ai-agent-memory.js +0 -2
  133. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +0 -9
  134. package/dist/wirings/ai-agent/ai-agent-model-config.js +1 -9
  135. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +10 -99
  136. package/dist/wirings/ai-agent/ai-agent-prepare.js +58 -131
  137. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +2 -1
  138. package/dist/wirings/ai-agent/ai-agent-registry.js +5 -1
  139. package/dist/wirings/ai-agent/ai-agent-runner.js +49 -20
  140. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +25 -2
  141. package/dist/wirings/ai-agent/ai-agent-stream.js +153 -63
  142. package/dist/wirings/ai-agent/ai-agent.types.d.ts +84 -4
  143. package/dist/wirings/ai-agent/index.d.ts +6 -4
  144. package/dist/wirings/ai-agent/index.js +5 -4
  145. package/dist/wirings/ai-agent/voice-input.d.ts +39 -1
  146. package/dist/wirings/ai-agent/voice-input.js +46 -3
  147. package/dist/wirings/ai-agent/voice-output.d.ts +54 -1
  148. package/dist/wirings/ai-agent/voice-output.js +153 -50
  149. package/dist/wirings/channel/channel-common.d.ts +7 -20
  150. package/dist/wirings/channel/channel-common.js +7 -21
  151. package/dist/wirings/channel/channel-handler.js +25 -6
  152. package/dist/wirings/channel/channel-host-rpc.d.ts +25 -0
  153. package/dist/wirings/channel/channel-host-rpc.js +38 -0
  154. package/dist/wirings/channel/channel-middleware-runner.d.ts +0 -12
  155. package/dist/wirings/channel/channel-middleware-runner.js +0 -12
  156. package/dist/wirings/channel/channel-rpc-registry.d.ts +31 -0
  157. package/dist/wirings/channel/channel-rpc-registry.js +89 -0
  158. package/dist/wirings/channel/channel-rpc-responder.d.ts +15 -0
  159. package/dist/wirings/channel/channel-rpc-responder.js +71 -0
  160. package/dist/wirings/channel/channel-rpc-service.d.ts +40 -0
  161. package/dist/wirings/channel/channel-rpc-service.js +106 -0
  162. package/dist/wirings/channel/channel-rpc-validators.d.ts +14 -0
  163. package/dist/wirings/channel/channel-rpc-validators.js +30 -0
  164. package/dist/wirings/channel/channel-rpc.d.ts +5 -0
  165. package/dist/wirings/channel/channel-rpc.js +5 -0
  166. package/dist/wirings/channel/channel-rpc.types.d.ts +90 -0
  167. package/dist/wirings/channel/channel-rpc.types.js +50 -0
  168. package/dist/wirings/channel/channel-runner.d.ts +0 -4
  169. package/dist/wirings/channel/channel-runner.js +0 -14
  170. package/dist/wirings/channel/channel-store.d.ts +0 -10
  171. package/dist/wirings/channel/channel.types.d.ts +12 -1
  172. package/dist/wirings/channel/define-channel-routes.d.ts +0 -20
  173. package/dist/wirings/channel/define-channel-routes.js +0 -20
  174. package/dist/wirings/channel/eventhub-service.d.ts +0 -18
  175. package/dist/wirings/channel/index.d.ts +4 -1
  176. package/dist/wirings/channel/index.js +2 -0
  177. package/dist/wirings/channel/local/local-channel-runner.js +3 -1
  178. package/dist/wirings/channel/local/local-eventhub-service.d.ts +0 -33
  179. package/dist/wirings/channel/local/local-eventhub-service.js +2 -36
  180. package/dist/wirings/channel/log-channels.d.ts +0 -4
  181. package/dist/wirings/channel/log-channels.js +0 -4
  182. package/dist/wirings/channel/pikku-abstract-channel-handler.js +6 -0
  183. package/dist/wirings/channel/serverless/serverless-channel-runner.js +2 -5
  184. package/dist/wirings/cli/channel/cli-approval.d.ts +41 -0
  185. package/dist/wirings/cli/channel/cli-approval.js +81 -0
  186. package/dist/wirings/cli/channel/cli-channel-runner.d.ts +0 -4
  187. package/dist/wirings/cli/channel/cli-channel-runner.js +3 -25
  188. package/dist/wirings/cli/channel/cli-raw-channel-runner.d.ts +47 -9
  189. package/dist/wirings/cli/channel/cli-raw-channel-runner.js +24 -16
  190. package/dist/wirings/cli/channel/cli-raw-client-runner.d.ts +20 -0
  191. package/dist/wirings/cli/channel/cli-raw-client-runner.js +121 -0
  192. package/dist/wirings/cli/channel/index.d.ts +4 -0
  193. package/dist/wirings/cli/channel/index.js +2 -0
  194. package/dist/wirings/cli/cli-runner.d.ts +20 -20
  195. package/dist/wirings/cli/cli-runner.js +28 -89
  196. package/dist/wirings/cli/cli.types.d.ts +14 -3
  197. package/dist/wirings/cli/command-parser.d.ts +1 -10
  198. package/dist/wirings/cli/command-parser.js +10 -87
  199. package/dist/wirings/cli/define-cli-commands.d.ts +1 -17
  200. package/dist/wirings/cli/define-cli-commands.js +1 -17
  201. package/dist/wirings/credential/credential.types.d.ts +0 -12
  202. package/dist/wirings/credential/define-credential.d.ts +48 -0
  203. package/dist/wirings/credential/define-credential.js +47 -0
  204. package/dist/wirings/credential/index.d.ts +1 -1
  205. package/dist/wirings/credential/index.js +1 -1
  206. package/dist/wirings/credential/validate-credential-definitions.d.ts +2 -4
  207. package/dist/wirings/gateway/gateway-runner.d.ts +1 -20
  208. package/dist/wirings/gateway/gateway-runner.js +8 -105
  209. package/dist/wirings/gateway/gateway.types.d.ts +7 -80
  210. package/dist/wirings/http/http-routes.d.ts +0 -63
  211. package/dist/wirings/http/http-routes.js +0 -63
  212. package/dist/wirings/http/http-runner.d.ts +1 -100
  213. package/dist/wirings/http/http-runner.js +12 -166
  214. package/dist/wirings/http/http.types.d.ts +16 -55
  215. package/dist/wirings/http/index.d.ts +2 -1
  216. package/dist/wirings/http/index.js +1 -1
  217. package/dist/wirings/http/log-http-routes.d.ts +0 -4
  218. package/dist/wirings/http/log-http-routes.js +0 -4
  219. package/dist/wirings/http/pikku-fetch-http-request.d.ts +6 -36
  220. package/dist/wirings/http/pikku-fetch-http-request.js +56 -50
  221. package/dist/wirings/http/pikku-fetch-http-response.js +0 -3
  222. package/dist/wirings/http/routers/path-to-regex.js +2 -13
  223. package/dist/wirings/http/web-request.d.ts +0 -8
  224. package/dist/wirings/http/web-request.js +25 -17
  225. package/dist/wirings/mcp/mcp-runner.d.ts +2 -0
  226. package/dist/wirings/mcp/mcp-runner.js +6 -16
  227. package/dist/wirings/mcp/mcp.types.d.ts +2 -35
  228. package/dist/wirings/oauth2/oauth2.types.d.ts +0 -28
  229. package/dist/wirings/oauth2/oauth2.types.js +0 -3
  230. package/dist/wirings/persona/define-personas.d.ts +28 -0
  231. package/dist/wirings/persona/define-personas.js +27 -0
  232. package/dist/wirings/persona/index.d.ts +21 -0
  233. package/dist/wirings/persona/index.js +17 -0
  234. package/dist/wirings/persona/persona-email.d.ts +37 -0
  235. package/dist/wirings/persona/persona-email.js +69 -0
  236. package/dist/wirings/persona/persona-environments.d.ts +45 -0
  237. package/dist/wirings/persona/persona-environments.js +81 -0
  238. package/dist/wirings/persona/persona-mailbox.d.ts +101 -0
  239. package/dist/wirings/persona/persona-mailbox.js +53 -0
  240. package/dist/wirings/persona/persona.types.d.ts +125 -0
  241. package/dist/wirings/persona/persona.types.js +1 -0
  242. package/dist/wirings/persona/validate-personas.d.ts +53 -0
  243. package/dist/wirings/persona/validate-personas.js +94 -0
  244. package/dist/wirings/queue/index.d.ts +3 -0
  245. package/dist/wirings/queue/index.js +2 -3
  246. package/dist/wirings/queue/queue-identity.d.ts +28 -0
  247. package/dist/wirings/queue/queue-identity.js +102 -0
  248. package/dist/wirings/queue/queue-runner.d.ts +0 -19
  249. package/dist/wirings/queue/queue-runner.js +9 -30
  250. package/dist/wirings/queue/queue.types.d.ts +18 -89
  251. package/dist/wirings/queue/register-queue-helper.d.ts +0 -12
  252. package/dist/wirings/queue/register-queue-helper.js +0 -11
  253. package/dist/wirings/queue/signed-queue-service.d.ts +16 -0
  254. package/dist/wirings/queue/signed-queue-service.js +42 -0
  255. package/dist/wirings/queue/validate-worker-config.d.ts +2 -23
  256. package/dist/wirings/queue/validate-worker-config.js +0 -14
  257. package/dist/wirings/role/define-system-role.d.ts +32 -0
  258. package/dist/wirings/role/define-system-role.js +31 -0
  259. package/dist/wirings/role/index.d.ts +3 -0
  260. package/dist/wirings/role/index.js +2 -0
  261. package/dist/wirings/role/role.types.d.ts +43 -0
  262. package/dist/wirings/role/role.types.js +1 -0
  263. package/dist/wirings/role/validate-role-definitions.d.ts +21 -0
  264. package/dist/wirings/role/validate-role-definitions.js +71 -0
  265. package/dist/wirings/rpc/addon-runner.d.ts +0 -19
  266. package/dist/wirings/rpc/addon-runner.js +0 -51
  267. package/dist/wirings/rpc/remote-addon-auth.d.ts +1 -12
  268. package/dist/wirings/rpc/remote-addon-auth.js +1 -9
  269. package/dist/wirings/rpc/rpc-runner.d.ts +11 -18
  270. package/dist/wirings/rpc/rpc-runner.js +88 -105
  271. package/dist/wirings/rpc/rpc-types.d.ts +7 -6
  272. package/dist/wirings/rpc/wire-addon.d.ts +25 -0
  273. package/dist/wirings/rpc/wire-addon.js +62 -0
  274. package/dist/wirings/rpc/wire-remote-addon.d.ts +3 -28
  275. package/dist/wirings/rpc/wire-remote-addon.js +0 -8
  276. package/dist/wirings/scheduler/log-schedulers.d.ts +0 -4
  277. package/dist/wirings/scheduler/log-schedulers.js +0 -4
  278. package/dist/wirings/scheduler/scheduler-runner.d.ts +0 -1
  279. package/dist/wirings/scheduler/scheduler-runner.js +0 -1
  280. package/dist/wirings/scheduler/scheduler.types.d.ts +1 -14
  281. package/dist/wirings/scope/define-scope.d.ts +32 -0
  282. package/dist/wirings/scope/define-scope.js +31 -0
  283. package/dist/wirings/scope/index.d.ts +1 -1
  284. package/dist/wirings/scope/index.js +1 -1
  285. package/dist/wirings/scope/scope.types.d.ts +7 -9
  286. package/dist/wirings/scope/validate-scope-definitions.d.ts +2 -21
  287. package/dist/wirings/scope/validate-scope-definitions.js +3 -21
  288. package/dist/wirings/secret/index.d.ts +1 -1
  289. package/dist/wirings/secret/index.js +1 -1
  290. package/dist/wirings/secret/secret.types.d.ts +19 -15
  291. package/dist/wirings/secret/secret.types.js +1 -1
  292. package/dist/wirings/secret/validate-secret-definitions.d.ts +2 -4
  293. package/dist/wirings/trigger/trigger-runner.d.ts +0 -27
  294. package/dist/wirings/trigger/trigger-runner.js +1 -24
  295. package/dist/wirings/trigger/trigger.types.d.ts +1 -82
  296. package/dist/wirings/trigger/trigger.types.js +0 -34
  297. package/dist/wirings/variable/index.d.ts +1 -1
  298. package/dist/wirings/variable/index.js +1 -1
  299. package/dist/wirings/variable/validate-variable-definitions.d.ts +2 -4
  300. package/dist/wirings/variable/variable.types.d.ts +1 -13
  301. package/dist/wirings/variable/variable.types.js +1 -1
  302. package/dist/wirings/virtual-user/index.d.ts +27 -0
  303. package/dist/wirings/virtual-user/index.js +8 -0
  304. package/dist/wirings/virtual-user/run-virtual-user.d.ts +92 -0
  305. package/dist/wirings/virtual-user/run-virtual-user.js +478 -0
  306. package/dist/wirings/virtual-user/virtual-user-agents.d.ts +38 -0
  307. package/dist/wirings/virtual-user/virtual-user-agents.js +24 -0
  308. package/dist/wirings/virtual-user/virtual-user-catalogue.d.ts +92 -0
  309. package/dist/wirings/virtual-user/virtual-user-catalogue.js +134 -0
  310. package/dist/wirings/virtual-user/virtual-user-derive.d.ts +26 -0
  311. package/dist/wirings/virtual-user/virtual-user-derive.js +137 -0
  312. package/dist/wirings/virtual-user/virtual-user-dispositions.d.ts +79 -0
  313. package/dist/wirings/virtual-user/virtual-user-dispositions.js +128 -0
  314. package/dist/wirings/virtual-user/virtual-user-intents.d.ts +78 -0
  315. package/dist/wirings/virtual-user/virtual-user-intents.js +142 -0
  316. package/dist/wirings/virtual-user/virtual-user-rng.d.ts +24 -0
  317. package/dist/wirings/virtual-user/virtual-user-rng.js +44 -0
  318. package/dist/wirings/virtual-user/virtual-user-target.d.ts +21 -0
  319. package/dist/wirings/virtual-user/virtual-user-target.js +34 -0
  320. package/dist/wirings/virtual-user/virtual-user.types.d.ts +199 -0
  321. package/dist/wirings/virtual-user/virtual-user.types.js +8 -0
  322. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +5 -5
  323. package/dist/wirings/workflow/dsl/workflow-runner.d.ts +0 -4
  324. package/dist/wirings/workflow/dsl/workflow-runner.js +0 -4
  325. package/dist/wirings/workflow/feature.d.ts +0 -19
  326. package/dist/wirings/workflow/feature.js +0 -19
  327. package/dist/wirings/workflow/graph/graph-node.d.ts +0 -98
  328. package/dist/wirings/workflow/graph/graph-node.js +0 -34
  329. package/dist/wirings/workflow/graph/graph-runner.js +6 -41
  330. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +0 -4
  331. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -58
  332. package/dist/wirings/workflow/graph/workflow-graph.types.js +0 -6
  333. package/dist/wirings/workflow/index.d.ts +5 -7
  334. package/dist/wirings/workflow/index.js +3 -17
  335. package/dist/wirings/workflow/pikku-scenario-service.d.ts +87 -5
  336. package/dist/wirings/workflow/pikku-scenario-service.js +204 -42
  337. package/dist/wirings/workflow/pikku-workflow-service.d.ts +7 -459
  338. package/dist/wirings/workflow/pikku-workflow-service.js +58 -551
  339. package/dist/wirings/workflow/run-timeline.d.ts +0 -47
  340. package/dist/wirings/workflow/run-timeline.js +0 -22
  341. package/dist/wirings/workflow/scenario-cookie-jar.d.ts +0 -23
  342. package/dist/wirings/workflow/scenario-cookie-jar.js +0 -16
  343. package/dist/wirings/workflow/scenario-poll.d.ts +0 -15
  344. package/dist/wirings/workflow/scenario-poll.js +0 -12
  345. package/dist/wirings/workflow/scenario-prose.d.ts +0 -28
  346. package/dist/wirings/workflow/scenario-prose.js +0 -18
  347. package/dist/wirings/workflow/scenario-step-guards.d.ts +0 -13
  348. package/dist/wirings/workflow/scenario-step-guards.js +1 -14
  349. package/dist/wirings/workflow/scenario-step.types.d.ts +72 -6
  350. package/dist/wirings/workflow/scenario-step.types.js +5 -1
  351. package/dist/wirings/workflow/scenario-surface.d.ts +16 -0
  352. package/dist/wirings/workflow/scenario-surface.js +56 -0
  353. package/dist/wirings/workflow/workflow-invocation-id.d.ts +0 -18
  354. package/dist/wirings/workflow/workflow-invocation-id.js +2 -22
  355. package/dist/wirings/workflow/workflow-queue-workers.d.ts +0 -20
  356. package/dist/wirings/workflow/workflow-queue-workers.js +0 -19
  357. package/dist/wirings/workflow/workflow.types.d.ts +0 -197
  358. package/knowledge/decisions/index.md +19 -0
  359. package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +49 -0
  360. package/knowledge/decisions/internals/actor-flow-conversations-seed-a-hidden-kickoff-message.md +23 -0
  361. package/knowledge/decisions/internals/actor-flow-drives-the-target-through-a-transport-seam.md +24 -0
  362. package/knowledge/decisions/internals/actor-flow-verdicts-are-llm-self-evaluations.md +25 -0
  363. package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +26 -0
  364. package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +33 -0
  365. package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +28 -0
  366. package/knowledge/decisions/internals/ai-agent-agui-bridge-obeys-the-client-ordering-contract.md +29 -0
  367. package/knowledge/decisions/internals/ai-agent-audio-chunks-carry-the-format-the-provider-returned.md +20 -0
  368. package/knowledge/decisions/internals/ai-agent-credential-suspensions-hide-the-tool-result.md +26 -0
  369. package/knowledge/decisions/internals/ai-agent-delegate-and-supervise-hide-different-text.md +26 -0
  370. package/knowledge/decisions/internals/ai-agent-llm-tool-arguments-have-nulls-stripped.md +23 -0
  371. package/knowledge/decisions/internals/ai-agent-model-config-stays-a-single-resolution-seam.md +25 -0
  372. package/knowledge/decisions/internals/ai-agent-onerror-hooks-cannot-change-the-failure.md +22 -0
  373. package/knowledge/decisions/internals/ai-agent-runner-methods-must-keep-their-receiver.md +22 -0
  374. package/knowledge/decisions/internals/ai-agent-stream-persistence-is-best-effort.md +27 -0
  375. package/knowledge/decisions/internals/ai-agent-sub-agents-inherit-the-parent-context-block.md +26 -0
  376. package/knowledge/decisions/internals/ai-agent-tool-execute-failures-are-logged-unconditionally.md +25 -0
  377. package/knowledge/decisions/internals/ai-agent-voice-input-transcribes-audio-parts-in-place.md +22 -0
  378. package/knowledge/decisions/internals/ai-agent-working-memory-is-persisted-only-when-valid.md +25 -0
  379. package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +30 -0
  380. package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +31 -0
  381. package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +29 -0
  382. package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +28 -0
  383. package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +27 -0
  384. package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +28 -0
  385. package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +34 -0
  386. package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +29 -0
  387. package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +34 -0
  388. package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +44 -0
  389. package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +39 -0
  390. package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +42 -0
  391. package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +39 -0
  392. package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +43 -0
  393. package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +38 -0
  394. package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +44 -0
  395. package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +27 -0
  396. package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +32 -0
  397. package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +28 -0
  398. package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +31 -0
  399. package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +26 -0
  400. package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +32 -0
  401. package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +28 -0
  402. package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +30 -0
  403. package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +26 -0
  404. package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +28 -0
  405. package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +32 -0
  406. package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +26 -0
  407. package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +25 -0
  408. package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +26 -0
  409. package/knowledge/decisions/internals/index.md +113 -0
  410. package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +25 -0
  411. package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +26 -0
  412. package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +24 -0
  413. package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +28 -0
  414. package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +27 -0
  415. package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +31 -0
  416. package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +32 -0
  417. package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +27 -0
  418. package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +26 -0
  419. package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +27 -0
  420. package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +30 -0
  421. package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +28 -0
  422. package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +30 -0
  423. package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +29 -0
  424. package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +27 -0
  425. package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +40 -0
  426. package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +26 -0
  427. package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +33 -0
  428. package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +26 -0
  429. package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +26 -0
  430. package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +25 -0
  431. package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +58 -0
  432. package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +34 -0
  433. package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +42 -0
  434. package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +38 -0
  435. package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +29 -0
  436. package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +42 -0
  437. package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +25 -0
  438. package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +29 -0
  439. package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +43 -0
  440. package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +29 -0
  441. package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +42 -0
  442. package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +33 -0
  443. package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +32 -0
  444. package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +31 -0
  445. package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +39 -0
  446. package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +29 -0
  447. package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +33 -0
  448. package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +37 -0
  449. package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +50 -0
  450. package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +43 -0
  451. package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +32 -0
  452. package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +18 -0
  453. package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +34 -0
  454. package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +26 -0
  455. package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +33 -0
  456. package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +27 -0
  457. package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +34 -0
  458. package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +38 -0
  459. package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +30 -0
  460. package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +26 -0
  461. package/knowledge/decisions/security/actor-flow-missing-approval-decisions-default-to-denied.md +22 -0
  462. package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +27 -0
  463. package/knowledge/decisions/security/actor-sign-in-only-works-for-actor-flagged-users.md +27 -0
  464. package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +43 -0
  465. package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +52 -0
  466. package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +46 -0
  467. package/knowledge/decisions/security/ai-agent-approval-forwarding-requires-a-symbol-brand.md +27 -0
  468. package/knowledge/decisions/security/ai-agent-credential-requests-are-symbol-branded.md +37 -0
  469. package/knowledge/decisions/security/ai-agent-gate-requires-a-session-only-when-auth-is-true.md +31 -0
  470. package/knowledge/decisions/security/ai-agent-ownership-failures-never-echo-the-resource.md +23 -0
  471. package/knowledge/decisions/security/ai-agent-resume-re-runs-the-authorization-gate.md +22 -0
  472. package/knowledge/decisions/security/ai-agent-sessionless-deployments-have-no-thread-ownership.md +39 -0
  473. package/knowledge/decisions/security/ai-agent-thread-ownership-composes-the-session-principal.md +30 -0
  474. package/knowledge/decisions/security/ai-agent-tool-filtering-reads-the-live-function-config.md +24 -0
  475. package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +30 -0
  476. package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +49 -0
  477. package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +76 -0
  478. package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +39 -0
  479. package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +37 -0
  480. package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +31 -0
  481. package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +30 -0
  482. package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +40 -0
  483. package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +33 -0
  484. package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +46 -0
  485. package/knowledge/decisions/security/index.md +55 -0
  486. package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +27 -0
  487. package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +40 -0
  488. package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +31 -0
  489. package/knowledge/decisions/security/pikku-carries-actor-scopes-as-data-and-the-app-grants-them.md +26 -0
  490. package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +69 -0
  491. package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +39 -0
  492. package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +34 -0
  493. package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +49 -0
  494. package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +30 -0
  495. package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +28 -0
  496. package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +34 -0
  497. package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +37 -0
  498. package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +25 -0
  499. package/knowledge/decisions/security/workflow-actor-steps-always-use-the-real-transport.md +34 -0
  500. package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +40 -0
  501. package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +32 -0
  502. package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-actor-and-per-scenario.md +32 -0
  503. package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +31 -0
  504. package/knowledge/index.md +24 -0
  505. package/knowledge/questions/index.md +15 -0
  506. package/package.json +4 -2
  507. package/run-tests.sh +0 -0
  508. package/src/crypto-utils.test.ts +460 -19
  509. package/src/crypto-utils.ts +283 -55
  510. package/src/data-classification.ts +1 -7
  511. package/src/dev/hot-reload.test.ts +0 -4
  512. package/src/dev/hot-reload.ts +11 -30
  513. package/src/dev/module-runner.ts +7 -32
  514. package/src/dev/reload-meta.ts +9 -29
  515. package/src/errors/error-handler.ts +20 -35
  516. package/src/errors/error.test.ts +30 -1
  517. package/src/errors/errors.ts +73 -157
  518. package/src/function/abort-scope.test.ts +97 -0
  519. package/src/function/abort-scope.ts +80 -0
  520. package/src/function/function-runner.test.ts +75 -7
  521. package/src/function/function-runner.ts +73 -30
  522. package/src/function/functions.types.ts +56 -136
  523. package/src/function/list.types.test.ts +3 -25
  524. package/src/function/list.types.ts +12 -62
  525. package/src/gopass-secrets-removed.test.ts +51 -0
  526. package/src/handle-error.test.ts +108 -1
  527. package/src/handle-error.ts +8 -18
  528. package/src/index.ts +60 -1
  529. package/src/middleware/auth-apikey.test.ts +0 -1
  530. package/src/middleware/auth-apikey.ts +0 -17
  531. package/src/middleware/auth-bearer.test.ts +0 -3
  532. package/src/middleware/auth-bearer.ts +3 -40
  533. package/src/middleware/auth-cookie.test.ts +0 -6
  534. package/src/middleware/auth-cookie.ts +2 -26
  535. package/src/middleware/cors.test.ts +34 -0
  536. package/src/middleware/cors.ts +12 -33
  537. package/src/middleware/remote-auth.test.ts +24 -9
  538. package/src/middleware/remote-auth.ts +10 -2
  539. package/src/middleware/telemetry.ts +2 -31
  540. package/src/middleware-runner.test.ts +0 -2
  541. package/src/middleware-runner.ts +5 -74
  542. package/src/permissions.test.ts +30 -0
  543. package/src/permissions.ts +24 -74
  544. package/src/pikku-request.ts +0 -6
  545. package/src/pikku-state.ts +2 -30
  546. package/src/production-barrels-stay-lean.test.ts +110 -0
  547. package/src/remote.test.ts +172 -0
  548. package/src/remote.ts +17 -7
  549. package/src/schema.test.ts +103 -0
  550. package/src/schema.ts +35 -18
  551. package/src/scopes.ts +7 -48
  552. package/src/services/ai-agent-runner-service.ts +20 -0
  553. package/src/services/ai-embedding-service.ts +3 -25
  554. package/src/services/audit-service.ts +1 -2
  555. package/src/services/content-service.ts +1 -46
  556. package/src/services/credential-service.ts +3 -40
  557. package/src/services/credential-wire-service.test.ts +0 -2
  558. package/src/services/deployment-service.ts +3 -9
  559. package/src/services/gateway-service.ts +0 -15
  560. package/src/services/{http-scenario-actors-converse.test.ts → http-personas-converse.test.ts} +38 -9
  561. package/src/services/{http-scenario-actors.test.ts → http-personas.test.ts} +39 -22
  562. package/src/services/{http-scenario-actors.ts → http-personas.ts} +85 -45
  563. package/src/services/in-memory-queue-service.ts +1 -15
  564. package/src/services/in-memory-trigger-service.ts +1 -18
  565. package/src/services/in-memory-workflow-service.test.ts +0 -13
  566. package/src/services/in-memory-workflow-service.ts +4 -38
  567. package/src/services/index.ts +20 -15
  568. package/src/services/istanbul-coverage-service.ts +2 -8
  569. package/src/services/jwt-service.ts +1 -16
  570. package/src/services/local-content.test.ts +159 -27
  571. package/src/services/local-content.ts +55 -23
  572. package/src/services/local-gateway-service.ts +2 -17
  573. package/src/services/local-secrets.ts +0 -4
  574. package/src/services/logger-console.test.ts +0 -1
  575. package/src/services/logger-console.ts +3 -7
  576. package/src/services/logger.ts +2 -37
  577. package/src/services/meta-service.test.ts +1 -5
  578. package/src/services/meta-service.ts +41 -61
  579. package/src/services/{scenario-actors-service.ts → personas-service.ts} +48 -43
  580. package/src/services/pikku-user-id.ts +0 -4
  581. package/src/services/queue-webhook-service.ts +9 -41
  582. package/src/services/scheduler-service.ts +1 -50
  583. package/src/services/schema-service.ts +1 -24
  584. package/src/services/scope-service.ts +50 -34
  585. package/src/services/scoped-secret-service.ts +0 -4
  586. package/src/services/secret-host-binding.test.ts +138 -0
  587. package/src/services/secret-host-binding.ts +51 -0
  588. package/src/services/secret-service.ts +5 -33
  589. package/src/services/secretless.test.ts +54 -0
  590. package/src/services/secretless.ts +29 -0
  591. package/src/services/stub-tracker.ts +8 -18
  592. package/src/services/system-role-guard.test.ts +93 -0
  593. package/src/services/system-role-guard.ts +71 -0
  594. package/src/services/trigger-service.ts +0 -12
  595. package/src/services/typed-secret-service.ts +1 -7
  596. package/src/services/v8-coverage-service.ts +3 -6
  597. package/src/services/variables-service.ts +1 -8
  598. package/src/services/webhook-service.ts +19 -63
  599. package/src/services/workflow-service.ts +3 -20
  600. package/src/testing/service-tests.ts +0 -26
  601. package/src/time-utils.ts +1 -19
  602. package/src/types/core.types.ts +116 -229
  603. package/src/types/state.types.ts +7 -9
  604. package/src/utils/hmac.ts +4 -10
  605. package/src/utils/safe-fetch.ts +13 -54
  606. package/src/utils.test.ts +11 -2
  607. package/src/utils.ts +6 -15
  608. package/src/wirings/actor-flow/actor-flow.types.ts +1 -34
  609. package/src/wirings/actor-flow/index.ts +0 -9
  610. package/src/wirings/actor-flow/run-conversation.test.ts +11 -6
  611. package/src/wirings/actor-flow/run-conversation.ts +19 -12
  612. package/src/wirings/ai-agent/ai-agent-agui.test.ts +75 -10
  613. package/src/wirings/ai-agent/ai-agent-agui.ts +36 -17
  614. package/src/wirings/ai-agent/ai-agent-helpers.ts +20 -0
  615. package/src/wirings/ai-agent/ai-agent-interrupt.test.ts +842 -0
  616. package/src/wirings/ai-agent/ai-agent-interrupt.ts +399 -0
  617. package/src/wirings/ai-agent/ai-agent-memory.ts +0 -2
  618. package/src/wirings/ai-agent/ai-agent-model-config.ts +1 -9
  619. package/src/wirings/ai-agent/ai-agent-prepare.test.ts +202 -31
  620. package/src/wirings/ai-agent/ai-agent-prepare.ts +82 -138
  621. package/src/wirings/ai-agent/ai-agent-registry.test.ts +191 -6
  622. package/src/wirings/ai-agent/ai-agent-registry.ts +18 -1
  623. package/src/wirings/ai-agent/ai-agent-resume-authorization.test.ts +0 -2
  624. package/src/wirings/ai-agent/ai-agent-runner.test.ts +11 -9
  625. package/src/wirings/ai-agent/ai-agent-runner.ts +67 -33
  626. package/src/wirings/ai-agent/ai-agent-stream.test.ts +205 -103
  627. package/src/wirings/ai-agent/ai-agent-stream.ts +192 -75
  628. package/src/wirings/ai-agent/ai-agent-thread-ownership.test.ts +301 -0
  629. package/src/wirings/ai-agent/ai-agent.types.ts +85 -4
  630. package/src/wirings/ai-agent/index.ts +35 -3
  631. package/src/wirings/ai-agent/voice-input.test.ts +72 -7
  632. package/src/wirings/ai-agent/voice-input.ts +48 -3
  633. package/src/wirings/ai-agent/voice-output.test.ts +422 -0
  634. package/src/wirings/ai-agent/voice-output.ts +216 -56
  635. package/src/wirings/channel/channel-common.ts +15 -20
  636. package/src/wirings/channel/channel-handler.test.ts +50 -0
  637. package/src/wirings/channel/channel-handler.ts +32 -11
  638. package/src/wirings/channel/channel-host-rpc.test.ts +150 -0
  639. package/src/wirings/channel/channel-host-rpc.ts +69 -0
  640. package/src/wirings/channel/channel-middleware-runner.test.ts +0 -1
  641. package/src/wirings/channel/channel-middleware-runner.ts +0 -12
  642. package/src/wirings/channel/channel-rpc-registry.ts +116 -0
  643. package/src/wirings/channel/channel-rpc-responder.ts +117 -0
  644. package/src/wirings/channel/channel-rpc-service.ts +146 -0
  645. package/src/wirings/channel/channel-rpc-validators.ts +65 -0
  646. package/src/wirings/channel/channel-rpc.test.ts +820 -0
  647. package/src/wirings/channel/channel-rpc.ts +5 -0
  648. package/src/wirings/channel/channel-rpc.types.ts +150 -0
  649. package/src/wirings/channel/channel-runner.ts +0 -14
  650. package/src/wirings/channel/channel-store.ts +0 -10
  651. package/src/wirings/channel/channel.types.ts +19 -8
  652. package/src/wirings/channel/define-channel-routes.ts +0 -20
  653. package/src/wirings/channel/eventhub-service.ts +0 -18
  654. package/src/wirings/channel/index.ts +35 -0
  655. package/src/wirings/channel/local/local-channel-handler.ts +3 -1
  656. package/src/wirings/channel/local/local-channel-runner.test.ts +0 -10
  657. package/src/wirings/channel/local/local-channel-runner.ts +3 -1
  658. package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -13
  659. package/src/wirings/channel/local/local-eventhub-service.ts +2 -37
  660. package/src/wirings/channel/log-channels.ts +0 -4
  661. package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +83 -2
  662. package/src/wirings/channel/pikku-abstract-channel-handler.ts +7 -0
  663. package/src/wirings/channel/serverless/serverless-channel-runner.ts +2 -5
  664. package/src/wirings/cli/channel/cli-approval.test.ts +177 -0
  665. package/src/wirings/cli/channel/cli-approval.ts +135 -0
  666. package/src/wirings/cli/channel/cli-channel-runner.ts +4 -26
  667. package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +169 -0
  668. package/src/wirings/cli/channel/cli-raw-channel-runner.ts +59 -16
  669. package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +480 -0
  670. package/src/wirings/cli/channel/cli-raw-client-runner.ts +155 -0
  671. package/src/wirings/cli/channel/index.ts +9 -0
  672. package/src/wirings/cli/cli-runner.test.ts +0 -1
  673. package/src/wirings/cli/cli-runner.ts +46 -88
  674. package/src/wirings/cli/cli.types.ts +14 -3
  675. package/src/wirings/cli/command-parser.test.ts +0 -4
  676. package/src/wirings/cli/command-parser.ts +11 -91
  677. package/src/wirings/cli/define-cli-commands.ts +1 -17
  678. package/src/wirings/credential/credential.types.ts +0 -12
  679. package/src/wirings/credential/{wire-credential.ts → define-credential.ts} +7 -7
  680. package/src/wirings/credential/index.ts +1 -1
  681. package/src/wirings/credential/validate-credential-definitions.ts +2 -4
  682. package/src/wirings/gateway/gateway-runner.test.ts +1 -21
  683. package/src/wirings/gateway/gateway-runner.ts +8 -110
  684. package/src/wirings/gateway/gateway.types.ts +7 -80
  685. package/src/wirings/http/http-routes.test.ts +0 -3
  686. package/src/wirings/http/http-routes.ts +0 -86
  687. package/src/wirings/http/http-runner.test.ts +0 -1
  688. package/src/wirings/http/http-runner.ts +12 -168
  689. package/src/wirings/http/http.types.ts +17 -62
  690. package/src/wirings/http/index.ts +5 -1
  691. package/src/wirings/http/log-http-routes.ts +0 -4
  692. package/src/wirings/http/pikku-fetch-http-request.test.ts +88 -7
  693. package/src/wirings/http/pikku-fetch-http-request.ts +74 -50
  694. package/src/wirings/http/pikku-fetch-http-response.test.ts +1 -1
  695. package/src/wirings/http/pikku-fetch-http-response.ts +0 -3
  696. package/src/wirings/http/routers/path-to-regex.test.ts +4 -17
  697. package/src/wirings/http/routers/path-to-regex.ts +2 -13
  698. package/src/wirings/http/web-request.test.ts +33 -2
  699. package/src/wirings/http/web-request.ts +30 -17
  700. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -1
  701. package/src/wirings/mcp/mcp-runner.test.ts +40 -0
  702. package/src/wirings/mcp/mcp-runner.ts +9 -15
  703. package/src/wirings/mcp/mcp.types.ts +7 -42
  704. package/src/wirings/oauth2/oauth2.types.ts +0 -30
  705. package/src/wirings/persona/define-personas.ts +29 -0
  706. package/src/wirings/persona/index.ts +62 -0
  707. package/src/wirings/persona/persona-email.ts +87 -0
  708. package/src/wirings/persona/persona-environments.test.ts +183 -0
  709. package/src/wirings/persona/persona-environments.ts +138 -0
  710. package/src/wirings/persona/persona-mailbox.ts +156 -0
  711. package/src/wirings/persona/persona.test.ts +220 -0
  712. package/src/wirings/persona/persona.types.ts +131 -0
  713. package/src/wirings/persona/validate-personas.ts +133 -0
  714. package/src/wirings/queue/index.ts +13 -3
  715. package/src/wirings/queue/queue-identity.test.ts +453 -0
  716. package/src/wirings/queue/queue-identity.ts +173 -0
  717. package/src/wirings/queue/queue-runner.ts +12 -31
  718. package/src/wirings/queue/queue.types.ts +19 -89
  719. package/src/wirings/queue/register-queue-helper.ts +0 -14
  720. package/src/wirings/queue/signed-queue-service.ts +59 -0
  721. package/src/wirings/queue/validate-worker-config.ts +2 -28
  722. package/src/wirings/role/define-system-role.ts +33 -0
  723. package/src/wirings/role/index.ts +13 -0
  724. package/src/wirings/role/role.test.ts +104 -0
  725. package/src/wirings/role/role.types.ts +47 -0
  726. package/src/wirings/role/validate-role-definitions.ts +93 -0
  727. package/src/wirings/rpc/addon-auth-tags.test.ts +223 -0
  728. package/src/wirings/rpc/addon-runner.ts +0 -56
  729. package/src/wirings/rpc/addon-scopes.test.ts +225 -0
  730. package/src/wirings/rpc/remote-addon-auth.ts +1 -13
  731. package/src/wirings/rpc/rpc-runner.test.ts +186 -2
  732. package/src/wirings/rpc/rpc-runner.ts +145 -127
  733. package/src/wirings/rpc/rpc-types.ts +11 -6
  734. package/src/wirings/rpc/wire-addon.test.ts +43 -1
  735. package/src/wirings/rpc/wire-addon.ts +99 -0
  736. package/src/wirings/rpc/wire-remote-addon.ts +9 -29
  737. package/src/wirings/scheduler/log-schedulers.ts +0 -4
  738. package/src/wirings/scheduler/scheduler-runner.test.ts +1 -8
  739. package/src/wirings/scheduler/scheduler-runner.ts +0 -2
  740. package/src/wirings/scheduler/scheduler.types.ts +1 -14
  741. package/src/wirings/scope/{wire-scope.ts → define-scope.ts} +5 -6
  742. package/src/wirings/scope/index.ts +1 -1
  743. package/src/wirings/scope/scope.test.ts +1 -2
  744. package/src/wirings/scope/scope.types.ts +7 -9
  745. package/src/wirings/scope/validate-scope-definitions.ts +3 -21
  746. package/src/wirings/secret/index.ts +1 -1
  747. package/src/wirings/secret/secret.types.ts +19 -15
  748. package/src/wirings/secret/validate-secret-definitions.ts +2 -4
  749. package/src/wirings/trigger/trigger-runner.ts +1 -27
  750. package/src/wirings/trigger/trigger.types.ts +1 -82
  751. package/src/wirings/variable/index.ts +1 -1
  752. package/src/wirings/variable/validate-variable-definitions.ts +2 -4
  753. package/src/wirings/variable/variable.types.ts +1 -13
  754. package/src/wirings/virtual-user/index.ts +76 -0
  755. package/src/wirings/virtual-user/run-virtual-user.test.ts +765 -0
  756. package/src/wirings/virtual-user/run-virtual-user.ts +671 -0
  757. package/src/wirings/virtual-user/virtual-user-agents.test.ts +65 -0
  758. package/src/wirings/virtual-user/virtual-user-agents.ts +57 -0
  759. package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +215 -0
  760. package/src/wirings/virtual-user/virtual-user-catalogue.ts +184 -0
  761. package/src/wirings/virtual-user/virtual-user-derive.test.ts +398 -0
  762. package/src/wirings/virtual-user/virtual-user-derive.ts +173 -0
  763. package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +63 -0
  764. package/src/wirings/virtual-user/virtual-user-dispositions.ts +213 -0
  765. package/src/wirings/virtual-user/virtual-user-intents.test.ts +208 -0
  766. package/src/wirings/virtual-user/virtual-user-intents.ts +185 -0
  767. package/src/wirings/virtual-user/virtual-user-rng.test.ts +72 -0
  768. package/src/wirings/virtual-user/virtual-user-rng.ts +50 -0
  769. package/src/wirings/virtual-user/virtual-user-target.ts +47 -0
  770. package/src/wirings/virtual-user/virtual-user.types.ts +219 -0
  771. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +5 -4
  772. package/src/wirings/workflow/dsl/workflow-runner.ts +0 -4
  773. package/src/wirings/workflow/feature.ts +0 -19
  774. package/src/wirings/workflow/graph/graph-node.ts +0 -136
  775. package/src/wirings/workflow/graph/graph-runner.test.ts +20 -19
  776. package/src/wirings/workflow/graph/graph-runner.ts +6 -41
  777. package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -4
  778. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -58
  779. package/src/wirings/workflow/index.ts +10 -44
  780. package/src/wirings/workflow/pikku-scenario-service.ts +235 -52
  781. package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -39
  782. package/src/wirings/workflow/pikku-workflow-service.ts +77 -674
  783. package/src/wirings/workflow/run-timeline.test.ts +7 -19
  784. package/src/wirings/workflow/run-timeline.ts +0 -56
  785. package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -1
  786. package/src/wirings/workflow/scenario-cookie-jar.ts +0 -25
  787. package/src/wirings/workflow/scenario-expectations.test.ts +2 -7
  788. package/src/wirings/workflow/scenario-hooks.test.ts +2 -7
  789. package/src/wirings/workflow/scenario-poll.test.ts +0 -2
  790. package/src/wirings/workflow/scenario-poll.ts +0 -15
  791. package/src/wirings/workflow/scenario-prose.ts +0 -28
  792. package/src/wirings/workflow/scenario-service.test.ts +2 -9
  793. package/src/wirings/workflow/scenario-step-guards.ts +1 -14
  794. package/src/wirings/workflow/scenario-step.test.ts +159 -14
  795. package/src/wirings/workflow/scenario-step.types.ts +82 -6
  796. package/src/wirings/workflow/scenario-surface.test.ts +145 -0
  797. package/src/wirings/workflow/scenario-surface.ts +71 -0
  798. package/src/wirings/workflow/workflow-dispatch-durability.test.ts +14 -15
  799. package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -4
  800. package/src/wirings/workflow/workflow-inline-authority.test.ts +169 -0
  801. package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -2
  802. package/src/wirings/workflow/workflow-invocation-id.ts +2 -22
  803. package/src/wirings/workflow/workflow-mirror.test.ts +0 -7
  804. package/src/wirings/workflow/workflow-on-error.test.ts +0 -9
  805. package/src/wirings/workflow/workflow-queue-workers.ts +0 -21
  806. package/src/wirings/workflow/workflow-replay-snapshot.test.ts +8 -7
  807. package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -5
  808. package/src/wirings/workflow/workflow-run-context.test.ts +5 -10
  809. package/src/wirings/workflow/workflow-run-polling.test.ts +0 -5
  810. package/src/wirings/workflow/workflow-step-ordinal.test.ts +19 -4
  811. package/src/wirings/workflow/workflow-step-session.test.ts +0 -7
  812. package/src/wirings/workflow/workflow.types.ts +0 -203
  813. package/tsconfig.tsbuildinfo +1 -1
  814. package/src/middleware/timeout.ts +0 -22
  815. package/src/pikku-response.ts +0 -5
  816. package/src/services/gopass-secrets.ts +0 -78
  817. package/src/wirings/mcp/mcp-endpoint-registry.test.d.ts +0 -1
  818. package/src/wirings/workflow/dsl/index.ts +0 -36
  819. package/src/wirings/workflow/graph/index.ts +0 -15
@@ -1,67 +1,16 @@
1
1
  import type { CorePikkuMiddleware, CorePikkuMiddlewareGroup, PikkuWiringTypes, MiddlewareMetadata } from './types/core.types.js';
2
- /**
3
- * Runs a chain of middleware functions in sequence before executing the main function.
4
- *
5
- * @param services - An object containing services (e.g., singletonServices, userSession, etc.)
6
- * @param wire - The wire context, e.g., { http }.
7
- * @param middlewares - An array of middleware functions to run.
8
- * @param main - The main function to execute after all middleware have run.
9
- * @returns A promise resolving to the result of the main function.
10
- *
11
- * @example
12
- * runMiddleware(
13
- * { ...services, userSession },
14
- * { http },
15
- * [middleware1, middleware2, middleware3],
16
- * async () => { return await runMain(); }
17
- * );
18
- */
19
2
  export declare const runMiddleware: <Middleware extends CorePikkuMiddleware<any, any>>(services: Parameters<Middleware>[0], wire: Parameters<Middleware>[1], middlewares: readonly Middleware[], main?: () => Promise<unknown>) => Promise<unknown>;
20
3
  /**
21
- * Registers tag-scoped middleware. Applies to any wiring (HTTP, Channel,
22
- * Queue, Scheduler, MCP, CLI, Workflow, Agent) that carries the matching tag.
23
- *
24
- * For tree-shaking, wrap in a factory:
25
- * `export const x = () => addTagMiddleware('tag', [...])`
26
- *
27
- * @example
28
- * export const adminMiddleware = () => addTagMiddleware('admin', [authMiddleware])
4
+ * Registers tag-scoped middleware for any wiring carrying the tag. Wrap in a
5
+ * factory (`export const x = () => addTagMiddleware(...)`) for tree-shaking.
29
6
  */
30
7
  export declare const addTagMiddleware: <PikkuMiddleware extends CorePikkuMiddleware>(tag: string, middleware: CorePikkuMiddlewareGroup, packageName?: string | null) => CorePikkuMiddlewareGroup;
31
8
  /**
32
- * Registers wire-agnostic global middleware. Runs at the top of every
33
- * wiring's middleware chain — before wire-, tag-, and function-level
34
- * entries — across HTTP, Channel, Queue, Scheduler, MCP, CLI, Workflow, Agent.
35
- *
36
- * Resolution order: global → wire → tag → function.
37
- *
38
- * @example
39
- * addGlobalMiddleware([telemetryMiddleware])
9
+ * Registers wire-agnostic global middleware, which runs at the top of every
10
+ * wiring's chain — before wire-, tag- and function-level entries.
40
11
  */
41
12
  export declare const addGlobalMiddleware: <PikkuMiddleware extends CorePikkuMiddleware>(middleware: CorePikkuMiddlewareGroup, packageName?: string | null) => CorePikkuMiddlewareGroup;
42
13
  export declare const clearMiddlewareCache: () => void;
43
- /**
44
- * Combines wiring-specific middleware with function-level middleware.
45
- *
46
- * This function resolves middleware metadata into actual middleware functions and combines them.
47
- * It filters out wire middleware without tags from inheritedMiddleware to avoid duplication
48
- * (those are passed separately as wireMiddleware).
49
- *
50
- * @param {object} options - Configuration object for combining middleware.
51
- * @param {MiddlewareMetadata[] | undefined} options.inheritedMiddleware - Metadata from wiring (HTTP + tags + wire with tags).
52
- * @param {CorePikkuMiddleware[] | undefined} options.wireMiddleware - Inline wire middleware.
53
- * @param {MiddlewareMetadata[] | undefined} options.funcMiddleware - Function middleware metadata.
54
- * @returns {CorePikkuMiddleware[]} Combined array of resolved middleware.
55
- *
56
- * @example
57
- * ```typescript
58
- * const combined = combineMiddleware(wireType, wireId, {
59
- * inheritedMiddleware: meta.middleware,
60
- * wireMiddleware: [inlineMiddleware],
61
- * funcMiddleware: funcMeta.middleware
62
- * })
63
- * ```
64
- */
65
14
  export declare const combineMiddleware: (wireType: PikkuWiringTypes, uid: string, { wireInheritedMiddleware, wireMiddleware, funcInheritedMiddleware, funcMiddleware, packageName, }?: {
66
15
  wireInheritedMiddleware?: MiddlewareMetadata[];
67
16
  wireMiddleware?: CorePikkuMiddleware[];
@@ -14,25 +14,7 @@ const getMiddlewarePriority = (fn) => {
14
14
  const sortByPriority = (middlewares) => {
15
15
  return middlewares.sort((a, b) => getMiddlewarePriority(a) - getMiddlewarePriority(b));
16
16
  };
17
- /**
18
- * Runs a chain of middleware functions in sequence before executing the main function.
19
- *
20
- * @param services - An object containing services (e.g., singletonServices, userSession, etc.)
21
- * @param wire - The wire context, e.g., { http }.
22
- * @param middlewares - An array of middleware functions to run.
23
- * @param main - The main function to execute after all middleware have run.
24
- * @returns A promise resolving to the result of the main function.
25
- *
26
- * @example
27
- * runMiddleware(
28
- * { ...services, userSession },
29
- * { http },
30
- * [middleware1, middleware2, middleware3],
31
- * async () => { return await runMain(); }
32
- * );
33
- */
34
17
  export const runMiddleware = async (services, wire, middlewares, main) => {
35
- // Sort by priority if not already sorted (cached middleware is pre-sorted)
36
18
  const sorted = isSortedByPriority(middlewares)
37
19
  ? middlewares
38
20
  : [...middlewares].sort((a, b) => getMiddlewarePriority(a) - getMiddlewarePriority(b));
@@ -58,14 +40,8 @@ const isSortedByPriority = (middlewares) => {
58
40
  return true;
59
41
  };
60
42
  /**
61
- * Registers tag-scoped middleware. Applies to any wiring (HTTP, Channel,
62
- * Queue, Scheduler, MCP, CLI, Workflow, Agent) that carries the matching tag.
63
- *
64
- * For tree-shaking, wrap in a factory:
65
- * `export const x = () => addTagMiddleware('tag', [...])`
66
- *
67
- * @example
68
- * export const adminMiddleware = () => addTagMiddleware('admin', [authMiddleware])
43
+ * Registers tag-scoped middleware for any wiring carrying the tag. Wrap in a
44
+ * factory (`export const x = () => addTagMiddleware(...)`) for tree-shaking.
69
45
  */
70
46
  export const addTagMiddleware = (tag, middleware, packageName = null) => {
71
47
  const tagGroups = pikkuState(packageName, 'middleware', 'tagGroup');
@@ -76,31 +52,14 @@ export const addTagMiddleware = (tag, middleware, packageName = null) => {
76
52
  return middleware;
77
53
  };
78
54
  /**
79
- * Registers wire-agnostic global middleware. Runs at the top of every
80
- * wiring's middleware chain — before wire-, tag-, and function-level
81
- * entries — across HTTP, Channel, Queue, Scheduler, MCP, CLI, Workflow, Agent.
82
- *
83
- * Resolution order: global → wire → tag → function.
84
- *
85
- * @example
86
- * addGlobalMiddleware([telemetryMiddleware])
55
+ * Registers wire-agnostic global middleware, which runs at the top of every
56
+ * wiring's chain — before wire-, tag- and function-level entries.
87
57
  */
88
58
  export const addGlobalMiddleware = (middleware, packageName = null) => {
89
59
  const state = pikkuState(packageName, 'middleware', 'global');
90
60
  state.push(...middleware);
91
61
  return middleware;
92
62
  };
93
- /**
94
- * Retrieves a registered middleware function by its name.
95
- *
96
- * This function looks up middleware that was registered with registerMiddleware.
97
- * It's used internally by the framework to resolve middleware references in metadata.
98
- *
99
- * @param {string} name - The unique name (pikkuFuncId) of the middleware function.
100
- * @returns {CorePikkuMiddleware | undefined} The middleware function, or undefined if not found.
101
- *
102
- * @internal
103
- */
104
63
  const getMiddlewareByName = (name) => {
105
64
  const middlewareStore = pikkuState(null, 'misc', 'middleware');
106
65
  const middleware = middlewareStore[name];
@@ -124,28 +83,6 @@ export const clearMiddlewareCache = () => {
124
83
  middlewareCache[key] = {};
125
84
  }
126
85
  };
127
- /**
128
- * Combines wiring-specific middleware with function-level middleware.
129
- *
130
- * This function resolves middleware metadata into actual middleware functions and combines them.
131
- * It filters out wire middleware without tags from inheritedMiddleware to avoid duplication
132
- * (those are passed separately as wireMiddleware).
133
- *
134
- * @param {object} options - Configuration object for combining middleware.
135
- * @param {MiddlewareMetadata[] | undefined} options.inheritedMiddleware - Metadata from wiring (HTTP + tags + wire with tags).
136
- * @param {CorePikkuMiddleware[] | undefined} options.wireMiddleware - Inline wire middleware.
137
- * @param {MiddlewareMetadata[] | undefined} options.funcMiddleware - Function middleware metadata.
138
- * @returns {CorePikkuMiddleware[]} Combined array of resolved middleware.
139
- *
140
- * @example
141
- * ```typescript
142
- * const combined = combineMiddleware(wireType, wireId, {
143
- * inheritedMiddleware: meta.middleware,
144
- * wireMiddleware: [inlineMiddleware],
145
- * funcMiddleware: funcMeta.middleware
146
- * })
147
- * ```
148
- */
149
86
  export const combineMiddleware = (wireType, uid, { wireInheritedMiddleware, wireMiddleware, funcInheritedMiddleware, funcMiddleware, packageName = null, } = {}) => {
150
87
  if (middlewareCache[wireType][uid]) {
151
88
  return middlewareCache[wireType][uid];
@@ -158,7 +95,6 @@ export const combineMiddleware = (wireType, uid, { wireInheritedMiddleware, wire
158
95
  if (wireInheritedMiddleware) {
159
96
  for (const meta of wireInheritedMiddleware) {
160
97
  if (meta.type === 'http') {
161
- // Look up HTTP middleware group from pikkuState
162
98
  const group = pikkuState(packageName, 'middleware', 'httpGroup')[meta.route];
163
99
  if (group) {
164
100
  // At runtime, all factories should be resolved to middleware
@@ -172,7 +108,6 @@ export const combineMiddleware = (wireType, uid, { wireInheritedMiddleware, wire
172
108
  }
173
109
  }
174
110
  else if (meta.type === 'wire') {
175
- // Individual wire middleware (exported, not inline)
176
111
  const middleware = getMiddlewareByName(meta.name);
177
112
  if (middleware) {
178
113
  resolved.push(middleware);
@@ -180,11 +115,10 @@ export const combineMiddleware = (wireType, uid, { wireInheritedMiddleware, wire
180
115
  }
181
116
  }
182
117
  }
183
- // 2. Add inline wire middleware
184
118
  if (wireMiddleware) {
185
119
  resolved.push(...wireMiddleware);
186
120
  }
187
- // 3. Resolve function inherited middleware (only tags, wire middleware already handled)
121
+ // Only tags here; wire middleware is resolved via wireInheritedMiddleware.
188
122
  if (funcInheritedMiddleware) {
189
123
  for (const meta of funcInheritedMiddleware) {
190
124
  if (meta.type === 'tag') {
@@ -193,14 +127,11 @@ export const combineMiddleware = (wireType, uid, { wireInheritedMiddleware, wire
193
127
  resolved.push(...group);
194
128
  }
195
129
  }
196
- // Note: wire middleware is already handled in wireInheritedMiddleware
197
130
  }
198
131
  }
199
- // 4. Add inline function middleware
200
132
  if (funcMiddleware) {
201
133
  resolved.push(...funcMiddleware);
202
134
  }
203
- // Sort by priority, deduplicate, and freeze
204
135
  sortByPriority(resolved);
205
136
  middlewareCache[wireType][uid] = freezeDedupe(resolved);
206
137
  return middlewareCache[wireType][uid];
@@ -1,20 +1,6 @@
1
1
  import type { CoreServices, CoreUserSession, PikkuWire } from './types/core.types.js';
2
2
  import type { CorePermissionGroup, CorePikkuPermission } from './function/functions.types.js';
3
3
  export declare const clearPermissionsCache: () => void;
4
- /**
5
- * Registers wire-agnostic global permissions. Global permissions are an AND
6
- * gate: every registered requirement must pass on every function invocation,
7
- * regardless of transport. A requirement may be a single permission function
8
- * or a permission group (in which case that group ORs internally, but the
9
- * group as a whole must still pass).
10
- *
11
- * Global permissions never satisfy a function's own `permissions` — the two
12
- * are independent gates that both have to pass, so a broad global can only
13
- * ever narrow access.
14
- *
15
- * @example
16
- * addGlobalPermission([signedInUser])
17
- */
18
4
  export declare const addGlobalPermission: (permissions: CorePermissionGroup | CorePikkuPermission[], packageName?: string | null) => CorePermissionGroup | CorePikkuPermission[];
19
5
  /**
20
6
  * @deprecated Tag-level permissions were removed in #972 — permissions are now
@@ -25,17 +11,6 @@ export declare const addGlobalPermission: (permissions: CorePermissionGroup | Co
25
11
  * past the release that removes tag permissions.
26
12
  */
27
13
  export declare const addTagPermission: (_tag: string, _permissions: CorePermissionGroup | CorePikkuPermission[], _packageName?: string | null) => never;
28
- /**
29
- * Runs authorization for a function invocation. Two independent gates, both of
30
- * which must pass:
31
- *
32
- * 1. Global permissions — AND. Every registered global requirement must pass.
33
- * 2. Function permissions — OR. The function's own `permissions` group must be
34
- * satisfied (see {@link verifyPermissions}).
35
- *
36
- * A passing global requirement never contributes to the function gate, so a
37
- * broad global like `signedIn` can't satisfy an admin-only function.
38
- */
39
14
  export declare const runPermissions: ({ funcPermissions, services, wire, data, packageName, label, }: {
40
15
  funcPermissions?: CorePermissionGroup | CorePikkuPermission[];
41
16
  services: CoreServices;
@@ -45,22 +20,6 @@ export declare const runPermissions: ({ funcPermissions, services, wire, data, p
45
20
  /** What the non-global gate is called in debug logs, e.g. 'function', 'agent'. */
46
21
  label?: string;
47
22
  }) => Promise<void>;
48
- /**
49
- * Checks whether a session passes the auth checks (pikkuAuth only) for a
50
- * given function/agent. Skips pikkuPermission checks since those require
51
- * request data which isn't available at filter time. Global auth requirements
52
- * are included so a filtered list honours app-wide auth.
53
- *
54
- * `funcPermissions` is the live {@link CorePermissionGroup} from the function or
55
- * agent config, not the metadata form: the `pikkuAuth` brand only survives on
56
- * the actual predicate objects, and the by-name registry those metadata entries
57
- * would resolve against is never populated. Passing metadata here would silently
58
- * collect nothing and let every gated tool through.
59
- *
60
- * @param funcPermissions - The live permission group from the func/agent config
61
- * @param session - The user's session
62
- * @param services - Singleton services
63
- * @param packageName - Optional package namespace
64
- * @returns true if the session passes the auth checks (or no auth checks exist)
65
- */
66
- export declare const checkAuthPermissions: (funcPermissions: CorePermissionGroup | undefined, session: CoreUserSession, services: CoreServices, packageName?: string | null) => Promise<boolean>;
23
+ export declare const checkAuthPermissions: (
24
+ /** Must be the live permission group from the func/agent config, never metadata. */
25
+ funcPermissions: CorePermissionGroup | undefined, session: CoreUserSession, services: CoreServices, packageName?: string | null) => Promise<boolean>;
@@ -1,22 +1,5 @@
1
1
  import { pikkuState } from './pikku-state.js';
2
2
  import { ForbiddenError } from './errors/errors.js';
3
- /**
4
- * Evaluates a single permission group. A group ORs its branches together and
5
- * ANDs the entries within a branch: the group passes if at least one branch
6
- * (an array of permission functions, all of which must return true — or a lone
7
- * function) is satisfied.
8
- *
9
- * This is the only place OR lives in authorization. Everything cross-cutting —
10
- * global permissions, scopes, and auth — ANDs together; a function's own
11
- * `permissions` group is the sole place where "owner OR admin"-style
12
- * alternatives are expressed.
13
- *
14
- * @param permissions - The permission group to evaluate.
15
- * @param services - The core services required for permission validation.
16
- * @param data - The request data passed to each permission function.
17
- * @param wire - The wire object containing request/response context and session.
18
- * @returns A promise resolving to true if the group is satisfied.
19
- */
20
3
  const verifyPermissions = async (permissions, services, data, wire) => {
21
4
  if (!permissions) {
22
5
  return true;
@@ -46,20 +29,6 @@ export const clearPermissionsCache = () => {
46
29
  delete globalPermissionsCache[key];
47
30
  }
48
31
  };
49
- /**
50
- * Registers wire-agnostic global permissions. Global permissions are an AND
51
- * gate: every registered requirement must pass on every function invocation,
52
- * regardless of transport. A requirement may be a single permission function
53
- * or a permission group (in which case that group ORs internally, but the
54
- * group as a whole must still pass).
55
- *
56
- * Global permissions never satisfy a function's own `permissions` — the two
57
- * are independent gates that both have to pass, so a broad global can only
58
- * ever narrow access.
59
- *
60
- * @example
61
- * addGlobalPermission([signedInUser])
62
- */
63
32
  export const addGlobalPermission = (permissions, packageName = null) => {
64
33
  const state = pikkuState(packageName, 'permissions', 'global');
65
34
  if (Array.isArray(permissions)) {
@@ -82,11 +51,20 @@ export const addGlobalPermission = (permissions, packageName = null) => {
82
51
  export const addTagPermission = (_tag, _permissions, _packageName = null) => {
83
52
  throw new Error('addTagPermission was removed in #972 — tag-level permissions no longer exist. Declare permissions on the function definition instead: pikkuFunc({ permissions }).');
84
53
  };
54
+ const bucket = (packageName) => pikkuState(packageName, 'permissions', 'global') ?? [];
85
55
  /**
86
- * Resolves the registered global permission requirements for a package,
87
- * caching the resolved array per package. The cache is keyed by package name
88
- * (an empty string for the root package) so packages never collide, and it is
89
- * cleared whenever globals are registered or on hot reload.
56
+ * Global permissions in effect for a function, root ones first.
57
+ *
58
+ * A function that belongs to a package reads *both* buckets, not just its own.
59
+ * The generated `addGlobalPermission` wrapper always registers under the root
60
+ * (`null`) package — it takes no package argument — so resolving the package
61
+ * bucket alone meant an application's "every request needs a signed-in user"
62
+ * rule silently stopped at the addon boundary, and the bucket the addon's
63
+ * functions did read was one no host could write to. Both directions of that
64
+ * are wrong, and the safe union is to apply everything: globals are an AND
65
+ * gate, so adding the root ones can only ever tighten.
66
+ *
67
+ * knowledge: decisions/security/global-permissions-and-function-permissions-are-independent-gates.md
90
68
  */
91
69
  const resolveGlobalPermissions = (packageName) => {
92
70
  const key = packageName ?? '';
@@ -94,23 +72,13 @@ const resolveGlobalPermissions = (packageName) => {
94
72
  if (cached) {
95
73
  return cached;
96
74
  }
97
- const globals = pikkuState(packageName, 'permissions', 'global');
98
- const resolved = globals && globals.length > 0 ? [...globals] : [];
75
+ const resolved = packageName
76
+ ? [...bucket(null), ...bucket(packageName)]
77
+ : [...bucket(null)];
99
78
  globalPermissionsCache[key] = resolved;
100
79
  return resolved;
101
80
  };
102
81
  const asGroup = (entry) => typeof entry === 'function' ? { permission: entry } : entry;
103
- /**
104
- * Runs authorization for a function invocation. Two independent gates, both of
105
- * which must pass:
106
- *
107
- * 1. Global permissions — AND. Every registered global requirement must pass.
108
- * 2. Function permissions — OR. The function's own `permissions` group must be
109
- * satisfied (see {@link verifyPermissions}).
110
- *
111
- * A passing global requirement never contributes to the function gate, so a
112
- * broad global like `signedIn` can't satisfy an admin-only function.
113
- */
114
82
  export const runPermissions = async ({ funcPermissions, services, wire, data, packageName = null, label = 'function', }) => {
115
83
  const globals = resolveGlobalPermissions(packageName);
116
84
  for (const entry of globals) {
@@ -131,29 +99,10 @@ export const runPermissions = async ({ funcPermissions, services, wire, data, pa
131
99
  }
132
100
  }
133
101
  };
134
- /**
135
- * Checks whether a session passes the auth checks (pikkuAuth only) for a
136
- * given function/agent. Skips pikkuPermission checks since those require
137
- * request data which isn't available at filter time. Global auth requirements
138
- * are included so a filtered list honours app-wide auth.
139
- *
140
- * `funcPermissions` is the live {@link CorePermissionGroup} from the function or
141
- * agent config, not the metadata form: the `pikkuAuth` brand only survives on
142
- * the actual predicate objects, and the by-name registry those metadata entries
143
- * would resolve against is never populated. Passing metadata here would silently
144
- * collect nothing and let every gated tool through.
145
- *
146
- * @param funcPermissions - The live permission group from the func/agent config
147
- * @param session - The user's session
148
- * @param services - Singleton services
149
- * @param packageName - Optional package namespace
150
- * @returns true if the session passes the auth checks (or no auth checks exist)
151
- */
152
- export const checkAuthPermissions = async (funcPermissions, session, services, packageName = null) => {
102
+ export const checkAuthPermissions = async (
103
+ /** Must be the live permission group from the func/agent config, never metadata. */
104
+ funcPermissions, session, services, packageName = null) => {
153
105
  const wire = { session };
154
- // Collect auth-only (pikkuAuth) predicates from globals and the function's
155
- // referenced permissions. Data-dependent permissions are ignored — they
156
- // can't be evaluated without request data at filter time.
157
106
  const authPerms = [];
158
107
  const collect = (perm) => {
159
108
  if (typeof perm === 'function') {
@@ -178,7 +127,6 @@ export const checkAuthPermissions = async (funcPermissions, session, services, p
178
127
  if (funcPermissions) {
179
128
  collect(funcPermissions);
180
129
  }
181
- // No auth permissions = allowed (only data-dependent permissions exist)
182
130
  if (authPerms.length === 0)
183
131
  return true;
184
132
  for (const perm of authPerms) {
@@ -1,14 +1,8 @@
1
1
  /**
2
- * Simplest class to represent a pikku request.
3
- * @template In - The type of the request body.
4
2
  * @group RequestResponse
5
3
  */
6
4
  export declare abstract class PikkuRequest<In = any> {
7
5
  #private;
8
6
  constructor(data: In);
9
- /**
10
- * Retrieves the data
11
- * @returns A promise that resolves to an object containing the combined data.
12
- */
13
7
  data(): Promise<In>;
14
8
  }
@@ -1,6 +1,4 @@
1
1
  /**
2
- * Simplest class to represent a pikku request.
3
- * @template In - The type of the request body.
4
2
  * @group RequestResponse
5
3
  */
6
4
  export class PikkuRequest {
@@ -8,10 +6,6 @@ export class PikkuRequest {
8
6
  constructor(data) {
9
7
  this.#data = data;
10
8
  }
11
- /**
12
- * Retrieves the data
13
- * @returns A promise that resolves to an object containing the combined data.
14
- */
15
9
  async data() {
16
10
  if (this.#data === undefined) {
17
11
  throw new Error('Data not found');
@@ -1,36 +1,10 @@
1
1
  import type { PikkuPackageState } from './index.js';
2
2
  import type { CoreSingletonServices, CreateWireServices } from './types/core.types.js';
3
3
  export declare const getAllPackageStates: () => Map<string, PikkuPackageState>;
4
- /**
5
- * Get or set package-scoped pikku state
6
- *
7
- * @param packageName - Package name (null for main package, '@scope/package' for addon packages)
8
- * @param type - State category (function, rpc, http, etc.)
9
- * @param content - Content key within the category
10
- * @param value - Optional value to set
11
- * @returns The current value of the state
12
- *
13
- * @example
14
- * // Main package
15
- * pikkuState(null, 'function', 'functions').get(funcName)
16
- *
17
- * // Addon package
18
- * pikkuState('@acme/stripe-functions', 'rpc', 'meta')
19
- */
20
4
  export declare const pikkuState: <Type extends keyof PikkuPackageState, Content extends keyof PikkuPackageState[Type]>(packageName: string | null, type: Type, content: Content, value?: PikkuPackageState[Type][Content]) => PikkuPackageState[Type][Content];
21
- /**
22
- * Initialize state for a new package
23
- */
24
5
  export declare const initializePikkuState: (packageName: string) => void;
25
6
  export declare const resetPikkuState: () => void;
26
7
  export declare const getSingletonServices: () => CoreSingletonServices;
27
8
  export declare const setSingletonServices: (services: CoreSingletonServices) => void;
28
9
  export declare const getCreateWireServices: () => CreateWireServices | undefined;
29
- /**
30
- * Register service factories for an addon package.
31
- * These factories are used to create services when the package's functions are invoked.
32
- *
33
- * @param packageName - The package name (e.g., '@pikku/templates-function-addon')
34
- * @param factories - The service factory functions
35
- */
36
10
  export declare const addPackageServiceFactories: (packageName: string, factories: NonNullable<PikkuPackageState["package"]["factories"]>) => void;
@@ -1,4 +1,4 @@
1
- const PIKKU_STATE_KEY = Symbol('@pikku/core/state');
1
+ const PIKKU_STATE_KEY = Symbol.for('@pikku/core/state');
2
2
  export const getAllPackageStates = () => {
3
3
  if (!globalThis[PIKKU_STATE_KEY]) {
4
4
  ;
@@ -6,25 +6,8 @@ export const getAllPackageStates = () => {
6
6
  }
7
7
  return globalThis[PIKKU_STATE_KEY];
8
8
  };
9
- /**
10
- * Get or set package-scoped pikku state
11
- *
12
- * @param packageName - Package name (null for main package, '@scope/package' for addon packages)
13
- * @param type - State category (function, rpc, http, etc.)
14
- * @param content - Content key within the category
15
- * @param value - Optional value to set
16
- * @returns The current value of the state
17
- *
18
- * @example
19
- * // Main package
20
- * pikkuState(null, 'function', 'functions').get(funcName)
21
- *
22
- * // Addon package
23
- * pikkuState('@acme/stripe-functions', 'rpc', 'meta')
24
- */
25
9
  export const pikkuState = (packageName, type, content, value) => {
26
10
  const resolvedPackageName = packageName ?? '__main__';
27
- // Initialize package state if it doesn't exist
28
11
  if (!getAllPackageStates().has(resolvedPackageName)) {
29
12
  initializePikkuState(resolvedPackageName);
30
13
  }
@@ -129,20 +112,16 @@ const createEmptyPackageState = () => ({
129
112
  requiredParentServices: null,
130
113
  },
131
114
  });
132
- /**
133
- * Initialize state for a new package
134
- */
135
115
  export const initializePikkuState = (packageName) => {
136
116
  if (!getAllPackageStates().has(packageName)) {
137
117
  getAllPackageStates().set(packageName, createEmptyPackageState());
138
118
  }
139
119
  };
140
120
  export const resetPikkuState = () => {
141
- // Preserve the errors map before resetting
121
+ // Error definitions come from module-import side effects that never re-run.
142
122
  const existingErrors = getAllPackageStates().get('__main__')?.misc.errors;
143
123
  globalThis[PIKKU_STATE_KEY] = new Map();
144
124
  initializePikkuState('__main__');
145
- // Restore the errors map if it existed
146
125
  if (existingErrors) {
147
126
  const mainState = getAllPackageStates().get('__main__');
148
127
  mainState.misc.errors = existingErrors;
@@ -163,13 +142,6 @@ export const setSingletonServices = (services) => {
163
142
  export const getCreateWireServices = () => {
164
143
  return pikkuState(null, 'package', 'factories')?.createWireServices;
165
144
  };
166
- /**
167
- * Register service factories for an addon package.
168
- * These factories are used to create services when the package's functions are invoked.
169
- *
170
- * @param packageName - The package name (e.g., '@pikku/templates-function-addon')
171
- * @param factories - The service factory functions
172
- */
173
145
  export const addPackageServiceFactories = (packageName, factories) => {
174
146
  pikkuState(packageName, 'package', 'factories', factories);
175
147
  };
package/dist/remote.d.ts CHANGED
@@ -1,10 +1,8 @@
1
1
  import type { JWTService } from './services/jwt-service.js';
2
2
  import type { SecretService } from './services/secret-service.js';
3
3
  /**
4
- * Build Authorization headers with JWT-signed session and traceId for
5
- * pikkuRemoteAuthMiddleware on the receiving end.
6
- *
7
- * Used by all deployment services (Kysely, Redis, MongoDB, Lambda, CF, Azure)
8
- * regardless of transport (HTTP, Lambda Invoke, service bindings).
4
+ * Authorization headers carrying a JWT-signed session and traceId for
5
+ * `pikkuRemoteAuthMiddleware` on the receiving end. Used by every deployment
6
+ * service regardless of transport (HTTP, Lambda Invoke, service bindings).
9
7
  */
10
8
  export declare function buildRemoteHeaders(jwt: JWTService | undefined, secrets: SecretService | undefined, funcName: string, session?: unknown, traceId?: string): Promise<Record<string, string>>;
package/dist/remote.js CHANGED
@@ -1,10 +1,8 @@
1
- import { encryptJSON } from './crypto-utils.js';
1
+ import { assertStrongKeyMaterial, encryptWithKeyMaterial, REMOTE_SESSION_INFO, } from './crypto-utils.js';
2
2
  /**
3
- * Build Authorization headers with JWT-signed session and traceId for
4
- * pikkuRemoteAuthMiddleware on the receiving end.
5
- *
6
- * Used by all deployment services (Kysely, Redis, MongoDB, Lambda, CF, Azure)
7
- * regardless of transport (HTTP, Lambda Invoke, service bindings).
3
+ * Authorization headers carrying a JWT-signed session and traceId for
4
+ * `pikkuRemoteAuthMiddleware` on the receiving end. Used by every deployment
5
+ * service regardless of transport (HTTP, Lambda Invoke, service bindings).
8
6
  */
9
7
  export async function buildRemoteHeaders(jwt, secrets, funcName, session, traceId) {
10
8
  const headers = {
@@ -17,8 +15,11 @@ export async function buildRemoteHeaders(jwt, secrets, funcName, session, traceI
17
15
  }
18
16
  catch { }
19
17
  if (secret && jwt) {
18
+ assertStrongKeyMaterial('PIKKU_REMOTE_SECRET', secret);
20
19
  const sessionEnc = session
21
- ? await encryptJSON(secret, { session })
20
+ ? await encryptWithKeyMaterial('PIKKU_REMOTE_SECRET', secret, REMOTE_SESSION_INFO, {
21
+ session,
22
+ })
22
23
  : undefined;
23
24
  const token = await jwt.encode({ value: 5, unit: 'minute' }, {
24
25
  aud: 'pikku-remote',
package/dist/schema.d.ts CHANGED
@@ -1,25 +1,15 @@
1
1
  import type { Logger } from './services/logger.js';
2
2
  import type { SchemaService } from './services/schema-service.js';
3
- /**
4
- * Adds a schema to the schemas map for a specific package.
5
- * @param name - The name of the schema.
6
- * @param value - The schema value.
7
- * @param packageName - The package name (null for main package, '@scope/package' for addon packages).
8
- * @ignore
9
- */
10
3
  export declare const addSchema: (name: string, value: any, packageName?: string | null) => void;
11
- /**
12
- * Retrieves a schema from the schemas map for a specific package.
13
- * @param name - The name of the schema.
14
- * @param packageName - The package name (null for main package, '@scope/package' for addon packages).
15
- * @returns The schema value or undefined if not found.
16
- * @ignore
17
- */
18
4
  export declare const getSchema: (name: string, packageName?: string | null) => Record<string, unknown> | undefined;
5
+ export declare const compileAllSchemas: (logger: Logger, schemaService?: SchemaService) => void;
19
6
  /**
20
- * Loads a schema and compiles it into a validator.
21
- * @param logger - A logger for logging information.
7
+ * Fills in absent top-level properties from their schema `default`. Applied
8
+ * unconditionally: a default belongs to the schema, not to the transport the
9
+ * call arrived on, and runs before coercion so a defaulted and a supplied
10
+ * value are treated identically from here on. Values are cloned so an object
11
+ * or array default is never shared as one mutable instance across requests.
22
12
  */
23
- export declare const compileAllSchemas: (logger: Logger, schemaService?: SchemaService) => void;
13
+ export declare const applyDefaultsFromSchema: (schemaName: string, data: any, packageName?: string | null) => any;
24
14
  export declare const coerceTopLevelDataFromSchema: (schemaName: string, data: any, packageName?: string | null) => void;
25
15
  export declare const validateSchema: (logger: Logger, schemaService: SchemaService | undefined, schemaName: string | undefined | null, data: any, packageName?: string | null) => Promise<void>;