@pikku/core 0.12.83 → 0.12.86

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 (661) hide show
  1. package/CHANGELOG.md +492 -0
  2. package/README.md +1 -1
  3. package/dist/bootstrap-compat/root.d.ts +20 -0
  4. package/dist/classification/column-form.d.ts +32 -0
  5. package/dist/classification/column-form.js +42 -0
  6. package/dist/classification/data-classification.d.ts +64 -0
  7. package/dist/classification/index.d.ts +13 -0
  8. package/dist/classification/index.js +2 -0
  9. package/dist/classification/secret-value.d.ts +56 -0
  10. package/dist/classification/secret-value.js +46 -0
  11. package/dist/crypto-utils.d.ts +1 -1
  12. package/dist/ecosystem/agent-scorer.d.ts +12 -0
  13. package/dist/ecosystem/agent-scorer.js +5 -0
  14. package/dist/ecosystem/agent.d.ts +21 -0
  15. package/dist/ecosystem/agent.js +6 -0
  16. package/dist/ecosystem/channel/local.d.ts +3 -0
  17. package/dist/ecosystem/channel/local.js +3 -0
  18. package/dist/ecosystem/channel/serverless.d.ts +9 -0
  19. package/dist/ecosystem/channel/serverless.js +1 -0
  20. package/dist/ecosystem/channel.d.ts +15 -0
  21. package/dist/ecosystem/channel.js +5 -0
  22. package/dist/ecosystem/cli/channel.d.ts +16 -0
  23. package/dist/ecosystem/cli/channel.js +2 -0
  24. package/dist/ecosystem/cli.d.ts +9 -0
  25. package/dist/ecosystem/cli.js +2 -0
  26. package/dist/ecosystem/credential.d.ts +10 -0
  27. package/dist/ecosystem/credential.js +1 -0
  28. package/dist/ecosystem/crypto-utils.d.ts +8 -0
  29. package/dist/ecosystem/crypto-utils.js +1 -0
  30. package/dist/ecosystem/dev.d.ts +9 -0
  31. package/dist/ecosystem/dev.js +2 -0
  32. package/dist/ecosystem/errors.d.ts +8 -0
  33. package/dist/ecosystem/errors.js +2 -0
  34. package/dist/ecosystem/function.d.ts +13 -0
  35. package/dist/ecosystem/function.js +2 -0
  36. package/dist/ecosystem/gateway.d.ts +1 -0
  37. package/dist/ecosystem/hmac.d.ts +1 -0
  38. package/dist/ecosystem/hmac.js +1 -0
  39. package/dist/ecosystem/http.d.ts +13 -0
  40. package/dist/ecosystem/http.js +5 -0
  41. package/dist/ecosystem/mcp.d.ts +3 -0
  42. package/dist/ecosystem/mcp.js +2 -0
  43. package/dist/ecosystem/middleware.d.ts +18 -0
  44. package/dist/ecosystem/middleware.js +7 -0
  45. package/dist/ecosystem/node-host-resolver.d.ts +1 -0
  46. package/dist/ecosystem/node-host-resolver.js +1 -0
  47. package/dist/ecosystem/node.d.ts +1 -0
  48. package/dist/ecosystem/oauth2.d.ts +1 -0
  49. package/dist/ecosystem/oauth2.js +1 -0
  50. package/dist/ecosystem/persona.d.ts +17 -0
  51. package/dist/ecosystem/persona.js +5 -0
  52. package/dist/ecosystem/queue.d.ts +13 -0
  53. package/dist/ecosystem/queue.js +4 -0
  54. package/dist/ecosystem/remote.d.ts +8 -0
  55. package/dist/ecosystem/remote.js +1 -0
  56. package/dist/ecosystem/role.d.ts +4 -0
  57. package/dist/ecosystem/role.js +2 -0
  58. package/dist/ecosystem/rpc.d.ts +6 -0
  59. package/dist/ecosystem/rpc.js +3 -0
  60. package/dist/ecosystem/safe-fetch.d.ts +7 -0
  61. package/dist/ecosystem/safe-fetch.js +1 -0
  62. package/dist/ecosystem/scenario.d.ts +21 -0
  63. package/dist/ecosystem/scenario.js +8 -0
  64. package/dist/ecosystem/scheduler.d.ts +3 -0
  65. package/dist/ecosystem/scheduler.js +2 -0
  66. package/dist/ecosystem/schema.d.ts +2 -0
  67. package/dist/ecosystem/schema.js +1 -0
  68. package/dist/ecosystem/scope.d.ts +5 -0
  69. package/dist/ecosystem/scope.js +3 -0
  70. package/dist/ecosystem/secret.d.ts +11 -0
  71. package/dist/ecosystem/secret.js +2 -0
  72. package/dist/ecosystem/services/istanbul-coverage.d.ts +1 -0
  73. package/dist/ecosystem/services/istanbul-coverage.js +1 -0
  74. package/dist/ecosystem/services/local-content-request-handler.d.ts +9 -0
  75. package/dist/ecosystem/services/local-content-request-handler.js +1 -0
  76. package/dist/ecosystem/services/local-content.d.ts +2 -0
  77. package/dist/ecosystem/services/local-content.js +1 -0
  78. package/dist/ecosystem/services/local-meta.d.ts +1 -0
  79. package/dist/ecosystem/services/local-meta.js +1 -0
  80. package/dist/ecosystem/services/v8-coverage.d.ts +1 -0
  81. package/dist/ecosystem/services/v8-coverage.js +1 -0
  82. package/dist/ecosystem/services.d.ts +36 -0
  83. package/dist/ecosystem/services.js +12 -0
  84. package/dist/ecosystem/testing.d.ts +7 -0
  85. package/dist/ecosystem/testing.js +1 -0
  86. package/dist/ecosystem/trigger.d.ts +2 -0
  87. package/dist/ecosystem/trigger.js +1 -0
  88. package/dist/ecosystem/types.d.ts +12 -0
  89. package/dist/ecosystem/types.js +6 -0
  90. package/dist/ecosystem/variable.d.ts +9 -0
  91. package/dist/ecosystem/variable.js +1 -0
  92. package/dist/ecosystem/virtual-user.d.ts +24 -0
  93. package/dist/ecosystem/virtual-user.js +8 -0
  94. package/dist/ecosystem/workflow.d.ts +20 -0
  95. package/dist/ecosystem/workflow.js +6 -0
  96. package/dist/errors/index.d.ts +8 -0
  97. package/dist/errors/index.js +1 -0
  98. package/dist/errors/serialized-error.d.ts +7 -0
  99. package/dist/errors/serialized-error.js +1 -0
  100. package/dist/function/function-meta.types.d.ts +139 -0
  101. package/dist/function/function-meta.types.js +1 -0
  102. package/dist/function/function-runner.d.ts +3 -2
  103. package/dist/function/function-runner.js +31 -11
  104. package/dist/function/functions.types.d.ts +10 -2
  105. package/dist/function/index.d.ts +8 -2
  106. package/dist/function/index.js +4 -1
  107. package/dist/function/pikku-request.d.ts +8 -0
  108. package/dist/function/pikku-request.js +15 -0
  109. package/dist/index.d.ts +8 -8
  110. package/dist/index.js +3 -3
  111. package/dist/middleware/auth-apikey.d.ts +2 -10
  112. package/dist/middleware/auth-apikey.js +1 -1
  113. package/dist/middleware/auth-bearer.d.ts +2 -10
  114. package/dist/middleware/auth-bearer.js +1 -1
  115. package/dist/middleware/auth-cookie.d.ts +2 -10
  116. package/dist/middleware/auth-cookie.js +1 -1
  117. package/dist/middleware/cors.d.ts +5 -11
  118. package/dist/middleware/cors.js +13 -6
  119. package/dist/middleware/index.d.ts +3 -0
  120. package/dist/middleware/index.js +1 -0
  121. package/dist/middleware/middleware-factories.d.ts +9 -0
  122. package/dist/middleware/middleware-factories.js +19 -0
  123. package/dist/middleware/middleware.types.d.ts +27 -0
  124. package/dist/middleware/middleware.types.js +1 -0
  125. package/dist/middleware/remote-auth.d.ts +1 -1
  126. package/dist/middleware/remote-auth.js +1 -1
  127. package/dist/middleware/telemetry.d.ts +4 -20
  128. package/dist/middleware/telemetry.js +1 -1
  129. package/dist/middleware-runner.d.ts +2 -1
  130. package/dist/pikku-state.d.ts +2 -1
  131. package/dist/services/{ai-run-state-service.d.ts → agent-run-state-service.d.ts} +5 -5
  132. package/dist/services/agent-run-state-service.js +1 -0
  133. package/dist/services/{ai-agent-runner-service.d.ts → agent-runner-service.d.ts} +12 -12
  134. package/dist/services/agent-runner-service.js +1 -0
  135. package/dist/services/{ai-storage-service.d.ts → agent-storage-service.d.ts} +7 -7
  136. package/dist/services/agent-storage-service.js +1 -0
  137. package/dist/services/audit-service.d.ts +1 -1
  138. package/dist/services/credential-wire-service.js +1 -1
  139. package/dist/services/email-service.d.ts +1 -1
  140. package/dist/services/file-scenario-run-store.d.ts +58 -0
  141. package/dist/services/file-scenario-run-store.js +214 -0
  142. package/dist/services/http-personas.d.ts +1 -1
  143. package/dist/services/http-personas.js +3 -3
  144. package/dist/services/{in-memory-ai-run-state-service.d.ts → in-memory-agent-run-state-service.d.ts} +5 -5
  145. package/dist/services/{in-memory-ai-run-state-service.js → in-memory-agent-run-state-service.js} +1 -1
  146. package/dist/services/in-memory-workflow-service.d.ts +1 -1
  147. package/dist/services/index.d.ts +9 -5
  148. package/dist/services/index.js +4 -1
  149. package/dist/services/local-secrets.d.ts +1 -1
  150. package/dist/services/local-secrets.js +1 -1
  151. package/dist/services/logger.d.ts +7 -7
  152. package/dist/services/meta-service.d.ts +5 -4
  153. package/dist/services/scoped-secret-service.d.ts +1 -1
  154. package/dist/services/secret-service.d.ts +1 -1
  155. package/dist/services/typed-secret-service.d.ts +16 -2
  156. package/dist/services/typed-secret-service.js +5 -0
  157. package/dist/services/webhook-service.d.ts +1 -1
  158. package/dist/services/workflow-service.d.ts +2 -1
  159. package/dist/testing/index.d.ts +1 -0
  160. package/dist/testing/index.js +1 -0
  161. package/dist/testing/service-tests/agent-run-service-tests.d.ts +1 -1
  162. package/dist/testing/service-tests/agent-run-service-tests.js +3 -3
  163. package/dist/testing/service-tests/agent-storage-service-tests.d.ts +3 -0
  164. package/dist/testing/service-tests/{ai-storage-service-tests.js → agent-storage-service-tests.js} +4 -4
  165. package/dist/testing/service-tests.d.ts +4 -4
  166. package/dist/testing/service-tests.js +4 -4
  167. package/dist/types/core.types.d.ts +37 -187
  168. package/dist/types/core.types.js +1 -19
  169. package/dist/types/index.d.ts +2 -0
  170. package/dist/types/index.js +1 -0
  171. package/dist/types/state.types.d.ts +8 -6
  172. package/dist/utils.d.ts +13 -0
  173. package/dist/utils.js +2 -0
  174. package/dist/wirings/actor-flow/run-conversation.d.ts +2 -2
  175. package/dist/wirings/addon/addon-runner.d.ts +17 -0
  176. package/dist/wirings/addon/addon-runner.js +150 -0
  177. package/dist/wirings/addon/index.d.ts +6 -0
  178. package/dist/wirings/addon/index.js +3 -0
  179. package/dist/wirings/addon/remote-addon-auth.d.ts +16 -0
  180. package/dist/wirings/addon/remote-addon-auth.js +39 -0
  181. package/dist/wirings/addon/wire-addon.d.ts +80 -0
  182. package/dist/wirings/addon/wire-addon.js +120 -0
  183. package/dist/wirings/addon/wire-remote-addon.d.ts +22 -0
  184. package/dist/wirings/addon/wire-remote-addon.js +11 -0
  185. package/dist/wirings/{ai-agent/ai-agent-agui.d.ts → agent/agent-agui.d.ts} +2 -2
  186. package/dist/wirings/{ai-agent/ai-agent-agui.js → agent/agent-agui.js} +1 -1
  187. package/dist/wirings/{ai-agent/ai-agent-finalize.d.ts → agent/agent-finalize.d.ts} +10 -10
  188. package/dist/wirings/{ai-agent/ai-agent-finalize.js → agent/agent-finalize.js} +7 -7
  189. package/dist/wirings/{ai-agent/ai-agent-helpers.d.ts → agent/agent-helpers.d.ts} +1 -1
  190. package/dist/wirings/{ai-agent/ai-agent-interrupt.d.ts → agent/agent-interrupt.d.ts} +4 -4
  191. package/dist/wirings/{ai-agent/ai-agent-interrupt.js → agent/agent-interrupt.js} +2 -2
  192. package/dist/wirings/{ai-agent/ai-agent-memory.d.ts → agent/agent-memory.d.ts} +14 -14
  193. package/dist/wirings/{ai-agent/ai-agent-memory.js → agent/agent-memory.js} +1 -1
  194. package/dist/wirings/{ai-agent/ai-agent-model-config.js → agent/agent-model-config.js} +1 -1
  195. package/dist/wirings/{ai-agent/ai-agent-prepare.d.ts → agent/agent-prepare.d.ts} +24 -24
  196. package/dist/wirings/{ai-agent/ai-agent-prepare.js → agent/agent-prepare.js} +17 -17
  197. package/dist/wirings/agent/agent-registry.d.ts +16 -0
  198. package/dist/wirings/{ai-agent/ai-agent-registry.js → agent/agent-registry.js} +9 -9
  199. package/dist/wirings/{ai-agent → agent}/agent-rpc.js +8 -8
  200. package/dist/wirings/agent/agent-runner.d.ts +7 -0
  201. package/dist/wirings/{ai-agent/ai-agent-runner.js → agent/agent-runner.js} +49 -50
  202. package/dist/wirings/{ai-agent/ai-agent-stream.d.ts → agent/agent-stream.d.ts} +15 -15
  203. package/dist/wirings/{ai-agent/ai-agent-stream.js → agent/agent-stream.js} +78 -78
  204. package/dist/wirings/{ai-agent/ai-agent-turn.d.ts → agent/agent-turn.d.ts} +5 -5
  205. package/dist/wirings/{ai-agent/ai-agent-turn.js → agent/agent-turn.js} +4 -4
  206. package/dist/wirings/agent/agent-utils.d.ts +14 -0
  207. package/dist/wirings/agent/agent-utils.js +17 -0
  208. package/dist/wirings/{ai-agent/ai-agent.types.d.ts → agent/agent.types.d.ts} +47 -46
  209. package/dist/wirings/agent/agent.types.js +1 -0
  210. package/dist/wirings/agent/index.d.ts +12 -0
  211. package/dist/wirings/agent/index.js +10 -0
  212. package/dist/wirings/{ai-agent → agent}/voice-input.d.ts +1 -1
  213. package/dist/wirings/{ai-agent → agent}/voice-input.js +5 -5
  214. package/dist/wirings/{ai-agent → agent}/voice-output.d.ts +2 -3
  215. package/dist/wirings/{ai-agent → agent}/voice-output.js +8 -8
  216. package/dist/wirings/{ai-scorer/ai-scorer-grade.d.ts → agent-scorer/agent-scorer-grade.d.ts} +3 -3
  217. package/dist/wirings/{ai-scorer/ai-scorer-grade.js → agent-scorer/agent-scorer-grade.js} +6 -6
  218. package/dist/wirings/agent-scorer/agent-scorer-judge.d.ts +30 -0
  219. package/dist/wirings/{ai-scorer/ai-scorer-judge.js → agent-scorer/agent-scorer-judge.js} +57 -5
  220. package/dist/wirings/{ai-scorer/ai-scorer-live.d.ts → agent-scorer/agent-scorer-live.d.ts} +1 -1
  221. package/dist/wirings/{ai-scorer/ai-scorer-live.js → agent-scorer/agent-scorer-live.js} +3 -3
  222. package/dist/wirings/{ai-scorer/ai-scorer-registry.d.ts → agent-scorer/agent-scorer-registry.d.ts} +6 -6
  223. package/dist/wirings/{ai-scorer/ai-scorer-registry.js → agent-scorer/agent-scorer-registry.js} +4 -4
  224. package/dist/wirings/{ai-scorer/ai-scorer-snapshots.d.ts → agent-scorer/agent-scorer-snapshots.d.ts} +1 -1
  225. package/dist/wirings/{ai-scorer/ai-scorer-worker.d.ts → agent-scorer/agent-scorer-worker.d.ts} +3 -3
  226. package/dist/wirings/{ai-scorer/ai-scorer-worker.js → agent-scorer/agent-scorer-worker.js} +9 -7
  227. package/dist/wirings/{ai-scorer/ai-scorer.d.ts → agent-scorer/agent-scorer.d.ts} +12 -6
  228. package/dist/wirings/{ai-scorer/ai-scorer.js → agent-scorer/agent-scorer.js} +4 -3
  229. package/dist/wirings/{ai-scorer/ai-scorer.types.d.ts → agent-scorer/agent-scorer.types.d.ts} +24 -4
  230. package/dist/wirings/agent-scorer/agent-scorer.types.js +4 -0
  231. package/dist/wirings/agent-scorer/index.d.ts +6 -0
  232. package/dist/wirings/agent-scorer/index.js +5 -0
  233. package/dist/wirings/channel/channel-common.d.ts +2 -1
  234. package/dist/wirings/channel/channel-middleware-runner.d.ts +2 -1
  235. package/dist/wirings/channel/channel-rpc.types.d.ts +2 -2
  236. package/dist/wirings/channel/channel.types.d.ts +1 -1
  237. package/dist/wirings/channel/serverless/index.d.ts +1 -0
  238. package/dist/wirings/cli/channel/index.d.ts +1 -1
  239. package/dist/wirings/cli/cli-runner.d.ts +2 -1
  240. package/dist/wirings/cli/cli-runner.js +4 -1
  241. package/dist/wirings/cli/cli.types.d.ts +21 -2
  242. package/dist/wirings/cli/command-parser.js +157 -23
  243. package/dist/wirings/gateway/gateway.types.d.ts +2 -1
  244. package/dist/wirings/http/http-runner.d.ts +1 -1
  245. package/dist/wirings/http/http-runner.js +1 -1
  246. package/dist/wirings/http/http.types.d.ts +2 -2
  247. package/dist/wirings/http/index.d.ts +1 -0
  248. package/dist/wirings/http/index.js +1 -0
  249. package/dist/wirings/http/pikku-fetch-http-request.js +1 -1
  250. package/dist/wirings/http/pikku-fetch-http-response.js +2 -2
  251. package/dist/wirings/mcp/mcp.types.d.ts +1 -1
  252. package/dist/wirings/persona/index.d.ts +1 -1
  253. package/dist/wirings/persona/index.js +1 -1
  254. package/dist/wirings/persona/persona.types.d.ts +14 -0
  255. package/dist/wirings/queue/queue.types.d.ts +1 -1
  256. package/dist/wirings/queue/signed-queue-service.d.ts +1 -1
  257. package/dist/wirings/rpc/index.d.ts +0 -6
  258. package/dist/wirings/rpc/index.js +0 -3
  259. package/dist/wirings/rpc/remote-addon-auth.d.ts +1 -1
  260. package/dist/wirings/rpc/remote-addon-auth.js +1 -1
  261. package/dist/wirings/rpc/rpc-runner.d.ts +1 -1
  262. package/dist/wirings/rpc/rpc-runner.js +4 -4
  263. package/dist/wirings/rpc/rpc-types.d.ts +1 -1
  264. package/dist/wirings/rpc/wire-addon.d.ts +1 -1
  265. package/dist/wirings/scheduler/scheduler.types.d.ts +2 -1
  266. package/dist/wirings/scope/index.d.ts +1 -0
  267. package/dist/wirings/scope/index.js +1 -0
  268. package/dist/wirings/secret/secret.types.d.ts +10 -0
  269. package/dist/wirings/secret/validate-secret-definitions.js +2 -0
  270. package/dist/wirings/variable/validate-variable-definitions.js +2 -0
  271. package/dist/wirings/variable/variable.types.d.ts +9 -0
  272. package/dist/wirings/virtual-user/index.d.ts +1 -1
  273. package/dist/wirings/virtual-user/index.js +1 -1
  274. package/dist/wirings/virtual-user/prepare-virtual-user-run.d.ts +1 -1
  275. package/dist/wirings/virtual-user/prepare-virtual-user-run.js +1 -1
  276. package/dist/wirings/virtual-user/virtual-user-agents.d.ts +1 -1
  277. package/dist/wirings/virtual-user/virtual-user-derive.d.ts +1 -1
  278. package/dist/wirings/workflow/graph/graph-node.d.ts +9 -2
  279. package/dist/wirings/workflow/graph/graph-node.js +2 -0
  280. package/dist/wirings/workflow/graph/graph-runner.d.ts +1 -0
  281. package/dist/wirings/workflow/graph/graph-runner.js +283 -31
  282. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +16 -1
  283. package/dist/wirings/workflow/index.d.ts +2 -0
  284. package/dist/wirings/workflow/index.js +1 -0
  285. package/dist/wirings/workflow/pikku-scenario-service.d.ts +14 -4
  286. package/dist/wirings/workflow/pikku-scenario-service.js +44 -16
  287. package/dist/wirings/workflow/pikku-workflow-service.d.ts +2 -1
  288. package/dist/wirings/workflow/pikku-workflow-service.js +3 -4
  289. package/dist/wirings/workflow/run-timeline.d.ts +2 -3
  290. package/dist/wirings/workflow/scenario-run.types.d.ts +171 -0
  291. package/dist/wirings/workflow/scenario-run.types.js +1 -0
  292. package/dist/wirings/workflow/scenario-step-guards.d.ts +1 -2
  293. package/dist/wirings/workflow/scenario-step-guards.js +0 -8
  294. package/dist/wirings/workflow/scenario-step.types.d.ts +27 -12
  295. package/dist/wirings/workflow/workflow-approval.js +2 -1
  296. package/dist/wirings/workflow/workflow-run-engine.types.d.ts +2 -1
  297. package/dist/wirings/workflow/workflow.types.d.ts +2 -1
  298. package/knowledge/decisions/index.md +2 -0
  299. package/knowledge/decisions/internals/{a-non-streaming-agent-run-registers-with-airunstate-too.md → a-non-streaming-agent-run-registers-with-agentrunstate-too.md} +6 -6
  300. package/knowledge/decisions/internals/a-resumed-agent-turn-is-as-interruptible-as-the-first.md +1 -1
  301. package/knowledge/decisions/internals/a-scenario-step-template-is-offered-unfilled.md +1 -1
  302. package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +1 -1
  303. package/knowledge/decisions/internals/a-virtual-user-run-is-not-a-workflow-and-not-a-queued-job.md +2 -2
  304. package/knowledge/decisions/internals/a-wall-clock-threshold-is-a-load-test-in-disguise.md +6 -6
  305. package/knowledge/decisions/internals/a-workflow-wire-is-built-from-the-run-not-from-the-rpc-service.md +1 -1
  306. package/knowledge/decisions/internals/actor-flow-drives-the-target-through-a-transport-seam.md +1 -1
  307. package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +1 -1
  308. package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +1 -1
  309. package/knowledge/decisions/internals/{ai-agent-agui-bridge-obeys-the-client-ordering-contract.md → agent-agui-bridge-obeys-the-client-ordering-contract.md} +5 -5
  310. package/knowledge/decisions/internals/{ai-agent-audio-chunks-carry-the-format-the-provider-returned.md → agent-audio-chunks-carry-the-format-the-provider-returned.md} +2 -2
  311. package/knowledge/decisions/internals/agent-context-waits-for-a-tool-result-still-being-written.md +1 -1
  312. package/knowledge/decisions/internals/{ai-agent-credential-suspensions-hide-the-tool-result.md → agent-credential-suspensions-hide-the-tool-result.md} +2 -2
  313. package/knowledge/decisions/internals/{ai-agent-delegate-and-supervise-hide-different-text.md → agent-delegate-and-supervise-hide-different-text.md} +4 -4
  314. package/knowledge/decisions/internals/{ai-agent-llm-tool-arguments-have-nulls-stripped.md → agent-llm-tool-arguments-have-nulls-stripped.md} +3 -3
  315. package/knowledge/decisions/internals/{ai-agent-model-config-stays-a-single-resolution-seam.md → agent-model-config-stays-a-single-resolution-seam.md} +3 -3
  316. package/knowledge/decisions/internals/{ai-agent-onerror-hooks-cannot-change-the-failure.md → agent-onerror-hooks-cannot-change-the-failure.md} +6 -6
  317. package/knowledge/decisions/internals/{ai-agent-runner-methods-must-keep-their-receiver.md → agent-runner-methods-must-keep-their-receiver.md} +4 -4
  318. package/knowledge/decisions/internals/agent-speech-travels-as-a-custom-agui-event.md +1 -1
  319. package/knowledge/decisions/internals/{ai-agent-stream-persistence-is-best-effort.md → agent-stream-persistence-is-best-effort.md} +4 -4
  320. package/knowledge/decisions/internals/{ai-agent-sub-agents-inherit-the-parent-context-block.md → agent-sub-agents-inherit-the-parent-context-block.md} +3 -3
  321. package/knowledge/decisions/internals/{ai-agent-tool-execute-failures-are-logged-unconditionally.md → agent-tool-execute-failures-are-logged-unconditionally.md} +3 -3
  322. package/knowledge/decisions/internals/{ai-agent-voice-input-transcribes-audio-parts-in-place.md → agent-voice-input-transcribes-audio-parts-in-place.md} +2 -2
  323. package/knowledge/decisions/internals/{ai-agent-working-memory-is-persisted-only-when-valid.md → agent-working-memory-is-persisted-only-when-valid.md} +2 -2
  324. package/knowledge/decisions/internals/an-addon-scope-root-loses-to-a-root-the-host-already-declares.md +1 -1
  325. package/knowledge/decisions/internals/an-agent-interrupt-is-not-a-failure.md +2 -2
  326. package/knowledge/decisions/internals/an-agent-run-owned-by-another-instance-says-so.md +3 -3
  327. package/knowledge/decisions/internals/an-agent-stream-send-must-return-the-inner-sends-promise.md +2 -2
  328. package/knowledge/decisions/internals/an-empty-text-part-is-omitted-from-an-agent-message.md +1 -1
  329. package/knowledge/decisions/internals/an-empty-transcript-is-not-recorded.md +1 -1
  330. package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +1 -1
  331. package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +1 -1
  332. package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +1 -1
  333. package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +1 -1
  334. package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +1 -1
  335. package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +1 -1
  336. package/knowledge/decisions/internals/core-column-form-is-an-axis-of-its-own.md +4 -4
  337. package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +1 -1
  338. package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +3 -3
  339. package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +2 -2
  340. package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +2 -2
  341. package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +1 -1
  342. package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +1 -1
  343. package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +3 -3
  344. package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +1 -1
  345. package/knowledge/decisions/internals/gateway-listener-middleware-runs-without-an-rpc-on-the-wire.md +4 -4
  346. package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +1 -1
  347. package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +1 -1
  348. package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +1 -1
  349. package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +1 -1
  350. package/knowledge/decisions/internals/index.md +4 -2
  351. package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +1 -1
  352. package/knowledge/decisions/internals/one-project-shape-check-two-validators.md +1 -1
  353. package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +1 -1
  354. package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +1 -1
  355. package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +1 -1
  356. package/knowledge/decisions/internals/scenario-given-and-when-are-sugar-but-then-is-not.md +2 -2
  357. package/knowledge/decisions/internals/scenarios-live-in-files-named-for-them.md +5 -5
  358. package/knowledge/decisions/internals/speech-synthesis-picks-a-voice-per-sentence-and-warns-once.md +1 -1
  359. package/knowledge/decisions/internals/the-actor-prompt-says-json-because-of-json-object-mode.md +1 -1
  360. package/knowledge/decisions/internals/the-agent-done-event-goes-through-the-middleware-and-is-awaited.md +1 -1
  361. package/knowledge/decisions/internals/the-api-report-pins-members-not-just-names.md +1 -1
  362. package/knowledge/decisions/internals/the-ecosystem-entry-point-carries-the-adapter-surface.md +43 -19
  363. package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +1 -1
  364. package/knowledge/decisions/internals/the-per-invocation-rpc-view-is-a-class.md +5 -5
  365. package/knowledge/decisions/internals/the-persona-runtime-is-exported-from-the-persona-entry-point.md +1 -1
  366. package/knowledge/decisions/internals/the-transcript-event-is-sent-ahead-of-the-run.md +2 -2
  367. package/knowledge/decisions/internals/the-worker-disposition-is-the-one-that-is-not-testing.md +1 -1
  368. package/knowledge/decisions/internals/thread-history-records-the-transcript-not-the-audio.md +2 -2
  369. package/knowledge/decisions/internals/validate-runs-checks-by-precondition.md +3 -3
  370. package/knowledge/decisions/internals/virtual-user-step-order-comes-from-insertion-order.md +1 -1
  371. package/knowledge/decisions/internals/voice-output-speaks-unless-voice-input-explicitly-says-otherwise.md +1 -1
  372. package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +1 -1
  373. package/knowledge/decisions/internals/wiring-registries-erase-the-generics-their-wire-functions-capture.md +1 -1
  374. package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +1 -1
  375. package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +1 -1
  376. package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +1 -1
  377. package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +1 -1
  378. package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +1 -1
  379. package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +1 -1
  380. package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +9 -5
  381. package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +1 -1
  382. package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +2 -2
  383. package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +1 -1
  384. package/knowledge/decisions/security/a-function-never-receives-the-secret-service.md +1 -1
  385. package/knowledge/decisions/security/a-step-runs-the-function-the-workflow-dispatched-it-with.md +1 -1
  386. package/knowledge/decisions/security/a-virtual-user-is-never-offered-a-step-that-would-forge-its-own-oracle.md +2 -3
  387. package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +1 -1
  388. package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +1 -1
  389. package/knowledge/decisions/security/{ai-agent-approval-forwarding-requires-a-symbol-brand.md → agent-approval-forwarding-requires-a-symbol-brand.md} +3 -3
  390. package/knowledge/decisions/security/{ai-agent-credential-requests-are-symbol-branded.md → agent-credential-requests-are-symbol-branded.md} +4 -4
  391. package/knowledge/decisions/security/{ai-agent-gate-requires-a-session-only-when-auth-is-true.md → agent-gate-requires-a-session-only-when-auth-is-true.md} +4 -4
  392. package/knowledge/decisions/security/{ai-agent-ownership-failures-never-echo-the-resource.md → agent-ownership-failures-never-echo-the-resource.md} +2 -2
  393. package/knowledge/decisions/security/{ai-agent-resume-re-runs-the-authorization-gate.md → agent-resume-re-runs-the-authorization-gate.md} +4 -4
  394. package/knowledge/decisions/security/{ai-agent-sessionless-deployments-have-no-thread-ownership.md → agent-sessionless-deployments-have-no-thread-ownership.md} +5 -5
  395. package/knowledge/decisions/security/{ai-agent-thread-ownership-composes-the-session-principal.md → agent-thread-ownership-composes-the-session-principal.md} +2 -2
  396. package/knowledge/decisions/security/{ai-agent-tool-filtering-reads-the-live-function-config.md → agent-tool-filtering-reads-the-live-function-config.md} +2 -2
  397. package/knowledge/decisions/security/an-agent-approval-is-claimed-before-the-tool-runs.md +3 -3
  398. package/knowledge/decisions/security/an-approval-answer-outlives-the-run-it-answered.md +3 -3
  399. package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +3 -3
  400. package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +21 -13
  401. package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +1 -1
  402. package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +2 -2
  403. package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +1 -1
  404. package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +2 -2
  405. package/knowledge/decisions/security/index.md +3 -2
  406. package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +1 -1
  407. package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +3 -3
  408. package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +1 -1
  409. package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +2 -2
  410. package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +1 -1
  411. package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +2 -2
  412. package/knowledge/index.md +3 -1
  413. package/knowledge/questions/channel-middleware-accepts-bare-factories-that-nothing-resolves.md +1 -1
  414. package/knowledge/questions/index.md +2 -0
  415. package/package.json +16 -14
  416. package/run-tests.sh +0 -0
  417. package/scripts/generate-api-report.d.mts +1 -1
  418. package/scripts/generate-api-report.mjs +67 -60
  419. package/scripts/generate-api-report.mts +37 -47
  420. package/src/agent-naming.test.ts +68 -0
  421. package/src/api-report.test.ts +70 -1
  422. package/src/app-alias-surface.test.ts +179 -0
  423. package/src/app-leaf-surface.test.ts +217 -0
  424. package/src/bootstrap-compat/root.ts +20 -0
  425. package/src/{column-form.test.ts → classification/column-form.test.ts} +2 -2
  426. package/src/{data-classification.ts → classification/data-classification.ts} +1 -5
  427. package/src/classification/index.ts +38 -0
  428. package/src/{secret-value.test.ts → classification/secret-value.test.ts} +2 -2
  429. package/src/{secret-value.ts → classification/secret-value.ts} +1 -6
  430. package/src/crypto-utils.ts +1 -1
  431. package/src/dev/reload-meta.test.ts +1 -1
  432. package/src/errors/index.ts +9 -0
  433. package/src/errors/serialized-error.ts +9 -0
  434. package/src/factory-functions.test.ts +4 -2
  435. package/src/function/function-meta.types.ts +151 -0
  436. package/src/function/function-runner.test.ts +4 -2
  437. package/src/function/function-runner.ts +47 -14
  438. package/src/function/functions.types.ts +11 -7
  439. package/src/function/index.ts +24 -5
  440. package/src/function/list.types.ts +1 -3
  441. package/src/middleware/auth-apikey.ts +4 -2
  442. package/src/middleware/auth-bearer.test.ts +1 -1
  443. package/src/middleware/auth-bearer.ts +4 -2
  444. package/src/middleware/auth-cookie.ts +4 -1
  445. package/src/middleware/cors.test.ts +126 -5
  446. package/src/middleware/cors.ts +19 -8
  447. package/src/middleware/index.ts +16 -0
  448. package/src/middleware/middleware-factories.ts +62 -0
  449. package/src/middleware/middleware.types.ts +61 -0
  450. package/src/middleware/remote-auth.test.ts +1 -1
  451. package/src/middleware/remote-auth.ts +1 -1
  452. package/src/middleware/telemetry.ts +4 -2
  453. package/src/middleware-runner.test.ts +2 -3
  454. package/src/middleware-runner.ts +2 -2
  455. package/src/no-root-barrel.test.ts +114 -0
  456. package/src/permissions.ts +2 -4
  457. package/src/pikku-state.ts +6 -4
  458. package/src/public-surface.json +90 -170
  459. package/src/public-surface.json.README +20 -2
  460. package/src/public-surface.test.ts +31 -3
  461. package/src/remote.test.ts +1 -1
  462. package/src/removed-legacy-exports.test.ts +5 -1
  463. package/src/services/{ai-run-state-service.ts → agent-run-state-service.ts} +5 -5
  464. package/src/services/{ai-agent-runner-service.ts → agent-runner-service.ts} +18 -18
  465. package/src/services/{ai-storage-service.ts → agent-storage-service.ts} +7 -7
  466. package/src/services/audit-service.ts +1 -1
  467. package/src/services/credential-wire-service.ts +1 -1
  468. package/src/services/email-service.ts +2 -4
  469. package/src/services/file-scenario-run-store.test.ts +349 -0
  470. package/src/services/file-scenario-run-store.ts +282 -0
  471. package/src/services/http-personas-converse.test.ts +3 -3
  472. package/src/services/http-personas.ts +4 -4
  473. package/src/services/{in-memory-ai-run-state-service.ts → in-memory-agent-run-state-service.ts} +7 -7
  474. package/src/services/in-memory-workflow-service.ts +1 -1
  475. package/src/services/index.ts +22 -10
  476. package/src/services/local-content-request-handler.ts +1 -2
  477. package/src/services/local-secrets.ts +1 -1
  478. package/src/services/logger.ts +7 -7
  479. package/src/services/meta-service.ts +5 -5
  480. package/src/services/queue-webhook-service.test.ts +1 -1
  481. package/src/services/scoped-secret-service.ts +1 -1
  482. package/src/services/secret-service.ts +1 -1
  483. package/src/services/typed-secret-service.test.ts +52 -0
  484. package/src/services/typed-secret-service.ts +26 -2
  485. package/src/services/webhook-service.ts +1 -1
  486. package/src/services/workflow-service.ts +2 -1
  487. package/src/template-alias-surface.test.ts +240 -0
  488. package/src/testing/index.ts +1 -0
  489. package/src/testing/service-tests/agent-run-service-tests.ts +4 -4
  490. package/src/testing/service-tests/{ai-storage-service-tests.ts → agent-storage-service-tests.ts} +8 -8
  491. package/src/testing/service-tests.ts +10 -8
  492. package/src/types/core.types.ts +40 -292
  493. package/src/types/index.ts +2 -0
  494. package/src/types/state.types.ts +12 -14
  495. package/src/types/typed-credentials.test.ts +72 -0
  496. package/src/utils.ts +34 -0
  497. package/src/wirings/actor-flow/run-conversation.test.ts +2 -2
  498. package/src/wirings/actor-flow/run-conversation.ts +7 -9
  499. package/src/wirings/{rpc → addon}/addon-scopes.test.ts +1 -1
  500. package/src/wirings/addon/index.ts +12 -0
  501. package/src/wirings/{rpc → addon}/remote-addon-auth.ts +4 -1
  502. package/src/wirings/{rpc → addon}/wire-addon.ts +37 -2
  503. package/src/wirings/{ai-agent/ai-agent-agui.test.ts → agent/agent-agui.test.ts} +126 -105
  504. package/src/wirings/{ai-agent/ai-agent-agui.ts → agent/agent-agui.ts} +7 -7
  505. package/src/wirings/{ai-agent/ai-agent-authorization.test.ts → agent/agent-authorization.test.ts} +6 -6
  506. package/src/wirings/{ai-agent/ai-agent-finalize.test.ts → agent/agent-finalize.test.ts} +17 -16
  507. package/src/wirings/{ai-agent/ai-agent-finalize.ts → agent/agent-finalize.ts} +22 -22
  508. package/src/wirings/{ai-agent/ai-agent-helpers.test.ts → agent/agent-helpers.test.ts} +1 -1
  509. package/src/wirings/{ai-agent/ai-agent-helpers.ts → agent/agent-helpers.ts} +1 -1
  510. package/src/wirings/{ai-agent/ai-agent-interrupt.test.ts → agent/agent-interrupt.test.ts} +67 -77
  511. package/src/wirings/{ai-agent/ai-agent-interrupt.ts → agent/agent-interrupt.ts} +5 -5
  512. package/src/wirings/{ai-agent/ai-agent-memory.test.ts → agent/agent-memory.test.ts} +12 -12
  513. package/src/wirings/{ai-agent/ai-agent-memory.ts → agent/agent-memory.ts} +36 -36
  514. package/src/wirings/{ai-agent/ai-agent-model-config.test.ts → agent/agent-model-config.test.ts} +2 -5
  515. package/src/wirings/{ai-agent/ai-agent-model-config.ts → agent/agent-model-config.ts} +1 -1
  516. package/src/wirings/{ai-agent/ai-agent-prepare.test.ts → agent/agent-prepare.test.ts} +18 -18
  517. package/src/wirings/{ai-agent/ai-agent-prepare.ts → agent/agent-prepare.ts} +60 -56
  518. package/src/wirings/{ai-agent/ai-agent-registry.test.ts → agent/agent-registry.test.ts} +49 -43
  519. package/src/wirings/{ai-agent/ai-agent-registry.ts → agent/agent-registry.ts} +14 -14
  520. package/src/wirings/{ai-agent/ai-agent-resume-authorization.test.ts → agent/agent-resume-authorization.test.ts} +18 -18
  521. package/src/wirings/{ai-agent → agent}/agent-rpc.ts +16 -20
  522. package/src/wirings/{ai-agent/ai-agent-runner.test.ts → agent/agent-runner.test.ts} +105 -106
  523. package/src/wirings/{ai-agent/ai-agent-runner.ts → agent/agent-runner.ts} +91 -82
  524. package/src/wirings/{ai-agent/ai-agent-stream-output-hooks.test.ts → agent/agent-stream-output-hooks.test.ts} +25 -25
  525. package/src/wirings/{ai-agent/ai-agent-stream.test.ts → agent/agent-stream.test.ts} +147 -143
  526. package/src/wirings/{ai-agent/ai-agent-stream.ts → agent/agent-stream.ts} +148 -148
  527. package/src/wirings/{ai-agent/ai-agent-thread-ownership.test.ts → agent/agent-thread-ownership.test.ts} +24 -28
  528. package/src/wirings/{ai-agent/ai-agent-turn.test.ts → agent/agent-turn.test.ts} +3 -5
  529. package/src/wirings/{ai-agent/ai-agent-turn.ts → agent/agent-turn.ts} +7 -7
  530. package/src/wirings/agent/agent-utils.ts +20 -0
  531. package/src/wirings/{ai-agent/ai-agent.types.ts → agent/agent.types.ts} +54 -51
  532. package/src/wirings/agent/index.ts +57 -0
  533. package/src/wirings/{ai-agent → agent}/voice-input.test.ts +15 -15
  534. package/src/wirings/{ai-agent → agent}/voice-input.ts +11 -11
  535. package/src/wirings/{ai-agent → agent}/voice-output.test.ts +25 -27
  536. package/src/wirings/{ai-agent → agent}/voice-output.ts +11 -11
  537. package/src/wirings/{ai-scorer/ai-scorer-grade.test.ts → agent-scorer/agent-scorer-grade.test.ts} +8 -8
  538. package/src/wirings/{ai-scorer/ai-scorer-grade.ts → agent-scorer/agent-scorer-grade.ts} +9 -9
  539. package/src/wirings/agent-scorer/agent-scorer-judge.test.ts +285 -0
  540. package/src/wirings/agent-scorer/agent-scorer-judge.ts +180 -0
  541. package/src/wirings/{ai-scorer/ai-scorer-live.test.ts → agent-scorer/agent-scorer-live.test.ts} +11 -11
  542. package/src/wirings/{ai-scorer/ai-scorer-live.ts → agent-scorer/agent-scorer-live.ts} +3 -3
  543. package/src/wirings/{ai-scorer/ai-scorer-registry.ts → agent-scorer/agent-scorer-registry.ts} +11 -8
  544. package/src/wirings/{ai-scorer/ai-scorer-sampling.test.ts → agent-scorer/agent-scorer-sampling.test.ts} +1 -1
  545. package/src/wirings/{ai-scorer/ai-scorer-snapshots.test.ts → agent-scorer/agent-scorer-snapshots.test.ts} +2 -2
  546. package/src/wirings/{ai-scorer/ai-scorer-snapshots.ts → agent-scorer/agent-scorer-snapshots.ts} +1 -1
  547. package/src/wirings/{ai-scorer/ai-scorer-worker.test.ts → agent-scorer/agent-scorer-worker.test.ts} +15 -15
  548. package/src/wirings/{ai-scorer/ai-scorer-worker.ts → agent-scorer/agent-scorer-worker.ts} +9 -7
  549. package/src/wirings/{ai-scorer/ai-scorer.ts → agent-scorer/agent-scorer.ts} +15 -7
  550. package/src/wirings/{ai-scorer/ai-scorer.types.ts → agent-scorer/agent-scorer.types.ts} +27 -6
  551. package/src/wirings/agent-scorer/index.ts +23 -0
  552. package/src/wirings/channel/channel-common.ts +4 -2
  553. package/src/wirings/channel/channel-handler.ts +2 -5
  554. package/src/wirings/channel/channel-middleware-runner.ts +1 -1
  555. package/src/wirings/channel/channel-rpc.types.ts +3 -7
  556. package/src/wirings/channel/channel.types.ts +1 -2
  557. package/src/wirings/channel/local/local-channel-runner.test.ts +1 -2
  558. package/src/wirings/channel/serverless/index.ts +1 -0
  559. package/src/wirings/cli/channel/cli-raw-channel-runner.ts +2 -2
  560. package/src/wirings/cli/channel/index.ts +1 -3
  561. package/src/wirings/cli/cli-runner.test.ts +1 -1
  562. package/src/wirings/cli/cli-runner.ts +11 -7
  563. package/src/wirings/cli/cli.types.ts +24 -3
  564. package/src/wirings/cli/command-parser.test.ts +388 -1
  565. package/src/wirings/cli/command-parser.ts +189 -29
  566. package/src/wirings/gateway/gateway-runner.test.ts +1 -2
  567. package/src/wirings/gateway/gateway-runner.ts +3 -6
  568. package/src/wirings/gateway/gateway.types.ts +5 -4
  569. package/src/wirings/http/http-routes.test.ts +1 -2
  570. package/src/wirings/http/http-runner-addon-ref.test.ts +238 -0
  571. package/src/wirings/http/http-runner.test.ts +3 -8
  572. package/src/wirings/http/http-runner.ts +9 -3
  573. package/src/wirings/http/http.types.ts +3 -12
  574. package/src/wirings/http/index.ts +1 -0
  575. package/src/wirings/http/pikku-fetch-http-request.ts +1 -1
  576. package/src/wirings/http/pikku-fetch-http-response.ts +3 -2
  577. package/src/wirings/mcp/mcp-runner.test.ts +1 -1
  578. package/src/wirings/mcp/mcp.types.ts +1 -2
  579. package/src/wirings/persona/index.ts +1 -4
  580. package/src/wirings/persona/persona.types.ts +14 -0
  581. package/src/wirings/queue/queue-identity.test.ts +1 -1
  582. package/src/wirings/queue/queue.types.ts +2 -6
  583. package/src/wirings/queue/signed-queue-service.ts +1 -1
  584. package/src/wirings/rpc/index.ts +0 -12
  585. package/src/wirings/rpc/rpc-runner.test.ts +4 -4
  586. package/src/wirings/rpc/rpc-runner.ts +5 -5
  587. package/src/wirings/rpc/rpc-types.ts +1 -1
  588. package/src/wirings/scheduler/scheduler.types.ts +2 -5
  589. package/src/wirings/scope/index.ts +1 -0
  590. package/src/wirings/secret/secret.types.ts +10 -0
  591. package/src/wirings/secret/validate-secret-definitions.test.ts +23 -0
  592. package/src/wirings/secret/validate-secret-definitions.ts +2 -0
  593. package/src/wirings/variable/validate-variable-definitions.test.ts +23 -0
  594. package/src/wirings/variable/validate-variable-definitions.ts +2 -0
  595. package/src/wirings/variable/variable.types.ts +9 -0
  596. package/src/wirings/virtual-user/index.ts +1 -4
  597. package/src/wirings/virtual-user/prepare-virtual-user-run.ts +2 -2
  598. package/src/wirings/virtual-user/run-virtual-user.test.ts +2 -2
  599. package/src/wirings/virtual-user/run-virtual-user.ts +3 -3
  600. package/src/wirings/virtual-user/virtual-user-agents.ts +1 -1
  601. package/src/wirings/virtual-user/virtual-user-derive.test.ts +1 -1
  602. package/src/wirings/virtual-user/virtual-user-derive.ts +1 -1
  603. package/src/wirings/virtual-user/virtual-user.types.ts +1 -5
  604. package/src/wirings/workflow/graph/graph-foreach-queued.test.ts +569 -0
  605. package/src/wirings/workflow/graph/graph-foreach.test.ts +626 -0
  606. package/src/wirings/workflow/graph/graph-node.ts +16 -1
  607. package/src/wirings/workflow/graph/graph-runner.ts +387 -61
  608. package/src/wirings/workflow/graph/workflow-graph.types.ts +28 -3
  609. package/src/wirings/workflow/index.ts +8 -0
  610. package/src/wirings/workflow/pikku-scenario-service.ts +59 -19
  611. package/src/wirings/workflow/pikku-workflow-service.ts +6 -8
  612. package/src/wirings/workflow/run-timeline.ts +2 -2
  613. package/src/wirings/workflow/scenario-expectations.test.ts +28 -13
  614. package/src/wirings/workflow/scenario-run.types.ts +186 -0
  615. package/src/wirings/workflow/scenario-step-guards.ts +1 -14
  616. package/src/wirings/workflow/scenario-step.test.ts +32 -7
  617. package/src/wirings/workflow/scenario-step.types.ts +27 -12
  618. package/src/wirings/workflow/workflow-approval-policy.test.ts +117 -47
  619. package/src/wirings/workflow/workflow-approval.ts +2 -1
  620. package/src/wirings/workflow/workflow-run-engine.types.ts +2 -1
  621. package/src/wirings/workflow/workflow.types.ts +4 -12
  622. package/src/wirings-stay-decoupled.test.ts +7 -4
  623. package/tsconfig.tsbuildinfo +1 -1
  624. package/tsconfig.type-tests.json +3 -2
  625. package/dist/testing/service-tests/ai-storage-service-tests.d.ts +0 -3
  626. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +0 -16
  627. package/dist/wirings/ai-agent/ai-agent-runner.d.ts +0 -7
  628. package/dist/wirings/ai-agent/ai-agent-utils.d.ts +0 -1
  629. package/dist/wirings/ai-agent/ai-agent-utils.js +0 -1
  630. package/dist/wirings/ai-agent/index.d.ts +0 -12
  631. package/dist/wirings/ai-agent/index.js +0 -10
  632. package/dist/wirings/ai-scorer/ai-scorer-judge.d.ts +0 -17
  633. package/dist/wirings/ai-scorer/ai-scorer.types.js +0 -4
  634. package/dist/wirings/ai-scorer/index.d.ts +0 -6
  635. package/dist/wirings/ai-scorer/index.js +0 -5
  636. package/src/ecosystem.ts +0 -40
  637. package/src/index.ts +0 -255
  638. package/src/wirings/ai-agent/ai-agent-utils.ts +0 -1
  639. package/src/wirings/ai-agent/index.ts +0 -65
  640. package/src/wirings/ai-scorer/ai-scorer-judge.test.ts +0 -143
  641. package/src/wirings/ai-scorer/ai-scorer-judge.ts +0 -120
  642. package/src/wirings/ai-scorer/index.ts +0 -24
  643. /package/dist/{services/ai-agent-runner-service.js → bootstrap-compat/root.js} +0 -0
  644. /package/dist/{services/ai-run-state-service.js → classification/data-classification.js} +0 -0
  645. /package/dist/{services/ai-storage-service.js → ecosystem/gateway.js} +0 -0
  646. /package/dist/{wirings/ai-agent/ai-agent.types.js → ecosystem/node.js} +0 -0
  647. /package/dist/wirings/{ai-agent/ai-agent-helpers.js → agent/agent-helpers.js} +0 -0
  648. /package/dist/wirings/{ai-agent/ai-agent-model-config.d.ts → agent/agent-model-config.d.ts} +0 -0
  649. /package/dist/wirings/{ai-agent → agent}/agent-rpc.d.ts +0 -0
  650. /package/dist/wirings/{ai-scorer/ai-scorer-sampling.d.ts → agent-scorer/agent-scorer-sampling.d.ts} +0 -0
  651. /package/dist/wirings/{ai-scorer/ai-scorer-sampling.js → agent-scorer/agent-scorer-sampling.js} +0 -0
  652. /package/dist/wirings/{ai-scorer/ai-scorer-snapshots.js → agent-scorer/agent-scorer-snapshots.js} +0 -0
  653. /package/src/{column-form.ts → classification/column-form.ts} +0 -0
  654. /package/src/{pikku-request.test.ts → function/pikku-request.test.ts} +0 -0
  655. /package/src/{pikku-request.ts → function/pikku-request.ts} +0 -0
  656. /package/src/wirings/{rpc → addon}/addon-auth-tags.test.ts +0 -0
  657. /package/src/wirings/{rpc → addon}/addon-runner.ts +0 -0
  658. /package/src/wirings/{rpc → addon}/addon-secrets.test.ts +0 -0
  659. /package/src/wirings/{rpc → addon}/wire-addon.test.ts +0 -0
  660. /package/src/wirings/{rpc → addon}/wire-remote-addon.ts +0 -0
  661. /package/src/wirings/{ai-scorer/ai-scorer-sampling.ts → agent-scorer/agent-scorer-sampling.ts} +0 -0
@@ -4,7 +4,7 @@ import type { SecretService } from '../services/secret-service.js';
4
4
  import type { SchemaService } from '../services/schema-service.js';
5
5
  import type { JWTService } from '../services/jwt-service.js';
6
6
  import type { PikkuHTTP } from '../wirings/http/http.types.js';
7
- import type { PikkuChannel, CorePikkuChannelMiddleware, CorePikkuChannelMiddlewareFactory } from '../wirings/channel/channel.types.js';
7
+ import type { PikkuChannel } from '../wirings/channel/channel.types.js';
8
8
  import type { EventHubService } from '../wirings/channel/eventhub-service.js';
9
9
  import type { PikkuRPC } from '../wirings/rpc/rpc-types.js';
10
10
  import type { PikkuMCP } from '../wirings/mcp/mcp.types.js';
@@ -13,21 +13,22 @@ import type { PikkuQueue, QueueService } from '../wirings/queue/queue.types.js';
13
13
  import type { PikkuCLI } from '../wirings/cli/cli.types.js';
14
14
  import type { PikkuWorkflowWire, WorkflowService, WorkflowServiceConfig, WorkflowStepWire } from '../wirings/workflow/workflow.types.js';
15
15
  import type { PikkuScenarioWire } from '../wirings/workflow/scenario.types.js';
16
- import type { PikkuBrowserWire, PikkuScenarioStepWire, ScenarioStepKind, ScenarioSurface } from '../wirings/workflow/scenario-step.types.js';
16
+ import type { PikkuBrowserWire, PikkuScenarioStepWire } from '../wirings/workflow/scenario-step.types.js';
17
17
  import type { PikkuGraphWire } from '../wirings/workflow/graph/workflow-graph.types.js';
18
18
  import type { PikkuTrigger } from '../wirings/trigger/trigger.types.js';
19
19
  import type { PikkuGateway } from '../wirings/gateway/gateway.types.js';
20
20
  import type { SchedulerService } from '../services/scheduler-service.js';
21
21
  import type { DeploymentService } from '../services/deployment-service.js';
22
- import type { AIStorageService } from '../services/ai-storage-service.js';
22
+ import type { AgentStorageService } from '../services/agent-storage-service.js';
23
23
  import type { ContentService } from '../services/content-service.js';
24
24
  import type { ScenarioPersonaOf, ScenarioPersonas } from '../services/personas-service.js';
25
- import type { AIAgentRunnerService } from '../services/ai-agent-runner-service.js';
25
+ import type { AgentRunnerService } from '../services/agent-runner-service.js';
26
26
  import type { AIEmbeddingService } from '../services/ai-embedding-service.js';
27
- import type { AIRunStateService } from '../services/ai-run-state-service.js';
28
- import type { AgentRunService } from '../wirings/ai-agent/ai-agent.types.js';
27
+ import type { AgentRunStateService } from '../services/agent-run-state-service.js';
28
+ import type { AgentRunService } from '../wirings/agent/agent.types.js';
29
+ import type { MiddlewareMetadata } from '../middleware/middleware.types.js';
30
+ import type { PermissionMetadata } from '../function/function-meta.types.js';
29
31
  import type { VirtualUserRunStore } from '../wirings/virtual-user/virtual-user-run-store.js';
30
- import type { PikkuAIMiddlewareHooks } from '../wirings/ai-agent/ai-agent.types.js';
31
32
  import type { WorkflowRunService } from '../wirings/workflow/workflow.types.js';
32
33
  import type { CredentialService } from '../services/credential-service.js';
33
34
  import type { EmailService } from '../services/email-service.js';
@@ -38,152 +39,6 @@ import type { SessionStore } from '../services/session-store.js';
38
39
  import type { ScopeService } from '../services/scope-service.js';
39
40
  import type { AuditDurability, AuditLog, AuditService } from '../services/audit-service.js';
40
41
  export type PikkuWiringTypes = 'http' | 'scheduler' | 'trigger' | 'channel' | 'rpc' | 'queue' | 'mcp' | 'cli' | 'workflow' | 'agent' | 'gateway';
41
- export interface FunctionServicesMeta {
42
- optimized: boolean;
43
- services: string[];
44
- }
45
- export interface FunctionWiresMeta {
46
- optimized: boolean;
47
- wires: string[];
48
- }
49
- export type MiddlewareMetadata = {
50
- type: 'http';
51
- route: string;
52
- } | {
53
- type: 'tag';
54
- tag: string;
55
- } | {
56
- type: 'wire';
57
- name: string;
58
- inline?: boolean;
59
- };
60
- /**
61
- * A reference to a permission function, resolved by name. Function-scoped
62
- * only: there are no wire- or tag-level permission references.
63
- */
64
- export type PermissionMetadata = {
65
- type: 'wire';
66
- name: string;
67
- inline?: boolean;
68
- };
69
- export type FunctionRuntimeMeta = {
70
- pikkuFuncId: string;
71
- inputSchemaName: string | null;
72
- outputSchemaName: string | null;
73
- /** Scopes the session must hold to run this function. All are required (AND). */
74
- scopes?: string[];
75
- expose?: boolean;
76
- /**
77
- * A sessionless function's own `auth: true`. `sessionless` carries the
78
- * baseline — a `pikkuFunc` always requires a session — and this carries the
79
- * tightening a `pikkuSessionlessFunc` applies to itself. Both are needed to
80
- * know whether a function is gated without running it.
81
- */
82
- auth?: boolean;
83
- /**
84
- * The author's declaration that this function's permission check lives in its
85
- * own body. Carries no runtime effect — it records a gate codegen cannot see,
86
- * so an audit is not left to guess whether a sessionless function is open.
87
- * Refused unless `allow.permissionsInBody` is set in `pikku.config.json`.
88
- */
89
- permissionsInBody?: boolean;
90
- remote?: boolean;
91
- /**
92
- * A step RPC: invoked by name only from a scenario run and refused
93
- * everywhere else, so it is never network-callable.
94
- */
95
- scenarioStep?: boolean;
96
- /**
97
- * The body of a `pikkuScenario(...)`. Only ever run by `pikku scenario run`,
98
- * so it is held back from the app bootstrap and from every deployed unit.
99
- */
100
- scenario?: boolean;
101
- mcp?: boolean;
102
- readonly?: boolean;
103
- deploy?: 'serverless' | 'server' | 'auto';
104
- sessionless?: boolean;
105
- /** When true, workflow steps calling this function are dispatched via the queue. No queue service configured is a hard error. */
106
- workflowQueued?: boolean;
107
- /** Retry count when this function is used as a workflow step. */
108
- workflowRetries?: number;
109
- /** Timeout when this function is used as a workflow step (e.g. '30s', '5m'). */
110
- workflowTimeout?: string;
111
- /**
112
- * Scenario steps only: which surfaces this step declares a binding for.
113
- *
114
- * The reporter derives coverage from this — a `then` with no binding for the
115
- * surface the run targeted was never actually witnessed there, which is a gap
116
- * worth counting rather than excusing.
117
- */
118
- scenarioStepSurfaces?: ScenarioSurface[];
119
- /**
120
- * Scenario steps only: who acts. Absent means `persona` — the ordinary step,
121
- * and the only kind that existed before the other two.
122
- *
123
- * A `platform` or `addon` step is the app or a third-party system acting, and
124
- * it must never reach a virtual user's catalogue. That is not tidiness: a
125
- * virtual user that can invoke "Stripe's webhook arrives" can forge its own
126
- * payment success, and every finding downstream of that is worthless.
127
- */
128
- scenarioStepKind?: ScenarioStepKind;
129
- /** Addon steps only: the addon whose system acts — `wireAddon`'s `name`. */
130
- scenarioStepAddon?: string;
131
- /** Scenario steps only: the prose a reporter renders, with `{placeholders}` filled from the step's recorded input. */
132
- scenarioStepTemplate?: string;
133
- /**
134
- * The function's `audit` config, resolved — `audit: true` reads as
135
- * `{ durability: 'best-effort' }`. Absent means the function records nothing:
136
- * `auditLog.write()` from an unmarked function is dropped with a warning, so
137
- * this is the only place a reader can see which functions have a trail at all
138
- * without running them.
139
- *
140
- * Informational. The runner resolves audit from the live function config, not
141
- * from here, so meta and runtime cannot disagree about whether audit is on.
142
- */
143
- audit?: {
144
- durability: AuditDurability;
145
- };
146
- version?: number;
147
- approvalRequired?: boolean;
148
- approvalDescription?: string;
149
- implementationHash?: string;
150
- contractHash?: string;
151
- inputHash?: string;
152
- outputHash?: string;
153
- };
154
- export type FunctionMeta = FunctionRuntimeMeta & Partial<{
155
- name: string;
156
- /** `remote`: a contract with no local body, answered by a connected client. */
157
- functionType: 'user' | 'inline' | 'helper' | 'remote';
158
- funcWrapper: string;
159
- services: FunctionServicesMeta;
160
- wires: FunctionWiresMeta;
161
- inputs: string[] | null;
162
- outputs: string[] | null;
163
- middleware: MiddlewareMetadata[];
164
- permissions: PermissionMetadata[];
165
- isDirectFunction: boolean;
166
- sourceFile: string;
167
- exportedName: string;
168
- /** File containing the handler body when it differs from sourceFile (imported handlers) */
169
- bodySourceFile?: string;
170
- /** 1-indexed first line of the handler body (verbose meta; coverage mapping) */
171
- bodyStart: number;
172
- /** 1-indexed last line of the handler body (verbose meta; coverage mapping) */
173
- bodyEnd: number;
174
- } & CommonWireMeta>;
175
- export type FunctionsRuntimeMeta = Record<string, FunctionRuntimeMeta>;
176
- export type FunctionsMeta = Record<string, FunctionMeta>;
177
- export type MakeRequired<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
178
- export type JSONPrimitive = string | number | boolean | null | undefined;
179
- export type JSONValue = JSONPrimitive | JSONValue[] | {
180
- [key: string]: JSONValue;
181
- };
182
- export type PickRequired<T, K extends keyof T> = T & Required<Pick<T, K>>;
183
- export type PickOptional<T, K extends keyof T> = Partial<T> & Pick<T, K>;
184
- export type RequireAtLeastOne<T> = {
185
- [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>;
186
- }[keyof T];
187
42
  /**
188
43
  * Runtime pool tuning for the Postgres adapter. The connection string stays
189
44
  * the flat `postgresUrl` config field — the contract the CLI's db commands read.
@@ -259,11 +114,11 @@ export interface CoreSingletonServices<Config extends CoreConfig = CoreConfig> {
259
114
  eventHub?: EventHubService<Record<string, any>>;
260
115
  schedulerService?: SchedulerService;
261
116
  deploymentService?: DeploymentService;
262
- aiStorage?: AIStorageService;
117
+ agentStorage?: AgentStorageService;
263
118
  content?: ContentService;
264
- aiAgentRunner?: AIAgentRunnerService;
119
+ agentRunner?: AgentRunnerService;
265
120
  aiEmbedding?: AIEmbeddingService;
266
- aiRunState?: AIRunStateService;
121
+ agentRunState?: AgentRunStateService;
267
122
  agentRunService?: AgentRunService;
268
123
  workflowRunService?: WorkflowRunService;
269
124
  credentialService?: CredentialService;
@@ -303,7 +158,20 @@ export interface CoreSingletonServices<Config extends CoreConfig = CoreConfig> {
303
158
  */
304
159
  auth?: () => Promise<AuthInstance>;
305
160
  }
306
- export type PikkuWire<In = unknown, Out = unknown, HasInitialSession extends boolean = false, UserSession extends CoreUserSession = CoreUserSession, TypedRPC extends PikkuRPC = PikkuRPC, IsChannel extends true | null = null, MCPTools extends string | never = never, TypedWorkflow extends PikkuWorkflowWire | never = PikkuWorkflowWire, TriggerOutput = unknown, TypedScenario extends PikkuScenarioWire<any> | never = PikkuScenarioWire<any>, TypedActors extends ScenarioPersonas = ScenarioPersonas> = {
161
+ /**
162
+ * Reads a single credential. The first signature resolves the value type from
163
+ * the project's generated `CredentialsMap`; the second keeps a name the map
164
+ * does not know callable with an explicit type.
165
+ *
166
+ * `TCredentials` is unconstrained because the generated map is an interface,
167
+ * which has no implicit index signature and so cannot satisfy
168
+ * `Record<string, unknown>`.
169
+ */
170
+ export type GetCredential<TCredentials = Record<string, unknown>> = {
171
+ <K extends keyof TCredentials & string>(name: K): TCredentials[K] | null | Promise<TCredentials[K] | null>;
172
+ <T = unknown>(name: string): T | null | Promise<T | null>;
173
+ };
174
+ export type PikkuWire<In = unknown, Out = unknown, HasInitialSession extends boolean = false, UserSession extends CoreUserSession = CoreUserSession, TypedRPC extends PikkuRPC = PikkuRPC, IsChannel extends true | null = null, MCPTools extends string | never = never, TypedWorkflow extends PikkuWorkflowWire | never = PikkuWorkflowWire, TriggerOutput = unknown, TypedScenario extends PikkuScenarioWire<any> | never = PikkuScenarioWire<any>, TypedActors extends ScenarioPersonas = ScenarioPersonas, TypedCredentials = Record<string, unknown>> = {
307
175
  /** Always present — lazily initialised on first access for every function invocation */
308
176
  rpc: TypedRPC;
309
177
  } & Partial<{
@@ -327,8 +195,18 @@ export type PikkuWire<In = unknown, Out = unknown, HasInitialSession extends boo
327
195
  workflow: TypedWorkflow;
328
196
  scenario: TypedScenario;
329
197
  actors: TypedActors;
198
+ /**
199
+ * The persona this step runs as, injected by the runner.
200
+ *
201
+ * Required on a `browser` binding, which cannot be provisioned without one,
202
+ * and on any binding whose step declares `actor: true`. A step that declares
203
+ * neither has no `actor` on its wire at all rather than an optional one —
204
+ * a pure assertion has nobody to be, and `attemptsSignIn` deliberately posts
205
+ * credentials instead of reusing an actor's session.
206
+ */
207
+ actor: ScenarioPersonaOf<TypedActors>;
330
208
  /** Present on every scenario step invocation */
331
- scenarioStep: PikkuScenarioStepWire<ScenarioPersonaOf<TypedActors>>;
209
+ scenarioStep: PikkuScenarioStepWire;
332
210
  /** Present only when the runner provisioned a browser for this step */
333
211
  browser: PikkuBrowserWire;
334
212
  workflowStep: WorkflowStepWire;
@@ -345,7 +223,7 @@ export type PikkuWire<In = unknown, Out = unknown, HasInitialSession extends boo
345
223
  /** Set a credential value (available in middleware) */
346
224
  setCredential: (name: string, value: unknown) => void;
347
225
  /** Get a single credential by name — lazy-loads from CredentialService on first call, sync thereafter */
348
- getCredential: <T = unknown>(name: string) => T | null | Promise<T | null>;
226
+ getCredential: GetCredential<TypedCredentials>;
349
227
  /** Get all resolved credentials — lazy-loads from CredentialService on first call, sync thereafter */
350
228
  getCredentials: () => Record<string, unknown> | Promise<Record<string, unknown>>;
351
229
  audit: {
@@ -368,27 +246,6 @@ export type PikkuWire<In = unknown, Out = unknown, HasInitialSession extends boo
368
246
  }>;
369
247
  /** Wire as constructed by runners, before the function runner lazily adds `rpc`. */
370
248
  export type PikkuRawWire = Omit<PikkuWire, 'rpc'>;
371
- export type CorePikkuMiddleware<SingletonServices extends CoreSingletonServices = CoreSingletonServices, UserSession extends CoreUserSession = CoreUserSession> = (services: SingletonServices, wires: PikkuWire, next: () => Promise<void>) => Promise<void>;
372
- /**
373
- * Execution order: `highest` runs first (outermost in the onion), `lowest`
374
- * runs last, closest to the function.
375
- */
376
- export type MiddlewarePriority = 'highest' | 'high' | 'medium' | 'low' | 'lowest';
377
- export type CorePikkuMiddlewareConfig<SingletonServices extends CoreSingletonServices = CoreSingletonServices, UserSession extends CoreUserSession = CoreUserSession> = {
378
- func: CorePikkuMiddleware<SingletonServices, UserSession>;
379
- name?: string;
380
- description?: string;
381
- /** Execution priority. Lower runs first (outermost). Defaults to 'medium'. */
382
- priority?: MiddlewarePriority;
383
- };
384
- export type CorePikkuMiddlewareFactory<In = any, SingletonServices extends CoreSingletonServices = CoreSingletonServices, UserSession extends CoreUserSession = CoreUserSession> = (input: In) => CorePikkuMiddleware<SingletonServices, UserSession>;
385
- export type CorePikkuMiddlewareGroup<SingletonServices extends CoreSingletonServices = CoreSingletonServices, UserSession extends CoreUserSession = CoreUserSession> = Array<CorePikkuMiddleware<SingletonServices, UserSession> | CorePikkuMiddlewareFactory<any, SingletonServices, UserSession>>;
386
- export declare const pikkuMiddleware: <SingletonServices extends CoreSingletonServices = CoreSingletonServices, UserSession extends CoreUserSession = CoreUserSession>(middleware: CorePikkuMiddleware<SingletonServices, UserSession> | CorePikkuMiddlewareConfig<SingletonServices, UserSession>) => CorePikkuMiddleware<SingletonServices, UserSession>;
387
- export declare const pikkuMiddlewareFactory: <In = any>(factory: CorePikkuMiddlewareFactory<In>) => CorePikkuMiddlewareFactory<In>;
388
- export declare const pikkuChannelMiddleware: <SingletonServices extends CoreSingletonServices = CoreSingletonServices, Event = unknown>(middleware: CorePikkuChannelMiddleware<SingletonServices, Event>) => CorePikkuChannelMiddleware<SingletonServices, Event>;
389
- export declare const pikkuChannelMiddlewareFactory: <In = any>(factory: CorePikkuChannelMiddlewareFactory<In>) => CorePikkuChannelMiddlewareFactory<In>;
390
- export type { PikkuAIMiddlewareHooks } from '../wirings/ai-agent/ai-agent.types.js';
391
- export declare const pikkuAIMiddleware: <State extends Record<string, unknown> = Record<string, unknown>, SingletonServices extends CoreSingletonServices = CoreSingletonServices>(hooks: PikkuAIMiddlewareHooks<State, SingletonServices>) => PikkuAIMiddlewareHooks<State, SingletonServices>;
392
249
  export type CoreServices<SingletonServices = CoreSingletonServices> = SingletonServices;
393
250
  /** Strips `secrets` from a services type. */
394
251
  export type SecretlessServices<Services> = Omit<Services, 'secrets'>;
@@ -458,13 +315,6 @@ export interface SecurityAuditReport {
458
315
  updates: SecurityAuditUpdate[];
459
316
  summary: SecurityAuditSummary;
460
317
  }
461
- export interface SerializedError {
462
- message: string;
463
- stack?: string;
464
- code?: string;
465
- expected?: boolean;
466
- [key: string]: any;
467
- }
468
318
  /**
469
319
  * A generated schema's declaration site, used by the credential/secret/variable
470
320
  * definition validators to point conflicting definitions at their source.
@@ -1,19 +1 @@
1
- export const pikkuMiddleware = (middleware) => {
2
- if (typeof middleware === 'function')
3
- return middleware;
4
- const func = middleware.func;
5
- if (middleware.priority) {
6
- func.__priority = middleware.priority;
7
- }
8
- return func;
9
- };
10
- export const pikkuMiddlewareFactory = (factory) => {
11
- return factory;
12
- };
13
- export const pikkuChannelMiddleware = (middleware) => {
14
- return middleware;
15
- };
16
- export const pikkuChannelMiddlewareFactory = (factory) => {
17
- return factory;
18
- };
19
- export const pikkuAIMiddleware = (hooks) => hooks;
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from './core.types.js';
2
+ export type * from './state.types.js';
@@ -0,0 +1 @@
1
+ export * from './core.types.js';
@@ -5,15 +5,17 @@ import type { CoreChannel, ChannelsMeta } from '../wirings/channel/channel.types
5
5
  import type { CLIMeta, CLIProgramState } from '../wirings/cli/cli.types.js';
6
6
  import type { HTTPMethod, CoreHTTPFunctionWiring, HTTPWiringsMeta } from '../wirings/http/http.types.js';
7
7
  import type { CoreMCPResource, MCPResourceMeta, MCPToolMeta, CoreMCPPrompt, MCPPromptMeta } from '../wirings/mcp/mcp.types.js';
8
- import type { CoreAIAgent, AIAgentMeta } from '../wirings/ai-agent/ai-agent.types.js';
9
- import type { PikkuAIScorer, ScorerMeta } from '../wirings/ai-scorer/ai-scorer.types.js';
8
+ import type { CoreAgent, AgentsMeta } from '../wirings/agent/agent.types.js';
9
+ import type { PikkuAgentScorer, ScorerMeta } from '../wirings/agent-scorer/agent-scorer.types.js';
10
10
  import type { CoreGateway, GatewaysMeta } from '../wirings/gateway/gateway.types.js';
11
11
  import type { CoreQueueWorker, QueueWorkersMeta } from '../wirings/queue/queue.types.js';
12
12
  import type { CoreScheduledTask, ScheduledTasksMeta } from '../wirings/scheduler/scheduler.types.js';
13
13
  import type { CoreWorkflow, WorkflowsRuntimeMeta } from '../wirings/workflow/workflow.types.js';
14
14
  import type { CoreFeature } from '../wirings/workflow/scenario.types.js';
15
15
  import type { CoreTrigger, CoreTriggerSource, TriggerMeta, TriggerSourceMeta } from '../wirings/trigger/trigger.types.js';
16
- import type { FunctionsMeta, CorePikkuMiddleware, CorePikkuMiddlewareGroup, CreateConfig, CreateSingletonServices, CreateWireServices, CoreConfig, CoreSingletonServices, CoreServices, CoreUserSession } from './core.types.js';
16
+ import type { CreateConfig, CreateSingletonServices, CreateWireServices, CoreConfig, CoreSingletonServices, CoreServices, CoreUserSession } from './core.types.js';
17
+ import type { FunctionsMeta } from '../function/function-meta.types.js';
18
+ import type { CorePikkuMiddleware, CorePikkuMiddlewareGroup } from '../middleware/middleware.types.js';
17
19
  import type { CorePikkuChannelMiddleware } from '../wirings/channel/channel.types.js';
18
20
  export interface PikkuPackageState {
19
21
  function: {
@@ -105,9 +107,9 @@ export interface PikkuPackageState {
105
107
  promptsMeta: MCPPromptMeta;
106
108
  };
107
109
  agent: {
108
- agents: Map<string, CoreAIAgent>;
109
- agentsMeta: AIAgentMeta;
110
- scorers: Map<string, PikkuAIScorer>;
110
+ agents: Map<string, CoreAgent>;
111
+ agentsMeta: AgentsMeta;
112
+ scorers: Map<string, PikkuAgentScorer>;
111
113
  scorersMeta: ScorerMeta;
112
114
  /** Alias -> `provider/model`, from the `models` table in pikku.config.json. */
113
115
  modelAliases: Record<string, string>;
package/dist/utils.d.ts CHANGED
@@ -9,3 +9,16 @@ export declare const freezeDedupe: <T>(arr?: readonly T[] | T[] | undefined) =>
9
9
  export declare const stopSingletonServices: () => Promise<void>;
10
10
  /** Wrap server lifecycle hooks so the inspector can discover them. */
11
11
  export declare const pikkuServerLifecycle: <SS extends CoreSingletonServices = CoreSingletonServices>(lifecycle: ServerLifecycle<SS>) => ServerLifecycle<SS>;
12
+ export type MakeRequired<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
13
+ export type JSONPrimitive = string | number | boolean | null | undefined;
14
+ export type JSONValue = JSONPrimitive | JSONValue[] | {
15
+ [key: string]: JSONValue;
16
+ };
17
+ export type PickRequired<T, K extends keyof T> = T & Required<Pick<T, K>>;
18
+ export type PickOptional<T, K extends keyof T> = Partial<T> & Pick<T, K>;
19
+ export type RequireAtLeastOne<T> = {
20
+ [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>;
21
+ }[keyof T];
22
+ export { getDurationInMilliseconds, getRelativeTimeOffset, getRelativeTimeOffsetFromNow, parseDurationString, } from './time-utils.js';
23
+ export type { RelativeTimeInput } from './time-utils.js';
24
+ export { formatVersionedId, isVersionedId, parseVersionedId, } from './version.js';
package/dist/utils.js CHANGED
@@ -98,3 +98,5 @@ export const stopSingletonServices = async () => {
98
98
  };
99
99
  /** Wrap server lifecycle hooks so the inspector can discover them. */
100
100
  export const pikkuServerLifecycle = (lifecycle) => lifecycle;
101
+ export { getDurationInMilliseconds, getRelativeTimeOffset, getRelativeTimeOffsetFromNow, parseDurationString, } from './time-utils.js';
102
+ export { formatVersionedId, isVersionedId, parseVersionedId, } from './version.js';
@@ -1,8 +1,8 @@
1
1
  import type { ActorFlowApprovalPolicy, ActorFlowVerdict, TargetAgentDriver } from './actor-flow.types.js';
2
2
  import type { ResolvedPersona } from '../../services/personas-service.js';
3
- import type { AIAgentRunnerParams, AIAgentStepResult } from '../../services/ai-agent-runner-service.js';
3
+ import type { AgentRunnerParams, AgentStepResult } from '../../services/agent-runner-service.js';
4
4
  /** The LLM call the actor uses for its own turns/decisions/evaluation. */
5
- export type ActorLLM = (params: AIAgentRunnerParams) => Promise<AIAgentStepResult>;
5
+ export type ActorLLM = (params: AgentRunnerParams) => Promise<AgentStepResult>;
6
6
  export interface RunConversationParams {
7
7
  /** The person being played — name, job title, personality. */
8
8
  persona: ResolvedPersona;
@@ -0,0 +1,17 @@
1
+ import type { CoreSingletonServices } from '../../types/core.types.js';
2
+ export type AddonInstance = {
3
+ namespace: string;
4
+ secretOverrides?: Record<string, string>;
5
+ variableOverrides?: Record<string, string>;
6
+ credentialOverrides?: Record<string, string>;
7
+ /** Set by the consuming app: secrets it lends this instance, as the addon names them. */
8
+ secretGrants?: string[];
9
+ /** Set by the consuming app: credentials it lends this instance, as the addon names them. */
10
+ credentialGrants?: string[];
11
+ /** Set by the consuming app to opt this instance out of secret scoping. */
12
+ globalSecrets?: string;
13
+ /** Set by the consuming app to opt this instance out of credential scoping. */
14
+ globalCredentials?: string;
15
+ };
16
+ export declare const getOrCreatePackageSingletonServices: (packageName: string, parentServices: CoreSingletonServices, addonInstance?: AddonInstance) => Promise<CoreSingletonServices>;
17
+ export declare const addonInstanceForNamespace: (namespace: string | undefined, expectedPackage: string) => AddonInstance | undefined;
@@ -0,0 +1,150 @@
1
+ import { pikkuState } from '../../pikku-state.js';
2
+ import { ScopedSecretService } from '../../services/scoped-secret-service.js';
3
+ import { ScopedCredentialService } from '../../services/scoped-credential-service.js';
4
+ /**
5
+ * What the addon declared, plus what the host lent it. Scoping runs outside the
6
+ * aliaser, so every name here is the one the addon reads — which is why an
7
+ * override's *key* grants, and its value does not.
8
+ */
9
+ const allowedNames = (declared, grants, overrides) => new Set([
10
+ ...(declared ?? []),
11
+ ...(grants ?? []),
12
+ ...Object.keys(overrides ?? {}),
13
+ ]);
14
+ const aliasSecretService = (secrets, overrides) => {
15
+ const map = (key) => overrides[key] ?? key;
16
+ return {
17
+ getSecret: (key) => secrets.getSecret(map(key)),
18
+ hasSecret: (key) => secrets.hasSecret(map(key)),
19
+ setSecret: (key, value) => secrets.setSecret(map(key), value),
20
+ deleteSecret: (key) => secrets.deleteSecret(map(key)),
21
+ getSecrets: async (keys) => {
22
+ const result = await secrets.getSecrets(keys.map(map));
23
+ const out = {};
24
+ for (const logical of keys) {
25
+ const real = map(logical);
26
+ if (real in result)
27
+ out[logical] = result[real];
28
+ }
29
+ return out;
30
+ },
31
+ };
32
+ };
33
+ const aliasVariablesService = (variables, overrides) => {
34
+ const map = (name) => overrides[name] ?? name;
35
+ return {
36
+ get: (name) => variables.get(map(name)),
37
+ getVariables: (names) => {
38
+ const result = variables.getVariables(names.map(map));
39
+ const remap = (r) => {
40
+ const out = {};
41
+ for (const logical of names) {
42
+ const real = map(logical);
43
+ if (real in r)
44
+ out[logical] = r[real];
45
+ }
46
+ return out;
47
+ };
48
+ return result instanceof Promise
49
+ ? result.then(remap)
50
+ : remap(result);
51
+ },
52
+ getAll: () => variables.getAll(),
53
+ set: (name, value) => variables.set(map(name), value),
54
+ has: (name) => variables.has(map(name)),
55
+ delete: (name) => variables.delete(map(name)),
56
+ };
57
+ };
58
+ const findAddonNamespaceForPackage = (packageName) => {
59
+ const addons = pikkuState(null, 'addons', 'packages');
60
+ if (!addons)
61
+ return null;
62
+ for (const [namespace, cfg] of addons.entries()) {
63
+ if (cfg?.package === packageName)
64
+ return namespace;
65
+ }
66
+ return null;
67
+ };
68
+ const wrapWorkflowServiceForPackage = (service, packageName, namespace) => {
69
+ return new Proxy(service, {
70
+ get(target, prop, receiver) {
71
+ if (prop === 'startWorkflow' || prop === 'runToCompletion') {
72
+ const original = Reflect.get(target, prop, receiver);
73
+ return function (name, ...rest) {
74
+ if (typeof name === 'string' && !name.includes(':')) {
75
+ const ns = namespace ?? findAddonNamespaceForPackage(packageName);
76
+ if (ns) {
77
+ name = `${ns}:${name}`;
78
+ }
79
+ }
80
+ return original.call(this, name, ...rest);
81
+ };
82
+ }
83
+ return Reflect.get(target, prop, receiver);
84
+ },
85
+ });
86
+ };
87
+ export const getOrCreatePackageSingletonServices = async (packageName, parentServices, addonInstance) => {
88
+ const cacheKey = addonInstance?.namespace ?? packageName;
89
+ const cachedServices = pikkuState(cacheKey, 'package', 'singletonServices');
90
+ if (cachedServices) {
91
+ return cachedServices;
92
+ }
93
+ const factories = pikkuState(packageName, 'package', 'factories');
94
+ let existingServices = parentServices;
95
+ if (addonInstance?.secretOverrides && parentServices.secrets) {
96
+ existingServices = {
97
+ ...existingServices,
98
+ secrets: aliasSecretService(parentServices.secrets, addonInstance.secretOverrides),
99
+ };
100
+ }
101
+ if (addonInstance?.variableOverrides && parentServices.variables) {
102
+ existingServices = {
103
+ ...existingServices,
104
+ variables: aliasVariablesService(parentServices.variables, addonInstance.variableOverrides),
105
+ };
106
+ }
107
+ if (!addonInstance?.globalSecrets && existingServices.secrets) {
108
+ existingServices = {
109
+ ...existingServices,
110
+ secrets: new ScopedSecretService(existingServices.secrets, allowedNames(pikkuState(packageName, 'package', 'declaredSecrets'), addonInstance?.secretGrants, addonInstance?.secretOverrides)),
111
+ };
112
+ }
113
+ if (!addonInstance?.globalCredentials && existingServices.credentialService) {
114
+ existingServices = {
115
+ ...existingServices,
116
+ credentialService: new ScopedCredentialService(existingServices.credentialService, allowedNames(Object.keys(pikkuState(packageName, 'package', 'credentialsMeta') ?? {}), addonInstance?.credentialGrants, addonInstance?.credentialOverrides)),
117
+ };
118
+ }
119
+ if (!factories || !factories.createSingletonServices) {
120
+ return existingServices;
121
+ }
122
+ let config = existingServices.config;
123
+ if (factories.createConfig) {
124
+ config = await factories.createConfig(existingServices.variables);
125
+ }
126
+ const packageServices = await factories.createSingletonServices(config, existingServices);
127
+ if (packageServices.workflowService &&
128
+ typeof packageServices.workflowService === 'object') {
129
+ packageServices.workflowService = wrapWorkflowServiceForPackage(packageServices.workflowService, packageName, addonInstance?.namespace ?? null);
130
+ }
131
+ pikkuState(cacheKey, 'package', 'singletonServices', packageServices);
132
+ return packageServices;
133
+ };
134
+ export const addonInstanceForNamespace = (namespace, expectedPackage) => {
135
+ if (!namespace)
136
+ return undefined;
137
+ const cfg = pikkuState(null, 'addons', 'packages').get(namespace);
138
+ if (!cfg || cfg.package !== expectedPackage)
139
+ return undefined;
140
+ return {
141
+ namespace,
142
+ secretOverrides: cfg.secretOverrides,
143
+ variableOverrides: cfg.variableOverrides,
144
+ credentialOverrides: cfg.credentialOverrides,
145
+ secretGrants: cfg.secretGrants,
146
+ credentialGrants: cfg.credentialGrants,
147
+ globalSecrets: cfg.globalSecrets,
148
+ globalCredentials: cfg.globalCredentials,
149
+ };
150
+ };
@@ -0,0 +1,6 @@
1
+ export { wireAddon } from './wire-addon.js';
2
+ export type { WireAddonConfig } from './wire-addon.js';
3
+ export { wireRemoteAddon } from './wire-remote-addon.js';
4
+ export type { WireRemoteAddonConfig, RemoteAddonAuth, } from './wire-remote-addon.js';
5
+ export { resolveRemoteAddonToken, RemoteAddonAuthError, } from './remote-addon-auth.js';
6
+ export type { RemoteAddonAuthBinding } from './remote-addon-auth.js';
@@ -0,0 +1,3 @@
1
+ export { wireAddon } from './wire-addon.js';
2
+ export { wireRemoteAddon } from './wire-remote-addon.js';
3
+ export { resolveRemoteAddonToken, RemoteAddonAuthError, } from './remote-addon-auth.js';
@@ -0,0 +1,16 @@
1
+ import type { CoreServices, PikkuRawWire } from '../../types/core.types.js';
2
+ import { PikkuError } from '../../errors/error-handler.js';
3
+ import { type SecretValue } from '../../classification/secret-value.js';
4
+ export type RemoteAddonAuthBinding = {
5
+ credentialId: string;
6
+ } | {
7
+ secretId: string;
8
+ } | {
9
+ resolve: (services: CoreServices, wire: PikkuRawWire) => string | SecretValue<string> | Promise<string | SecretValue<string>>;
10
+ };
11
+ export declare class RemoteAddonAuthError extends PikkuError {
12
+ readonly namespace: string;
13
+ constructor(namespace: string, detail: string);
14
+ }
15
+ /** Returns `null` only when no auth is bound; an empty resolved token throws. */
16
+ export declare function resolveRemoteAddonToken(auth: RemoteAddonAuthBinding | undefined, services: CoreServices, wire: PikkuRawWire, namespace: string): Promise<string | null>;
@@ -0,0 +1,39 @@
1
+ import { PikkuError, addError } from '../../errors/error-handler.js';
2
+ import { isSecretValue, } from '../../classification/secret-value.js';
3
+ export class RemoteAddonAuthError extends PikkuError {
4
+ namespace;
5
+ constructor(namespace, detail) {
6
+ super(`Remote addon '${namespace}' auth could not be resolved: ${detail}`);
7
+ this.namespace = namespace;
8
+ }
9
+ }
10
+ addError(RemoteAddonAuthError, {
11
+ status: 401,
12
+ message: 'Remote addon authentication could not be resolved.',
13
+ });
14
+ /** Returns `null` only when no auth is bound; an empty resolved token throws. */
15
+ export async function resolveRemoteAddonToken(auth, services, wire, namespace) {
16
+ if (!auth) {
17
+ return null;
18
+ }
19
+ let token;
20
+ if ('credentialId' in auth) {
21
+ if (typeof wire.getCredential !== 'function') {
22
+ throw new RemoteAddonAuthError(namespace, `credentialId '${auth.credentialId}' requires a wire with credential access`);
23
+ }
24
+ token = await wire.getCredential(auth.credentialId);
25
+ }
26
+ else if ('secretId' in auth) {
27
+ token = await services.secrets.getSecret(auth.secretId);
28
+ }
29
+ else if (typeof auth.resolve === 'function') {
30
+ token = await auth.resolve(services, wire);
31
+ }
32
+ // The wire is where a secret is meant to end up, so unwrap it here rather
33
+ // than at each branch — `resolve` and `getCredential` may hand one back too.
34
+ const resolved = isSecretValue(token) ? token.reveal() : token;
35
+ if (resolved === null || resolved === undefined || resolved === '') {
36
+ throw new RemoteAddonAuthError(namespace, 'resolved token was empty');
37
+ }
38
+ return String(resolved);
39
+ }