@pikku/core 0.12.142 → 0.12.144

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 (703) 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 +11 -1
  77. package/dist/services/incoming-webhook-service.js +5 -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 +16 -0
  105. package/dist/services/scheduler-service.js +12 -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/command-parser.d.ts +13 -0
  216. package/dist/wirings/cli/command-parser.js +12 -0
  217. package/dist/wirings/credential/credential-overrides.d.ts +1 -0
  218. package/dist/wirings/credential/credential.types.d.ts +7 -0
  219. package/dist/wirings/credential/validate-credential-definitions.d.ts +7 -0
  220. package/dist/wirings/credential/validate-credential-definitions.js +7 -0
  221. package/dist/wirings/flag/cached-flag-source.d.ts +1 -0
  222. package/dist/wirings/flag/flag.types.d.ts +3 -0
  223. package/dist/wirings/gateway/gateway-runner.d.ts +23 -0
  224. package/dist/wirings/gateway/gateway-runner.js +23 -0
  225. package/dist/wirings/gateway/gateway.types.d.ts +3 -0
  226. package/dist/wirings/gateway/local-gateway-service.d.ts +10 -0
  227. package/dist/{services → wirings/gateway}/local-gateway-service.js +6 -2
  228. package/dist/wirings/http/http-routes.d.ts +21 -0
  229. package/dist/wirings/http/http-routes.js +11 -0
  230. package/dist/wirings/http/http-runner.d.ts +71 -0
  231. package/dist/wirings/http/http-runner.js +73 -5
  232. package/dist/wirings/http/http.types.d.ts +27 -0
  233. package/dist/wirings/http/index.d.ts +1 -0
  234. package/dist/wirings/http/index.js +1 -0
  235. package/dist/wirings/http/log-http-routes.d.ts +1 -0
  236. package/dist/wirings/http/log-http-routes.js +1 -0
  237. package/dist/wirings/http/merge-request-data.d.ts +12 -0
  238. package/dist/wirings/http/merge-request-data.js +42 -0
  239. package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -0
  240. package/dist/wirings/http/pikku-fetch-http-request.js +3 -32
  241. package/dist/wirings/http/pikku-fetch-http-response.d.ts +1 -0
  242. package/dist/wirings/http/pikku-fetch-http-response.js +1 -0
  243. package/dist/wirings/http/routers/http-router.d.ts +6 -0
  244. package/dist/wirings/http/routers/http-router.js +6 -0
  245. package/dist/wirings/http/web-request.d.ts +17 -0
  246. package/dist/wirings/http/web-request.js +17 -0
  247. package/dist/wirings/mcp/mcp-endpoint-registry.d.ts +7 -0
  248. package/dist/wirings/mcp/mcp-endpoint-registry.js +7 -0
  249. package/dist/wirings/mcp/mcp-runner.d.ts +63 -0
  250. package/dist/wirings/mcp/mcp-runner.js +62 -0
  251. package/dist/wirings/mcp/mcp.types.d.ts +12 -0
  252. package/dist/wirings/node/node.types.d.ts +4 -0
  253. package/dist/wirings/oauth2/oauth2.types.d.ts +2 -0
  254. package/dist/wirings/queue/in-memory-queue-service.d.ts +23 -0
  255. package/dist/wirings/queue/in-memory-queue-service.js +129 -0
  256. package/dist/wirings/queue/index.d.ts +2 -1
  257. package/dist/wirings/queue/index.js +1 -0
  258. package/dist/wirings/queue/queue-identity.js +2 -14
  259. package/dist/wirings/queue/queue-runner.d.ts +37 -0
  260. package/dist/wirings/queue/queue-runner.js +37 -0
  261. package/dist/wirings/queue/queue.types.d.ts +56 -0
  262. package/dist/wirings/queue/register-queue-helper.d.ts +12 -0
  263. package/dist/wirings/queue/register-queue-helper.js +11 -0
  264. package/dist/wirings/queue/remote-queue-job.d.ts +11 -0
  265. package/dist/wirings/queue/remote-queue-job.js +41 -0
  266. package/dist/wirings/queue/signed-queue-service.d.ts +4 -1
  267. package/dist/wirings/queue/signed-queue-service.js +3 -0
  268. package/dist/wirings/queue/validate-worker-config.d.ts +1 -0
  269. package/dist/wirings/role/role.types.d.ts +3 -0
  270. package/dist/wirings/rpc/rpc-runner.d.ts +24 -0
  271. package/dist/wirings/rpc/rpc-runner.js +37 -2
  272. package/dist/wirings/rpc/rpc-types.d.ts +2 -0
  273. package/dist/wirings/scheduler/index.d.ts +2 -1
  274. package/dist/wirings/scheduler/index.js +1 -0
  275. package/dist/wirings/scheduler/log-schedulers.d.ts +1 -0
  276. package/dist/wirings/scheduler/log-schedulers.js +1 -0
  277. package/dist/wirings/scheduler/remote-scheduled-job.d.ts +11 -0
  278. package/dist/wirings/scheduler/remote-scheduled-job.js +20 -0
  279. package/dist/wirings/scheduler/scheduler-runner.d.ts +29 -0
  280. package/dist/wirings/scheduler/scheduler-runner.js +28 -0
  281. package/dist/wirings/scheduler/scheduler.types.d.ts +15 -0
  282. package/dist/wirings/scope/scope.types.d.ts +5 -0
  283. package/dist/wirings/secret/index.d.ts +2 -2
  284. package/dist/wirings/secret/index.js +1 -1
  285. package/dist/wirings/secret/secret.types.d.ts +26 -1
  286. package/dist/wirings/secret/secret.types.js +1 -0
  287. package/dist/wirings/secret/validate-secret-definitions.d.ts +8 -0
  288. package/dist/wirings/secret/validate-secret-definitions.js +15 -0
  289. package/dist/wirings/trigger/in-memory-trigger-service.d.ts +11 -0
  290. package/dist/{services → wirings/trigger}/in-memory-trigger-service.js +10 -3
  291. package/dist/wirings/trigger/index.d.ts +1 -1
  292. package/dist/wirings/trigger/pikku-trigger-service.d.ts +8 -3
  293. package/dist/wirings/trigger/pikku-trigger-service.js +14 -3
  294. package/dist/wirings/trigger/trigger-runner.d.ts +27 -2
  295. package/dist/wirings/trigger/trigger-runner.js +35 -2
  296. package/dist/wirings/trigger/trigger.types.d.ts +26 -4
  297. package/dist/wirings/trigger/webhook-source-runner.d.ts +24 -0
  298. package/dist/wirings/trigger/webhook-source-runner.js +19 -0
  299. package/dist/wirings/trigger/webhook-source.types.d.ts +12 -2
  300. package/dist/wirings/trigger/webhook-source.types.js +1 -1
  301. package/dist/wirings/variable/validate-variable-definitions.d.ts +7 -0
  302. package/dist/wirings/variable/validate-variable-definitions.js +7 -0
  303. package/dist/wirings/variable/variable.types.d.ts +7 -0
  304. package/dist/wirings/virtual-user/conversation/conversation.types.d.ts +5 -0
  305. package/dist/wirings/virtual-user/conversation/run-conversation.d.ts +6 -0
  306. package/dist/wirings/virtual-user/conversation/run-conversation.js +1 -1
  307. package/dist/{services → wirings/virtual-user}/http-virtual-users.d.ts +4 -3
  308. package/dist/{services → wirings/virtual-user}/http-virtual-users.js +6 -6
  309. package/dist/wirings/virtual-user/index.d.ts +1 -1
  310. package/dist/wirings/virtual-user/index.js +1 -1
  311. package/dist/wirings/virtual-user/run-virtual-user.d.ts +2 -1
  312. package/dist/wirings/virtual-user/run-virtual-user.js +1 -14
  313. package/dist/wirings/virtual-user/virtual-user-declaration.types.d.ts +4 -0
  314. package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +10 -1
  315. package/dist/wirings/virtual-user/virtual-user-scaffold.js +5 -0
  316. package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +5 -0
  317. package/dist/wirings/virtual-user/virtual-user-schedule.js +1 -0
  318. package/dist/wirings/virtual-user/virtual-user-target.d.ts +1 -0
  319. package/dist/wirings/webhook/define-outgoing-webhook.d.ts +20 -0
  320. package/dist/wirings/webhook/define-outgoing-webhook.js +9 -0
  321. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +8 -4
  322. package/dist/wirings/workflow/dsl/workflow-runner.d.ts +7 -0
  323. package/dist/wirings/workflow/dsl/workflow-runner.js +7 -0
  324. package/dist/wirings/workflow/feature.d.ts +12 -0
  325. package/dist/wirings/workflow/feature.js +12 -0
  326. package/dist/wirings/workflow/graph/graph-node.d.ts +5 -0
  327. package/dist/wirings/workflow/graph/graph-node.js +5 -0
  328. package/dist/wirings/workflow/graph/template.d.ts +6 -0
  329. package/dist/wirings/workflow/graph/template.js +5 -0
  330. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +12 -0
  331. package/dist/wirings/workflow/graph/wire-workflow-graph.js +10 -0
  332. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +11 -0
  333. package/dist/wirings/workflow/graph/workflow-graph.types.js +1 -0
  334. package/dist/{services → wirings/workflow}/in-memory-workflow-service.d.ts +8 -3
  335. package/dist/{services → wirings/workflow}/in-memory-workflow-service.js +9 -4
  336. package/dist/wirings/workflow/pikku-scenario-service.d.ts +1 -1
  337. package/dist/wirings/workflow/pikku-scenario-service.js +2 -2
  338. package/dist/wirings/workflow/pikku-workflow-service.d.ts +1 -0
  339. package/dist/wirings/workflow/pikku-workflow-service.js +1 -0
  340. package/dist/wirings/workflow/run-timeline.d.ts +21 -0
  341. package/dist/wirings/workflow/run-timeline.js +15 -7
  342. package/dist/wirings/workflow/scenario-coverage.d.ts +1 -0
  343. package/dist/wirings/workflow/scenario-poll.d.ts +1 -0
  344. package/dist/wirings/workflow/scenario-prose.d.ts +6 -0
  345. package/dist/wirings/workflow/scenario-prose.js +6 -0
  346. package/dist/wirings/workflow/scenario-run.types.d.ts +3 -0
  347. package/dist/wirings/workflow/scenario-step.types.d.ts +1 -0
  348. package/dist/wirings/workflow/scenario-step.types.js +1 -0
  349. package/dist/wirings/workflow/scenario-surface.js +1 -13
  350. package/dist/wirings/workflow/scenario.types.d.ts +6 -0
  351. package/dist/wirings/workflow/workflow-approval-policy.d.ts +6 -0
  352. package/dist/wirings/workflow/workflow-approval-policy.js +6 -0
  353. package/dist/wirings/workflow/workflow-constants.d.ts +7 -1
  354. package/dist/wirings/workflow/workflow-constants.js +10 -1
  355. package/dist/wirings/workflow/workflow-errors.d.ts +13 -0
  356. package/dist/wirings/workflow/workflow-errors.js +13 -0
  357. package/dist/wirings/workflow/workflow-invocation-id.d.ts +4 -0
  358. package/dist/wirings/workflow/workflow-invocation-id.js +4 -0
  359. package/dist/wirings/workflow/workflow-queue-workers.d.ts +3 -0
  360. package/dist/wirings/workflow/workflow-run-ownership.d.ts +1 -0
  361. package/dist/wirings/workflow/workflow-run-ownership.js +1 -0
  362. package/dist/wirings/workflow/workflow-status-stream.d.ts +1 -0
  363. package/dist/wirings/workflow/workflow-unwind-plan.js +2 -7
  364. package/dist/wirings/workflow/workflow.types.d.ts +40 -0
  365. package/package.json +26 -9
  366. package/CHANGELOG.md +0 -6961
  367. package/dist/services/in-memory-queue-service.d.ts +0 -8
  368. package/dist/services/in-memory-queue-service.js +0 -54
  369. package/dist/services/in-memory-trigger-service.d.ts +0 -4
  370. package/dist/services/local-gateway-service.d.ts +0 -6
  371. package/dist/utils/hash.d.ts +0 -2
  372. package/dist/utils/hash.js +0 -23
  373. package/knowledge/decisions/index.md +0 -19
  374. package/knowledge/decisions/internals/a-credential-name-declared-twice-must-agree-on-schema-and-type.md +0 -29
  375. package/knowledge/decisions/internals/a-grant-can-name-a-scope-declared-without-its-addon.md +0 -29
  376. package/knowledge/decisions/internals/a-held-run-is-woken-later-not-retried.md +0 -28
  377. package/knowledge/decisions/internals/a-non-streaming-agent-run-registers-with-agentrunstate-too.md +0 -22
  378. package/knowledge/decisions/internals/a-reset-suite-makes-the-dev-seed-the-fixture.md +0 -50
  379. package/knowledge/decisions/internals/a-resumed-agent-turn-is-as-interruptible-as-the-first.md +0 -20
  380. package/knowledge/decisions/internals/a-scenario-step-template-is-offered-unfilled.md +0 -21
  381. package/knowledge/decisions/internals/a-scheduled-task-writes-its-caller-session-before-it-runs.md +0 -22
  382. package/knowledge/decisions/internals/a-secret-set-in-memory-shadows-the-variable-of-the-same-name.md +0 -28
  383. package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +0 -49
  384. package/knowledge/decisions/internals/a-virtual-user-acts-through-invokeraw-so-a-refusal-is-data.md +0 -32
  385. package/knowledge/decisions/internals/a-virtual-user-cadence-is-a-row-not-a-timer.md +0 -66
  386. package/knowledge/decisions/internals/a-virtual-user-converse-signs-in-before-its-first-turn.md +0 -24
  387. package/knowledge/decisions/internals/a-virtual-user-decides-whether-to-trust-memory-once-per-turn.md +0 -21
  388. package/knowledge/decisions/internals/a-virtual-user-email-is-computed-with-the-run-id-as-a-sub-address.md +0 -34
  389. package/knowledge/decisions/internals/a-virtual-user-run-is-not-a-workflow-but-it-needs-a-trigger.md +0 -65
  390. package/knowledge/decisions/internals/a-wall-clock-threshold-is-a-load-test-in-disguise.md +0 -46
  391. package/knowledge/decisions/internals/a-workflow-wire-is-built-from-the-run-not-from-the-rpc-service.md +0 -45
  392. package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +0 -26
  393. package/knowledge/decisions/internals/addon-pikku-meta-ships-at-the-package-root-or-under-dist.md +0 -32
  394. package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +0 -33
  395. package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +0 -28
  396. package/knowledge/decisions/internals/agent-agui-bridge-obeys-the-client-ordering-contract.md +0 -29
  397. package/knowledge/decisions/internals/agent-audio-chunks-carry-the-format-the-provider-returned.md +0 -20
  398. package/knowledge/decisions/internals/agent-context-waits-for-a-tool-result-still-being-written.md +0 -21
  399. package/knowledge/decisions/internals/agent-credential-suspensions-hide-the-tool-result.md +0 -26
  400. package/knowledge/decisions/internals/agent-delegate-and-supervise-hide-different-text.md +0 -26
  401. package/knowledge/decisions/internals/agent-llm-tool-arguments-have-nulls-stripped.md +0 -23
  402. package/knowledge/decisions/internals/agent-model-config-stays-a-single-resolution-seam.md +0 -25
  403. package/knowledge/decisions/internals/agent-onerror-hooks-cannot-change-the-failure.md +0 -22
  404. package/knowledge/decisions/internals/agent-runner-methods-must-keep-their-receiver.md +0 -22
  405. package/knowledge/decisions/internals/agent-speech-travels-as-a-custom-agui-event.md +0 -22
  406. package/knowledge/decisions/internals/agent-stream-persistence-is-best-effort.md +0 -27
  407. package/knowledge/decisions/internals/agent-sub-agents-inherit-the-parent-context-block.md +0 -26
  408. package/knowledge/decisions/internals/agent-tool-execute-failures-are-logged-unconditionally.md +0 -25
  409. package/knowledge/decisions/internals/agent-voice-input-transcribes-audio-parts-in-place.md +0 -22
  410. package/knowledge/decisions/internals/agent-working-memory-is-persisted-only-when-valid.md +0 -25
  411. package/knowledge/decisions/internals/an-addon-scope-root-loses-to-a-root-the-host-already-declares.md +0 -39
  412. package/knowledge/decisions/internals/an-agent-interrupt-is-not-a-failure.md +0 -23
  413. package/knowledge/decisions/internals/an-agent-is-offered-under-its-registry-key-and-only-within-the-virtual-users-scopes.md +0 -27
  414. package/knowledge/decisions/internals/an-agent-run-owned-by-another-instance-says-so.md +0 -25
  415. package/knowledge/decisions/internals/an-agent-stream-send-must-return-the-inner-sends-promise.md +0 -22
  416. package/knowledge/decisions/internals/an-empty-text-part-is-omitted-from-an-agent-message.md +0 -20
  417. package/knowledge/decisions/internals/an-empty-transcript-is-not-recorded.md +0 -22
  418. package/knowledge/decisions/internals/an-oauth2-credential-implies-an-optional-app-secret.md +0 -26
  419. package/knowledge/decisions/internals/an-unref-d-timer-cannot-be-awaited-under-node-test.md +0 -66
  420. package/knowledge/decisions/internals/analytics-identity-resolvers-run-in-declared-order.md +0 -22
  421. package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +0 -30
  422. package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +0 -31
  423. package/knowledge/decisions/internals/channel-state-accessors-are-unsound-generics-that-every-implementation-asserts.md +0 -33
  424. package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +0 -29
  425. package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +0 -28
  426. package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +0 -27
  427. package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +0 -28
  428. package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +0 -34
  429. package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +0 -29
  430. package/knowledge/decisions/internals/core-column-form-is-an-axis-of-its-own.md +0 -84
  431. package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +0 -41
  432. package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +0 -44
  433. package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +0 -39
  434. package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +0 -42
  435. package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +0 -39
  436. package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +0 -43
  437. package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +0 -38
  438. package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +0 -44
  439. package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +0 -27
  440. package/knowledge/decisions/internals/feature-flag-declarations-refuse-an-empty-anyof-and-conflicting-scopes.md +0 -22
  441. package/knowledge/decisions/internals/feature-flags-fail-open-and-never-enforce-access.md +0 -28
  442. package/knowledge/decisions/internals/flag-sync-rewrites-only-the-declared-text.md +0 -24
  443. package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +0 -32
  444. package/knowledge/decisions/internals/gateway-listener-middleware-runs-without-an-rpc-on-the-wire.md +0 -43
  445. package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +0 -28
  446. package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +0 -31
  447. package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +0 -26
  448. package/knowledge/decisions/internals/global-middleware-resolves-from-the-root-namespace-too.md +0 -32
  449. package/knowledge/decisions/internals/hot-reload-reads-the-changed-source-never-a-compiled-copy.md +0 -38
  450. package/knowledge/decisions/internals/hot-reload-writes-into-the-function-map-captured-at-startup.md +0 -26
  451. package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +0 -32
  452. package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +0 -28
  453. package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +0 -30
  454. package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +0 -26
  455. package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +0 -28
  456. package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +0 -32
  457. package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +0 -26
  458. package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +0 -25
  459. package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +0 -26
  460. package/knowledge/decisions/internals/index.md +0 -181
  461. package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +0 -25
  462. package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +0 -26
  463. package/knowledge/decisions/internals/mcp-wire-names-are-assigned-over-the-whole-registry.md +0 -39
  464. package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +0 -24
  465. package/knowledge/decisions/internals/one-project-shape-check-two-validators.md +0 -53
  466. package/knowledge/decisions/internals/only-exposed-functions-enter-a-virtual-user-catalogue.md +0 -21
  467. package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +0 -28
  468. package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +0 -27
  469. package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +0 -31
  470. package/knowledge/decisions/internals/role-names-cannot-contain-the-scope-separator.md +0 -30
  471. package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +0 -32
  472. package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +0 -31
  473. package/knowledge/decisions/internals/scenario-given-and-when-are-sugar-but-then-is-not.md +0 -24
  474. package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +0 -26
  475. package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +0 -27
  476. package/knowledge/decisions/internals/scenarios-live-in-files-named-for-them.md +0 -48
  477. package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +0 -30
  478. package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +0 -28
  479. package/knowledge/decisions/internals/side-effects-are-an-allowlist-not-a-boolean.md +0 -34
  480. package/knowledge/decisions/internals/speech-synthesis-picks-a-voice-per-sentence-and-warns-once.md +0 -24
  481. package/knowledge/decisions/internals/the-agent-done-event-goes-through-the-middleware-and-is-awaited.md +0 -26
  482. package/knowledge/decisions/internals/the-api-report-pins-members-not-just-names.md +0 -43
  483. package/knowledge/decisions/internals/the-core-scope-validator-refuses-separator-wildcard-and-empty-segments.md +0 -22
  484. package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +0 -30
  485. package/knowledge/decisions/internals/the-ecosystem-entry-point-carries-the-adapter-surface.md +0 -83
  486. package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +0 -29
  487. package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +0 -27
  488. package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +0 -40
  489. package/knowledge/decisions/internals/the-mcp-handshake-is-challenged-only-when-every-target-is-gated.md +0 -29
  490. package/knowledge/decisions/internals/the-middleware-resolution-cache-is-deliberately-unbounded.md +0 -40
  491. package/knowledge/decisions/internals/the-per-invocation-rpc-view-is-a-class.md +0 -40
  492. package/knowledge/decisions/internals/the-pikku-user-id-resolves-in-a-fixed-order.md +0 -24
  493. package/knowledge/decisions/internals/the-runner-resolves-wire-services-itself.md +0 -31
  494. package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +0 -26
  495. package/knowledge/decisions/internals/the-transcript-event-is-sent-ahead-of-the-run.md +0 -25
  496. package/knowledge/decisions/internals/the-virtual-user-catalogue-is-the-only-gate-on-what-may-be-called.md +0 -21
  497. package/knowledge/decisions/internals/the-virtual-user-prompt-says-json-because-of-json-object-mode.md +0 -22
  498. package/knowledge/decisions/internals/the-virtual-user-runtime-is-exported-from-the-virtual-user-entry-point.md +0 -28
  499. package/knowledge/decisions/internals/the-worker-disposition-is-the-one-that-is-not-testing.md +0 -22
  500. package/knowledge/decisions/internals/thread-history-records-the-transcript-not-the-audio.md +0 -25
  501. package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +0 -33
  502. package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +0 -26
  503. package/knowledge/decisions/internals/validate-checks-virtual-users-through-a-shared-module.md +0 -43
  504. package/knowledge/decisions/internals/validate-runs-checks-by-precondition.md +0 -115
  505. package/knowledge/decisions/internals/virtual-user-conversation-drives-the-target-through-a-transport-seam.md +0 -24
  506. package/knowledge/decisions/internals/virtual-user-conversation-verdicts-are-llm-self-evaluations.md +0 -25
  507. package/knowledge/decisions/internals/virtual-user-conversations-seed-a-hidden-kickoff-message.md +0 -23
  508. package/knowledge/decisions/internals/virtual-user-step-order-comes-from-insertion-order.md +0 -21
  509. package/knowledge/decisions/internals/virtual-users-are-declared-in-one-definevirtualusers-call-per-codebase.md +0 -30
  510. package/knowledge/decisions/internals/voice-output-speaks-unless-voice-input-explicitly-says-otherwise.md +0 -24
  511. package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +0 -26
  512. package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +0 -25
  513. package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +0 -58
  514. package/knowledge/decisions/internals/wiring-registries-erase-the-generics-their-wire-functions-capture.md +0 -35
  515. package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +0 -34
  516. package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +0 -42
  517. package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +0 -38
  518. package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +0 -29
  519. package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +0 -42
  520. package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +0 -25
  521. package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +0 -29
  522. package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +0 -43
  523. package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +0 -29
  524. package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +0 -42
  525. package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +0 -33
  526. package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +0 -32
  527. package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +0 -31
  528. package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +0 -39
  529. package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +0 -29
  530. package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +0 -33
  531. package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +0 -37
  532. package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +0 -54
  533. package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +0 -43
  534. package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +0 -32
  535. package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +0 -18
  536. package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +0 -34
  537. package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +0 -29
  538. package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +0 -33
  539. package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +0 -34
  540. package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +0 -34
  541. package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +0 -38
  542. package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +0 -30
  543. package/knowledge/decisions/security/a-bearer-token-checked-against-a-secret-reads-it-per-request.md +0 -26
  544. package/knowledge/decisions/security/a-call-without-a-session-raises-missing-session-not-forbidden.md +0 -20
  545. package/knowledge/decisions/security/a-caller-cookie-wins-over-the-jar-for-the-same-name.md +0 -23
  546. package/knowledge/decisions/security/a-channel-lifecycle-acts-as-the-socket-upgrade-session.md +0 -16
  547. package/knowledge/decisions/security/a-channel-requires-a-session-unless-it-says-auth-false.md +0 -26
  548. package/knowledge/decisions/security/a-credential-read-path-follows-its-declared-type-not-absence.md +0 -32
  549. package/knowledge/decisions/security/a-credential-type-is-a-literal-the-inspector-checks-at-declaration.md +0 -27
  550. package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +0 -28
  551. package/knowledge/decisions/security/a-first-party-cookie-is-written-only-after-its-purposes-consent.md +0 -33
  552. package/knowledge/decisions/security/a-function-never-receives-the-secret-service.md +0 -37
  553. package/knowledge/decisions/security/a-graph-run-starts-at-an-entry-node-the-graph-declared.md +0 -33
  554. package/knowledge/decisions/security/a-permission-gets-a-wire-it-cannot-reply-on.md +0 -33
  555. package/knowledge/decisions/security/a-public-function-says-so-with-auth-false.md +0 -34
  556. package/knowledge/decisions/security/a-readonly-session-reaches-only-readonly-functions.md +0 -25
  557. package/knowledge/decisions/security/a-scaffold-flag-says-a-surface-exists-not-who-may-call-it.md +0 -52
  558. package/knowledge/decisions/security/a-scheduled-virtual-user-run-needs-no-admin-at-run-time.md +0 -27
  559. package/knowledge/decisions/security/a-scoped-credential-view-is-limited-to-declared-names.md +0 -26
  560. package/knowledge/decisions/security/a-scoped-secret-view-reads-only-declared-keys-and-never-writes.md +0 -25
  561. package/knowledge/decisions/security/a-secret-is-sent-only-to-the-hosts-it-declares.md +0 -29
  562. package/knowledge/decisions/security/a-step-can-name-an-identity-no-virtual-user-holds-through-per-call-headers.md +0 -25
  563. package/knowledge/decisions/security/a-step-runs-the-function-the-workflow-dispatched-it-with.md +0 -37
  564. package/knowledge/decisions/security/a-stopped-run-by-id-skips-the-ownership-check.md +0 -24
  565. package/knowledge/decisions/security/a-vault-secret-redacts-on-serialization-and-throws-on-coercion.md +0 -29
  566. package/knowledge/decisions/security/a-virtual-user-catalogue-entry-is-filtered-by-scope-and-approval-is-denied-by-default.md +0 -30
  567. package/knowledge/decisions/security/a-virtual-user-environment-fails-closed.md +0 -38
  568. package/knowledge/decisions/security/a-virtual-user-is-never-offered-a-step-that-would-forge-its-own-oracle.md +0 -27
  569. package/knowledge/decisions/security/a-virtual-user-never-runs-against-production.md +0 -23
  570. package/knowledge/decisions/security/a-virtual-user-reads-its-roles-from-the-apps-own-rpc-before-better-auth.md +0 -27
  571. package/knowledge/decisions/security/a-virtual-user-run-treats-an-unresolved-environment-as-production.md +0 -41
  572. package/knowledge/decisions/security/a-virtual-user-scopes-are-expanded-from-its-roles-once-at-run-preparation.md +0 -25
  573. package/knowledge/decisions/security/a-virtual-user-whose-roles-drift-from-the-declaration-refuses-to-run.md +0 -32
  574. package/knowledge/decisions/security/a-workflow-run-is-read-and-approved-by-its-owner.md +0 -50
  575. package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +0 -43
  576. package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +0 -52
  577. package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +0 -46
  578. package/knowledge/decisions/security/addon-screen-scopes-hide-and-do-not-enforce.md +0 -20
  579. package/knowledge/decisions/security/agent-approval-forwarding-requires-a-symbol-brand.md +0 -27
  580. package/knowledge/decisions/security/agent-credential-requests-are-symbol-branded.md +0 -37
  581. package/knowledge/decisions/security/agent-gate-requires-a-session-only-when-auth-is-true.md +0 -31
  582. package/knowledge/decisions/security/agent-ownership-failures-never-echo-the-resource.md +0 -23
  583. package/knowledge/decisions/security/agent-resume-re-runs-the-authorization-gate.md +0 -22
  584. package/knowledge/decisions/security/agent-sessionless-deployments-have-no-thread-ownership.md +0 -39
  585. package/knowledge/decisions/security/agent-thread-ownership-composes-the-session-principal.md +0 -30
  586. package/knowledge/decisions/security/agent-tool-filtering-reads-the-live-function-config.md +0 -24
  587. package/knowledge/decisions/security/an-addon-header-can-only-narrow-the-session.md +0 -26
  588. package/knowledge/decisions/security/an-addon-instance-reads-only-the-secrets-and-credentials-it-is-named.md +0 -33
  589. package/knowledge/decisions/security/an-addon-may-reach-only-itself-and-the-addons-it-uses.md +0 -16
  590. package/knowledge/decisions/security/an-agent-approval-is-claimed-before-the-tool-runs.md +0 -33
  591. package/knowledge/decisions/security/an-api-key-is-jwt-decoded-into-the-session.md +0 -26
  592. package/knowledge/decisions/security/an-approval-answer-outlives-the-run-it-answered.md +0 -59
  593. package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +0 -30
  594. package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +0 -52
  595. package/knowledge/decisions/security/an-external-virtual-user-caller-presents-one-signed-statement.md +0 -38
  596. package/knowledge/decisions/security/an-inbound-webhook-source-dispatches-only-verified-requests.md +0 -31
  597. package/knowledge/decisions/security/an-mcp-call-with-no-http-request-stays-anonymous.md +0 -18
  598. package/knowledge/decisions/security/an-mcp-refusal-is-decided-before-dispatch.md +0 -48
  599. package/knowledge/decisions/security/an-oauth2-credential-is-read-by-its-account-row.md +0 -40
  600. package/knowledge/decisions/security/an-omitted-user-id-addresses-the-platform-credential.md +0 -32
  601. package/knowledge/decisions/security/an-upload-is-counted-as-it-arrives-not-buffered-then-measured.md +0 -24
  602. package/knowledge/decisions/security/analytics-identity-is-stamped-from-the-session-not-the-event.md +0 -24
  603. package/knowledge/decisions/security/app-access-is-a-scope-tree-synthesised-from-virtual-users.md +0 -26
  604. package/knowledge/decisions/security/approval-policy-decides-who-answers-a-tool-call.md +0 -27
  605. package/knowledge/decisions/security/auth-false-on-a-session-function-warns-and-still-requires-one.md +0 -25
  606. package/knowledge/decisions/security/bearer-token-hashes-are-unpeppered-sha256.md +0 -18
  607. package/knowledge/decisions/security/consent-is-read-from-a-cookie-and-a-recognised-denial-counts-as-refusal.md +0 -29
  608. package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +0 -84
  609. package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +0 -39
  610. package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +0 -37
  611. package/knowledge/decisions/security/cors-defaults-to-any-origin-and-refuses-the-wildcard-with-credentials.md +0 -22
  612. package/knowledge/decisions/security/credential-backends-share-one-conformance-suite-for-per-user-isolation.md +0 -29
  613. package/knowledge/decisions/security/each-stage-has-one-virtual-user-key-pair.md +0 -27
  614. package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +0 -41
  615. package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +0 -30
  616. package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +0 -40
  617. package/knowledge/decisions/security/hmac-verification-fails-closed-on-empty-inputs.md +0 -25
  618. package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +0 -33
  619. package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +0 -46
  620. package/knowledge/decisions/security/index.md +0 -135
  621. package/knowledge/decisions/security/local-content-refuses-private-buckets-under-the-public-segment.md +0 -21
  622. package/knowledge/decisions/security/mail-is-allowlisted-before-a-virtual-user-run-sees-it.md +0 -38
  623. package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +0 -27
  624. package/knowledge/decisions/security/mcp-resources-tools-and-prompts-take-sessionless-functions.md +0 -18
  625. package/knowledge/decisions/security/origin-locked-routes-match-the-origin-exactly.md +0 -22
  626. package/knowledge/decisions/security/oss-auth-works-without-pikku-studio-cloud.md +0 -26
  627. package/knowledge/decisions/security/outbound-webhooks-use-an-allowlist-when-configured.md +0 -24
  628. package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +0 -40
  629. package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +0 -31
  630. package/knowledge/decisions/security/pikku-carries-virtual-user-scopes-as-data-and-the-app-grants-them.md +0 -35
  631. package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +0 -69
  632. package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +0 -39
  633. package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +0 -34
  634. package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +0 -55
  635. package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +0 -30
  636. package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +0 -28
  637. package/knowledge/decisions/security/scoped-content-access-is-a-root-folder-with-longest-prefix-grants.md +0 -31
  638. package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +0 -34
  639. package/knowledge/decisions/security/services-without-secrets-get-a-throwing-secrets-accessor.md +0 -22
  640. package/knowledge/decisions/security/shared-guards-refuse-to-mutate-or-shadow-a-system-role.md +0 -34
  641. package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +0 -37
  642. package/knowledge/decisions/security/signed-uploads-are-verified-by-the-same-check-as-signed-reads.md +0 -26
  643. package/knowledge/decisions/security/system-role-scopes-must-be-declared-with-define-scope.md +0 -24
  644. package/knowledge/decisions/security/system-roles-are-additive-and-immutable.md +0 -16
  645. package/knowledge/decisions/security/the-channel-rpc-does-not-send-the-callers-session.md +0 -21
  646. package/knowledge/decisions/security/the-remote-jobs-inbox-fails-closed-without-a-secret.md +0 -24
  647. package/knowledge/decisions/security/the-remote-rpc-gate-fails-closed-and-binds-the-token-to-its-function.md +0 -34
  648. package/knowledge/decisions/security/the-workflow-status-stream-rechecks-ownership-on-every-poll.md +0 -16
  649. package/knowledge/decisions/security/two-credentials-on-one-key-must-share-a-read-mode.md +0 -29
  650. package/knowledge/decisions/security/verified-bearer-claims-are-pass-through-data-that-core-never-fills.md +0 -23
  651. package/knowledge/decisions/security/virtual-user-catalogue-excludes-the-machinery-that-runs-virtual-users.md +0 -25
  652. package/knowledge/decisions/security/virtual-user-conversation-missing-approval-decisions-default-to-denied.md +0 -22
  653. package/knowledge/decisions/security/virtual-user-run-records-are-gated-behind-a-read-scope.md +0 -18
  654. package/knowledge/decisions/security/virtual-user-sign-in-does-not-exist-in-production.md +0 -25
  655. package/knowledge/decisions/security/virtual-user-sign-in-has-one-door.md +0 -42
  656. package/knowledge/decisions/security/virtual-user-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +0 -29
  657. package/knowledge/decisions/security/virtual-user-sign-in-only-works-for-virtual-user-flagged-users.md +0 -29
  658. package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +0 -25
  659. package/knowledge/decisions/security/wire-addon-expose-selects-the-rpc-surface.md +0 -51
  660. package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +0 -40
  661. package/knowledge/decisions/security/workflow-helper-functions-are-sessionless-by-declaration.md +0 -18
  662. package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +0 -32
  663. package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-virtual-user-and-per-scenario.md +0 -32
  664. package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +0 -31
  665. package/knowledge/decisions/security/workflow-virtual-user-steps-always-use-the-real-transport.md +0 -34
  666. package/knowledge/decisions/security/writing-a-virtual-user-schedule-is-gated-by-its-own-scope.md +0 -18
  667. package/knowledge/index.md +0 -24
  668. package/knowledge/questions/a-bearer-jwt-with-no-identity-becomes-a-session.md +0 -24
  669. package/knowledge/questions/channel-middleware-accepts-bare-factories-that-nothing-resolves.md +0 -35
  670. package/knowledge/questions/dev-quick-login-as-impersonation.md +0 -25
  671. package/knowledge/questions/does-a-delayed-rpc-run-as-the-session-it-was-scheduled-with.md +0 -26
  672. package/knowledge/questions/does-a-user-id-with-a-colon-read-another-users-credentials.md +0 -27
  673. package/knowledge/questions/does-a-wirecli-command-need-a-session-by-default.md +0 -26
  674. package/knowledge/questions/does-an-adversarial-in-scope-success-count-as-a-finding.md +0 -26
  675. package/knowledge/questions/does-approve-step-need-the-run-owners-session-or-the-gates-approvers.md +0 -34
  676. package/knowledge/questions/does-cors-origin-true-reflect-any-origin-with-credentials.md +0 -20
  677. package/knowledge/questions/does-skip-user-session-do-anything-on-a-channel.md +0 -24
  678. package/knowledge/questions/does-the-store-session-match-the-other-two.md +0 -19
  679. package/knowledge/questions/index.md +0 -41
  680. package/knowledge/questions/is-the-agent-score-worker-reachable-without-a-session.md +0 -21
  681. package/knowledge/questions/live-scheduled-tests-may-write.md +0 -19
  682. package/knowledge/questions/provision-virtual-users-has-no-caller-in-this-repo.md +0 -23
  683. package/knowledge/questions/remote-secret-refuses-requests-without-a-remote-token-on-every-path.md +0 -32
  684. package/knowledge/questions/should-a-middleware-set-session-persist-to-the-store.md +0 -25
  685. package/knowledge/questions/should-a-scoped-secret-view-throw-from-has-secret-for-a-disallowed-key.md +0 -23
  686. package/knowledge/questions/should-a-wrong-bearer-token-be-anonymous-or-refused.md +0 -35
  687. package/knowledge/questions/should-an-empty-webhook-signing-secret-send-unsigned.md +0 -23
  688. package/knowledge/questions/should-http-virtual-user-sessions-reset-between-scenarios-in-one-run.md +0 -27
  689. package/knowledge/questions/should-the-cookie-jar-scope-cookies-to-the-api-origin.md +0 -26
  690. package/knowledge/questions/should-voice-input-fetch-audio-urls-without-a-host-allowlist.md +0 -20
  691. package/knowledge/questions/staging-impersonation-rules.md +0 -27
  692. package/knowledge/questions/unauthorized-channel-replies-escape-the-declared-out-type.md +0 -44
  693. package/knowledge/questions/virtual-user-keys-on-cloud-stages-are-pikku-studios-to-build.md +0 -34
  694. package/knowledge/questions/virtual-user-statement-replay-is-per-process.md +0 -20
  695. package/knowledge/questions/what-an-impersonated-session-carries.md +0 -22
  696. package/run-tests.sh +0 -68
  697. package/scripts/generate-api-report.d.mts +0 -1
  698. package/scripts/generate-api-report.mjs +0 -96
  699. package/scripts/generate-api-report.mts +0 -333
  700. package/src/public-surface.json +0 -637
  701. package/src/public-surface.json.README +0 -43
  702. /package/dist/{function/compensation-name.d.ts → compensation-name.d.ts} +0 -0
  703. /package/dist/{function/compensation-name.js → compensation-name.js} +0 -0
@@ -1,4 +1,10 @@
1
1
  import type { SecretlessServices } from '../types/core.types.js';
2
+ /**
3
+ * Thrown when code that may not read secrets (a function body, a permission)
4
+ * touches `services.secrets`. Secrets are read only in service factories and
5
+ * middleware; give the service that needs a secret the value when you construct
6
+ * it.
7
+ */
2
8
  export declare class SecretAccessDeniedError extends Error {
3
9
  constructor(context: string);
4
10
  }
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Thrown when code that may not read secrets (a function body, a permission)
3
+ * touches `services.secrets`. Secrets are read only in service factories and
4
+ * middleware; give the service that needs a secret the value when you construct
5
+ * it.
6
+ */
1
7
  export class SecretAccessDeniedError extends Error {
2
8
  constructor(context) {
3
9
  super(`'secrets' is not available inside ${context}. SecretService is confined to pikkuServices, pikkuWireServices, addon service factories and middleware — give a service the secret when you construct it and ask that service here.`);
@@ -1,4 +1,9 @@
1
1
  import type { CoreUserSession } from '../types/core.types.js';
2
+ /**
3
+ * Keeps sessions server-side, keyed by pikku user id. When provided as the
4
+ * `sessionStore` singleton service, a request without a session gets the stored
5
+ * one, and `setSession`/`clearSession` write through to it.
6
+ */
2
7
  export interface SessionStore<UserSession extends CoreUserSession = CoreUserSession> {
3
8
  get(pikkuUserId: string): Promise<UserSession | undefined>;
4
9
  set(pikkuUserId: string, session: UserSession): Promise<void>;
@@ -1,3 +1,4 @@
1
+ /** One recorded call on a stubbed service. */
1
2
  export type StubCall = {
2
3
  service: string;
3
4
  method: string;
@@ -1,4 +1,9 @@
1
1
  import type { Logger } from './logger.js';
2
+ /**
3
+ * Scratch files for one unit of work, kept under a temporary directory.
4
+ * `cleanup` deletes every file this instance wrote. Keys are joined to the
5
+ * directory as given, so do not pass untrusted keys.
6
+ */
2
7
  export declare class TemporaryFileInstance {
3
8
  private logger;
4
9
  private tempDir;
@@ -12,6 +17,10 @@ export declare class TemporaryFileInstance {
12
17
  private createDir;
13
18
  cleanup(): Promise<void>;
14
19
  }
20
+ /**
21
+ * Creates a {@link TemporaryFileInstance} per unit of work, all under one
22
+ * temporary directory.
23
+ */
15
24
  export declare class TemporaryFileService {
16
25
  private logger;
17
26
  private tempDir;
@@ -2,6 +2,11 @@ import { createReadStream, createWriteStream } from 'fs';
2
2
  import { mkdir, rm, stat } from 'fs/promises';
3
3
  import { resolve } from 'path';
4
4
  import { pipeline } from 'stream/promises';
5
+ /**
6
+ * Scratch files for one unit of work, kept under a temporary directory.
7
+ * `cleanup` deletes every file this instance wrote. Keys are joined to the
8
+ * directory as given, so do not pass untrusted keys.
9
+ */
5
10
  export class TemporaryFileInstance {
6
11
  logger;
7
12
  tempDir;
@@ -49,6 +54,10 @@ export class TemporaryFileInstance {
49
54
  await Promise.all(this.files.map((file) => rm(file)));
50
55
  }
51
56
  }
57
+ /**
58
+ * Creates a {@link TemporaryFileInstance} per unit of work, all under one
59
+ * temporary directory.
60
+ */
52
61
  export class TemporaryFileService {
53
62
  logger;
54
63
  tempDir;
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Starts and stops the trigger subscriptions registered with `wireTrigger`, so
3
+ * their target functions run when the source fires.
4
+ */
1
5
  export interface TriggerService {
2
6
  start(): Promise<void>;
3
7
  stop(): Promise<void>;
@@ -1,5 +1,10 @@
1
1
  import type { WebhookSourceState } from '../wirings/trigger/webhook-source.types.js';
2
+ /** The kinds of trigger source a provider can be registered for. */
2
3
  export type TriggerSourceKind = 'webhook';
4
+ /**
5
+ * A trigger source as declared in code, before anything is registered with its
6
+ * provider.
7
+ */
3
8
  export type DeclaredTriggerSource = {
4
9
  name: string;
5
10
  kind: TriggerSourceKind;
@@ -25,6 +30,7 @@ export type TriggerSourceRow = Required<Pick<DeclaredTriggerSource, 'name' | 'ki
25
30
  detail: string | null;
26
31
  updatedAt: string | null;
27
32
  };
33
+ /** The outcome of a setup or teardown step for a trigger source. */
28
34
  export type TriggerSourceResult = {
29
35
  status: string;
30
36
  state?: WebhookSourceState | null;
@@ -40,6 +46,13 @@ export interface TriggerSourceStore {
40
46
  setTriggerSourceEnabled(name: string, enabled: boolean): Promise<void>;
41
47
  deleteTriggerSource(name: string): Promise<void>;
42
48
  }
49
+ /**
50
+ * A {@link TriggerSourceStore} held in process memory, for development and
51
+ * tests. Registrations are lost on restart.
52
+ *
53
+ * @throws Error from `recordTriggerSource` and `setTriggerSourceEnabled` when
54
+ * the source is unknown
55
+ */
43
56
  export declare class InMemoryTriggerSourceStore implements TriggerSourceStore {
44
57
  private rows;
45
58
  syncTriggerSources(sources: DeclaredTriggerSource[]): Promise<void>;
@@ -1,3 +1,10 @@
1
+ /**
2
+ * A {@link TriggerSourceStore} held in process memory, for development and
3
+ * tests. Registrations are lost on restart.
4
+ *
5
+ * @throws Error from `recordTriggerSource` and `setTriggerSourceEnabled` when
6
+ * the source is unknown
7
+ */
1
8
  export class InMemoryTriggerSourceStore {
2
9
  rows = new Map();
3
10
  async syncTriggerSources(sources) {
@@ -6,12 +6,18 @@ export interface CredentialStatusInfo {
6
6
  type: 'singleton' | 'wire';
7
7
  oauth2?: boolean;
8
8
  }
9
+ /** Generated metadata for one declared credential. */
9
10
  export type CredentialMetaInfo = {
10
11
  name: string;
11
12
  displayName: string;
12
13
  type: 'singleton' | 'wire';
13
14
  oauth2?: boolean;
14
15
  };
16
+ /**
17
+ * Wraps a `CredentialService` with the credential types generated from your
18
+ * `defineCredential` declarations, and reports which declared credentials are
19
+ * configured. Calls pass through unchanged.
20
+ */
15
21
  export declare class TypedCredentialService<TMap = Record<string, unknown>> implements CredentialService {
16
22
  private credentials;
17
23
  private credentialsMeta;
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Wraps a `CredentialService` with the credential types generated from your
3
+ * `defineCredential` declarations, and reports which declared credentials are
4
+ * configured. Calls pass through unchanged.
5
+ */
1
6
  export class TypedCredentialService {
2
7
  credentials;
3
8
  credentialsMeta;
@@ -19,6 +19,7 @@ export interface CredentialStatus {
19
19
  tokenSecretId: string;
20
20
  };
21
21
  }
22
+ /** Generated metadata for one declared secret. */
22
23
  export type CredentialMeta = {
23
24
  name: string;
24
25
  displayName: string;
@@ -32,6 +33,17 @@ export type CredentialMeta = {
32
33
  tokenSecretId: string;
33
34
  };
34
35
  };
36
+ /**
37
+ * Wraps a {@link SecretService} with the secret types generated from your
38
+ * `defineSecret` declarations. An `optional` secret that is not set resolves to
39
+ * `undefined` instead of throwing.
40
+ *
41
+ * Values are cached for the life of the process (writes and deletes through
42
+ * this wrapper clear the key), so a secret rotated in the store is not seen
43
+ * until restart.
44
+ *
45
+ * @example snippet: shopServices
46
+ */
35
47
  export declare class TypedSecretService<TMap = Record<string, unknown>> implements SecretService {
36
48
  private secrets;
37
49
  private credentialsMeta;
@@ -1,3 +1,14 @@
1
+ /**
2
+ * Wraps a {@link SecretService} with the secret types generated from your
3
+ * `defineSecret` declarations. An `optional` secret that is not set resolves to
4
+ * `undefined` instead of throwing.
5
+ *
6
+ * Values are cached for the life of the process (writes and deletes through
7
+ * this wrapper clear the key), so a secret rotated in the store is not seen
8
+ * until restart.
9
+ *
10
+ * @example snippet: shopServices
11
+ */
1
12
  export class TypedSecretService {
2
13
  secrets;
3
14
  credentialsMeta;
@@ -8,6 +8,7 @@ export interface VariableStatus {
8
8
  /** Whether the declaration answers for itself when the host sets nothing. */
9
9
  hasDefault: boolean;
10
10
  }
11
+ /** Generated metadata for one declared variable. */
11
12
  export type VariableMeta = {
12
13
  name: string;
13
14
  displayName: string;
@@ -1,5 +1,11 @@
1
1
  import type { CoreUserSession } from '../types/core.types.js';
2
2
  import type { SessionStore } from './session-store.js';
3
+ /**
4
+ * Tracks the session during one invocation. Middleware sets the initial
5
+ * session; the function's view is frozen when it starts, and
6
+ * `setSession`/`clearSession` mark it changed so the transport (for example a
7
+ * cookie middleware) can write it back.
8
+ */
3
9
  export interface SessionService<UserSession extends CoreUserSession> {
4
10
  sessionChanged: boolean;
5
11
  initial: UserSession | undefined;
@@ -9,6 +15,10 @@ export interface SessionService<UserSession extends CoreUserSession> {
9
15
  clear(): Promise<void> | void;
10
16
  get(): UserSession | undefined;
11
17
  }
18
+ /**
19
+ * The default {@link SessionService}. Writes through to a {@link SessionStore}
20
+ * when one is configured and the pikku user id is known.
21
+ */
12
22
  export declare class PikkuSessionService<UserSession extends CoreUserSession> implements SessionService<UserSession> {
13
23
  private sessionStore?;
14
24
  sessionChanged: boolean;
@@ -24,15 +34,35 @@ export declare class PikkuSessionService<UserSession extends CoreUserSession> im
24
34
  clear(): Promise<void>;
25
35
  get(): UserSession | undefined;
26
36
  }
37
+ /**
38
+ * The session accessors a transport puts on the wire before middleware runs.
39
+ * `setSession` and `clearSession` mean the same here as in a function body:
40
+ * they mark the session changed (so `authCookie` re-issues the cookie) and
41
+ * write the session store. `setInitialSession` is the request-scoped one, for
42
+ * middleware that establishes who the caller is from a credential it was
43
+ * handed.
44
+ * Runtime adapters that run middleware outside the HTTP runner (such as the
45
+ * Next.js one) build it with this.
46
+ */
27
47
  export declare function createMiddlewareSessionWireProps<UserSession extends CoreUserSession>(session: SessionService<UserSession>): {
28
48
  session: UserSession | undefined;
29
- setSession: (s: UserSession) => void;
49
+ setSession: (s: UserSession) => void | Promise<void>;
50
+ setInitialSession: (s: UserSession) => void;
51
+ clearSession: () => void | Promise<void>;
30
52
  getSession: () => UserSession | undefined;
31
53
  hasSessionChanged: () => boolean;
32
54
  };
33
55
  export declare function createFunctionSessionWireProps<UserSession extends CoreUserSession>(session: SessionService<UserSession>): {
34
56
  session: UserSession | undefined;
35
57
  setSession: (s: UserSession) => void | Promise<void>;
58
+ setInitialSession: (s: UserSession) => void;
59
+ clearSession: () => void | Promise<void>;
60
+ getSession: () => UserSession | undefined;
61
+ hasSessionChanged: () => boolean;
62
+ };
63
+ export declare function createSessionAccessors<UserSession extends CoreUserSession>(session: SessionService<UserSession>): {
64
+ setSession: (s: UserSession) => void | Promise<void>;
65
+ setInitialSession: (s: UserSession) => void;
36
66
  clearSession: () => void | Promise<void>;
37
67
  getSession: () => UserSession | undefined;
38
68
  hasSessionChanged: () => boolean;
@@ -1,3 +1,7 @@
1
+ /**
2
+ * The default {@link SessionService}. Writes through to a {@link SessionStore}
3
+ * when one is configured and the pikku user id is known.
4
+ */
1
5
  export class PikkuSessionService {
2
6
  sessionStore;
3
7
  sessionChanged = false;
@@ -25,6 +29,13 @@ export class PikkuSessionService {
25
29
  async set(session) {
26
30
  this.sessionChanged = true;
27
31
  this.session = session;
32
+ // A session set before anyone was resolved — the usual case for
33
+ // middleware or a login function signing someone in — is stored under its
34
+ // own user rather than not at all.
35
+ const userId = session?.userId;
36
+ if (this.pikkuUserId === undefined && typeof userId === 'string') {
37
+ this.pikkuUserId = userId;
38
+ }
28
39
  if (this.sessionStore && this.pikkuUserId) {
29
40
  await this.sessionStore.set(this.pikkuUserId, session);
30
41
  }
@@ -40,18 +51,33 @@ export class PikkuSessionService {
40
51
  return this.session;
41
52
  }
42
53
  }
54
+ // knowledge: decisions/security/set-session-persists-and-set-initial-session-does-not.md
55
+ /**
56
+ * The session accessors a transport puts on the wire before middleware runs.
57
+ * `setSession` and `clearSession` mean the same here as in a function body:
58
+ * they mark the session changed (so `authCookie` re-issues the cookie) and
59
+ * write the session store. `setInitialSession` is the request-scoped one, for
60
+ * middleware that establishes who the caller is from a credential it was
61
+ * handed.
62
+ * Runtime adapters that run middleware outside the HTTP runner (such as the
63
+ * Next.js one) build it with this.
64
+ */
43
65
  export function createMiddlewareSessionWireProps(session) {
44
66
  return {
45
67
  session: session.get(),
46
- setSession: (s) => session.setInitial(s),
47
- getSession: () => session.get(),
48
- hasSessionChanged: () => session.sessionChanged,
68
+ ...createSessionAccessors(session),
49
69
  };
50
70
  }
51
71
  export function createFunctionSessionWireProps(session) {
52
72
  return {
53
73
  session: session.freezeInitial(),
74
+ ...createSessionAccessors(session),
75
+ };
76
+ }
77
+ export function createSessionAccessors(session) {
78
+ return {
54
79
  setSession: (s) => session.set(s),
80
+ setInitialSession: (s) => session.setInitial(s),
55
81
  clearSession: () => session.clear(),
56
82
  getSession: () => session.get(),
57
83
  hasSessionChanged: () => session.sessionChanged,
@@ -1,19 +1,27 @@
1
+ /** A V8 coverage range: byte offsets in the script and how often it ran. */
1
2
  export interface CoverageRange {
2
3
  startOffset: number;
3
4
  endOffset: number;
4
5
  count: number;
5
6
  }
7
+ /** V8 coverage for one function in a script. */
6
8
  export interface FunctionCoverage {
7
9
  functionName: string;
8
10
  isBlockCoverage: boolean;
9
11
  ranges: CoverageRange[];
10
12
  }
13
+ /** V8 coverage for one loaded script. */
11
14
  export interface ScriptCoverage {
12
15
  scriptId: string;
13
16
  url: string;
14
17
  functions: FunctionCoverage[];
15
18
  }
19
+ /** Hit counts per line, keyed by file then line number. */
16
20
  export type LineHits = Map<string, Map<number, number>>;
21
+ /**
22
+ * Coverage collected so far: raw V8 script coverage, or line hits from an
23
+ * instrumented build.
24
+ */
17
25
  export type CoverageSnapshot = {
18
26
  kind: 'v8-scripts';
19
27
  scripts: ScriptCoverage[];
@@ -22,7 +30,12 @@ export type CoverageSnapshot = {
22
30
  kind: 'line-hits';
23
31
  lineHits: LineHits;
24
32
  };
33
+ /**
34
+ * Whether a function's lines all ran, some ran, none ran, or its source could
35
+ * not be mapped.
36
+ */
25
37
  export type CoverageStatus = 'covered' | 'partial' | 'uncovered' | 'unknown';
38
+ /** Line coverage for one pikku function. */
26
39
  export interface FunctionCoverageEntry {
27
40
  name: string;
28
41
  sourceFile: string;
@@ -34,6 +47,7 @@ export interface FunctionCoverageEntry {
34
47
  ratio: number;
35
48
  status: CoverageStatus;
36
49
  }
50
+ /** Line coverage per pikku function, with totals. */
37
51
  export interface FunctionCoverageReport {
38
52
  generatedAt: string;
39
53
  summary: {
@@ -46,6 +60,9 @@ export interface FunctionCoverageReport {
46
60
  };
47
61
  functions: FunctionCoverageEntry[];
48
62
  }
63
+ /**
64
+ * Where a pikku function's body is in its source, for mapping coverage onto it.
65
+ */
49
66
  export interface CoverageFunctionMeta {
50
67
  name: string;
51
68
  sourceFile: string;
@@ -57,6 +74,11 @@ export interface CoverageFunctionMeta {
57
74
  bodyEnd?: number;
58
75
  funcWrapper?: string;
59
76
  }
77
+ /**
78
+ * Collects code coverage from a running app, so a scenario run can report which
79
+ * functions it exercised. Provided as the `coverageService` singleton service
80
+ * during development and test runs.
81
+ */
60
82
  export interface CoverageService {
61
83
  start(): Promise<void>;
62
84
  takeCoverage(): Promise<CoverageSnapshot>;
@@ -66,6 +88,11 @@ export interface CoverageService {
66
88
  reset(): Promise<void>;
67
89
  stop(): Promise<void>;
68
90
  }
91
+ /**
92
+ * A {@link CoverageService} that collects precise coverage from the V8
93
+ * inspector in the current Node process. Only `file://` scripts are reported.
94
+ * Not for production: precise coverage slows execution.
95
+ */
69
96
  export declare class V8CoverageService implements CoverageService {
70
97
  private session;
71
98
  private startPromise;
@@ -1,3 +1,8 @@
1
+ /**
2
+ * A {@link CoverageService} that collects precise coverage from the V8
3
+ * inspector in the current Node process. Only `file://` scripts are reported.
4
+ * Not for production: precise coverage slows execution.
5
+ */
1
6
  export class V8CoverageService {
2
7
  session = null;
3
8
  startPromise = null;
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Reads and writes non-secret configuration, provided as the `variables`
3
+ * singleton service ({@link LocalVariablesService} reads `process.env`). Use
4
+ * {@link SecretService} for anything sensitive: variables are plain values and
5
+ * are not redacted from logs.
6
+ *
7
+ * @example snippet: shopServices
8
+ */
1
9
  export interface VariablesService {
2
10
  get<T = string>(name: string): Promise<T | undefined> | T | undefined;
3
11
  /** Same contract as `SecretService.getSecrets`: missing keys are omitted, hence `Partial<T>`. */
@@ -26,6 +26,7 @@ export interface VirtualUserSignIn {
26
26
  export declare const authMount: (signInPath?: string) => string | undefined;
27
27
  /** Signs one statement naming `virtualUser`, for an audience the signer knows. */
28
28
  export type VirtualUserStatementMint = (virtualUser: ResolvedVirtualUser) => string | Promise<string>;
29
+ /** Options for {@link statementSignIn}. */
29
30
  export interface StatementSignInOptions {
30
31
  apiUrl: string;
31
32
  /** Default `/auth/sign-in/virtual-user`. */
@@ -16,6 +16,10 @@ export declare const VIRTUAL_USER_VERIFY_KEY_VARIABLE = "VIRTUAL_USER_VERIFY_KEY
16
16
  export declare const VIRTUAL_USER_SIGNING_KEY_VARIABLE = "VIRTUAL_USER_SIGNING_KEY";
17
17
  /** The key a run reaches the in-process sign-in under, on `auth.api`. */
18
18
  export declare const VIRTUAL_USER_IN_PROCESS_ENDPOINT = "signInVirtualUserInternal";
19
+ /**
20
+ * Verifies the signed statement a virtual user presents to sign in to a
21
+ * deployed stage.
22
+ */
19
23
  export interface VirtualUserStatementVerifier {
20
24
  /**
21
25
  * Resolves to the virtual user the statement names. Throws
@@ -26,6 +30,10 @@ export interface VirtualUserStatementVerifier {
26
30
  virtualUserId: string;
27
31
  }>;
28
32
  }
33
+ /**
34
+ * Thrown when a virtual user's sign-in statement is not valid: badly signed,
35
+ * expired, replayed, or for another audience.
36
+ */
29
37
  export declare class VirtualUserStatementError extends Error {
30
38
  constructor(message: string);
31
39
  }
@@ -16,6 +16,10 @@ export const VIRTUAL_USER_VERIFY_KEY_VARIABLE = 'VIRTUAL_USER_VERIFY_KEY';
16
16
  export const VIRTUAL_USER_SIGNING_KEY_VARIABLE = 'VIRTUAL_USER_SIGNING_KEY';
17
17
  /** The key a run reaches the in-process sign-in under, on `auth.api`. */
18
18
  export const VIRTUAL_USER_IN_PROCESS_ENDPOINT = 'signInVirtualUserInternal';
19
+ /**
20
+ * Thrown when a virtual user's sign-in statement is not valid: badly signed,
21
+ * expired, replayed, or for another audience.
22
+ */
19
23
  export class VirtualUserStatementError extends Error {
20
24
  constructor(message) {
21
25
  super(message);
@@ -1,4 +1,5 @@
1
1
  import type { Safe } from '../classification/secret-value.js';
2
+ /** One outgoing webhook to send. */
2
3
  export interface SendWebhookInput {
3
4
  url: string;
4
5
  /** Sent as the `X-Pikku-Event` header. */
@@ -14,6 +15,7 @@ export interface SendWebhookInput {
14
15
  /** Persisted only by store-backed implementations; the queue-only default ignores it. */
15
16
  organizationId?: string;
16
17
  }
18
+ /** The queue job that will deliver the webhook. */
17
19
  export interface SendWebhookResult {
18
20
  jobId: string;
19
21
  /**
@@ -25,6 +27,10 @@ export interface SendWebhookResult {
25
27
  */
26
28
  deliveryId?: string;
27
29
  }
30
+ /**
31
+ * The `webhook` section of your config: signing secret, signature header, retry
32
+ * policy and the hosts webhooks may be sent to.
33
+ */
28
34
  export interface WebhookServiceConfig {
29
35
  retries?: number;
30
36
  /** Omitted means exponential backoff. */
@@ -38,6 +44,7 @@ export interface WebhookServiceConfig {
38
44
  */
39
45
  allowedHosts?: string[];
40
46
  }
47
+ /** A signed webhook as queued for delivery. */
41
48
  export interface WebhookJobData {
42
49
  url: string;
43
50
  event?: string;
@@ -49,6 +56,7 @@ export interface WebhookJobData {
49
56
  */
50
57
  deliveryId?: string;
51
58
  }
59
+ /** The outcome of one delivery attempt. */
52
60
  export interface WebhookAttemptResult {
53
61
  /** Absent when the request never completed. */
54
62
  statusCode?: number;
@@ -57,6 +65,7 @@ export interface WebhookAttemptResult {
57
65
  error?: string;
58
66
  delivered: boolean;
59
67
  }
68
+ /** A stored webhook delivery and its current status. */
60
69
  export interface WebhookDeliveryRecord {
61
70
  deliveryId: string;
62
71
  organizationId: string | null;
@@ -77,13 +86,29 @@ export interface WebhookAttemptRecord {
77
86
  error: string | null;
78
87
  createdAt: Date;
79
88
  }
89
+ /** A stored webhook delivery with every attempt made. */
80
90
  export interface WebhookDeliveryWithAttempts {
81
91
  delivery: WebhookDeliveryRecord;
82
92
  attempts: WebhookAttemptRecord[];
83
93
  }
94
+ /** The queue outgoing webhooks are delivered through. */
84
95
  export declare const PIKKU_OUTGOING_WEBHOOK_QUEUE_NAME = "pikku-outgoing-webhooks";
85
96
  export declare const DEFAULT_WEBHOOK_SIGNATURE_HEADER = "X-Pikku-Signature";
97
+ /**
98
+ * How many times a failed webhook delivery is retried when nothing else is
99
+ * configured.
100
+ */
86
101
  export declare const DEFAULT_WEBHOOK_RETRIES = 3;
102
+ /**
103
+ * Sends signed outgoing webhooks, provided as the `webhookService` singleton
104
+ * service ({@link QueueWebhookService} delivers through a queue). Bodies are
105
+ * signed with HMAC-SHA256 as `sha256=<hex>` in the signature header (default
106
+ * `X-Pikku-Signature`); receivers check it with {@link WebhookService.verify},
107
+ * which compares in constant time.
108
+ *
109
+ * The input is `Safe<>`-guarded, so a `SecretValue` cannot be sent in a
110
+ * payload. Delivery history is optional: the default keeps none.
111
+ */
87
112
  export declare abstract class WebhookService {
88
113
  abstract send<T extends SendWebhookInput>(input: Safe<T>): Promise<SendWebhookResult>;
89
114
  /** Produces the header value, `sha256=<hex>`, not the bare digest. */
@@ -1,8 +1,23 @@
1
1
  import { NotImplementedError } from '../errors/errors.js';
2
2
  import { hmacSha256Hex, timingSafeStringEqual } from '../utils/hmac.js';
3
+ /** The queue outgoing webhooks are delivered through. */
3
4
  export const PIKKU_OUTGOING_WEBHOOK_QUEUE_NAME = 'pikku-outgoing-webhooks';
4
5
  export const DEFAULT_WEBHOOK_SIGNATURE_HEADER = 'X-Pikku-Signature';
6
+ /**
7
+ * How many times a failed webhook delivery is retried when nothing else is
8
+ * configured.
9
+ */
5
10
  export const DEFAULT_WEBHOOK_RETRIES = 3;
11
+ /**
12
+ * Sends signed outgoing webhooks, provided as the `webhookService` singleton
13
+ * service ({@link QueueWebhookService} delivers through a queue). Bodies are
14
+ * signed with HMAC-SHA256 as `sha256=<hex>` in the signature header (default
15
+ * `X-Pikku-Signature`); receivers check it with {@link WebhookService.verify},
16
+ * which compares in constant time.
17
+ *
18
+ * The input is `Safe<>`-guarded, so a `SecretValue` cannot be sent in a
19
+ * payload. Delivery history is optional: the default keeps none.
20
+ */
6
21
  export class WebhookService {
7
22
  /** Produces the header value, `sha256=<hex>`, not the bare digest. */
8
23
  async sign(secret, body) {
@@ -2,6 +2,12 @@ import type { CoreUserSession } from '../types/core.types.js';
2
2
  import type { SerializedError } from '../errors/serialized-error.js';
3
3
  import type { WorkflowRun, WorkflowPlannedStep, WorkflowRunWire, WorkflowRunStatus, StepState, WorkflowStatus, WorkflowVersionStatus } from '../wirings/workflow/workflow.types.js';
4
4
  import type { RunTimeline, ReconstructedRunState } from '../wirings/workflow/run-timeline.js';
5
+ /**
6
+ * Stores and drives workflow runs, provided as the `workflowService` singleton
7
+ * service (implementations ship in `@pikku/kysely`, `@pikku/redis` and others,
8
+ * and an in-memory one in core). It records every step so a run can resume
9
+ * after a crash or a wait, and serialises work on one run through a lease.
10
+ */
5
11
  export interface WorkflowService {
6
12
  wireQueueWorkers?(): void;
7
13
  createRun(workflowName: string, input: any, inline: boolean, graphHash: string, wire: WorkflowRunWire, options?: {
@@ -1,7 +1,7 @@
1
1
  import { getAllPackageStates } from './pikku-state.js';
2
2
  import { clearMiddlewareCache } from './middleware-runner.js';
3
3
  import { clearPermissionsCache } from './permissions.js';
4
- import { clearChannelMiddlewareCache } from './wirings/channel/channel-middleware-runner.js';
4
+ import { clearChannelMiddlewareCache } from './channel-middleware-runner.js';
5
5
  /**
6
6
  * Clears all runtime caches between test scenarios without touching registered
7
7
  * routes, functions, or middleware groups (which are set at module load time
@@ -11,6 +11,10 @@ import type { AgentRunService } from '../wirings/agent/agent.types.js';
11
11
  import type { SessionStore } from '../services/session-store.js';
12
12
  import type { LeaseService } from '../services/lease-service.js';
13
13
  import type { WorkflowFencingHarness } from './service-tests/workflow-fencing-tests.js';
14
+ /**
15
+ * Input to {@link defineServiceTests}: a backend `name` for the suite titles and a
16
+ * factory per service the backend implements. Only the services supplied are tested.
17
+ */
14
18
  export interface ServiceTestConfig {
15
19
  name: string;
16
20
  services: {
@@ -1,10 +1,25 @@
1
1
  type TimeUnit = 'second' | 'minute' | 'hour' | 'day' | 'week' | 'year';
2
+ /** An amount of time in a unit; `value` is negative for the past. A year is 365.25 days. */
2
3
  export interface RelativeTimeInput {
3
4
  value: number;
4
5
  unit: TimeUnit;
5
6
  }
7
+ /** Converts a {@link RelativeTimeInput} to milliseconds, rounded to the whole second. */
6
8
  export declare const getRelativeTimeOffset: ({ value, unit, }: RelativeTimeInput) => number;
9
+ /** The `Date` that is `relativeTime` away from now. */
7
10
  export declare const getRelativeTimeOffsetFromNow: (relativeTime: RelativeTimeInput) => Date;
11
+ /**
12
+ * Normalises a duration to milliseconds: a number is taken as milliseconds already,
13
+ * a string is parsed by {@link parseDurationString}.
14
+ *
15
+ * @throws Error when the string is not a recognised duration.
16
+ */
8
17
  export declare const getDurationInMilliseconds: (duration: string | number) => number;
18
+ /**
19
+ * Parses a duration such as `'500ms'`, `'5s'`, `'10min'`, `'1hour'`, `'2days'`,
20
+ * `'1week'` or `'1y'` into milliseconds. Whole numbers only, no spaces.
21
+ *
22
+ * @throws Error when the string does not match the format.
23
+ */
9
24
  export declare const parseDurationString: (duration: string) => number;
10
25
  export {};