@pikku/core 0.12.143 → 0.12.145

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 (701) hide show
  1. package/dist/analytics/analytics.d.ts +14 -0
  2. package/dist/analytics/analytics.js +14 -0
  3. package/dist/analytics/analytics.types.d.ts +1 -0
  4. package/dist/analytics/anonymous-analytics-identity.d.ts +1 -0
  5. package/dist/analytics/cookie-analytics-identity.d.ts +1 -0
  6. package/dist/analytics/mint-cookie.d.ts +1 -0
  7. package/dist/{wirings/channel/channel-middleware-runner.d.ts → channel-middleware-runner.d.ts} +17 -3
  8. package/dist/{wirings/channel/channel-middleware-runner.js → channel-middleware-runner.js} +24 -8
  9. package/dist/classification/data-classification.d.ts +13 -0
  10. package/dist/classification/secret-value.d.ts +7 -0
  11. package/dist/classification/secret-value.js +7 -0
  12. package/dist/crypto-utils.d.ts +93 -0
  13. package/dist/crypto-utils.js +92 -0
  14. package/dist/dev/hot-reload.d.ts +16 -0
  15. package/dist/dev/hot-reload.js +16 -1
  16. package/dist/dev/module-runner.js +7 -3
  17. package/dist/dev/reload-meta.js +1 -1
  18. package/dist/errors/error-handler.d.ts +9 -0
  19. package/dist/errors/error-handler.js +8 -0
  20. package/dist/errors/errors.d.ts +219 -0
  21. package/dist/errors/errors.js +227 -0
  22. package/dist/errors/serialized-error.d.ts +4 -0
  23. package/dist/function/abort-scope.d.ts +5 -0
  24. package/dist/function/function-meta.types.d.ts +20 -0
  25. package/dist/function/function-runner.d.ts +41 -0
  26. package/dist/function/function-runner.js +57 -11
  27. package/dist/function/functions.types.d.ts +59 -0
  28. package/dist/function/functions.types.js +23 -0
  29. package/dist/function/list.types.d.ts +4 -0
  30. package/dist/lifecycle.d.ts +12 -1
  31. package/dist/lifecycle.js +12 -1
  32. package/dist/middleware/addon-scope-cap.d.ts +4 -0
  33. package/dist/middleware/addon-scope-cap.js +7 -3
  34. package/dist/middleware/auth-apikey.js +3 -3
  35. package/dist/middleware/auth-bearer.js +5 -13
  36. package/dist/middleware/auth-cookie.js +3 -3
  37. package/dist/middleware/middleware-factories.d.ts +17 -0
  38. package/dist/middleware/middleware-factories.js +17 -0
  39. package/dist/middleware/middleware.types.d.ts +23 -0
  40. package/dist/middleware/remote-auth.d.ts +15 -0
  41. package/dist/middleware/remote-auth.js +18 -3
  42. package/dist/middleware/remote-jobs-secret.js +2 -10
  43. package/dist/middleware-runner.d.ts +7 -0
  44. package/dist/middleware-runner.js +23 -7
  45. package/dist/permissions.d.ts +13 -0
  46. package/dist/permissions.js +13 -0
  47. package/dist/pikku-state.d.ts +49 -0
  48. package/dist/pikku-state.js +49 -0
  49. package/dist/remote.js +20 -5
  50. package/dist/schema.d.ts +36 -0
  51. package/dist/schema.js +36 -0
  52. package/dist/services/agent-run-state-service.d.ts +8 -0
  53. package/dist/services/agent-runner-service.d.ts +24 -0
  54. package/dist/services/agent-storage-service.d.ts +8 -0
  55. package/dist/services/ai-embedding-service.d.ts +4 -0
  56. package/dist/services/audit-service.d.ts +48 -0
  57. package/dist/services/audit-service.js +22 -0
  58. package/dist/services/content-service.d.ts +34 -0
  59. package/dist/services/credential-wire-service.d.ts +9 -0
  60. package/dist/services/credential-wire-service.js +9 -0
  61. package/dist/services/deployment-service.d.ts +14 -0
  62. package/dist/services/email-service.d.ts +20 -0
  63. package/dist/services/email-template.d.ts +24 -0
  64. package/dist/services/email-template.js +12 -0
  65. package/dist/services/file-scenario-run-store.d.ts +5 -0
  66. package/dist/services/file-scenario-run-store.js +4 -0
  67. package/dist/services/gateway-service.d.ts +5 -0
  68. package/dist/services/in-memory-agent-run-state-service.d.ts +5 -0
  69. package/dist/services/in-memory-agent-run-state-service.js +5 -0
  70. package/dist/services/in-memory-lease-service.d.ts +5 -0
  71. package/dist/services/in-memory-lease-service.js +5 -0
  72. package/dist/services/in-memory-session-store.d.ts +4 -0
  73. package/dist/services/in-memory-session-store.js +4 -0
  74. package/dist/services/incoming-webhook-queue.d.ts +2 -0
  75. package/dist/services/incoming-webhook-queue.js +2 -0
  76. package/dist/services/incoming-webhook-service.d.ts +9 -1
  77. package/dist/services/incoming-webhook-service.js +1 -1
  78. package/dist/services/index.d.ts +1 -5
  79. package/dist/services/index.js +1 -5
  80. package/dist/services/jwt-service.d.ts +8 -0
  81. package/dist/services/lease-service.d.ts +5 -0
  82. package/dist/services/lease-service.js +1 -0
  83. package/dist/services/local-content-request-handler.d.ts +20 -0
  84. package/dist/services/local-content-request-handler.js +11 -0
  85. package/dist/services/local-content.d.ts +45 -0
  86. package/dist/services/local-content.js +35 -0
  87. package/dist/services/local-credential-service.d.ts +5 -0
  88. package/dist/services/local-credential-service.js +5 -0
  89. package/dist/services/local-email-service.d.ts +7 -0
  90. package/dist/services/local-email-service.js +7 -0
  91. package/dist/services/local-secrets.d.ts +8 -0
  92. package/dist/services/local-secrets.js +8 -0
  93. package/dist/services/local-variables.d.ts +6 -0
  94. package/dist/services/local-variables.js +6 -0
  95. package/dist/services/logger.d.ts +4 -0
  96. package/dist/services/logger.js +4 -0
  97. package/dist/services/meta-service.d.ts +38 -0
  98. package/dist/services/meta-service.js +6 -0
  99. package/dist/services/queue-webhook-service.d.ts +19 -0
  100. package/dist/services/queue-webhook-service.js +19 -0
  101. package/dist/services/remote-jobs.d.ts +8 -13
  102. package/dist/services/remote-jobs.js +3 -54
  103. package/dist/services/scenario-cookie-jar.d.ts +4 -0
  104. package/dist/services/scheduler-service.d.ts +13 -0
  105. package/dist/services/scheduler-service.js +8 -0
  106. package/dist/services/schema-service.d.ts +9 -0
  107. package/dist/services/scope-service.d.ts +10 -0
  108. package/dist/services/scoped-secret-service.d.ts +5 -0
  109. package/dist/services/scoped-secret-service.js +5 -0
  110. package/dist/services/secret-host-binding.d.ts +5 -0
  111. package/dist/services/secret-host-binding.js +5 -0
  112. package/dist/services/secret-service.d.ts +19 -1
  113. package/dist/services/secretless.d.ts +6 -0
  114. package/dist/services/secretless.js +6 -0
  115. package/dist/services/session-store.d.ts +5 -0
  116. package/dist/services/stub-tracker.d.ts +1 -0
  117. package/dist/services/temporary-file-service.d.ts +9 -0
  118. package/dist/services/temporary-file-service.js +9 -0
  119. package/dist/services/trigger-service.d.ts +4 -0
  120. package/dist/services/trigger-source-store.d.ts +13 -0
  121. package/dist/services/trigger-source-store.js +7 -0
  122. package/dist/services/typed-credential-service.d.ts +6 -0
  123. package/dist/services/typed-credential-service.js +5 -0
  124. package/dist/services/typed-secret-service.d.ts +12 -0
  125. package/dist/services/typed-secret-service.js +11 -0
  126. package/dist/services/typed-variables-service.d.ts +1 -0
  127. package/dist/services/user-session-service.d.ts +31 -1
  128. package/dist/services/user-session-service.js +29 -3
  129. package/dist/services/v8-coverage-service.d.ts +27 -0
  130. package/dist/services/v8-coverage-service.js +5 -0
  131. package/dist/services/variables-service.d.ts +8 -0
  132. package/dist/services/virtual-user-sign-in.d.ts +1 -0
  133. package/dist/services/virtual-user-statement.d.ts +8 -0
  134. package/dist/services/virtual-user-statement.js +4 -0
  135. package/dist/services/webhook-service.d.ts +25 -0
  136. package/dist/services/webhook-service.js +15 -0
  137. package/dist/services/workflow-service.d.ts +6 -0
  138. package/dist/test-utils.js +1 -1
  139. package/dist/testing/service-tests.d.ts +4 -0
  140. package/dist/time-utils.d.ts +15 -0
  141. package/dist/time-utils.js +14 -0
  142. package/dist/types/core.types.d.ts +80 -0
  143. package/dist/types/state.types.d.ts +4 -0
  144. package/dist/utils/hmac.d.ts +3 -0
  145. package/dist/utils/safe-fetch.d.ts +14 -0
  146. package/dist/utils/safe-fetch.js +13 -0
  147. package/dist/utils/stable-stringify.d.ts +11 -0
  148. package/dist/utils/stable-stringify.js +33 -0
  149. package/dist/utils.d.ts +28 -0
  150. package/dist/utils.js +22 -0
  151. package/dist/version.d.ts +7 -0
  152. package/dist/version.js +7 -0
  153. package/dist/wirings/addon/define-screens.d.ts +2 -0
  154. package/dist/wirings/addon/remote-addon-auth.d.ts +9 -0
  155. package/dist/wirings/addon/remote-addon-auth.js +5 -0
  156. package/dist/wirings/addon/wire-addon.d.ts +4 -0
  157. package/dist/wirings/addon/wire-remote-addon.d.ts +1 -0
  158. package/dist/wirings/agent/agent-agui.d.ts +14 -5
  159. package/dist/wirings/agent/agent-agui.js +17 -6
  160. package/dist/wirings/agent/agent-helpers.d.ts +61 -1
  161. package/dist/wirings/agent/agent-helpers.js +62 -2
  162. package/dist/wirings/agent/agent-interrupt.d.ts +5 -0
  163. package/dist/wirings/agent/agent-output.d.ts +20 -0
  164. package/dist/wirings/agent/agent-output.js +69 -0
  165. package/dist/wirings/agent/agent-prepare.d.ts +41 -0
  166. package/dist/wirings/agent/agent-prepare.js +38 -2
  167. package/dist/wirings/agent/agent-registry.d.ts +8 -0
  168. package/dist/wirings/agent/agent-registry.js +10 -4
  169. package/dist/wirings/agent/agent-runner.d.ts +33 -0
  170. package/dist/wirings/agent/agent-runner.js +40 -7
  171. package/dist/wirings/agent/agent-stream.d.ts +30 -0
  172. package/dist/wirings/agent/agent-stream.js +33 -11
  173. package/dist/wirings/agent/agent.types.d.ts +43 -0
  174. package/dist/wirings/agent/voice-input.d.ts +12 -0
  175. package/dist/wirings/agent/voice-input.js +12 -0
  176. package/dist/wirings/agent/voice-output.d.ts +14 -0
  177. package/dist/wirings/agent/voice-output.js +10 -0
  178. package/dist/wirings/agent-scorer/agent-scorer-judge.js +1 -2
  179. package/dist/wirings/agent-scorer/agent-scorer-registry.d.ts +10 -0
  180. package/dist/wirings/agent-scorer/agent-scorer-registry.js +10 -0
  181. package/dist/wirings/agent-scorer/agent-scorer-snapshots.d.ts +1 -0
  182. package/dist/wirings/agent-scorer/agent-scorer-snapshots.js +1 -0
  183. package/dist/wirings/agent-scorer/agent-scorer.types.d.ts +7 -0
  184. package/dist/wirings/channel/channel-common.js +1 -1
  185. package/dist/wirings/channel/channel-rpc.types.d.ts +5 -0
  186. package/dist/wirings/channel/channel-runner.d.ts +22 -0
  187. package/dist/wirings/channel/channel-runner.js +22 -0
  188. package/dist/wirings/channel/channel-store.d.ts +8 -0
  189. package/dist/wirings/channel/channel-store.js +7 -0
  190. package/dist/wirings/channel/channel.types.d.ts +18 -0
  191. package/dist/wirings/channel/define-channel-routes.d.ts +5 -0
  192. package/dist/wirings/channel/define-channel-routes.js +5 -0
  193. package/dist/wirings/channel/eventhub-service.d.ts +9 -0
  194. package/dist/wirings/channel/eventhub-store.d.ts +1 -0
  195. package/dist/wirings/channel/eventhub-store.js +1 -0
  196. package/dist/wirings/channel/index.d.ts +1 -1
  197. package/dist/wirings/channel/index.js +1 -1
  198. package/dist/wirings/channel/local/local-channel-handler.d.ts +1 -0
  199. package/dist/wirings/channel/local/local-channel-handler.js +1 -0
  200. package/dist/wirings/channel/local/local-channel-runner.d.ts +13 -0
  201. package/dist/wirings/channel/local/local-channel-runner.js +13 -0
  202. package/dist/wirings/channel/local/local-eventhub-service.d.ts +1 -0
  203. package/dist/wirings/channel/local/local-eventhub-service.js +1 -0
  204. package/dist/wirings/channel/log-channels.d.ts +1 -0
  205. package/dist/wirings/channel/log-channels.js +1 -0
  206. package/dist/wirings/channel/pikku-abstract-channel-handler.d.ts +5 -0
  207. package/dist/wirings/channel/pikku-abstract-channel-handler.js +5 -0
  208. package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +32 -0
  209. package/dist/wirings/channel/serverless/serverless-channel-runner.js +31 -0
  210. package/dist/wirings/cli/channel/cli-channel-runner.d.ts +8 -0
  211. package/dist/wirings/cli/channel/cli-channel-runner.js +8 -0
  212. package/dist/wirings/cli/channel/cli-raw-channel-runner.d.ts +1 -0
  213. package/dist/wirings/cli/cli-runner.d.ts +43 -0
  214. package/dist/wirings/cli/cli-runner.js +43 -0
  215. package/dist/wirings/cli/cli.types.d.ts +4 -0
  216. package/dist/wirings/cli/command-parser.d.ts +13 -0
  217. package/dist/wirings/cli/command-parser.js +16 -0
  218. package/dist/wirings/credential/credential-overrides.d.ts +1 -0
  219. package/dist/wirings/credential/credential.types.d.ts +7 -0
  220. package/dist/wirings/credential/validate-credential-definitions.d.ts +7 -0
  221. package/dist/wirings/credential/validate-credential-definitions.js +7 -0
  222. package/dist/wirings/flag/cached-flag-source.d.ts +1 -0
  223. package/dist/wirings/flag/flag.types.d.ts +3 -0
  224. package/dist/wirings/gateway/gateway-runner.d.ts +23 -0
  225. package/dist/wirings/gateway/gateway-runner.js +23 -0
  226. package/dist/wirings/gateway/gateway.types.d.ts +3 -0
  227. package/dist/wirings/gateway/local-gateway-service.d.ts +10 -0
  228. package/dist/{services → wirings/gateway}/local-gateway-service.js +6 -2
  229. package/dist/wirings/http/http-routes.d.ts +21 -0
  230. package/dist/wirings/http/http-routes.js +11 -0
  231. package/dist/wirings/http/http-runner.d.ts +71 -0
  232. package/dist/wirings/http/http-runner.js +73 -5
  233. package/dist/wirings/http/http.types.d.ts +27 -0
  234. package/dist/wirings/http/index.d.ts +1 -0
  235. package/dist/wirings/http/index.js +1 -0
  236. package/dist/wirings/http/log-http-routes.d.ts +1 -0
  237. package/dist/wirings/http/log-http-routes.js +1 -0
  238. package/dist/wirings/http/merge-request-data.d.ts +12 -0
  239. package/dist/wirings/http/merge-request-data.js +42 -0
  240. package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -0
  241. package/dist/wirings/http/pikku-fetch-http-request.js +3 -32
  242. package/dist/wirings/http/pikku-fetch-http-response.d.ts +1 -0
  243. package/dist/wirings/http/pikku-fetch-http-response.js +1 -0
  244. package/dist/wirings/http/routers/http-router.d.ts +6 -0
  245. package/dist/wirings/http/routers/http-router.js +6 -0
  246. package/dist/wirings/http/web-request.d.ts +17 -0
  247. package/dist/wirings/http/web-request.js +17 -0
  248. package/dist/wirings/mcp/mcp-endpoint-registry.d.ts +7 -0
  249. package/dist/wirings/mcp/mcp-endpoint-registry.js +7 -0
  250. package/dist/wirings/mcp/mcp-runner.d.ts +63 -0
  251. package/dist/wirings/mcp/mcp-runner.js +62 -0
  252. package/dist/wirings/mcp/mcp.types.d.ts +12 -0
  253. package/dist/wirings/node/node.types.d.ts +4 -0
  254. package/dist/wirings/oauth2/oauth2.types.d.ts +2 -0
  255. package/dist/{services → wirings/queue}/in-memory-queue-service.d.ts +9 -1
  256. package/dist/{services → wirings/queue}/in-memory-queue-service.js +9 -1
  257. package/dist/wirings/queue/index.d.ts +1 -0
  258. package/dist/wirings/queue/index.js +1 -0
  259. package/dist/wirings/queue/queue-identity.js +2 -14
  260. package/dist/wirings/queue/queue-runner.d.ts +37 -0
  261. package/dist/wirings/queue/queue-runner.js +37 -0
  262. package/dist/wirings/queue/queue.types.d.ts +35 -0
  263. package/dist/wirings/queue/register-queue-helper.d.ts +12 -0
  264. package/dist/wirings/queue/register-queue-helper.js +11 -0
  265. package/dist/wirings/queue/remote-queue-job.d.ts +11 -0
  266. package/dist/wirings/queue/remote-queue-job.js +41 -0
  267. package/dist/wirings/queue/validate-worker-config.d.ts +1 -0
  268. package/dist/wirings/role/role.types.d.ts +3 -0
  269. package/dist/wirings/rpc/rpc-runner.d.ts +24 -0
  270. package/dist/wirings/rpc/rpc-runner.js +37 -2
  271. package/dist/wirings/rpc/rpc-types.d.ts +2 -0
  272. package/dist/wirings/scheduler/index.d.ts +1 -0
  273. package/dist/wirings/scheduler/index.js +1 -0
  274. package/dist/wirings/scheduler/log-schedulers.d.ts +1 -0
  275. package/dist/wirings/scheduler/log-schedulers.js +1 -0
  276. package/dist/wirings/scheduler/remote-scheduled-job.d.ts +11 -0
  277. package/dist/wirings/scheduler/remote-scheduled-job.js +20 -0
  278. package/dist/wirings/scheduler/scheduler-runner.d.ts +29 -0
  279. package/dist/wirings/scheduler/scheduler-runner.js +28 -0
  280. package/dist/wirings/scheduler/scheduler.types.d.ts +3 -0
  281. package/dist/wirings/scope/scope.types.d.ts +5 -0
  282. package/dist/wirings/secret/index.d.ts +2 -2
  283. package/dist/wirings/secret/index.js +1 -1
  284. package/dist/wirings/secret/secret.types.d.ts +26 -1
  285. package/dist/wirings/secret/secret.types.js +1 -0
  286. package/dist/wirings/secret/validate-secret-definitions.d.ts +8 -0
  287. package/dist/wirings/secret/validate-secret-definitions.js +15 -0
  288. package/dist/wirings/trigger/in-memory-trigger-service.d.ts +11 -0
  289. package/dist/{services → wirings/trigger}/in-memory-trigger-service.js +10 -3
  290. package/dist/wirings/trigger/index.d.ts +1 -1
  291. package/dist/wirings/trigger/pikku-trigger-service.d.ts +8 -3
  292. package/dist/wirings/trigger/pikku-trigger-service.js +14 -3
  293. package/dist/wirings/trigger/trigger-runner.d.ts +27 -2
  294. package/dist/wirings/trigger/trigger-runner.js +35 -2
  295. package/dist/wirings/trigger/trigger.types.d.ts +26 -4
  296. package/dist/wirings/trigger/webhook-source-runner.d.ts +24 -0
  297. package/dist/wirings/trigger/webhook-source-runner.js +19 -0
  298. package/dist/wirings/trigger/webhook-source.types.d.ts +12 -2
  299. package/dist/wirings/trigger/webhook-source.types.js +1 -1
  300. package/dist/wirings/variable/validate-variable-definitions.d.ts +7 -0
  301. package/dist/wirings/variable/validate-variable-definitions.js +7 -0
  302. package/dist/wirings/variable/variable.types.d.ts +7 -0
  303. package/dist/wirings/virtual-user/conversation/conversation.types.d.ts +5 -0
  304. package/dist/wirings/virtual-user/conversation/run-conversation.d.ts +6 -0
  305. package/dist/wirings/virtual-user/conversation/run-conversation.js +1 -1
  306. package/dist/{services → wirings/virtual-user}/http-virtual-users.d.ts +4 -3
  307. package/dist/{services → wirings/virtual-user}/http-virtual-users.js +6 -6
  308. package/dist/wirings/virtual-user/index.d.ts +1 -1
  309. package/dist/wirings/virtual-user/index.js +1 -1
  310. package/dist/wirings/virtual-user/run-virtual-user.d.ts +2 -1
  311. package/dist/wirings/virtual-user/run-virtual-user.js +1 -14
  312. package/dist/wirings/virtual-user/virtual-user-declaration.types.d.ts +4 -0
  313. package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +10 -1
  314. package/dist/wirings/virtual-user/virtual-user-scaffold.js +5 -0
  315. package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +5 -0
  316. package/dist/wirings/virtual-user/virtual-user-schedule.js +1 -0
  317. package/dist/wirings/virtual-user/virtual-user-target.d.ts +1 -0
  318. package/dist/wirings/webhook/define-outgoing-webhook.d.ts +20 -0
  319. package/dist/wirings/webhook/define-outgoing-webhook.js +9 -0
  320. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +8 -4
  321. package/dist/wirings/workflow/dsl/workflow-runner.d.ts +7 -0
  322. package/dist/wirings/workflow/dsl/workflow-runner.js +7 -0
  323. package/dist/wirings/workflow/feature.d.ts +12 -0
  324. package/dist/wirings/workflow/feature.js +12 -0
  325. package/dist/wirings/workflow/graph/graph-node.d.ts +5 -0
  326. package/dist/wirings/workflow/graph/graph-node.js +5 -0
  327. package/dist/wirings/workflow/graph/template.d.ts +6 -0
  328. package/dist/wirings/workflow/graph/template.js +5 -0
  329. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +12 -0
  330. package/dist/wirings/workflow/graph/wire-workflow-graph.js +10 -0
  331. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +11 -0
  332. package/dist/wirings/workflow/graph/workflow-graph.types.js +1 -0
  333. package/dist/{services → wirings/workflow}/in-memory-workflow-service.d.ts +8 -3
  334. package/dist/{services → wirings/workflow}/in-memory-workflow-service.js +9 -4
  335. package/dist/wirings/workflow/pikku-scenario-service.d.ts +1 -1
  336. package/dist/wirings/workflow/pikku-scenario-service.js +2 -2
  337. package/dist/wirings/workflow/pikku-workflow-service.d.ts +1 -0
  338. package/dist/wirings/workflow/pikku-workflow-service.js +1 -0
  339. package/dist/wirings/workflow/run-timeline.d.ts +21 -0
  340. package/dist/wirings/workflow/run-timeline.js +15 -7
  341. package/dist/wirings/workflow/scenario-coverage.d.ts +1 -0
  342. package/dist/wirings/workflow/scenario-poll.d.ts +1 -0
  343. package/dist/wirings/workflow/scenario-prose.d.ts +6 -0
  344. package/dist/wirings/workflow/scenario-prose.js +6 -0
  345. package/dist/wirings/workflow/scenario-run.types.d.ts +3 -0
  346. package/dist/wirings/workflow/scenario-step.types.d.ts +1 -0
  347. package/dist/wirings/workflow/scenario-step.types.js +1 -0
  348. package/dist/wirings/workflow/scenario-surface.js +1 -13
  349. package/dist/wirings/workflow/scenario.types.d.ts +6 -0
  350. package/dist/wirings/workflow/workflow-approval-policy.d.ts +6 -0
  351. package/dist/wirings/workflow/workflow-approval-policy.js +6 -0
  352. package/dist/wirings/workflow/workflow-constants.d.ts +7 -1
  353. package/dist/wirings/workflow/workflow-constants.js +10 -1
  354. package/dist/wirings/workflow/workflow-errors.d.ts +13 -0
  355. package/dist/wirings/workflow/workflow-errors.js +13 -0
  356. package/dist/wirings/workflow/workflow-invocation-id.d.ts +4 -0
  357. package/dist/wirings/workflow/workflow-invocation-id.js +4 -0
  358. package/dist/wirings/workflow/workflow-queue-workers.d.ts +3 -0
  359. package/dist/wirings/workflow/workflow-run-ownership.d.ts +1 -0
  360. package/dist/wirings/workflow/workflow-run-ownership.js +1 -0
  361. package/dist/wirings/workflow/workflow-status-stream.d.ts +1 -0
  362. package/dist/wirings/workflow/workflow-unwind-plan.js +2 -7
  363. package/dist/wirings/workflow/workflow.types.d.ts +40 -0
  364. package/package.json +26 -9
  365. package/CHANGELOG.md +0 -6978
  366. package/dist/services/in-memory-trigger-service.d.ts +0 -4
  367. package/dist/services/local-gateway-service.d.ts +0 -6
  368. package/dist/utils/hash.d.ts +0 -2
  369. package/dist/utils/hash.js +0 -23
  370. package/knowledge/decisions/index.md +0 -19
  371. package/knowledge/decisions/internals/a-credential-name-declared-twice-must-agree-on-schema-and-type.md +0 -29
  372. package/knowledge/decisions/internals/a-grant-can-name-a-scope-declared-without-its-addon.md +0 -29
  373. package/knowledge/decisions/internals/a-held-run-is-woken-later-not-retried.md +0 -28
  374. package/knowledge/decisions/internals/a-latency-budget-is-asserted-by-its-cause.md +0 -32
  375. package/knowledge/decisions/internals/a-non-streaming-agent-run-registers-with-agentrunstate-too.md +0 -22
  376. package/knowledge/decisions/internals/a-reset-suite-makes-the-dev-seed-the-fixture.md +0 -50
  377. package/knowledge/decisions/internals/a-resumed-agent-turn-is-as-interruptible-as-the-first.md +0 -20
  378. package/knowledge/decisions/internals/a-scenario-step-template-is-offered-unfilled.md +0 -21
  379. package/knowledge/decisions/internals/a-scheduled-task-writes-its-caller-session-before-it-runs.md +0 -22
  380. package/knowledge/decisions/internals/a-secret-set-in-memory-shadows-the-variable-of-the-same-name.md +0 -28
  381. package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +0 -49
  382. package/knowledge/decisions/internals/a-virtual-user-acts-through-invokeraw-so-a-refusal-is-data.md +0 -32
  383. package/knowledge/decisions/internals/a-virtual-user-cadence-is-a-row-not-a-timer.md +0 -66
  384. package/knowledge/decisions/internals/a-virtual-user-converse-signs-in-before-its-first-turn.md +0 -24
  385. package/knowledge/decisions/internals/a-virtual-user-decides-whether-to-trust-memory-once-per-turn.md +0 -21
  386. package/knowledge/decisions/internals/a-virtual-user-email-is-computed-with-the-run-id-as-a-sub-address.md +0 -34
  387. package/knowledge/decisions/internals/a-virtual-user-run-is-not-a-workflow-but-it-needs-a-trigger.md +0 -65
  388. package/knowledge/decisions/internals/a-wall-clock-threshold-is-a-load-test-in-disguise.md +0 -49
  389. package/knowledge/decisions/internals/a-workflow-wire-is-built-from-the-run-not-from-the-rpc-service.md +0 -45
  390. package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +0 -26
  391. package/knowledge/decisions/internals/addon-pikku-meta-ships-at-the-package-root-or-under-dist.md +0 -32
  392. package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +0 -33
  393. package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +0 -28
  394. package/knowledge/decisions/internals/agent-agui-bridge-obeys-the-client-ordering-contract.md +0 -29
  395. package/knowledge/decisions/internals/agent-audio-chunks-carry-the-format-the-provider-returned.md +0 -20
  396. package/knowledge/decisions/internals/agent-context-waits-for-a-tool-result-still-being-written.md +0 -21
  397. package/knowledge/decisions/internals/agent-credential-suspensions-hide-the-tool-result.md +0 -26
  398. package/knowledge/decisions/internals/agent-delegate-and-supervise-hide-different-text.md +0 -26
  399. package/knowledge/decisions/internals/agent-llm-tool-arguments-have-nulls-stripped.md +0 -23
  400. package/knowledge/decisions/internals/agent-model-config-stays-a-single-resolution-seam.md +0 -25
  401. package/knowledge/decisions/internals/agent-onerror-hooks-cannot-change-the-failure.md +0 -22
  402. package/knowledge/decisions/internals/agent-runner-methods-must-keep-their-receiver.md +0 -22
  403. package/knowledge/decisions/internals/agent-speech-travels-as-a-custom-agui-event.md +0 -22
  404. package/knowledge/decisions/internals/agent-stream-persistence-is-best-effort.md +0 -27
  405. package/knowledge/decisions/internals/agent-sub-agents-inherit-the-parent-context-block.md +0 -26
  406. package/knowledge/decisions/internals/agent-tool-execute-failures-are-logged-unconditionally.md +0 -25
  407. package/knowledge/decisions/internals/agent-voice-input-transcribes-audio-parts-in-place.md +0 -22
  408. package/knowledge/decisions/internals/agent-working-memory-is-persisted-only-when-valid.md +0 -25
  409. package/knowledge/decisions/internals/an-addon-scope-root-loses-to-a-root-the-host-already-declares.md +0 -39
  410. package/knowledge/decisions/internals/an-agent-interrupt-is-not-a-failure.md +0 -23
  411. package/knowledge/decisions/internals/an-agent-is-offered-under-its-registry-key-and-only-within-the-virtual-users-scopes.md +0 -27
  412. package/knowledge/decisions/internals/an-agent-run-owned-by-another-instance-says-so.md +0 -25
  413. package/knowledge/decisions/internals/an-agent-stream-send-must-return-the-inner-sends-promise.md +0 -22
  414. package/knowledge/decisions/internals/an-empty-text-part-is-omitted-from-an-agent-message.md +0 -20
  415. package/knowledge/decisions/internals/an-empty-transcript-is-not-recorded.md +0 -22
  416. package/knowledge/decisions/internals/an-oauth2-credential-implies-an-optional-app-secret.md +0 -26
  417. package/knowledge/decisions/internals/an-unref-d-timer-cannot-be-awaited-under-node-test.md +0 -66
  418. package/knowledge/decisions/internals/analytics-identity-resolvers-run-in-declared-order.md +0 -22
  419. package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +0 -30
  420. package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +0 -31
  421. package/knowledge/decisions/internals/channel-state-accessors-are-unsound-generics-that-every-implementation-asserts.md +0 -33
  422. package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +0 -29
  423. package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +0 -28
  424. package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +0 -27
  425. package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +0 -28
  426. package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +0 -34
  427. package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +0 -29
  428. package/knowledge/decisions/internals/core-column-form-is-an-axis-of-its-own.md +0 -84
  429. package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +0 -41
  430. package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +0 -44
  431. package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +0 -39
  432. package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +0 -42
  433. package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +0 -39
  434. package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +0 -43
  435. package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +0 -38
  436. package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +0 -44
  437. package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +0 -27
  438. package/knowledge/decisions/internals/feature-flag-declarations-refuse-an-empty-anyof-and-conflicting-scopes.md +0 -22
  439. package/knowledge/decisions/internals/feature-flags-fail-open-and-never-enforce-access.md +0 -28
  440. package/knowledge/decisions/internals/flag-sync-rewrites-only-the-declared-text.md +0 -24
  441. package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +0 -32
  442. package/knowledge/decisions/internals/gateway-listener-middleware-runs-without-an-rpc-on-the-wire.md +0 -43
  443. package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +0 -28
  444. package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +0 -31
  445. package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +0 -26
  446. package/knowledge/decisions/internals/global-middleware-resolves-from-the-root-namespace-too.md +0 -32
  447. package/knowledge/decisions/internals/hot-reload-reads-the-changed-source-never-a-compiled-copy.md +0 -38
  448. package/knowledge/decisions/internals/hot-reload-writes-into-the-function-map-captured-at-startup.md +0 -26
  449. package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +0 -32
  450. package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +0 -28
  451. package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +0 -30
  452. package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +0 -26
  453. package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +0 -28
  454. package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +0 -32
  455. package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +0 -26
  456. package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +0 -25
  457. package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +0 -26
  458. package/knowledge/decisions/internals/index.md +0 -182
  459. package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +0 -25
  460. package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +0 -26
  461. package/knowledge/decisions/internals/mcp-wire-names-are-assigned-over-the-whole-registry.md +0 -39
  462. package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +0 -24
  463. package/knowledge/decisions/internals/one-project-shape-check-two-validators.md +0 -53
  464. package/knowledge/decisions/internals/only-exposed-functions-enter-a-virtual-user-catalogue.md +0 -21
  465. package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +0 -28
  466. package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +0 -27
  467. package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +0 -31
  468. package/knowledge/decisions/internals/role-names-cannot-contain-the-scope-separator.md +0 -30
  469. package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +0 -32
  470. package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +0 -31
  471. package/knowledge/decisions/internals/scenario-given-and-when-are-sugar-but-then-is-not.md +0 -24
  472. package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +0 -26
  473. package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +0 -27
  474. package/knowledge/decisions/internals/scenarios-live-in-files-named-for-them.md +0 -48
  475. package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +0 -30
  476. package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +0 -28
  477. package/knowledge/decisions/internals/side-effects-are-an-allowlist-not-a-boolean.md +0 -34
  478. package/knowledge/decisions/internals/speech-synthesis-picks-a-voice-per-sentence-and-warns-once.md +0 -24
  479. package/knowledge/decisions/internals/the-agent-done-event-goes-through-the-middleware-and-is-awaited.md +0 -26
  480. package/knowledge/decisions/internals/the-api-report-pins-members-not-just-names.md +0 -43
  481. package/knowledge/decisions/internals/the-core-scope-validator-refuses-separator-wildcard-and-empty-segments.md +0 -22
  482. package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +0 -30
  483. package/knowledge/decisions/internals/the-ecosystem-entry-point-carries-the-adapter-surface.md +0 -83
  484. package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +0 -29
  485. package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +0 -27
  486. package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +0 -40
  487. package/knowledge/decisions/internals/the-mcp-handshake-is-challenged-only-when-every-target-is-gated.md +0 -29
  488. package/knowledge/decisions/internals/the-middleware-resolution-cache-is-deliberately-unbounded.md +0 -40
  489. package/knowledge/decisions/internals/the-per-invocation-rpc-view-is-a-class.md +0 -40
  490. package/knowledge/decisions/internals/the-pikku-user-id-resolves-in-a-fixed-order.md +0 -24
  491. package/knowledge/decisions/internals/the-runner-resolves-wire-services-itself.md +0 -31
  492. package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +0 -26
  493. package/knowledge/decisions/internals/the-transcript-event-is-sent-ahead-of-the-run.md +0 -25
  494. package/knowledge/decisions/internals/the-virtual-user-catalogue-is-the-only-gate-on-what-may-be-called.md +0 -21
  495. package/knowledge/decisions/internals/the-virtual-user-prompt-says-json-because-of-json-object-mode.md +0 -22
  496. package/knowledge/decisions/internals/the-virtual-user-runtime-is-exported-from-the-virtual-user-entry-point.md +0 -28
  497. package/knowledge/decisions/internals/the-worker-disposition-is-the-one-that-is-not-testing.md +0 -22
  498. package/knowledge/decisions/internals/thread-history-records-the-transcript-not-the-audio.md +0 -25
  499. package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +0 -33
  500. package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +0 -26
  501. package/knowledge/decisions/internals/validate-checks-virtual-users-through-a-shared-module.md +0 -43
  502. package/knowledge/decisions/internals/validate-runs-checks-by-precondition.md +0 -115
  503. package/knowledge/decisions/internals/virtual-user-conversation-drives-the-target-through-a-transport-seam.md +0 -24
  504. package/knowledge/decisions/internals/virtual-user-conversation-verdicts-are-llm-self-evaluations.md +0 -25
  505. package/knowledge/decisions/internals/virtual-user-conversations-seed-a-hidden-kickoff-message.md +0 -23
  506. package/knowledge/decisions/internals/virtual-user-step-order-comes-from-insertion-order.md +0 -21
  507. package/knowledge/decisions/internals/virtual-users-are-declared-in-one-definevirtualusers-call-per-codebase.md +0 -30
  508. package/knowledge/decisions/internals/voice-output-speaks-unless-voice-input-explicitly-says-otherwise.md +0 -24
  509. package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +0 -26
  510. package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +0 -25
  511. package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +0 -58
  512. package/knowledge/decisions/internals/wiring-registries-erase-the-generics-their-wire-functions-capture.md +0 -35
  513. package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +0 -34
  514. package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +0 -42
  515. package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +0 -38
  516. package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +0 -29
  517. package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +0 -42
  518. package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +0 -25
  519. package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +0 -29
  520. package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +0 -43
  521. package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +0 -29
  522. package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +0 -42
  523. package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +0 -33
  524. package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +0 -32
  525. package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +0 -31
  526. package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +0 -39
  527. package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +0 -29
  528. package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +0 -33
  529. package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +0 -37
  530. package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +0 -54
  531. package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +0 -43
  532. package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +0 -32
  533. package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +0 -18
  534. package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +0 -34
  535. package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +0 -29
  536. package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +0 -33
  537. package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +0 -34
  538. package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +0 -34
  539. package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +0 -38
  540. package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +0 -30
  541. package/knowledge/decisions/security/a-bearer-token-checked-against-a-secret-reads-it-per-request.md +0 -26
  542. package/knowledge/decisions/security/a-call-without-a-session-raises-missing-session-not-forbidden.md +0 -20
  543. package/knowledge/decisions/security/a-caller-cookie-wins-over-the-jar-for-the-same-name.md +0 -23
  544. package/knowledge/decisions/security/a-channel-lifecycle-acts-as-the-socket-upgrade-session.md +0 -16
  545. package/knowledge/decisions/security/a-channel-requires-a-session-unless-it-says-auth-false.md +0 -26
  546. package/knowledge/decisions/security/a-credential-read-path-follows-its-declared-type-not-absence.md +0 -32
  547. package/knowledge/decisions/security/a-credential-type-is-a-literal-the-inspector-checks-at-declaration.md +0 -27
  548. package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +0 -28
  549. package/knowledge/decisions/security/a-first-party-cookie-is-written-only-after-its-purposes-consent.md +0 -33
  550. package/knowledge/decisions/security/a-function-never-receives-the-secret-service.md +0 -37
  551. package/knowledge/decisions/security/a-graph-run-starts-at-an-entry-node-the-graph-declared.md +0 -33
  552. package/knowledge/decisions/security/a-permission-gets-a-wire-it-cannot-reply-on.md +0 -33
  553. package/knowledge/decisions/security/a-public-function-says-so-with-auth-false.md +0 -34
  554. package/knowledge/decisions/security/a-readonly-session-reaches-only-readonly-functions.md +0 -25
  555. package/knowledge/decisions/security/a-scaffold-flag-says-a-surface-exists-not-who-may-call-it.md +0 -52
  556. package/knowledge/decisions/security/a-scheduled-virtual-user-run-needs-no-admin-at-run-time.md +0 -27
  557. package/knowledge/decisions/security/a-scoped-credential-view-is-limited-to-declared-names.md +0 -26
  558. package/knowledge/decisions/security/a-scoped-secret-view-reads-only-declared-keys-and-never-writes.md +0 -25
  559. package/knowledge/decisions/security/a-secret-is-sent-only-to-the-hosts-it-declares.md +0 -29
  560. package/knowledge/decisions/security/a-step-can-name-an-identity-no-virtual-user-holds-through-per-call-headers.md +0 -25
  561. package/knowledge/decisions/security/a-step-runs-the-function-the-workflow-dispatched-it-with.md +0 -37
  562. package/knowledge/decisions/security/a-stopped-run-by-id-skips-the-ownership-check.md +0 -24
  563. package/knowledge/decisions/security/a-vault-secret-redacts-on-serialization-and-throws-on-coercion.md +0 -29
  564. package/knowledge/decisions/security/a-virtual-user-catalogue-entry-is-filtered-by-scope-and-approval-is-denied-by-default.md +0 -30
  565. package/knowledge/decisions/security/a-virtual-user-environment-fails-closed.md +0 -38
  566. package/knowledge/decisions/security/a-virtual-user-is-never-offered-a-step-that-would-forge-its-own-oracle.md +0 -27
  567. package/knowledge/decisions/security/a-virtual-user-never-runs-against-production.md +0 -23
  568. package/knowledge/decisions/security/a-virtual-user-reads-its-roles-from-the-apps-own-rpc-before-better-auth.md +0 -27
  569. package/knowledge/decisions/security/a-virtual-user-run-treats-an-unresolved-environment-as-production.md +0 -41
  570. package/knowledge/decisions/security/a-virtual-user-scopes-are-expanded-from-its-roles-once-at-run-preparation.md +0 -25
  571. package/knowledge/decisions/security/a-virtual-user-whose-roles-drift-from-the-declaration-refuses-to-run.md +0 -32
  572. package/knowledge/decisions/security/a-workflow-run-is-read-and-approved-by-its-owner.md +0 -50
  573. package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +0 -43
  574. package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +0 -52
  575. package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +0 -46
  576. package/knowledge/decisions/security/addon-screen-scopes-hide-and-do-not-enforce.md +0 -20
  577. package/knowledge/decisions/security/agent-approval-forwarding-requires-a-symbol-brand.md +0 -27
  578. package/knowledge/decisions/security/agent-credential-requests-are-symbol-branded.md +0 -37
  579. package/knowledge/decisions/security/agent-gate-requires-a-session-only-when-auth-is-true.md +0 -31
  580. package/knowledge/decisions/security/agent-ownership-failures-never-echo-the-resource.md +0 -23
  581. package/knowledge/decisions/security/agent-resume-re-runs-the-authorization-gate.md +0 -22
  582. package/knowledge/decisions/security/agent-sessionless-deployments-have-no-thread-ownership.md +0 -39
  583. package/knowledge/decisions/security/agent-thread-ownership-composes-the-session-principal.md +0 -30
  584. package/knowledge/decisions/security/agent-tool-filtering-reads-the-live-function-config.md +0 -24
  585. package/knowledge/decisions/security/an-addon-header-can-only-narrow-the-session.md +0 -26
  586. package/knowledge/decisions/security/an-addon-instance-reads-only-the-secrets-and-credentials-it-is-named.md +0 -33
  587. package/knowledge/decisions/security/an-addon-may-reach-only-itself-and-the-addons-it-uses.md +0 -16
  588. package/knowledge/decisions/security/an-agent-approval-is-claimed-before-the-tool-runs.md +0 -33
  589. package/knowledge/decisions/security/an-api-key-is-jwt-decoded-into-the-session.md +0 -26
  590. package/knowledge/decisions/security/an-approval-answer-outlives-the-run-it-answered.md +0 -59
  591. package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +0 -30
  592. package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +0 -52
  593. package/knowledge/decisions/security/an-external-virtual-user-caller-presents-one-signed-statement.md +0 -38
  594. package/knowledge/decisions/security/an-inbound-webhook-source-dispatches-only-verified-requests.md +0 -31
  595. package/knowledge/decisions/security/an-mcp-call-with-no-http-request-stays-anonymous.md +0 -18
  596. package/knowledge/decisions/security/an-mcp-refusal-is-decided-before-dispatch.md +0 -48
  597. package/knowledge/decisions/security/an-oauth2-credential-is-read-by-its-account-row.md +0 -40
  598. package/knowledge/decisions/security/an-omitted-user-id-addresses-the-platform-credential.md +0 -32
  599. package/knowledge/decisions/security/an-upload-is-counted-as-it-arrives-not-buffered-then-measured.md +0 -24
  600. package/knowledge/decisions/security/analytics-identity-is-stamped-from-the-session-not-the-event.md +0 -24
  601. package/knowledge/decisions/security/app-access-is-a-scope-tree-synthesised-from-virtual-users.md +0 -26
  602. package/knowledge/decisions/security/approval-policy-decides-who-answers-a-tool-call.md +0 -27
  603. package/knowledge/decisions/security/auth-false-on-a-session-function-warns-and-still-requires-one.md +0 -25
  604. package/knowledge/decisions/security/bearer-token-hashes-are-unpeppered-sha256.md +0 -18
  605. package/knowledge/decisions/security/consent-is-read-from-a-cookie-and-a-recognised-denial-counts-as-refusal.md +0 -29
  606. package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +0 -84
  607. package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +0 -39
  608. package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +0 -37
  609. package/knowledge/decisions/security/cors-defaults-to-any-origin-and-refuses-the-wildcard-with-credentials.md +0 -22
  610. package/knowledge/decisions/security/credential-backends-share-one-conformance-suite-for-per-user-isolation.md +0 -29
  611. package/knowledge/decisions/security/each-stage-has-one-virtual-user-key-pair.md +0 -27
  612. package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +0 -41
  613. package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +0 -30
  614. package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +0 -40
  615. package/knowledge/decisions/security/hmac-verification-fails-closed-on-empty-inputs.md +0 -25
  616. package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +0 -33
  617. package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +0 -46
  618. package/knowledge/decisions/security/index.md +0 -135
  619. package/knowledge/decisions/security/local-content-refuses-private-buckets-under-the-public-segment.md +0 -21
  620. package/knowledge/decisions/security/mail-is-allowlisted-before-a-virtual-user-run-sees-it.md +0 -38
  621. package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +0 -27
  622. package/knowledge/decisions/security/mcp-resources-tools-and-prompts-take-sessionless-functions.md +0 -18
  623. package/knowledge/decisions/security/origin-locked-routes-match-the-origin-exactly.md +0 -22
  624. package/knowledge/decisions/security/oss-auth-works-without-pikku-studio-cloud.md +0 -26
  625. package/knowledge/decisions/security/outbound-webhooks-use-an-allowlist-when-configured.md +0 -24
  626. package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +0 -40
  627. package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +0 -31
  628. package/knowledge/decisions/security/pikku-carries-virtual-user-scopes-as-data-and-the-app-grants-them.md +0 -35
  629. package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +0 -69
  630. package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +0 -39
  631. package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +0 -34
  632. package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +0 -55
  633. package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +0 -30
  634. package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +0 -28
  635. package/knowledge/decisions/security/scoped-content-access-is-a-root-folder-with-longest-prefix-grants.md +0 -31
  636. package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +0 -34
  637. package/knowledge/decisions/security/services-without-secrets-get-a-throwing-secrets-accessor.md +0 -22
  638. package/knowledge/decisions/security/shared-guards-refuse-to-mutate-or-shadow-a-system-role.md +0 -34
  639. package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +0 -37
  640. package/knowledge/decisions/security/signed-uploads-are-verified-by-the-same-check-as-signed-reads.md +0 -26
  641. package/knowledge/decisions/security/system-role-scopes-must-be-declared-with-define-scope.md +0 -24
  642. package/knowledge/decisions/security/system-roles-are-additive-and-immutable.md +0 -16
  643. package/knowledge/decisions/security/the-channel-rpc-does-not-send-the-callers-session.md +0 -21
  644. package/knowledge/decisions/security/the-remote-jobs-inbox-fails-closed-without-a-secret.md +0 -24
  645. package/knowledge/decisions/security/the-remote-rpc-gate-fails-closed-and-binds-the-token-to-its-function.md +0 -34
  646. package/knowledge/decisions/security/the-workflow-status-stream-rechecks-ownership-on-every-poll.md +0 -16
  647. package/knowledge/decisions/security/two-credentials-on-one-key-must-share-a-read-mode.md +0 -29
  648. package/knowledge/decisions/security/verified-bearer-claims-are-pass-through-data-that-core-never-fills.md +0 -23
  649. package/knowledge/decisions/security/virtual-user-catalogue-excludes-the-machinery-that-runs-virtual-users.md +0 -25
  650. package/knowledge/decisions/security/virtual-user-conversation-missing-approval-decisions-default-to-denied.md +0 -22
  651. package/knowledge/decisions/security/virtual-user-run-records-are-gated-behind-a-read-scope.md +0 -18
  652. package/knowledge/decisions/security/virtual-user-sign-in-does-not-exist-in-production.md +0 -25
  653. package/knowledge/decisions/security/virtual-user-sign-in-has-one-door.md +0 -42
  654. package/knowledge/decisions/security/virtual-user-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +0 -29
  655. package/knowledge/decisions/security/virtual-user-sign-in-only-works-for-virtual-user-flagged-users.md +0 -29
  656. package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +0 -25
  657. package/knowledge/decisions/security/wire-addon-expose-selects-the-rpc-surface.md +0 -51
  658. package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +0 -40
  659. package/knowledge/decisions/security/workflow-helper-functions-are-sessionless-by-declaration.md +0 -18
  660. package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +0 -32
  661. package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-virtual-user-and-per-scenario.md +0 -32
  662. package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +0 -31
  663. package/knowledge/decisions/security/workflow-virtual-user-steps-always-use-the-real-transport.md +0 -34
  664. package/knowledge/decisions/security/writing-a-virtual-user-schedule-is-gated-by-its-own-scope.md +0 -18
  665. package/knowledge/index.md +0 -24
  666. package/knowledge/questions/a-bearer-jwt-with-no-identity-becomes-a-session.md +0 -24
  667. package/knowledge/questions/channel-middleware-accepts-bare-factories-that-nothing-resolves.md +0 -35
  668. package/knowledge/questions/dev-quick-login-as-impersonation.md +0 -25
  669. package/knowledge/questions/does-a-delayed-rpc-run-as-the-session-it-was-scheduled-with.md +0 -26
  670. package/knowledge/questions/does-a-user-id-with-a-colon-read-another-users-credentials.md +0 -27
  671. package/knowledge/questions/does-a-wirecli-command-need-a-session-by-default.md +0 -26
  672. package/knowledge/questions/does-an-adversarial-in-scope-success-count-as-a-finding.md +0 -26
  673. package/knowledge/questions/does-approve-step-need-the-run-owners-session-or-the-gates-approvers.md +0 -34
  674. package/knowledge/questions/does-cors-origin-true-reflect-any-origin-with-credentials.md +0 -20
  675. package/knowledge/questions/does-skip-user-session-do-anything-on-a-channel.md +0 -24
  676. package/knowledge/questions/does-the-store-session-match-the-other-two.md +0 -19
  677. package/knowledge/questions/index.md +0 -41
  678. package/knowledge/questions/is-the-agent-score-worker-reachable-without-a-session.md +0 -21
  679. package/knowledge/questions/live-scheduled-tests-may-write.md +0 -19
  680. package/knowledge/questions/provision-virtual-users-has-no-caller-in-this-repo.md +0 -23
  681. package/knowledge/questions/remote-secret-refuses-requests-without-a-remote-token-on-every-path.md +0 -32
  682. package/knowledge/questions/should-a-middleware-set-session-persist-to-the-store.md +0 -25
  683. package/knowledge/questions/should-a-scoped-secret-view-throw-from-has-secret-for-a-disallowed-key.md +0 -23
  684. package/knowledge/questions/should-a-wrong-bearer-token-be-anonymous-or-refused.md +0 -35
  685. package/knowledge/questions/should-an-empty-webhook-signing-secret-send-unsigned.md +0 -23
  686. package/knowledge/questions/should-http-virtual-user-sessions-reset-between-scenarios-in-one-run.md +0 -27
  687. package/knowledge/questions/should-the-cookie-jar-scope-cookies-to-the-api-origin.md +0 -26
  688. package/knowledge/questions/should-voice-input-fetch-audio-urls-without-a-host-allowlist.md +0 -20
  689. package/knowledge/questions/staging-impersonation-rules.md +0 -27
  690. package/knowledge/questions/unauthorized-channel-replies-escape-the-declared-out-type.md +0 -44
  691. package/knowledge/questions/virtual-user-keys-on-cloud-stages-are-pikku-studios-to-build.md +0 -33
  692. package/knowledge/questions/virtual-user-statement-replay-is-per-process.md +0 -20
  693. package/knowledge/questions/what-an-impersonated-session-carries.md +0 -22
  694. package/run-tests.sh +0 -68
  695. package/scripts/generate-api-report.d.mts +0 -1
  696. package/scripts/generate-api-report.mjs +0 -96
  697. package/scripts/generate-api-report.mts +0 -333
  698. package/src/public-surface.json +0 -637
  699. package/src/public-surface.json.README +0 -43
  700. /package/dist/{function/compensation-name.d.ts → compensation-name.d.ts} +0 -0
  701. /package/dist/{function/compensation-name.js → compensation-name.js} +0 -0
@@ -14,6 +14,13 @@ const getMiddlewarePriority = (fn) => {
14
14
  const sortByPriority = (middlewares) => {
15
15
  return middlewares.sort((a, b) => getMiddlewarePriority(a) - getMiddlewarePriority(b));
16
16
  };
17
+ /**
18
+ * Runs `middlewares` as an onion around `main`, ordered by priority (stable
19
+ * within a priority), and returns `main`'s result. A middleware that does not
20
+ * call `next` stops the chain: `main` is never run and the result is
21
+ * `undefined`.
22
+ * @internal
23
+ */
17
24
  export const runMiddleware = async (services, wire, middlewares, main) => {
18
25
  const sorted = isSortedByPriority(middlewares)
19
26
  ? middlewares
@@ -60,10 +67,16 @@ export const addGlobalMiddleware = (middleware, packageName = null) => {
60
67
  state.push(...middleware);
61
68
  return middleware;
62
69
  };
63
- const getMiddlewareByName = (name) => {
64
- const middlewareStore = pikkuState(null, 'misc', 'middleware');
65
- const middleware = middlewareStore[name];
66
- return middleware?.[0];
70
+ /**
71
+ * Wire-level middleware by name, from the namespace of the package whose
72
+ * metadata named it — the same namespace its tag and HTTP groups resolve from
73
+ * — and then from the application's, which is never narrower.
74
+ */
75
+ const getMiddlewareByName = (name, packageName) => {
76
+ const own = pikkuState(packageName, 'misc', 'middleware')[name]?.[0];
77
+ if (own || packageName === null)
78
+ return own;
79
+ return pikkuState(null, 'misc', 'middleware')[name]?.[0];
67
80
  };
68
81
  /**
69
82
  * Per-wire-type cap on the memoized middleware chains. The cache key is the
@@ -120,7 +133,10 @@ export const MIDDLEWARE_CACHE_MAX_ENTRIES = MIDDLEWARE_CACHE_MAX;
120
133
  /** Current number of cached chains for a wire type. Test/observability only. */
121
134
  export const middlewareCacheSize = (wireType) => middlewareCache[wireType].size;
122
135
  export const combineMiddleware = (wireType, uid, { wireInheritedMiddleware, wireMiddleware, funcInheritedMiddleware, funcMiddleware, packageName = null, } = {}) => {
123
- const cached = cacheGet(wireType, uid);
136
+ // A wire id is only unique within its package: an addon's `getUser` and the
137
+ // application's are different functions with different gates.
138
+ const cacheKey = packageName === null ? uid : `${packageName}\0${uid}`;
139
+ const cached = cacheGet(wireType, cacheKey);
124
140
  if (cached) {
125
141
  return cached;
126
142
  }
@@ -150,7 +166,7 @@ export const combineMiddleware = (wireType, uid, { wireInheritedMiddleware, wire
150
166
  }
151
167
  }
152
168
  else if (meta.type === 'wire') {
153
- const middleware = getMiddlewareByName(meta.name);
169
+ const middleware = getMiddlewareByName(meta.name, packageName);
154
170
  if (middleware) {
155
171
  resolved.push(middleware);
156
172
  }
@@ -175,5 +191,5 @@ export const combineMiddleware = (wireType, uid, { wireInheritedMiddleware, wire
175
191
  resolved.push(...funcMiddleware);
176
192
  }
177
193
  sortByPriority(resolved);
178
- return cacheSet(wireType, uid, freezeDedupe(resolved));
194
+ return cacheSet(wireType, cacheKey, freezeDedupe(resolved));
179
195
  };
@@ -23,6 +23,19 @@ export declare const runPermissions: ({ funcPermissions, services, wire, data, p
23
23
  /** What the non-global gate is called in debug logs, e.g. 'function', 'agent'. */
24
24
  label?: string;
25
25
  }) => Promise<void>;
26
+ /**
27
+ * Decides, from the session alone, whether a function is worth offering to
28
+ * that session: only the `pikkuAuth` checks among the global and the given
29
+ * permissions are run, since they need no input. Resolves `true` when there
30
+ * are none or any one of them passes. Used to filter an agent's tools before
31
+ * the model sees them; it is not the enforcement point, which remains the full
32
+ * permission check when the function is called.
33
+ *
34
+ * @param funcPermissions - The live permission group from the function or
35
+ * agent config, never the generated metadata, which carries no functions.
36
+ * @param packageName - The package whose global permissions apply; `null` for
37
+ * the app.
38
+ */
26
39
  export declare const checkAuthPermissions: (
27
40
  /** Must be the live permission group from the func/agent config, never metadata. */
28
41
  funcPermissions: CorePermissionGroup | undefined, session: CoreUserSession, services: CoreServices, packageName?: string | null) => Promise<boolean>;
@@ -93,6 +93,19 @@ export const runPermissions = async ({ funcPermissions, services, wire, data, pa
93
93
  }
94
94
  }
95
95
  };
96
+ /**
97
+ * Decides, from the session alone, whether a function is worth offering to
98
+ * that session: only the `pikkuAuth` checks among the global and the given
99
+ * permissions are run, since they need no input. Resolves `true` when there
100
+ * are none or any one of them passes. Used to filter an agent's tools before
101
+ * the model sees them; it is not the enforcement point, which remains the full
102
+ * permission check when the function is called.
103
+ *
104
+ * @param funcPermissions - The live permission group from the function or
105
+ * agent config, never the generated metadata, which carries no functions.
106
+ * @param packageName - The package whose global permissions apply; `null` for
107
+ * the app.
108
+ */
96
109
  export const checkAuthPermissions = async (
97
110
  /** Must be the live permission group from the func/agent config, never metadata. */
98
111
  funcPermissions, session, services, packageName = null) => {
@@ -1,11 +1,60 @@
1
1
  import type { PikkuPackageState } from './types/state.types.js';
2
2
  import type { CoreSingletonServices, CreateWireServices } from './types/core.types.js';
3
+ /**
4
+ * Every package's registry, keyed by package name (`__main__` for the app).
5
+ * The map lives on `globalThis` under a registered symbol, so duplicate copies
6
+ * of `@pikku/core` in one process share it.
7
+ * @internal
8
+ */
3
9
  export declare const getAllPackageStates: () => Map<string, PikkuPackageState>;
10
+ /**
11
+ * Reads, or with `value` replaces, one slot of a package's registry: the
12
+ * functions, wirings, metadata, middleware and services that generated code and
13
+ * the `wire*` helpers register at import time.
14
+ *
15
+ * This is framework plumbing, not app state. Generated bootstrap files and
16
+ * runtime adapters call it; application code should go through the `wire*`,
17
+ * `add*` and `define*` helpers instead, because writing a slot directly
18
+ * bypasses the validation they do.
19
+ *
20
+ * @param packageName - The package whose registry to use; `null` means the app.
21
+ * The registry is created on first use.
22
+ * @param type - The area, such as `'function'`, `'http'` or `'misc'`.
23
+ * @param content - The slot within that area.
24
+ * @param value - When given, replaces the slot. `undefined` cannot be stored;
25
+ * it always reads.
26
+ * @returns The slot's current value.
27
+ */
4
28
  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];
29
+ /**
30
+ * Creates an empty registry for `packageName` if it has none yet; an existing
31
+ * one is left untouched.
32
+ * @internal
33
+ */
5
34
  export declare const initializePikkuState: (packageName: string) => void;
35
+ /**
36
+ * Discards every package's registry and starts the app's afresh. Registered
37
+ * error classes are carried over, because they come from module side effects
38
+ * that will not run again. Meant for tests.
39
+ */
6
40
  export declare const resetPikkuState: () => void;
41
+ /**
42
+ * The app's singleton services, as registered by the generated bootstrap or a
43
+ * runtime adapter.
44
+ * @throws {Error} When none have been registered yet.
45
+ */
7
46
  export declare const getSingletonServices: () => CoreSingletonServices;
47
+ /** Registers the app's singleton services, replacing any registered before. */
8
48
  export declare const setSingletonServices: (services: CoreSingletonServices) => void;
49
+ /**
50
+ * The app's registered `createWireServices` factory, if it has one.
51
+ * @internal
52
+ */
9
53
  export declare const getCreateWireServices: () => CreateWireServices | undefined;
54
+ /**
55
+ * Registers the service factories for a package (an addon), replacing any
56
+ * registered before.
57
+ * @internal
58
+ */
10
59
  export declare const addPackageServiceFactories: (packageName: string, factories: NonNullable<PikkuPackageState['package']['factories']>) => void;
11
60
  export type { PikkuPackageState } from './types/state.types.js';
@@ -5,6 +5,12 @@ const PIKKU_STATE_KEY = Symbol.for('@pikku/core/state');
5
5
  * access.
6
6
  */
7
7
  const stateHost = globalThis;
8
+ /**
9
+ * Every package's registry, keyed by package name (`__main__` for the app).
10
+ * The map lives on `globalThis` under a registered symbol, so duplicate copies
11
+ * of `@pikku/core` in one process share it.
12
+ * @internal
13
+ */
8
14
  export const getAllPackageStates = () => {
9
15
  let states = stateHost[PIKKU_STATE_KEY];
10
16
  if (!states) {
@@ -13,6 +19,24 @@ export const getAllPackageStates = () => {
13
19
  }
14
20
  return states;
15
21
  };
22
+ /**
23
+ * Reads, or with `value` replaces, one slot of a package's registry: the
24
+ * functions, wirings, metadata, middleware and services that generated code and
25
+ * the `wire*` helpers register at import time.
26
+ *
27
+ * This is framework plumbing, not app state. Generated bootstrap files and
28
+ * runtime adapters call it; application code should go through the `wire*`,
29
+ * `add*` and `define*` helpers instead, because writing a slot directly
30
+ * bypasses the validation they do.
31
+ *
32
+ * @param packageName - The package whose registry to use; `null` means the app.
33
+ * The registry is created on first use.
34
+ * @param type - The area, such as `'function'`, `'http'` or `'misc'`.
35
+ * @param content - The slot within that area.
36
+ * @param value - When given, replaces the slot. `undefined` cannot be stored;
37
+ * it always reads.
38
+ * @returns The slot's current value.
39
+ */
16
40
  export const pikkuState = (packageName, type, content, value) => {
17
41
  const resolvedPackageName = packageName ?? '__main__';
18
42
  if (!getAllPackageStates().has(resolvedPackageName)) {
@@ -125,11 +149,21 @@ const createEmptyPackageState = () => ({
125
149
  declaredSecrets: null,
126
150
  },
127
151
  });
152
+ /**
153
+ * Creates an empty registry for `packageName` if it has none yet; an existing
154
+ * one is left untouched.
155
+ * @internal
156
+ */
128
157
  export const initializePikkuState = (packageName) => {
129
158
  if (!getAllPackageStates().has(packageName)) {
130
159
  getAllPackageStates().set(packageName, createEmptyPackageState());
131
160
  }
132
161
  };
162
+ /**
163
+ * Discards every package's registry and starts the app's afresh. Registered
164
+ * error classes are carried over, because they come from module side effects
165
+ * that will not run again. Meant for tests.
166
+ */
133
167
  export const resetPikkuState = () => {
134
168
  // Error definitions come from module-import side effects that never re-run.
135
169
  const existingErrors = getAllPackageStates().get('__main__')?.misc.errors;
@@ -143,18 +177,33 @@ export const resetPikkuState = () => {
143
177
  if (!getAllPackageStates().has('__main__')) {
144
178
  resetPikkuState();
145
179
  }
180
+ /**
181
+ * The app's singleton services, as registered by the generated bootstrap or a
182
+ * runtime adapter.
183
+ * @throws {Error} When none have been registered yet.
184
+ */
146
185
  export const getSingletonServices = () => {
147
186
  const services = pikkuState(null, 'package', 'singletonServices');
148
187
  if (!services)
149
188
  throw new Error('Singleton services not initialized');
150
189
  return services;
151
190
  };
191
+ /** Registers the app's singleton services, replacing any registered before. */
152
192
  export const setSingletonServices = (services) => {
153
193
  pikkuState(null, 'package', 'singletonServices', services);
154
194
  };
195
+ /**
196
+ * The app's registered `createWireServices` factory, if it has one.
197
+ * @internal
198
+ */
155
199
  export const getCreateWireServices = () => {
156
200
  return pikkuState(null, 'package', 'factories')?.createWireServices;
157
201
  };
202
+ /**
203
+ * Registers the service factories for a package (an addon), replacing any
204
+ * registered before.
205
+ * @internal
206
+ */
158
207
  export const addPackageServiceFactories = (packageName, factories) => {
159
208
  pikkuState(packageName, 'package', 'factories', factories);
160
209
  };
package/dist/remote.js CHANGED
@@ -1,4 +1,23 @@
1
1
  import { assertStrongKeyMaterial, encryptWithKeyMaterial, REMOTE_SESSION_INFO, } from './crypto-utils.js';
2
+ /**
3
+ * An unset secret means remote auth is not configured, so the call goes out
4
+ * unauthenticated. A secrets backend that fails is a different thing: sending
5
+ * the call anyway would only earn a 401 from the peer with no hint why.
6
+ */
7
+ const readRemoteSecret = async (secrets) => {
8
+ if (!secrets) {
9
+ return undefined;
10
+ }
11
+ try {
12
+ if (!(await secrets.hasSecret('PIKKU_REMOTE_SECRET'))) {
13
+ return undefined;
14
+ }
15
+ return (await secrets.getSecret('PIKKU_REMOTE_SECRET')).reveal();
16
+ }
17
+ catch (cause) {
18
+ throw new Error('Could not read PIKKU_REMOTE_SECRET from the secrets service; refusing to send an unauthenticated remote call', { cause });
19
+ }
20
+ };
2
21
  /**
3
22
  * Authorization headers carrying a JWT-signed session and traceId for
4
23
  * `pikkuRemoteAuthMiddleware` on the receiving end. Used by every deployment
@@ -9,11 +28,7 @@ export async function buildRemoteHeaders(jwt, secrets, funcName, session, traceI
9
28
  'content-type': 'application/json',
10
29
  ...(traceId && { 'x-request-id': traceId }),
11
30
  };
12
- let secret;
13
- try {
14
- secret = (await secrets?.getSecret('PIKKU_REMOTE_SECRET'))?.reveal();
15
- }
16
- catch { }
31
+ const secret = await readRemoteSecret(secrets);
17
32
  if (secret && jwt) {
18
33
  assertStrongKeyMaterial('PIKKU_REMOTE_SECRET', secret);
19
34
  const sessionEnc = session
package/dist/schema.d.ts CHANGED
@@ -1,7 +1,24 @@
1
1
  import type { Logger } from './services/logger.js';
2
2
  import type { SchemaService } from './services/schema-service.js';
3
+ /**
4
+ * Registers a JSON Schema by name for a package. Generated schema files call
5
+ * this; a module's `default` export is unwrapped.
6
+ *
7
+ * @param name - The schema name functions' metadata refers to.
8
+ * @param value - The schema, or a module whose `default` is the schema.
9
+ * @param packageName - The addon package; `null` for the app.
10
+ */
3
11
  export declare const addSchema: (name: string, value: any, packageName?: string | null) => void;
12
+ /** The JSON Schema registered under `name` for a package, if any. */
4
13
  export declare const getSchema: (name: string, packageName?: string | null) => Record<string, unknown> | undefined;
14
+ /**
15
+ * Hands every registered schema, for the app and every addon, to the schema
16
+ * service to compile, then logs an error for each HTTP route whose input
17
+ * schema did not load. A schema that fails to compile is logged, not thrown.
18
+ *
19
+ * @param schemaService - Defaults to the registered singleton services' `schema`.
20
+ * @throws {Error} When no schema service is given or registered.
21
+ */
5
22
  export declare const compileAllSchemas: (logger: Logger, schemaService?: SchemaService) => void;
6
23
  /**
7
24
  * Fills in absent top-level properties from their schema `default`. Applied
@@ -11,5 +28,24 @@ export declare const compileAllSchemas: (logger: Logger, schemaService?: SchemaS
11
28
  * or array default is never shared as one mutable instance across requests.
12
29
  */
13
30
  export declare const applyDefaultsFromSchema: (schemaName: string, data: any, packageName?: string | null) => any;
31
+ /**
32
+ * Converts top-level string values to the type their schema property declares,
33
+ * for transports that only carry text (query strings, argv): comma-separated
34
+ * strings to arrays, `date-time` strings to `Date`, and numeric strings to
35
+ * numbers only when the number prints back as the identical text. Mutates
36
+ * `data` in place; anything it cannot convert exactly is left for the
37
+ * validator to reject.
38
+ */
14
39
  export declare const coerceTopLevelDataFromSchema: (schemaName: string, data: any, packageName?: string | null) => void;
40
+ /**
41
+ * Validates `data` against a registered schema, throwing on failure.
42
+ *
43
+ * Without a schema service this does nothing at all, so an app that wires no
44
+ * `schema` service runs functions on unvalidated input. With one, a function
45
+ * that declares no input schema refuses any non-empty data.
46
+ *
47
+ * @throws {UnprocessableContentError} Data was passed where no schema is declared.
48
+ * @throws {MissingSchemaError} The named schema was never registered.
49
+ * Validation failures are thrown by the schema service itself.
50
+ */
15
51
  export declare const validateSchema: (logger: Logger, schemaService: SchemaService | undefined, schemaName: string | undefined | null, data: any, packageName?: string | null) => Promise<void>;
package/dist/schema.js CHANGED
@@ -1,13 +1,30 @@
1
1
  import { MissingSchemaError, UnprocessableContentError, } from './errors/errors.js';
2
2
  import { pikkuState, getAllPackageStates } from './pikku-state.js';
3
3
  const schemaKey = (name, packageName) => packageName ? `${packageName}:${name}` : name;
4
+ /**
5
+ * Registers a JSON Schema by name for a package. Generated schema files call
6
+ * this; a module's `default` export is unwrapped.
7
+ *
8
+ * @param name - The schema name functions' metadata refers to.
9
+ * @param value - The schema, or a module whose `default` is the schema.
10
+ * @param packageName - The addon package; `null` for the app.
11
+ */
4
12
  export const addSchema = (name, value, packageName = null) => {
5
13
  const schema = value?.default ?? value;
6
14
  pikkuState(packageName, 'misc', 'schemas').set(name, schema);
7
15
  };
16
+ /** The JSON Schema registered under `name` for a package, if any. */
8
17
  export const getSchema = (name, packageName = null) => {
9
18
  return pikkuState(packageName, 'misc', 'schemas').get(name);
10
19
  };
20
+ /**
21
+ * Hands every registered schema, for the app and every addon, to the schema
22
+ * service to compile, then logs an error for each HTTP route whose input
23
+ * schema did not load. A schema that fails to compile is logged, not thrown.
24
+ *
25
+ * @param schemaService - Defaults to the registered singleton services' `schema`.
26
+ * @throws {Error} When no schema service is given or registered.
27
+ */
11
28
  export const compileAllSchemas = (logger, schemaService) => {
12
29
  if (!schemaService) {
13
30
  schemaService = pikkuState(null, 'package', 'singletonServices')?.schema;
@@ -114,6 +131,14 @@ const coerceNumeric = (value, integer) => {
114
131
  return value;
115
132
  return parsed;
116
133
  };
134
+ /**
135
+ * Converts top-level string values to the type their schema property declares,
136
+ * for transports that only carry text (query strings, argv): comma-separated
137
+ * strings to arrays, `date-time` strings to `Date`, and numeric strings to
138
+ * numbers only when the number prints back as the identical text. Mutates
139
+ * `data` in place; anything it cannot convert exactly is left for the
140
+ * validator to reject.
141
+ */
117
142
  export const coerceTopLevelDataFromSchema = (schemaName, data, packageName = null) => {
118
143
  const schema = pikkuState(packageName, 'misc', 'schemas').get(schemaName);
119
144
  if (!schema?.properties)
@@ -173,6 +198,17 @@ const stripUndefinedValues = (value) => {
173
198
  .filter(([, entry]) => entry !== undefined)
174
199
  .map(([key, entry]) => [key, stripUndefinedValues(entry)]));
175
200
  };
201
+ /**
202
+ * Validates `data` against a registered schema, throwing on failure.
203
+ *
204
+ * Without a schema service this does nothing at all, so an app that wires no
205
+ * `schema` service runs functions on unvalidated input. With one, a function
206
+ * that declares no input schema refuses any non-empty data.
207
+ *
208
+ * @throws {UnprocessableContentError} Data was passed where no schema is declared.
209
+ * @throws {MissingSchemaError} The named schema was never registered.
210
+ * Validation failures are thrown by the schema service itself.
211
+ */
176
212
  export const validateSchema = async (logger, schemaService, schemaName, data, packageName = null) => {
177
213
  if (schemaService) {
178
214
  if (!schemaName) {
@@ -1,7 +1,15 @@
1
1
  import type { AgentRunState, PendingApproval } from '../wirings/agent/agent.types.js';
2
2
  import type { AgentRunScore } from '../wirings/agent-scorer/agent-scorer.types.js';
3
+ /** A run as it is first recorded; the store assigns the `runId`. */
3
4
  export type CreateRunInput = Omit<AgentRunState, 'runId'>;
5
+ /** A scorer's grade as it is saved; the store stamps `createdAt`. */
4
6
  export type SaveScoreInput = Omit<AgentRunScore, 'createdAt'>;
7
+ /**
8
+ * Persists agent runs between steps, so a run that stops for a tool approval
9
+ * can be resumed later, possibly by another process. Implementations must make
10
+ * {@link AgentRunStateService.resolveApproval} atomic: it is what stops one
11
+ * approval from executing a tool twice.
12
+ */
5
13
  export interface AgentRunStateService {
6
14
  createRun(run: CreateRunInput): Promise<string>;
7
15
  updateRun(runId: string, updates: Partial<AgentRunState>): Promise<void>;
@@ -1,5 +1,10 @@
1
1
  import type { AgentMessage, AgentStep, AgentToolDef, AgentStreamChannel } from '../wirings/agent/agent.types.js';
2
2
  export type AIProviderOptions = Record<string, Record<string, unknown>>;
3
+ /**
4
+ * One model call as `runAgent` and `streamAgent` hand it to an {@link
5
+ * AgentRunnerService}: the resolved model, instructions, conversation so far
6
+ * and the tools the agent may call.
7
+ */
3
8
  export type AgentRunnerParams = {
4
9
  model: string;
5
10
  temperature?: number;
@@ -33,6 +38,10 @@ export type AgentRunnerParams = {
33
38
  */
34
39
  providerOptions?: AIProviderOptions;
35
40
  };
41
+ /**
42
+ * The outcome of a whole agent run: the final text (or structured `object` when
43
+ * an output schema was set), every step taken, and summed token usage.
44
+ */
36
45
  export type AgentRunnerResult = {
37
46
  text: string;
38
47
  object?: unknown;
@@ -42,6 +51,10 @@ export type AgentRunnerResult = {
42
51
  outputTokens: number;
43
52
  };
44
53
  };
54
+ /**
55
+ * What one model step produced: text, the tool calls it made and their results,
56
+ * token usage, and why the model stopped.
57
+ */
45
58
  export type AgentStepResult = {
46
59
  text: string;
47
60
  object?: unknown;
@@ -205,6 +218,17 @@ export type AIRerankResult<VALUE extends string | Record<string, unknown>> = {
205
218
  providerMetadata?: Record<string, unknown>;
206
219
  response?: unknown;
207
220
  };
221
+ /**
222
+ * The bridge from pikku agents to an LLM SDK (for example `@pikku/ai-vercel`).
223
+ * The agent runner calls `run` or `stream` once per step and executes the
224
+ * returned tool calls itself, so approval, permission and tool-scoping checks
225
+ * stay in pikku rather than in the SDK.
226
+ *
227
+ * `stream` must write deltas to the channel as they arrive and resolve with the
228
+ * same step result `run` would return. The media methods (`transcribe`,
229
+ * `generateSpeech`, `generateImage`, `embed`, `embedMany`, `rerank`) are
230
+ * optional; a runner without one makes the matching agent feature unavailable.
231
+ */
208
232
  export interface AgentRunnerService {
209
233
  stream(params: AgentRunnerParams, channel: AgentStreamChannel): Promise<AgentStepResult>;
210
234
  run(params: AgentRunnerParams): Promise<AgentStepResult>;
@@ -1,4 +1,12 @@
1
1
  import type { AgentThread, AgentMessage } from '../wirings/agent/agent.types.js';
2
+ /**
3
+ * Agent memory: conversation threads, their messages, and working memory kept
4
+ * per thread or per resource (usually the user).
5
+ *
6
+ * The agent runner reads the last messages of a thread before each run and
7
+ * saves the new ones after it. This service does not check access; callers that
8
+ * expose threads to users should check ownership first (see `canAccessThread`).
9
+ */
2
10
  export interface AgentStorageService {
3
11
  createThread(resourceId: string, options?: {
4
12
  threadId?: string;
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Turns text into vectors for semantic search. One instance is tied to one
3
+ * model, so vectors indexed by it and queries embedded by it stay comparable.
4
+ */
1
5
  export interface AIEmbeddingService {
2
6
  readonly model: string;
3
7
  readonly dimensions?: number;
@@ -1,12 +1,22 @@
1
1
  import type { CoreUserSession, PikkuWire, PikkuWiringTypes } from '../types/core.types.js';
2
2
  import type { Logger } from './logger.js';
3
3
  import type { Safe } from '../classification/secret-value.js';
4
+ /**
5
+ * `best-effort` buffers events and writes them when the invocation closes,
6
+ * logging (not throwing) on failure; `transactional` writes each event before
7
+ * `write` resolves, so a failed write fails the function.
8
+ */
4
9
  export type AuditDurability = 'best-effort' | 'transactional';
5
10
  export type AuditOutcome = 'success' | 'failed' | 'denied';
6
11
  export type AuditSource = 'auto' | 'explicit';
12
+ /**
13
+ * A function's `audit` setting: `true` for best-effort auditing, or an object
14
+ * choosing the durability.
15
+ */
7
16
  export type AuditConfig = boolean | {
8
17
  durability?: AuditDurability;
9
18
  };
19
+ /** An {@link AuditConfig} with its defaults filled in. */
10
20
  export type ResolvedAuditConfig = {
11
21
  durability: AuditDurability;
12
22
  };
@@ -27,6 +37,11 @@ export type AuditUserIdentity = {
27
37
  orgId?: string;
28
38
  pikkuUserId?: string;
29
39
  };
40
+ /**
41
+ * One entry in the audit trail. The invocation fields (`functionId`,
42
+ * `wireType`, `traceId`, `userIdentity`) are filled in from the wire when an
43
+ * event is written through an {@link AuditLog}.
44
+ */
30
45
  export type AuditEvent = {
31
46
  eventId?: string;
32
47
  type: string;
@@ -43,6 +58,7 @@ export type AuditEvent = {
43
58
  input?: unknown;
44
59
  metadata?: Record<string, unknown>;
45
60
  };
61
+ /** Events flushed together at the end of a best-effort invocation. */
46
62
  export type AuditEventBatch = AuditEvent[];
47
63
  /**
48
64
  * A page of the trail, newest first, narrowed by the filters a reader picked.
@@ -76,6 +92,7 @@ export type AuditFacets = {
76
92
  userIds: string[];
77
93
  types: string[];
78
94
  };
95
+ /** One page of audit events returned by {@link AuditService.query}. */
79
96
  export type AuditQueryResult = {
80
97
  events: AuditEvent[];
81
98
  /** Offset of the next page, or `null` at the end. */
@@ -83,6 +100,15 @@ export type AuditQueryResult = {
83
100
  /** Present only when the caller asked for it — it costs two extra scans. */
84
101
  facets?: AuditFacets;
85
102
  };
103
+ /**
104
+ * The durable sink for audit events, provided as the `audit` singleton service.
105
+ * Functions do not call it directly: they write through the per-invocation
106
+ * {@link AuditLog} from {@link createInvocationAudit}, which adds the caller's
107
+ * identity and applies the function's durability.
108
+ *
109
+ * `write` takes a whole batch when the sink supports it; otherwise events go
110
+ * through `audit` one at a time.
111
+ */
86
112
  export interface AuditService {
87
113
  audit(event: AuditEvent): Promise<void>;
88
114
  write?(batch: AuditEventBatch): Promise<void>;
@@ -96,6 +122,12 @@ export interface AuditService {
96
122
  /** Distinct users and types across the whole trail. Paired with {@link query}. */
97
123
  facets?(): Promise<AuditFacets>;
98
124
  }
125
+ /**
126
+ * An audit sink that discards every event. Use it for local development and
127
+ * tests where no trail is kept; it has no read side.
128
+ *
129
+ * @example snippet: shopServices
130
+ */
99
131
  export declare class NoopAuditService implements AuditService {
100
132
  audit(_event: AuditEvent): Promise<void>;
101
133
  write(_batch: AuditEventBatch): Promise<void>;
@@ -117,5 +149,21 @@ export interface AuditLog {
117
149
  close(): Promise<void>;
118
150
  }
119
151
  export declare const resolveAuditConfig: (config?: AuditConfig) => ResolvedAuditConfig | undefined;
152
+ /**
153
+ * Creates the {@link AuditLog} for one invocation, normally from your
154
+ * wire-services factory.
155
+ *
156
+ * When the function did not opt in with `audit`, the returned log drops every
157
+ * write and logs a warning once, so a missing opt-in is visible rather than
158
+ * silent.
159
+ *
160
+ * @param service - the singleton audit sink
161
+ * @param wire - the invocation's wire, which supplies the audit config and the
162
+ * caller's identity
163
+ * @param logger - used for the dropped-write warning when the wire has no
164
+ * logger
165
+ *
166
+ * @example snippet: shopWireServices
167
+ */
120
168
  export declare const createInvocationAudit: (service: AuditService, wire: PikkuWire<any, any, any, CoreUserSession>, logger?: Logger) => AuditLog;
121
169
  export declare const resolveAuditUserIdentityFromWire: (wire: PikkuWire<any, any, any, CoreUserSession>) => AuditUserIdentity | undefined;
@@ -1,3 +1,9 @@
1
+ /**
2
+ * An audit sink that discards every event. Use it for local development and
3
+ * tests where no trail is kept; it has no read side.
4
+ *
5
+ * @example snippet: shopServices
6
+ */
1
7
  export class NoopAuditService {
2
8
  async audit(_event) { }
3
9
  async write(_batch) { }
@@ -92,6 +98,22 @@ export const resolveAuditConfig = (config) => {
92
98
  durability: config.durability ?? 'best-effort',
93
99
  };
94
100
  };
101
+ /**
102
+ * Creates the {@link AuditLog} for one invocation, normally from your
103
+ * wire-services factory.
104
+ *
105
+ * When the function did not opt in with `audit`, the returned log drops every
106
+ * write and logs a warning once, so a missing opt-in is visible rather than
107
+ * silent.
108
+ *
109
+ * @param service - the singleton audit sink
110
+ * @param wire - the invocation's wire, which supplies the audit config and the
111
+ * caller's identity
112
+ * @param logger - used for the dropped-write warning when the wire has no
113
+ * logger
114
+ *
115
+ * @example snippet: shopWireServices
116
+ */
95
117
  export const createInvocationAudit = (service, wire, logger) => {
96
118
  if (!wire.audit) {
97
119
  return new DisabledInvocationAudit(wire, logger);