@pikku/core 0.12.143 → 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 (700) 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/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/{services → wirings/queue}/in-memory-queue-service.d.ts +9 -1
  255. package/dist/{services → wirings/queue}/in-memory-queue-service.js +9 -1
  256. package/dist/wirings/queue/index.d.ts +1 -0
  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 +35 -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/validate-worker-config.d.ts +1 -0
  267. package/dist/wirings/role/role.types.d.ts +3 -0
  268. package/dist/wirings/rpc/rpc-runner.d.ts +24 -0
  269. package/dist/wirings/rpc/rpc-runner.js +37 -2
  270. package/dist/wirings/rpc/rpc-types.d.ts +2 -0
  271. package/dist/wirings/scheduler/index.d.ts +1 -0
  272. package/dist/wirings/scheduler/index.js +1 -0
  273. package/dist/wirings/scheduler/log-schedulers.d.ts +1 -0
  274. package/dist/wirings/scheduler/log-schedulers.js +1 -0
  275. package/dist/wirings/scheduler/remote-scheduled-job.d.ts +11 -0
  276. package/dist/wirings/scheduler/remote-scheduled-job.js +20 -0
  277. package/dist/wirings/scheduler/scheduler-runner.d.ts +29 -0
  278. package/dist/wirings/scheduler/scheduler-runner.js +28 -0
  279. package/dist/wirings/scheduler/scheduler.types.d.ts +3 -0
  280. package/dist/wirings/scope/scope.types.d.ts +5 -0
  281. package/dist/wirings/secret/index.d.ts +2 -2
  282. package/dist/wirings/secret/index.js +1 -1
  283. package/dist/wirings/secret/secret.types.d.ts +26 -1
  284. package/dist/wirings/secret/secret.types.js +1 -0
  285. package/dist/wirings/secret/validate-secret-definitions.d.ts +8 -0
  286. package/dist/wirings/secret/validate-secret-definitions.js +15 -0
  287. package/dist/wirings/trigger/in-memory-trigger-service.d.ts +11 -0
  288. package/dist/{services → wirings/trigger}/in-memory-trigger-service.js +10 -3
  289. package/dist/wirings/trigger/index.d.ts +1 -1
  290. package/dist/wirings/trigger/pikku-trigger-service.d.ts +8 -3
  291. package/dist/wirings/trigger/pikku-trigger-service.js +14 -3
  292. package/dist/wirings/trigger/trigger-runner.d.ts +27 -2
  293. package/dist/wirings/trigger/trigger-runner.js +35 -2
  294. package/dist/wirings/trigger/trigger.types.d.ts +26 -4
  295. package/dist/wirings/trigger/webhook-source-runner.d.ts +24 -0
  296. package/dist/wirings/trigger/webhook-source-runner.js +19 -0
  297. package/dist/wirings/trigger/webhook-source.types.d.ts +12 -2
  298. package/dist/wirings/trigger/webhook-source.types.js +1 -1
  299. package/dist/wirings/variable/validate-variable-definitions.d.ts +7 -0
  300. package/dist/wirings/variable/validate-variable-definitions.js +7 -0
  301. package/dist/wirings/variable/variable.types.d.ts +7 -0
  302. package/dist/wirings/virtual-user/conversation/conversation.types.d.ts +5 -0
  303. package/dist/wirings/virtual-user/conversation/run-conversation.d.ts +6 -0
  304. package/dist/wirings/virtual-user/conversation/run-conversation.js +1 -1
  305. package/dist/{services → wirings/virtual-user}/http-virtual-users.d.ts +4 -3
  306. package/dist/{services → wirings/virtual-user}/http-virtual-users.js +6 -6
  307. package/dist/wirings/virtual-user/index.d.ts +1 -1
  308. package/dist/wirings/virtual-user/index.js +1 -1
  309. package/dist/wirings/virtual-user/run-virtual-user.d.ts +2 -1
  310. package/dist/wirings/virtual-user/run-virtual-user.js +1 -14
  311. package/dist/wirings/virtual-user/virtual-user-declaration.types.d.ts +4 -0
  312. package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +10 -1
  313. package/dist/wirings/virtual-user/virtual-user-scaffold.js +5 -0
  314. package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +5 -0
  315. package/dist/wirings/virtual-user/virtual-user-schedule.js +1 -0
  316. package/dist/wirings/virtual-user/virtual-user-target.d.ts +1 -0
  317. package/dist/wirings/webhook/define-outgoing-webhook.d.ts +20 -0
  318. package/dist/wirings/webhook/define-outgoing-webhook.js +9 -0
  319. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +8 -4
  320. package/dist/wirings/workflow/dsl/workflow-runner.d.ts +7 -0
  321. package/dist/wirings/workflow/dsl/workflow-runner.js +7 -0
  322. package/dist/wirings/workflow/feature.d.ts +12 -0
  323. package/dist/wirings/workflow/feature.js +12 -0
  324. package/dist/wirings/workflow/graph/graph-node.d.ts +5 -0
  325. package/dist/wirings/workflow/graph/graph-node.js +5 -0
  326. package/dist/wirings/workflow/graph/template.d.ts +6 -0
  327. package/dist/wirings/workflow/graph/template.js +5 -0
  328. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +12 -0
  329. package/dist/wirings/workflow/graph/wire-workflow-graph.js +10 -0
  330. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +11 -0
  331. package/dist/wirings/workflow/graph/workflow-graph.types.js +1 -0
  332. package/dist/{services → wirings/workflow}/in-memory-workflow-service.d.ts +8 -3
  333. package/dist/{services → wirings/workflow}/in-memory-workflow-service.js +9 -4
  334. package/dist/wirings/workflow/pikku-scenario-service.d.ts +1 -1
  335. package/dist/wirings/workflow/pikku-scenario-service.js +2 -2
  336. package/dist/wirings/workflow/pikku-workflow-service.d.ts +1 -0
  337. package/dist/wirings/workflow/pikku-workflow-service.js +1 -0
  338. package/dist/wirings/workflow/run-timeline.d.ts +21 -0
  339. package/dist/wirings/workflow/run-timeline.js +15 -7
  340. package/dist/wirings/workflow/scenario-coverage.d.ts +1 -0
  341. package/dist/wirings/workflow/scenario-poll.d.ts +1 -0
  342. package/dist/wirings/workflow/scenario-prose.d.ts +6 -0
  343. package/dist/wirings/workflow/scenario-prose.js +6 -0
  344. package/dist/wirings/workflow/scenario-run.types.d.ts +3 -0
  345. package/dist/wirings/workflow/scenario-step.types.d.ts +1 -0
  346. package/dist/wirings/workflow/scenario-step.types.js +1 -0
  347. package/dist/wirings/workflow/scenario-surface.js +1 -13
  348. package/dist/wirings/workflow/scenario.types.d.ts +6 -0
  349. package/dist/wirings/workflow/workflow-approval-policy.d.ts +6 -0
  350. package/dist/wirings/workflow/workflow-approval-policy.js +6 -0
  351. package/dist/wirings/workflow/workflow-constants.d.ts +7 -1
  352. package/dist/wirings/workflow/workflow-constants.js +10 -1
  353. package/dist/wirings/workflow/workflow-errors.d.ts +13 -0
  354. package/dist/wirings/workflow/workflow-errors.js +13 -0
  355. package/dist/wirings/workflow/workflow-invocation-id.d.ts +4 -0
  356. package/dist/wirings/workflow/workflow-invocation-id.js +4 -0
  357. package/dist/wirings/workflow/workflow-queue-workers.d.ts +3 -0
  358. package/dist/wirings/workflow/workflow-run-ownership.d.ts +1 -0
  359. package/dist/wirings/workflow/workflow-run-ownership.js +1 -0
  360. package/dist/wirings/workflow/workflow-status-stream.d.ts +1 -0
  361. package/dist/wirings/workflow/workflow-unwind-plan.js +2 -7
  362. package/dist/wirings/workflow/workflow.types.d.ts +40 -0
  363. package/package.json +26 -9
  364. package/CHANGELOG.md +0 -6978
  365. package/dist/services/in-memory-trigger-service.d.ts +0 -4
  366. package/dist/services/local-gateway-service.d.ts +0 -6
  367. package/dist/utils/hash.d.ts +0 -2
  368. package/dist/utils/hash.js +0 -23
  369. package/knowledge/decisions/index.md +0 -19
  370. package/knowledge/decisions/internals/a-credential-name-declared-twice-must-agree-on-schema-and-type.md +0 -29
  371. package/knowledge/decisions/internals/a-grant-can-name-a-scope-declared-without-its-addon.md +0 -29
  372. package/knowledge/decisions/internals/a-held-run-is-woken-later-not-retried.md +0 -28
  373. package/knowledge/decisions/internals/a-latency-budget-is-asserted-by-its-cause.md +0 -32
  374. package/knowledge/decisions/internals/a-non-streaming-agent-run-registers-with-agentrunstate-too.md +0 -22
  375. package/knowledge/decisions/internals/a-reset-suite-makes-the-dev-seed-the-fixture.md +0 -50
  376. package/knowledge/decisions/internals/a-resumed-agent-turn-is-as-interruptible-as-the-first.md +0 -20
  377. package/knowledge/decisions/internals/a-scenario-step-template-is-offered-unfilled.md +0 -21
  378. package/knowledge/decisions/internals/a-scheduled-task-writes-its-caller-session-before-it-runs.md +0 -22
  379. package/knowledge/decisions/internals/a-secret-set-in-memory-shadows-the-variable-of-the-same-name.md +0 -28
  380. package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +0 -49
  381. package/knowledge/decisions/internals/a-virtual-user-acts-through-invokeraw-so-a-refusal-is-data.md +0 -32
  382. package/knowledge/decisions/internals/a-virtual-user-cadence-is-a-row-not-a-timer.md +0 -66
  383. package/knowledge/decisions/internals/a-virtual-user-converse-signs-in-before-its-first-turn.md +0 -24
  384. package/knowledge/decisions/internals/a-virtual-user-decides-whether-to-trust-memory-once-per-turn.md +0 -21
  385. package/knowledge/decisions/internals/a-virtual-user-email-is-computed-with-the-run-id-as-a-sub-address.md +0 -34
  386. package/knowledge/decisions/internals/a-virtual-user-run-is-not-a-workflow-but-it-needs-a-trigger.md +0 -65
  387. package/knowledge/decisions/internals/a-wall-clock-threshold-is-a-load-test-in-disguise.md +0 -49
  388. package/knowledge/decisions/internals/a-workflow-wire-is-built-from-the-run-not-from-the-rpc-service.md +0 -45
  389. package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +0 -26
  390. package/knowledge/decisions/internals/addon-pikku-meta-ships-at-the-package-root-or-under-dist.md +0 -32
  391. package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +0 -33
  392. package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +0 -28
  393. package/knowledge/decisions/internals/agent-agui-bridge-obeys-the-client-ordering-contract.md +0 -29
  394. package/knowledge/decisions/internals/agent-audio-chunks-carry-the-format-the-provider-returned.md +0 -20
  395. package/knowledge/decisions/internals/agent-context-waits-for-a-tool-result-still-being-written.md +0 -21
  396. package/knowledge/decisions/internals/agent-credential-suspensions-hide-the-tool-result.md +0 -26
  397. package/knowledge/decisions/internals/agent-delegate-and-supervise-hide-different-text.md +0 -26
  398. package/knowledge/decisions/internals/agent-llm-tool-arguments-have-nulls-stripped.md +0 -23
  399. package/knowledge/decisions/internals/agent-model-config-stays-a-single-resolution-seam.md +0 -25
  400. package/knowledge/decisions/internals/agent-onerror-hooks-cannot-change-the-failure.md +0 -22
  401. package/knowledge/decisions/internals/agent-runner-methods-must-keep-their-receiver.md +0 -22
  402. package/knowledge/decisions/internals/agent-speech-travels-as-a-custom-agui-event.md +0 -22
  403. package/knowledge/decisions/internals/agent-stream-persistence-is-best-effort.md +0 -27
  404. package/knowledge/decisions/internals/agent-sub-agents-inherit-the-parent-context-block.md +0 -26
  405. package/knowledge/decisions/internals/agent-tool-execute-failures-are-logged-unconditionally.md +0 -25
  406. package/knowledge/decisions/internals/agent-voice-input-transcribes-audio-parts-in-place.md +0 -22
  407. package/knowledge/decisions/internals/agent-working-memory-is-persisted-only-when-valid.md +0 -25
  408. package/knowledge/decisions/internals/an-addon-scope-root-loses-to-a-root-the-host-already-declares.md +0 -39
  409. package/knowledge/decisions/internals/an-agent-interrupt-is-not-a-failure.md +0 -23
  410. package/knowledge/decisions/internals/an-agent-is-offered-under-its-registry-key-and-only-within-the-virtual-users-scopes.md +0 -27
  411. package/knowledge/decisions/internals/an-agent-run-owned-by-another-instance-says-so.md +0 -25
  412. package/knowledge/decisions/internals/an-agent-stream-send-must-return-the-inner-sends-promise.md +0 -22
  413. package/knowledge/decisions/internals/an-empty-text-part-is-omitted-from-an-agent-message.md +0 -20
  414. package/knowledge/decisions/internals/an-empty-transcript-is-not-recorded.md +0 -22
  415. package/knowledge/decisions/internals/an-oauth2-credential-implies-an-optional-app-secret.md +0 -26
  416. package/knowledge/decisions/internals/an-unref-d-timer-cannot-be-awaited-under-node-test.md +0 -66
  417. package/knowledge/decisions/internals/analytics-identity-resolvers-run-in-declared-order.md +0 -22
  418. package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +0 -30
  419. package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +0 -31
  420. package/knowledge/decisions/internals/channel-state-accessors-are-unsound-generics-that-every-implementation-asserts.md +0 -33
  421. package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +0 -29
  422. package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +0 -28
  423. package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +0 -27
  424. package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +0 -28
  425. package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +0 -34
  426. package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +0 -29
  427. package/knowledge/decisions/internals/core-column-form-is-an-axis-of-its-own.md +0 -84
  428. package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +0 -41
  429. package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +0 -44
  430. package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +0 -39
  431. package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +0 -42
  432. package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +0 -39
  433. package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +0 -43
  434. package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +0 -38
  435. package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +0 -44
  436. package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +0 -27
  437. package/knowledge/decisions/internals/feature-flag-declarations-refuse-an-empty-anyof-and-conflicting-scopes.md +0 -22
  438. package/knowledge/decisions/internals/feature-flags-fail-open-and-never-enforce-access.md +0 -28
  439. package/knowledge/decisions/internals/flag-sync-rewrites-only-the-declared-text.md +0 -24
  440. package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +0 -32
  441. package/knowledge/decisions/internals/gateway-listener-middleware-runs-without-an-rpc-on-the-wire.md +0 -43
  442. package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +0 -28
  443. package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +0 -31
  444. package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +0 -26
  445. package/knowledge/decisions/internals/global-middleware-resolves-from-the-root-namespace-too.md +0 -32
  446. package/knowledge/decisions/internals/hot-reload-reads-the-changed-source-never-a-compiled-copy.md +0 -38
  447. package/knowledge/decisions/internals/hot-reload-writes-into-the-function-map-captured-at-startup.md +0 -26
  448. package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +0 -32
  449. package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +0 -28
  450. package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +0 -30
  451. package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +0 -26
  452. package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +0 -28
  453. package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +0 -32
  454. package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +0 -26
  455. package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +0 -25
  456. package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +0 -26
  457. package/knowledge/decisions/internals/index.md +0 -182
  458. package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +0 -25
  459. package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +0 -26
  460. package/knowledge/decisions/internals/mcp-wire-names-are-assigned-over-the-whole-registry.md +0 -39
  461. package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +0 -24
  462. package/knowledge/decisions/internals/one-project-shape-check-two-validators.md +0 -53
  463. package/knowledge/decisions/internals/only-exposed-functions-enter-a-virtual-user-catalogue.md +0 -21
  464. package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +0 -28
  465. package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +0 -27
  466. package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +0 -31
  467. package/knowledge/decisions/internals/role-names-cannot-contain-the-scope-separator.md +0 -30
  468. package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +0 -32
  469. package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +0 -31
  470. package/knowledge/decisions/internals/scenario-given-and-when-are-sugar-but-then-is-not.md +0 -24
  471. package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +0 -26
  472. package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +0 -27
  473. package/knowledge/decisions/internals/scenarios-live-in-files-named-for-them.md +0 -48
  474. package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +0 -30
  475. package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +0 -28
  476. package/knowledge/decisions/internals/side-effects-are-an-allowlist-not-a-boolean.md +0 -34
  477. package/knowledge/decisions/internals/speech-synthesis-picks-a-voice-per-sentence-and-warns-once.md +0 -24
  478. package/knowledge/decisions/internals/the-agent-done-event-goes-through-the-middleware-and-is-awaited.md +0 -26
  479. package/knowledge/decisions/internals/the-api-report-pins-members-not-just-names.md +0 -43
  480. package/knowledge/decisions/internals/the-core-scope-validator-refuses-separator-wildcard-and-empty-segments.md +0 -22
  481. package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +0 -30
  482. package/knowledge/decisions/internals/the-ecosystem-entry-point-carries-the-adapter-surface.md +0 -83
  483. package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +0 -29
  484. package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +0 -27
  485. package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +0 -40
  486. package/knowledge/decisions/internals/the-mcp-handshake-is-challenged-only-when-every-target-is-gated.md +0 -29
  487. package/knowledge/decisions/internals/the-middleware-resolution-cache-is-deliberately-unbounded.md +0 -40
  488. package/knowledge/decisions/internals/the-per-invocation-rpc-view-is-a-class.md +0 -40
  489. package/knowledge/decisions/internals/the-pikku-user-id-resolves-in-a-fixed-order.md +0 -24
  490. package/knowledge/decisions/internals/the-runner-resolves-wire-services-itself.md +0 -31
  491. package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +0 -26
  492. package/knowledge/decisions/internals/the-transcript-event-is-sent-ahead-of-the-run.md +0 -25
  493. package/knowledge/decisions/internals/the-virtual-user-catalogue-is-the-only-gate-on-what-may-be-called.md +0 -21
  494. package/knowledge/decisions/internals/the-virtual-user-prompt-says-json-because-of-json-object-mode.md +0 -22
  495. package/knowledge/decisions/internals/the-virtual-user-runtime-is-exported-from-the-virtual-user-entry-point.md +0 -28
  496. package/knowledge/decisions/internals/the-worker-disposition-is-the-one-that-is-not-testing.md +0 -22
  497. package/knowledge/decisions/internals/thread-history-records-the-transcript-not-the-audio.md +0 -25
  498. package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +0 -33
  499. package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +0 -26
  500. package/knowledge/decisions/internals/validate-checks-virtual-users-through-a-shared-module.md +0 -43
  501. package/knowledge/decisions/internals/validate-runs-checks-by-precondition.md +0 -115
  502. package/knowledge/decisions/internals/virtual-user-conversation-drives-the-target-through-a-transport-seam.md +0 -24
  503. package/knowledge/decisions/internals/virtual-user-conversation-verdicts-are-llm-self-evaluations.md +0 -25
  504. package/knowledge/decisions/internals/virtual-user-conversations-seed-a-hidden-kickoff-message.md +0 -23
  505. package/knowledge/decisions/internals/virtual-user-step-order-comes-from-insertion-order.md +0 -21
  506. package/knowledge/decisions/internals/virtual-users-are-declared-in-one-definevirtualusers-call-per-codebase.md +0 -30
  507. package/knowledge/decisions/internals/voice-output-speaks-unless-voice-input-explicitly-says-otherwise.md +0 -24
  508. package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +0 -26
  509. package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +0 -25
  510. package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +0 -58
  511. package/knowledge/decisions/internals/wiring-registries-erase-the-generics-their-wire-functions-capture.md +0 -35
  512. package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +0 -34
  513. package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +0 -42
  514. package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +0 -38
  515. package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +0 -29
  516. package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +0 -42
  517. package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +0 -25
  518. package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +0 -29
  519. package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +0 -43
  520. package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +0 -29
  521. package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +0 -42
  522. package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +0 -33
  523. package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +0 -32
  524. package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +0 -31
  525. package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +0 -39
  526. package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +0 -29
  527. package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +0 -33
  528. package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +0 -37
  529. package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +0 -54
  530. package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +0 -43
  531. package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +0 -32
  532. package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +0 -18
  533. package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +0 -34
  534. package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +0 -29
  535. package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +0 -33
  536. package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +0 -34
  537. package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +0 -34
  538. package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +0 -38
  539. package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +0 -30
  540. package/knowledge/decisions/security/a-bearer-token-checked-against-a-secret-reads-it-per-request.md +0 -26
  541. package/knowledge/decisions/security/a-call-without-a-session-raises-missing-session-not-forbidden.md +0 -20
  542. package/knowledge/decisions/security/a-caller-cookie-wins-over-the-jar-for-the-same-name.md +0 -23
  543. package/knowledge/decisions/security/a-channel-lifecycle-acts-as-the-socket-upgrade-session.md +0 -16
  544. package/knowledge/decisions/security/a-channel-requires-a-session-unless-it-says-auth-false.md +0 -26
  545. package/knowledge/decisions/security/a-credential-read-path-follows-its-declared-type-not-absence.md +0 -32
  546. package/knowledge/decisions/security/a-credential-type-is-a-literal-the-inspector-checks-at-declaration.md +0 -27
  547. package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +0 -28
  548. package/knowledge/decisions/security/a-first-party-cookie-is-written-only-after-its-purposes-consent.md +0 -33
  549. package/knowledge/decisions/security/a-function-never-receives-the-secret-service.md +0 -37
  550. package/knowledge/decisions/security/a-graph-run-starts-at-an-entry-node-the-graph-declared.md +0 -33
  551. package/knowledge/decisions/security/a-permission-gets-a-wire-it-cannot-reply-on.md +0 -33
  552. package/knowledge/decisions/security/a-public-function-says-so-with-auth-false.md +0 -34
  553. package/knowledge/decisions/security/a-readonly-session-reaches-only-readonly-functions.md +0 -25
  554. package/knowledge/decisions/security/a-scaffold-flag-says-a-surface-exists-not-who-may-call-it.md +0 -52
  555. package/knowledge/decisions/security/a-scheduled-virtual-user-run-needs-no-admin-at-run-time.md +0 -27
  556. package/knowledge/decisions/security/a-scoped-credential-view-is-limited-to-declared-names.md +0 -26
  557. package/knowledge/decisions/security/a-scoped-secret-view-reads-only-declared-keys-and-never-writes.md +0 -25
  558. package/knowledge/decisions/security/a-secret-is-sent-only-to-the-hosts-it-declares.md +0 -29
  559. package/knowledge/decisions/security/a-step-can-name-an-identity-no-virtual-user-holds-through-per-call-headers.md +0 -25
  560. package/knowledge/decisions/security/a-step-runs-the-function-the-workflow-dispatched-it-with.md +0 -37
  561. package/knowledge/decisions/security/a-stopped-run-by-id-skips-the-ownership-check.md +0 -24
  562. package/knowledge/decisions/security/a-vault-secret-redacts-on-serialization-and-throws-on-coercion.md +0 -29
  563. package/knowledge/decisions/security/a-virtual-user-catalogue-entry-is-filtered-by-scope-and-approval-is-denied-by-default.md +0 -30
  564. package/knowledge/decisions/security/a-virtual-user-environment-fails-closed.md +0 -38
  565. package/knowledge/decisions/security/a-virtual-user-is-never-offered-a-step-that-would-forge-its-own-oracle.md +0 -27
  566. package/knowledge/decisions/security/a-virtual-user-never-runs-against-production.md +0 -23
  567. package/knowledge/decisions/security/a-virtual-user-reads-its-roles-from-the-apps-own-rpc-before-better-auth.md +0 -27
  568. package/knowledge/decisions/security/a-virtual-user-run-treats-an-unresolved-environment-as-production.md +0 -41
  569. package/knowledge/decisions/security/a-virtual-user-scopes-are-expanded-from-its-roles-once-at-run-preparation.md +0 -25
  570. package/knowledge/decisions/security/a-virtual-user-whose-roles-drift-from-the-declaration-refuses-to-run.md +0 -32
  571. package/knowledge/decisions/security/a-workflow-run-is-read-and-approved-by-its-owner.md +0 -50
  572. package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +0 -43
  573. package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +0 -52
  574. package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +0 -46
  575. package/knowledge/decisions/security/addon-screen-scopes-hide-and-do-not-enforce.md +0 -20
  576. package/knowledge/decisions/security/agent-approval-forwarding-requires-a-symbol-brand.md +0 -27
  577. package/knowledge/decisions/security/agent-credential-requests-are-symbol-branded.md +0 -37
  578. package/knowledge/decisions/security/agent-gate-requires-a-session-only-when-auth-is-true.md +0 -31
  579. package/knowledge/decisions/security/agent-ownership-failures-never-echo-the-resource.md +0 -23
  580. package/knowledge/decisions/security/agent-resume-re-runs-the-authorization-gate.md +0 -22
  581. package/knowledge/decisions/security/agent-sessionless-deployments-have-no-thread-ownership.md +0 -39
  582. package/knowledge/decisions/security/agent-thread-ownership-composes-the-session-principal.md +0 -30
  583. package/knowledge/decisions/security/agent-tool-filtering-reads-the-live-function-config.md +0 -24
  584. package/knowledge/decisions/security/an-addon-header-can-only-narrow-the-session.md +0 -26
  585. package/knowledge/decisions/security/an-addon-instance-reads-only-the-secrets-and-credentials-it-is-named.md +0 -33
  586. package/knowledge/decisions/security/an-addon-may-reach-only-itself-and-the-addons-it-uses.md +0 -16
  587. package/knowledge/decisions/security/an-agent-approval-is-claimed-before-the-tool-runs.md +0 -33
  588. package/knowledge/decisions/security/an-api-key-is-jwt-decoded-into-the-session.md +0 -26
  589. package/knowledge/decisions/security/an-approval-answer-outlives-the-run-it-answered.md +0 -59
  590. package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +0 -30
  591. package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +0 -52
  592. package/knowledge/decisions/security/an-external-virtual-user-caller-presents-one-signed-statement.md +0 -38
  593. package/knowledge/decisions/security/an-inbound-webhook-source-dispatches-only-verified-requests.md +0 -31
  594. package/knowledge/decisions/security/an-mcp-call-with-no-http-request-stays-anonymous.md +0 -18
  595. package/knowledge/decisions/security/an-mcp-refusal-is-decided-before-dispatch.md +0 -48
  596. package/knowledge/decisions/security/an-oauth2-credential-is-read-by-its-account-row.md +0 -40
  597. package/knowledge/decisions/security/an-omitted-user-id-addresses-the-platform-credential.md +0 -32
  598. package/knowledge/decisions/security/an-upload-is-counted-as-it-arrives-not-buffered-then-measured.md +0 -24
  599. package/knowledge/decisions/security/analytics-identity-is-stamped-from-the-session-not-the-event.md +0 -24
  600. package/knowledge/decisions/security/app-access-is-a-scope-tree-synthesised-from-virtual-users.md +0 -26
  601. package/knowledge/decisions/security/approval-policy-decides-who-answers-a-tool-call.md +0 -27
  602. package/knowledge/decisions/security/auth-false-on-a-session-function-warns-and-still-requires-one.md +0 -25
  603. package/knowledge/decisions/security/bearer-token-hashes-are-unpeppered-sha256.md +0 -18
  604. package/knowledge/decisions/security/consent-is-read-from-a-cookie-and-a-recognised-denial-counts-as-refusal.md +0 -29
  605. package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +0 -84
  606. package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +0 -39
  607. package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +0 -37
  608. package/knowledge/decisions/security/cors-defaults-to-any-origin-and-refuses-the-wildcard-with-credentials.md +0 -22
  609. package/knowledge/decisions/security/credential-backends-share-one-conformance-suite-for-per-user-isolation.md +0 -29
  610. package/knowledge/decisions/security/each-stage-has-one-virtual-user-key-pair.md +0 -27
  611. package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +0 -41
  612. package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +0 -30
  613. package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +0 -40
  614. package/knowledge/decisions/security/hmac-verification-fails-closed-on-empty-inputs.md +0 -25
  615. package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +0 -33
  616. package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +0 -46
  617. package/knowledge/decisions/security/index.md +0 -135
  618. package/knowledge/decisions/security/local-content-refuses-private-buckets-under-the-public-segment.md +0 -21
  619. package/knowledge/decisions/security/mail-is-allowlisted-before-a-virtual-user-run-sees-it.md +0 -38
  620. package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +0 -27
  621. package/knowledge/decisions/security/mcp-resources-tools-and-prompts-take-sessionless-functions.md +0 -18
  622. package/knowledge/decisions/security/origin-locked-routes-match-the-origin-exactly.md +0 -22
  623. package/knowledge/decisions/security/oss-auth-works-without-pikku-studio-cloud.md +0 -26
  624. package/knowledge/decisions/security/outbound-webhooks-use-an-allowlist-when-configured.md +0 -24
  625. package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +0 -40
  626. package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +0 -31
  627. package/knowledge/decisions/security/pikku-carries-virtual-user-scopes-as-data-and-the-app-grants-them.md +0 -35
  628. package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +0 -69
  629. package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +0 -39
  630. package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +0 -34
  631. package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +0 -55
  632. package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +0 -30
  633. package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +0 -28
  634. package/knowledge/decisions/security/scoped-content-access-is-a-root-folder-with-longest-prefix-grants.md +0 -31
  635. package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +0 -34
  636. package/knowledge/decisions/security/services-without-secrets-get-a-throwing-secrets-accessor.md +0 -22
  637. package/knowledge/decisions/security/shared-guards-refuse-to-mutate-or-shadow-a-system-role.md +0 -34
  638. package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +0 -37
  639. package/knowledge/decisions/security/signed-uploads-are-verified-by-the-same-check-as-signed-reads.md +0 -26
  640. package/knowledge/decisions/security/system-role-scopes-must-be-declared-with-define-scope.md +0 -24
  641. package/knowledge/decisions/security/system-roles-are-additive-and-immutable.md +0 -16
  642. package/knowledge/decisions/security/the-channel-rpc-does-not-send-the-callers-session.md +0 -21
  643. package/knowledge/decisions/security/the-remote-jobs-inbox-fails-closed-without-a-secret.md +0 -24
  644. package/knowledge/decisions/security/the-remote-rpc-gate-fails-closed-and-binds-the-token-to-its-function.md +0 -34
  645. package/knowledge/decisions/security/the-workflow-status-stream-rechecks-ownership-on-every-poll.md +0 -16
  646. package/knowledge/decisions/security/two-credentials-on-one-key-must-share-a-read-mode.md +0 -29
  647. package/knowledge/decisions/security/verified-bearer-claims-are-pass-through-data-that-core-never-fills.md +0 -23
  648. package/knowledge/decisions/security/virtual-user-catalogue-excludes-the-machinery-that-runs-virtual-users.md +0 -25
  649. package/knowledge/decisions/security/virtual-user-conversation-missing-approval-decisions-default-to-denied.md +0 -22
  650. package/knowledge/decisions/security/virtual-user-run-records-are-gated-behind-a-read-scope.md +0 -18
  651. package/knowledge/decisions/security/virtual-user-sign-in-does-not-exist-in-production.md +0 -25
  652. package/knowledge/decisions/security/virtual-user-sign-in-has-one-door.md +0 -42
  653. package/knowledge/decisions/security/virtual-user-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +0 -29
  654. package/knowledge/decisions/security/virtual-user-sign-in-only-works-for-virtual-user-flagged-users.md +0 -29
  655. package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +0 -25
  656. package/knowledge/decisions/security/wire-addon-expose-selects-the-rpc-surface.md +0 -51
  657. package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +0 -40
  658. package/knowledge/decisions/security/workflow-helper-functions-are-sessionless-by-declaration.md +0 -18
  659. package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +0 -32
  660. package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-virtual-user-and-per-scenario.md +0 -32
  661. package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +0 -31
  662. package/knowledge/decisions/security/workflow-virtual-user-steps-always-use-the-real-transport.md +0 -34
  663. package/knowledge/decisions/security/writing-a-virtual-user-schedule-is-gated-by-its-own-scope.md +0 -18
  664. package/knowledge/index.md +0 -24
  665. package/knowledge/questions/a-bearer-jwt-with-no-identity-becomes-a-session.md +0 -24
  666. package/knowledge/questions/channel-middleware-accepts-bare-factories-that-nothing-resolves.md +0 -35
  667. package/knowledge/questions/dev-quick-login-as-impersonation.md +0 -25
  668. package/knowledge/questions/does-a-delayed-rpc-run-as-the-session-it-was-scheduled-with.md +0 -26
  669. package/knowledge/questions/does-a-user-id-with-a-colon-read-another-users-credentials.md +0 -27
  670. package/knowledge/questions/does-a-wirecli-command-need-a-session-by-default.md +0 -26
  671. package/knowledge/questions/does-an-adversarial-in-scope-success-count-as-a-finding.md +0 -26
  672. package/knowledge/questions/does-approve-step-need-the-run-owners-session-or-the-gates-approvers.md +0 -34
  673. package/knowledge/questions/does-cors-origin-true-reflect-any-origin-with-credentials.md +0 -20
  674. package/knowledge/questions/does-skip-user-session-do-anything-on-a-channel.md +0 -24
  675. package/knowledge/questions/does-the-store-session-match-the-other-two.md +0 -19
  676. package/knowledge/questions/index.md +0 -41
  677. package/knowledge/questions/is-the-agent-score-worker-reachable-without-a-session.md +0 -21
  678. package/knowledge/questions/live-scheduled-tests-may-write.md +0 -19
  679. package/knowledge/questions/provision-virtual-users-has-no-caller-in-this-repo.md +0 -23
  680. package/knowledge/questions/remote-secret-refuses-requests-without-a-remote-token-on-every-path.md +0 -32
  681. package/knowledge/questions/should-a-middleware-set-session-persist-to-the-store.md +0 -25
  682. package/knowledge/questions/should-a-scoped-secret-view-throw-from-has-secret-for-a-disallowed-key.md +0 -23
  683. package/knowledge/questions/should-a-wrong-bearer-token-be-anonymous-or-refused.md +0 -35
  684. package/knowledge/questions/should-an-empty-webhook-signing-secret-send-unsigned.md +0 -23
  685. package/knowledge/questions/should-http-virtual-user-sessions-reset-between-scenarios-in-one-run.md +0 -27
  686. package/knowledge/questions/should-the-cookie-jar-scope-cookies-to-the-api-origin.md +0 -26
  687. package/knowledge/questions/should-voice-input-fetch-audio-urls-without-a-host-allowlist.md +0 -20
  688. package/knowledge/questions/staging-impersonation-rules.md +0 -27
  689. package/knowledge/questions/unauthorized-channel-replies-escape-the-declared-out-type.md +0 -44
  690. package/knowledge/questions/virtual-user-keys-on-cloud-stages-are-pikku-studios-to-build.md +0 -33
  691. package/knowledge/questions/virtual-user-statement-replay-is-per-process.md +0 -20
  692. package/knowledge/questions/what-an-impersonated-session-carries.md +0 -22
  693. package/run-tests.sh +0 -68
  694. package/scripts/generate-api-report.d.mts +0 -1
  695. package/scripts/generate-api-report.mjs +0 -96
  696. package/scripts/generate-api-report.mts +0 -333
  697. package/src/public-surface.json +0 -637
  698. package/src/public-surface.json.README +0 -43
  699. /package/dist/{function/compensation-name.d.ts → compensation-name.d.ts} +0 -0
  700. /package/dist/{function/compensation-name.js → compensation-name.js} +0 -0
@@ -1,3 +1,12 @@
1
+ export declare const SECRET_GENERATE_MIN_SIZE = 16;
2
+ /** A deployment creates the value: `size` random bytes, hex encoded. */
3
+ export type SecretGenerate = {
4
+ size: number;
5
+ };
6
+ /**
7
+ * The declaration {@link defineSecret} takes. It describes a secret, never its
8
+ * value: the value lives in the `SecretService` under `secretId`.
9
+ */
1
10
  export type CoreSecret<T = unknown> = {
2
11
  /** The key code reads it by: `secrets.getSecret('NAME')`. SCREAMING_SNAKE_CASE. */
3
12
  name: string;
@@ -16,8 +25,16 @@ export type CoreSecret<T = unknown> = {
16
25
  optional?: boolean;
17
26
  /** Where a user goes to obtain this value, surfaced beside a missing one. */
18
27
  docsUrl?: string;
19
- /** Rotation cadence as a duration string, e.g. `'1d'`, `'30day'`, `'1w'`. */
28
+ /**
29
+ * Rotation cadence as a duration string, e.g. `'1d'`, `'30day'`, `'1w'`.
30
+ * With `generate` it is required, and `'never'` opts out of rotation.
31
+ */
20
32
  rotationPeriod?: string;
33
+ /**
34
+ * Makes the deployment create and replace the value. Nobody supplies it, and
35
+ * `setSecret` from a person is rejected. Requires `rotationPeriod`.
36
+ */
37
+ generate?: SecretGenerate;
21
38
  /**
22
39
  * Hosts this secret may be sent to, e.g. `['api.notion.com']` or
23
40
  * `'*.notion.com'`. Omitted means unrestricted unless
@@ -25,6 +42,10 @@ export type CoreSecret<T = unknown> = {
25
42
  */
26
43
  allowedHosts?: string[];
27
44
  };
45
+ /**
46
+ * The OAuth 2 provider endpoints and scopes for a secret or credential that is
47
+ * obtained by an authorization-code flow rather than pasted in.
48
+ */
28
49
  export type OAuth2CredentialConfig = {
29
50
  /** Where access/refresh tokens are stored */
30
51
  tokenSecretId: string;
@@ -41,6 +62,7 @@ export type OAuth2CredentialConfig = {
41
62
  /** Appended to the authorization URL's query string. */
42
63
  additionalParams?: Record<string, string>;
43
64
  };
65
+ /** A secret declaration as recorded in generated meta, with the schema replaced by its name. */
44
66
  export type SecretDefinitionMeta = {
45
67
  name: string;
46
68
  displayName: string;
@@ -51,6 +73,7 @@ export type SecretDefinitionMeta = {
51
73
  docsUrl?: string;
52
74
  oauth2?: OAuth2CredentialConfig;
53
75
  rotationPeriod?: string;
76
+ generate?: SecretGenerate;
54
77
  /**
55
78
  * Hosts this secret may be sent to, e.g. `['api.notion.com']` or
56
79
  * `'*.notion.com'`. Omitted means unrestricted unless
@@ -59,7 +82,9 @@ export type SecretDefinitionMeta = {
59
82
  allowedHosts?: string[];
60
83
  sourceFile?: string;
61
84
  };
85
+ /** Secret declarations collected by the CLI, keyed by name. */
62
86
  export type SecretDefinitionsMeta = Record<string, SecretDefinitionMeta>;
87
+ /** Secret declarations as the inspector found them, before de-duplication. */
63
88
  export type SecretDefinitions = SecretDefinitionMeta[];
64
89
  /**
65
90
  * Declares a secret this project needs, with the shape of its value. The CLI
@@ -1,3 +1,4 @@
1
+ export const SECRET_GENERATE_MIN_SIZE = 16;
1
2
  /**
2
3
  * Declares a secret this project needs, with the shape of its value. The CLI
3
4
  * collects every declaration into `CredentialsMap`, which is what makes
@@ -1,4 +1,12 @@
1
1
  import type { SecretDefinitions, SecretDefinitionsMeta } from './secret.types.js';
2
2
  import type { SchemaRefLike } from '../../types/core.types.js';
3
3
  export type { SchemaRefLike };
4
+ /**
5
+ * Merges the secret declarations the inspector found into meta keyed by name.
6
+ * Declarations that share a `secretId` must agree on schema and OAuth 2 config.
7
+ *
8
+ * @throws Error when two declarations of one `secretId` disagree, or when a
9
+ * generated secret has no `rotationPeriod`.
10
+ * @internal Called by the CLI when generating meta.
11
+ */
4
12
  export declare function validateAndBuildSecretDefinitionsMeta(definitions: SecretDefinitions, schemaLookup: Map<string, SchemaRefLike>): SecretDefinitionsMeta;
@@ -1,7 +1,20 @@
1
+ /**
2
+ * Merges the secret declarations the inspector found into meta keyed by name.
3
+ * Declarations that share a `secretId` must agree on schema and OAuth 2 config.
4
+ *
5
+ * @throws Error when two declarations of one `secretId` disagree, or when a
6
+ * generated secret has no `rotationPeriod`.
7
+ * @internal Called by the CLI when generating meta.
8
+ */
1
9
  export function validateAndBuildSecretDefinitionsMeta(definitions, schemaLookup) {
2
10
  const meta = {};
3
11
  const secretIdToDefinition = new Map();
4
12
  for (const def of definitions) {
13
+ if (def.generate && !def.rotationPeriod) {
14
+ throw new Error(`Secret '${def.secretId}' is generated but has no 'rotationPeriod'.\n` +
15
+ ` Declared in: ${def.sourceFile}\n` +
16
+ `Add a rotationPeriod such as '30day', or 'never' to generate it once.`);
17
+ }
5
18
  const existingDef = secretIdToDefinition.get(def.secretId);
6
19
  if (existingDef) {
7
20
  if (def.schema && existingDef.schema) {
@@ -35,6 +48,7 @@ export function validateAndBuildSecretDefinitionsMeta(definitions, schemaLookup)
35
48
  optional: def.optional,
36
49
  oauth2: def.oauth2,
37
50
  rotationPeriod: def.rotationPeriod,
51
+ generate: def.generate,
38
52
  allowedHosts: def.allowedHosts,
39
53
  docsUrl: def.docsUrl,
40
54
  sourceFile: def.sourceFile,
@@ -53,6 +67,7 @@ export function validateAndBuildSecretDefinitionsMeta(definitions, schemaLookup)
53
67
  optional: def.optional,
54
68
  oauth2: def.oauth2,
55
69
  rotationPeriod: def.rotationPeriod,
70
+ generate: def.generate,
56
71
  allowedHosts: def.allowedHosts,
57
72
  docsUrl: def.docsUrl,
58
73
  sourceFile: def.sourceFile,
@@ -0,0 +1,11 @@
1
+ import { PikkuTriggerService } from './pikku-trigger-service.js';
2
+ /**
3
+ * Runs every wired trigger source in this process. `start` sets up each source
4
+ * that has at least one `wireTrigger` listening and logs, rather than throws, a
5
+ * source that fails to start; `stop` tears them all down.
6
+ *
7
+ * Single-process only: a second instance would start every source again.
8
+ */
9
+ export declare class InMemoryTriggerService extends PikkuTriggerService {
10
+ start(): Promise<void>;
11
+ }
@@ -1,6 +1,13 @@
1
- import { PikkuTriggerService } from '../wirings/trigger/pikku-trigger-service.js';
2
- import { getSingletonServices } from '../pikku-state.js';
1
+ import { PikkuTriggerService } from './pikku-trigger-service.js';
2
+ import { getSingletonServices } from '../../pikku-state.js';
3
3
  // knowledge: decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md
4
+ /**
5
+ * Runs every wired trigger source in this process. `start` sets up each source
6
+ * that has at least one `wireTrigger` listening and logs, rather than throws, a
7
+ * source that fails to start; `stop` tears them all down.
8
+ *
9
+ * Single-process only: a second instance would start every source again.
10
+ */
4
11
  export class InMemoryTriggerService extends PikkuTriggerService {
5
12
  async start() {
6
13
  const singletonServices = getSingletonServices();
@@ -16,7 +23,7 @@ export class InMemoryTriggerService extends PikkuTriggerService {
16
23
  continue;
17
24
  }
18
25
  try {
19
- const triggerInstance = await this.setupTriggerInstance(name, source.input, (data) => this.onTriggerFire(name, targets, data));
26
+ const triggerInstance = await this.setupTriggerInstance(name, source.input, (data, options) => this.onTriggerFire(name, targets, data, options));
20
27
  this.activeTriggers.set(name, triggerInstance);
21
28
  singletonServices.logger.info(`Started trigger: ${name}`);
22
29
  }
@@ -4,4 +4,4 @@ export type { OrphanedWebhookRegistration, WebhookRegistration, WebhookRegistrat
4
4
  export { PIKKU_INCOMING_WEBHOOK_QUEUE_NAME, webhookSecretCredentialName, } from './webhook-source.types.js';
5
5
  export type { CoreTriggerWebhookSource, TriggerEvent, WebhookCheckResult, WebhookLifecycleInput, WebhookReceiveResult, WebhookRequest, WebhookSetupResult, WebhookSourceJob, WebhookSourceMeta, WebhookSourceMethod, WebhookSourcesMeta, WebhookSourceState, WebhookTeardownInput, WebhookTeardownResult, WebhookVerify, } from './webhook-source.types.js';
6
6
  export { PikkuTriggerService } from './pikku-trigger-service.js';
7
- export type { TriggerMeta, TriggerSourceMeta, CorePikkuTriggerFunction, CorePikkuTriggerFunctionConfig, CoreTrigger, } from './trigger.types.js';
7
+ export type { TriggerMeta, TriggerSourceMeta, CorePikkuTriggerFunction, CorePikkuTriggerFunctionConfig, CoreTrigger, PikkuTrigger, TriggerInvokeOptions, } from './trigger.types.js';
@@ -1,10 +1,15 @@
1
- import type { TriggerInstance } from './trigger.types.js';
1
+ import type { TriggerInstance, TriggerInvokeOptions } from './trigger.types.js';
2
2
  import type { TriggerService } from '../../services/trigger-service.js';
3
3
  export type TriggerTarget = {
4
4
  targetType: 'rpc' | 'workflow';
5
5
  targetName: string;
6
6
  startNode?: string;
7
7
  };
8
+ /**
9
+ * Base class for a {@link TriggerService}: pairs registered trigger sources with
10
+ * the triggers listening to them and owns teardown. Subclasses decide where and
11
+ * when sources start by implementing `start`.
12
+ */
8
13
  export declare abstract class PikkuTriggerService implements TriggerService {
9
14
  protected activeTriggers: Map<string, TriggerInstance>;
10
15
  abstract start(): Promise<void>;
@@ -13,6 +18,6 @@ export declare abstract class PikkuTriggerService implements TriggerService {
13
18
  protected getTriggerSources(): Map<string, {
14
19
  input?: unknown;
15
20
  }>;
16
- protected setupTriggerInstance(name: string, input: unknown, onTrigger: (data: unknown) => Promise<void>): Promise<TriggerInstance>;
17
- protected onTriggerFire(triggerName: string, targets: TriggerTarget[], data: unknown): Promise<void>;
21
+ protected setupTriggerInstance(name: string, input: unknown, onTrigger: (data: unknown, options?: TriggerInvokeOptions) => Promise<void>): Promise<TriggerInstance>;
22
+ protected onTriggerFire(triggerName: string, targets: TriggerTarget[], data: unknown, options?: TriggerInvokeOptions): Promise<void>;
18
23
  }
@@ -1,6 +1,11 @@
1
1
  import { rpcService } from '../rpc/rpc-runner.js';
2
2
  import { setupTrigger } from './trigger-runner.js';
3
3
  import { getSingletonServices, getCreateWireServices, pikkuState, } from '../../pikku-state.js';
4
+ /**
5
+ * Base class for a {@link TriggerService}: pairs registered trigger sources with
6
+ * the triggers listening to them and owns teardown. Subclasses decide where and
7
+ * when sources start by implementing `start`.
8
+ */
4
9
  export class PikkuTriggerService {
5
10
  activeTriggers = new Map();
6
11
  async stop() {
@@ -43,12 +48,18 @@ export class PikkuTriggerService {
43
48
  onTrigger,
44
49
  });
45
50
  }
46
- async onTriggerFire(triggerName, targets, data) {
51
+ async onTriggerFire(triggerName, targets, data, options) {
47
52
  const singletonServices = getSingletonServices();
48
53
  const createWireServices = getCreateWireServices();
49
- const wireServices = await createWireServices?.(singletonServices, {});
54
+ // The user rides on the wire, where the function runner resolves the
55
+ // target's session and credentials from it and a started workflow records
56
+ // it on the run.
57
+ const wire = options?.pikkuUserId
58
+ ? { pikkuUserId: options.pikkuUserId }
59
+ : {};
60
+ const wireServices = await createWireServices?.(singletonServices, wire);
50
61
  const services = { ...singletonServices, ...wireServices };
51
- const rpc = rpcService.getContextRPCService(services, {}, false);
62
+ const rpc = rpcService.getContextRPCService(services, wire, false);
52
63
  for (const target of targets) {
53
64
  try {
54
65
  if (target.targetType === 'workflow') {
@@ -1,10 +1,35 @@
1
- import type { CoreTrigger, CoreTriggerSource, TriggerInstance } from './trigger.types.js';
1
+ import type { CoreTrigger, CoreTriggerSource, TriggerInstance, TriggerInvokeOptions } from './trigger.types.js';
2
+ /**
3
+ * Registers a trigger: the function that runs each time a trigger source of the
4
+ * same `name` fires. The source is wired separately with
5
+ * {@link wireTriggerSource} (or {@link wireTriggerWebhookSource}).
6
+ *
7
+ * Skipped with a warning when `pikku all` generated no metadata for it, which
8
+ * usually means the wiring shares a file with the function it wires.
9
+ *
10
+ * @param trigger - The trigger's name and the function it runs.
11
+ *
12
+ * @example snippet: wireTrigger
13
+ */
2
14
  export declare const wireTrigger: (trigger: CoreTrigger) => void;
15
+ /**
16
+ * Registers a trigger source: a long-lived function that subscribes to something
17
+ * outside the app and calls `wire.trigger.invoke(data)` whenever it fires, and
18
+ * returns its teardown. Its `name` must match a {@link wireTrigger}.
19
+ *
20
+ * The source and the triggers it fires run with no user session, so whatever
21
+ * the source pushes reaches them as untrusted input.
22
+ *
23
+ * @param source - The source's name, the function that sets it up, and its input.
24
+ * @throws Error when a source with the same name is already registered.
25
+ *
26
+ * @example snippet: wireTriggerSource
27
+ */
3
28
  export declare const wireTriggerSource: <TInput = unknown, TOutput = unknown>(source: CoreTriggerSource<TInput, TOutput>) => void;
4
29
  export type SetupTriggerParams<TInput = unknown, TOutput = unknown> = {
5
30
  name: string;
6
31
  input?: TInput;
7
- onTrigger: (data: TOutput) => void | Promise<void>;
32
+ onTrigger: (data: TOutput, options?: TriggerInvokeOptions) => void | Promise<void>;
8
33
  };
9
34
  export declare function setupTrigger<TInput = unknown, TOutput = unknown>({ name, input, onTrigger, }: SetupTriggerParams<TInput, TOutput>): Promise<TriggerInstance>;
10
35
  export declare const getRegisteredTriggers: () => Map<string, CoreTrigger<any>>;
@@ -1,6 +1,18 @@
1
1
  import { pikkuState, getSingletonServices, getCreateWireServices, } from '../../pikku-state.js';
2
2
  import { addFunction, runPikkuFunc } from '../../function/function-runner.js';
3
3
  import { PikkuMissingMetaError } from '../../errors/errors.js';
4
+ /**
5
+ * Registers a trigger: the function that runs each time a trigger source of the
6
+ * same `name` fires. The source is wired separately with
7
+ * {@link wireTriggerSource} (or {@link wireTriggerWebhookSource}).
8
+ *
9
+ * Skipped with a warning when `pikku all` generated no metadata for it, which
10
+ * usually means the wiring shares a file with the function it wires.
11
+ *
12
+ * @param trigger - The trigger's name and the function it runs.
13
+ *
14
+ * @example snippet: wireTrigger
15
+ */
4
16
  export const wireTrigger = (trigger) => {
5
17
  const meta = pikkuState(null, 'trigger', 'meta');
6
18
  const triggerMeta = meta[trigger.name];
@@ -13,6 +25,19 @@ export const wireTrigger = (trigger) => {
13
25
  triggers.set(trigger.name, trigger);
14
26
  };
15
27
  // knowledge: decisions/internals/trigger-declaration-is-split-from-trigger-source.md
28
+ /**
29
+ * Registers a trigger source: a long-lived function that subscribes to something
30
+ * outside the app and calls `wire.trigger.invoke(data)` whenever it fires, and
31
+ * returns its teardown. Its `name` must match a {@link wireTrigger}.
32
+ *
33
+ * The source and the triggers it fires run with no user session, so whatever
34
+ * the source pushes reaches them as untrusted input.
35
+ *
36
+ * @param source - The source's name, the function that sets it up, and its input.
37
+ * @throws Error when a source with the same name is already registered.
38
+ *
39
+ * @example snippet: wireTriggerSource
40
+ */
16
41
  export const wireTriggerSource = (source) => {
17
42
  const sourceMeta = pikkuState(null, 'trigger', 'sourceMeta');
18
43
  const triggerSourceMeta = sourceMeta[source.name];
@@ -41,11 +66,19 @@ export async function setupTrigger({ name, input, onTrigger, }) {
41
66
  }
42
67
  const wire = {
43
68
  trigger: {
44
- invoke: (data) => {
69
+ invoke: (data, options) => {
70
+ const pikkuUserId = options?.pikkuUserId;
71
+ if (pikkuUserId !== undefined &&
72
+ (typeof pikkuUserId !== 'string' || pikkuUserId === '')) {
73
+ // Running it as nobody would hide the source's bug, and as anyone
74
+ // else is not possible: the event is dropped.
75
+ singletonServices.logger.error(`Trigger '${name}' fired with an invalid pikkuUserId; dropping the event`);
76
+ return;
77
+ }
45
78
  singletonServices.logger.info(`Trigger fired: ${name}`);
46
79
  // `invoke` is typed void for trigger sources, so a rejection from the
47
80
  // trigger function is logged here rather than left unhandled.
48
- Promise.resolve(onTrigger(data)).catch((e) => singletonServices.logger.error(`Trigger '${name}' handler failed: ${e?.message ?? e}`));
81
+ Promise.resolve(onTrigger(data, pikkuUserId ? { pikkuUserId } : undefined)).catch((e) => singletonServices.logger.error(`Trigger '${name}' handler failed: ${e?.message ?? e}`));
49
82
  },
50
83
  },
51
84
  };
@@ -1,22 +1,43 @@
1
1
  import type { CommonWireMeta, CoreSingletonServices } from '../../types/core.types.js';
2
2
  import type { StandardSchemaV1 } from '@standard-schema/spec';
3
3
  import type { CoreNodeConfig } from '../node/node.types.js';
4
+ /**
5
+ * Facts about a trigger event that its source asserts, kept apart from the
6
+ * event data so that nothing in a payload the source received can set them.
7
+ */
8
+ export interface TriggerInvokeOptions {
9
+ /**
10
+ * The user the event belongs to. The target runs as this user — its
11
+ * credentials and stored session resolve for them — exactly as a queue job
12
+ * or workflow run carrying a `pikkuUserId` does. Pass only a user the source
13
+ * has established itself, such as the one whose credential it polled with;
14
+ * never one read out of the event.
15
+ */
16
+ pikkuUserId?: string;
17
+ }
4
18
  export interface PikkuTrigger<TOutput = unknown> {
5
- invoke: (data: TOutput) => void;
19
+ invoke: (data: TOutput, options?: TriggerInvokeOptions) => void;
6
20
  }
21
+ /** Generated metadata for every wired trigger, keyed by name. */
7
22
  export type TriggerMeta = Record<string, CommonWireMeta & {
8
23
  name: string;
9
24
  }>;
25
+ /** Generated metadata for every wired trigger source, keyed by name. */
10
26
  export type TriggerSourceMeta = Record<string, {
11
27
  name: string;
12
28
  pikkuFuncId: string;
13
29
  packageName?: string;
14
30
  }>;
31
+ /**
32
+ * A trigger source's body: subscribes using `input`, calls `wire.trigger.invoke`
33
+ * each time the event happens, and resolves to the function that unsubscribes.
34
+ */
15
35
  export type CorePikkuTriggerFunction<TInput = unknown, TOutput = unknown, Services extends CoreSingletonServices = CoreSingletonServices> = (services: Services, input: TInput, wire: {
16
- trigger: {
17
- invoke: (data: TOutput) => void;
18
- };
36
+ trigger: PikkuTrigger<TOutput>;
19
37
  }) => Promise<() => void | Promise<void>>;
38
+ /**
39
+ * A trigger source function with its schemas and descriptive metadata, as `pikkuTriggerFunc` returns it.
40
+ */
20
41
  export type CorePikkuTriggerFunctionConfig<TInput = unknown, TOutput = unknown, Services extends CoreSingletonServices = CoreSingletonServices, InputSchema extends StandardSchemaV1 | undefined = undefined, OutputSchema extends StandardSchemaV1 | undefined = undefined> = {
21
42
  title?: string;
22
43
  description?: string;
@@ -27,6 +48,7 @@ export type CorePikkuTriggerFunctionConfig<TInput = unknown, TOutput = unknown,
27
48
  node?: CoreNodeConfig;
28
49
  };
29
50
  export declare const pikkuTriggerFunc: <TInput = unknown, TOutput = unknown, Services extends CoreSingletonServices = CoreSingletonServices, InputSchema extends StandardSchemaV1 | undefined = undefined, OutputSchema extends StandardSchemaV1 | undefined = undefined>(triggerOrConfig: CorePikkuTriggerFunction<TInput, TOutput, Services> | CorePikkuTriggerFunctionConfig<TInput, TOutput, Services, InputSchema, OutputSchema>) => CorePikkuTriggerFunctionConfig<TInput, TOutput, Services, InputSchema, OutputSchema>;
51
+ /** What `wireTrigger` takes: the name a trigger source fires and the function run each time. */
30
52
  export interface CoreTrigger<PikkuFunctionConfig = any> {
31
53
  /** What a `wireTriggerSource` points at to fire this trigger. It is the contract between the two, so both must spell it the same. */
32
54
  name: string;
@@ -3,6 +3,25 @@ import type { CoreSingletonServices } from '../../types/core.types.js';
3
3
  import type { PikkuHTTP } from '../http/http.types.js';
4
4
  import type { DeclaredTriggerSource } from '../../services/trigger-source-store.js';
5
5
  import type { CoreTriggerWebhookSource, WebhookCheckResult, WebhookSetupResult, WebhookSourceJob, WebhookSourceState, WebhookTeardownResult } from './webhook-source.types.js';
6
+ /**
7
+ * Registers a webhook trigger source: Pikku mounts its route (by default
8
+ * `POST /webhooks/<name>`), runs `receive` to turn each request into events,
9
+ * validates each event against `events`, and queues it on
10
+ * `pikku-incoming-webhooks` for the trigger named `<name>:<event>`. The sender
11
+ * is answered at once; a failing trigger is retried by the queue.
12
+ *
13
+ * With `verify`, a request with a body is refused with 401 unless it is signed
14
+ * with the secret in the source's credential; an unsigned body-less request
15
+ * (a HEAD probe, a validation handshake) may be answered but its events are
16
+ * refused. Without `verify`, `receive` is responsible for authenticating.
17
+ *
18
+ * Skipped with a warning when no metadata was generated for it.
19
+ *
20
+ * @param source - The source's name, events, verification and lifecycle steps.
21
+ * @throws Error when a webhook source with the same name is already registered.
22
+ *
23
+ * @example snippet: wireTriggerWebhookSource
24
+ */
6
25
  export declare const wireTriggerWebhookSource: <Events extends Record<string, StandardSchemaV1>>(source: CoreTriggerWebhookSource<Events>) => void;
7
26
  /** The declared events some trigger is wired to: what `setup` registers with the provider. */
8
27
  export declare const subscribedWebhookEvents: (source: string) => string[];
@@ -19,6 +38,7 @@ export declare const receiveWebhookSourceRequest: (sourceName: string, wire: {
19
38
  } | void>;
20
39
  /** The `pikku-incoming-webhooks` worker: runs the trigger an event was queued for. Throws so the queue retries. */
21
40
  export declare const dispatchWebhookSourceJob: (job: WebhookSourceJob) => Promise<void>;
41
+ /** What one lifecycle pass (`check`, `setup` or `teardown`) did for one webhook source. */
22
42
  export type WebhookSourceOutcome = {
23
43
  source: string;
24
44
  url: string;
@@ -77,7 +97,11 @@ export type WebhookRegistration = {
77
97
  /** The signing secrets `setup` stored, so a wiped credential store can be refilled without registering again. */
78
98
  credentials?: Record<string, unknown>;
79
99
  };
100
+ /** Every source's {@link WebhookRegistration}, keyed by source name. */
80
101
  export type WebhookRegistrations = Record<string, WebhookRegistration>;
102
+ /**
103
+ * A registration kept for a source that is no longer declared, which nothing will tear down automatically.
104
+ */
81
105
  export type OrphanedWebhookRegistration = {
82
106
  source: string;
83
107
  url: string;
@@ -5,6 +5,25 @@ import { PikkuMissingMetaError, UnauthorizedError, } from '../../errors/errors.j
5
5
  import { timingSafeStringEqual, verifyHmacSignature, verifyPublicKeySignature, } from '../../utils/hmac.js';
6
6
  import { webhookSecretCredentialName } from './webhook-source.types.js';
7
7
  const LIFECYCLE = ['receive', 'check', 'setup', 'teardown'];
8
+ /**
9
+ * Registers a webhook trigger source: Pikku mounts its route (by default
10
+ * `POST /webhooks/<name>`), runs `receive` to turn each request into events,
11
+ * validates each event against `events`, and queues it on
12
+ * `pikku-incoming-webhooks` for the trigger named `<name>:<event>`. The sender
13
+ * is answered at once; a failing trigger is retried by the queue.
14
+ *
15
+ * With `verify`, a request with a body is refused with 401 unless it is signed
16
+ * with the secret in the source's credential; an unsigned body-less request
17
+ * (a HEAD probe, a validation handshake) may be answered but its events are
18
+ * refused. Without `verify`, `receive` is responsible for authenticating.
19
+ *
20
+ * Skipped with a warning when no metadata was generated for it.
21
+ *
22
+ * @param source - The source's name, events, verification and lifecycle steps.
23
+ * @throws Error when a webhook source with the same name is already registered.
24
+ *
25
+ * @example snippet: wireTriggerWebhookSource
26
+ */
8
27
  export const wireTriggerWebhookSource = (source) => {
9
28
  const meta = pikkuState(null, 'trigger', 'webhookSourceMeta')[source.name];
10
29
  if (!meta) {
@@ -1,7 +1,7 @@
1
1
  import type { StandardSchemaV1 } from '@standard-schema/spec';
2
2
  import type { CorePikkuFunctionConfig } from '../../function/functions.types.js';
3
3
  import type { HmacAlgorithm, SecretEncoding } from '../../utils/hmac.js';
4
- export declare const PIKKU_INCOMING_WEBHOOK_QUEUE_NAME = "pikku-incoming-webhooks";
4
+ export { PIKKU_INCOMING_WEBHOOK_QUEUE_NAME } from '../../services/incoming-webhook-queue.js';
5
5
  /** `github` → `githubWebhookSecret`, `microsoft-outlook` → `microsoftOutlookWebhookSecret`. */
6
6
  export declare const webhookSecretCredentialName: (source: string) => string;
7
7
  /** What every trigger source produces, whichever way it arrives. */
@@ -27,9 +27,11 @@ export type WebhookRequest = {
27
27
  export type WebhookReceiveResult = {
28
28
  events: TriggerEvent[];
29
29
  };
30
+ /** The HTTP methods a webhook source can be mounted on. */
30
31
  export type WebhookSourceMethod = 'post' | 'put' | 'get' | 'head';
31
32
  /** Whatever `setup` wants back on the next deploy, for providers whose endpoints cannot be found by label. */
32
33
  export type WebhookSourceState = Record<string, unknown>;
34
+ /** What a webhook source's `check` and `setup` steps are given. */
33
35
  export type WebhookLifecycleInput = {
34
36
  /** Always this deployment's own route: nothing can point it elsewhere. */
35
37
  url: string;
@@ -39,6 +41,7 @@ export type WebhookLifecycleInput = {
39
41
  events: string[];
40
42
  previous?: WebhookSourceState;
41
43
  };
44
+ /** Whether the provider-side registration matches what this deployment needs. */
42
45
  export type WebhookCheckResult = {
43
46
  status: 'ok';
44
47
  } | {
@@ -47,6 +50,7 @@ export type WebhookCheckResult = {
47
50
  status: 'drifted';
48
51
  reason: string;
49
52
  };
53
+ /** What `setup` did at the provider. */
50
54
  export type WebhookSetupResult = {
51
55
  status: 'created' | 'updated' | 'unchanged';
52
56
  state?: WebhookSourceState;
@@ -56,10 +60,12 @@ export type WebhookSetupResult = {
56
60
  status: 'manual';
57
61
  instructions: string;
58
62
  };
63
+ /** What a webhook source's `teardown` step is given. */
59
64
  export type WebhookTeardownInput = {
60
65
  label: string;
61
66
  previous?: WebhookSourceState;
62
67
  };
68
+ /** Whether `teardown` removed a registration or found none. */
63
69
  export type WebhookTeardownResult = {
64
70
  status: 'deleted' | 'absent';
65
71
  };
@@ -98,6 +104,7 @@ export type WebhookVerify<Services = any> = {
98
104
  type SourceFunction<In, Out> = CorePikkuFunctionConfig<any, any> & {
99
105
  func: (services: any, data: In, wire: any) => Promise<Out>;
100
106
  };
107
+ /** What `wireTriggerWebhookSource` takes. */
101
108
  export type CoreTriggerWebhookSource<Events extends Record<string, StandardSchemaV1> = Record<string, StandardSchemaV1>> = {
102
109
  /** Triggers subscribe to `<name>:<event>`. Unique across every kind of trigger source. */
103
110
  name: string;
@@ -129,6 +136,9 @@ export type CoreTriggerWebhookSource<Events extends Record<string, StandardSchem
129
136
  setup?: SourceFunction<WebhookLifecycleInput, WebhookSetupResult>;
130
137
  teardown?: SourceFunction<WebhookTeardownInput, WebhookTeardownResult>;
131
138
  };
139
+ /**
140
+ * Generated metadata for one webhook source: its route and the function ids of its lifecycle steps.
141
+ */
132
142
  export type WebhookSourceMeta = {
133
143
  name: string;
134
144
  method: WebhookSourceMethod | WebhookSourceMethod[];
@@ -139,6 +149,7 @@ export type WebhookSourceMeta = {
139
149
  setup?: string;
140
150
  teardown?: string;
141
151
  };
152
+ /** Generated metadata for every webhook source, keyed by name. */
142
153
  export type WebhookSourcesMeta = Record<string, WebhookSourceMeta>;
143
154
  /** One queued event on its way to its trigger. */
144
155
  export type WebhookSourceJob = {
@@ -147,4 +158,3 @@ export type WebhookSourceJob = {
147
158
  /** Present when a store-backed service recorded the receipt. */
148
159
  receiptId?: string;
149
160
  };
150
- export {};
@@ -1,3 +1,3 @@
1
- export const PIKKU_INCOMING_WEBHOOK_QUEUE_NAME = 'pikku-incoming-webhooks';
1
+ export { PIKKU_INCOMING_WEBHOOK_QUEUE_NAME } from '../../services/incoming-webhook-queue.js';
2
2
  /** `github` → `githubWebhookSecret`, `microsoft-outlook` → `microsoftOutlookWebhookSecret`. */
3
3
  export const webhookSecretCredentialName = (source) => `${source.replace(/[-_]+([a-z0-9])/gi, (_, c) => c.toUpperCase())}WebhookSecret`;
@@ -1,4 +1,11 @@
1
1
  import type { VariableDefinitions, VariableDefinitionsMeta } from './variable.types.js';
2
2
  import type { SchemaRefLike } from '../../types/core.types.js';
3
3
  export type { SchemaRefLike };
4
+ /**
5
+ * Merges the variable declarations the inspector found into meta keyed by name.
6
+ * Declarations that share a `variableId` must use the same schema.
7
+ *
8
+ * @throws Error when two declarations of one `variableId` disagree on schema.
9
+ * @internal Called by the CLI when generating meta.
10
+ */
4
11
  export declare function validateAndBuildVariableDefinitionsMeta(definitions: VariableDefinitions, schemaLookup: Map<string, SchemaRefLike>): VariableDefinitionsMeta;
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Merges the variable declarations the inspector found into meta keyed by name.
3
+ * Declarations that share a `variableId` must use the same schema.
4
+ *
5
+ * @throws Error when two declarations of one `variableId` disagree on schema.
6
+ * @internal Called by the CLI when generating meta.
7
+ */
1
8
  export function validateAndBuildVariableDefinitionsMeta(definitions, schemaLookup) {
2
9
  const meta = {};
3
10
  const variableIdToDefinition = new Map();
@@ -1,3 +1,7 @@
1
+ /**
2
+ * The declaration {@link defineVariable} takes: a non-secret setting read from the
3
+ * environment. Anything sensitive belongs in {@link defineSecret} instead.
4
+ */
1
5
  export type CoreVariable<T = unknown> = {
2
6
  /** How the variable is asked for in code. Generated into `VariablesMap`, so it is what `variables.get` autocompletes. */
3
7
  name: string;
@@ -14,6 +18,7 @@ export type CoreVariable<T = unknown> = {
14
18
  /** Where to go to work out what to set this to. */
15
19
  docsUrl?: string;
16
20
  };
21
+ /** A variable declaration as recorded in generated meta, with the schema replaced by its name. */
17
22
  export type VariableDefinitionMeta = {
18
23
  name: string;
19
24
  displayName: string;
@@ -24,7 +29,9 @@ export type VariableDefinitionMeta = {
24
29
  docsUrl?: string;
25
30
  sourceFile?: string;
26
31
  };
32
+ /** Variable declarations collected by the CLI, keyed by name. */
27
33
  export type VariableDefinitionsMeta = Record<string, VariableDefinitionMeta>;
34
+ /** Variable declarations as the inspector found them, before de-duplication. */
28
35
  export type VariableDefinitions = VariableDefinitionMeta[];
29
36
  /**
30
37
  * Declares an environment variable this project needs, with the shape of its
@@ -1,4 +1,7 @@
1
1
  export type ConversationApprovalPolicy = 'in-virtual-user' | 'always' | 'never';
2
+ /**
3
+ * What a scenario asks for when a virtual user holds a conversation with one of the app's agents.
4
+ */
2
5
  export interface ConverseOptions<TAgentName extends string = string> {
3
6
  agent: TAgentName;
4
7
  /** What the virtual user is trying to get the agent to accomplish. */
@@ -9,6 +12,7 @@ export interface ConverseOptions<TAgentName extends string = string> {
9
12
  model?: string;
10
13
  maxTurns?: number;
11
14
  }
15
+ /** The virtual user's judgement of a conversation, with the transcript it judged. */
12
16
  export interface ConversationVerdict {
13
17
  passed: boolean;
14
18
  reasoning: string;
@@ -26,6 +30,7 @@ export interface TargetAgentReply {
26
30
  status?: 'completed' | 'suspended';
27
31
  pendingApprovals?: TargetPendingApproval[];
28
32
  }
33
+ /** Transport to the agent under test: sends a message, and answers its tool-approval requests. */
29
34
  export interface TargetAgentDriver {
30
35
  run(message: string): Promise<TargetAgentReply>;
31
36
  approve(runId: string, decisions: {
@@ -3,6 +3,7 @@ import type { ResolvedVirtualUser } from '../../../services/virtual-users-servic
3
3
  import type { AgentRunnerParams, AgentStepResult } from '../../../services/agent-runner-service.js';
4
4
  /** The LLM call the virtual user uses for its own turns/decisions/evaluation. */
5
5
  export type VirtualUserLLM = (params: AgentRunnerParams) => Promise<AgentStepResult>;
6
+ /** What `runConversation` needs to play one virtual user against one agent. */
6
7
  export interface RunConversationParams {
7
8
  /** The person being played — name, job title, personality. */
8
9
  virtualUser: ResolvedVirtualUser;
@@ -27,6 +28,11 @@ export interface RunConversationParams {
27
28
  /** Display name of the target agent (transcript labelling). */
28
29
  agentName: string;
29
30
  }
31
+ /** Read a structured `run` result, falling back to parsing JSON from text. */
32
+ export declare function readObject<T>(result: {
33
+ object?: unknown;
34
+ text?: string;
35
+ }): T | null;
30
36
  /**
31
37
  * Run a conversation: an LLM-driven virtual user holds a real multi-turn exchange
32
38
  * with a target agent (driven via the injected transport), answers the target's
@@ -46,7 +46,7 @@ function msg(role, content) {
46
46
  };
47
47
  }
48
48
  /** Read a structured `run` result, falling back to parsing JSON from text. */
49
- function readObject(result) {
49
+ export function readObject(result) {
50
50
  if (result.object && typeof result.object === 'object') {
51
51
  return result.object;
52
52
  }