@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,11 +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 {
8
- PikkuChannel,
9
- CorePikkuChannelMiddleware,
10
- CorePikkuChannelMiddlewareFactory,
11
- } from '../wirings/channel/channel.types.js'
7
+ import type { PikkuChannel } from '../wirings/channel/channel.types.js'
12
8
  import type { EventHubService } from '../wirings/channel/eventhub-service.js'
13
9
  import type { PikkuRPC } from '../wirings/rpc/rpc-types.js'
14
10
  import type { PikkuMCP } from '../wirings/mcp/mcp.types.js'
@@ -25,27 +21,26 @@ import type { PikkuScenarioWire } from '../wirings/workflow/scenario.types.js'
25
21
  import type {
26
22
  PikkuBrowserWire,
27
23
  PikkuScenarioStepWire,
28
- ScenarioStepKind,
29
- ScenarioSurface,
30
24
  } from '../wirings/workflow/scenario-step.types.js'
31
25
  import type { PikkuGraphWire } from '../wirings/workflow/graph/workflow-graph.types.js'
32
26
  import type { PikkuTrigger } from '../wirings/trigger/trigger.types.js'
33
27
  import type { PikkuGateway } from '../wirings/gateway/gateway.types.js'
34
28
  import type { SchedulerService } from '../services/scheduler-service.js'
35
29
  import type { DeploymentService } from '../services/deployment-service.js'
36
- import type { AIStorageService } from '../services/ai-storage-service.js'
30
+ import type { AgentStorageService } from '../services/agent-storage-service.js'
37
31
 
38
32
  import type { ContentService } from '../services/content-service.js'
39
33
  import type {
40
34
  ScenarioPersonaOf,
41
35
  ScenarioPersonas,
42
36
  } from '../services/personas-service.js'
43
- import type { AIAgentRunnerService } from '../services/ai-agent-runner-service.js'
37
+ import type { AgentRunnerService } from '../services/agent-runner-service.js'
44
38
  import type { AIEmbeddingService } from '../services/ai-embedding-service.js'
45
- import type { AIRunStateService } from '../services/ai-run-state-service.js'
46
- import type { AgentRunService } from '../wirings/ai-agent/ai-agent.types.js'
39
+ import type { AgentRunStateService } from '../services/agent-run-state-service.js'
40
+ import type { AgentRunService } from '../wirings/agent/agent.types.js'
41
+ import type { MiddlewareMetadata } from '../middleware/middleware.types.js'
42
+ import type { PermissionMetadata } from '../function/function-meta.types.js'
47
43
  import type { VirtualUserRunStore } from '../wirings/virtual-user/virtual-user-run-store.js'
48
- import type { PikkuAIMiddlewareHooks } from '../wirings/ai-agent/ai-agent.types.js'
49
44
  import type { WorkflowRunService } from '../wirings/workflow/workflow.types.js'
50
45
  import type { CredentialService } from '../services/credential-service.js'
51
46
  import type { EmailService } from '../services/email-service.js'
@@ -76,175 +71,6 @@ export type PikkuWiringTypes =
76
71
  | 'agent'
77
72
  | 'gateway'
78
73
 
79
- export interface FunctionServicesMeta {
80
- optimized: boolean
81
- services: string[]
82
- }
83
-
84
- export interface FunctionWiresMeta {
85
- optimized: boolean
86
- wires: string[]
87
- }
88
-
89
- export type MiddlewareMetadata =
90
- | {
91
- type: 'http'
92
- route: string // Route pattern (e.g., '*' for all, '/api/*' for specific)
93
- }
94
- | {
95
- type: 'tag'
96
- tag: string
97
- }
98
- | {
99
- type: 'wire'
100
- name: string
101
- inline?: boolean
102
- }
103
-
104
- /**
105
- * A reference to a permission function, resolved by name. Function-scoped
106
- * only: there are no wire- or tag-level permission references.
107
- */
108
- export type PermissionMetadata = {
109
- type: 'wire'
110
- name: string
111
- inline?: boolean
112
- }
113
-
114
- export type FunctionRuntimeMeta = {
115
- pikkuFuncId: string
116
- inputSchemaName: string | null
117
- outputSchemaName: string | null
118
- /** Scopes the session must hold to run this function. All are required (AND). */
119
- scopes?: string[]
120
- expose?: boolean
121
- /**
122
- * A sessionless function's own `auth: true`. `sessionless` carries the
123
- * baseline — a `pikkuFunc` always requires a session — and this carries the
124
- * tightening a `pikkuSessionlessFunc` applies to itself. Both are needed to
125
- * know whether a function is gated without running it.
126
- */
127
- auth?: boolean
128
- /**
129
- * The author's declaration that this function's permission check lives in its
130
- * own body. Carries no runtime effect — it records a gate codegen cannot see,
131
- * so an audit is not left to guess whether a sessionless function is open.
132
- * Refused unless `allow.permissionsInBody` is set in `pikku.config.json`.
133
- */
134
- permissionsInBody?: boolean
135
- remote?: boolean
136
- /**
137
- * A step RPC: invoked by name only from a scenario run and refused
138
- * everywhere else, so it is never network-callable.
139
- */
140
- scenarioStep?: boolean
141
- /**
142
- * The body of a `pikkuScenario(...)`. Only ever run by `pikku scenario run`,
143
- * so it is held back from the app bootstrap and from every deployed unit.
144
- */
145
- scenario?: boolean
146
- mcp?: boolean
147
- readonly?: boolean
148
- deploy?: 'serverless' | 'server' | 'auto'
149
- sessionless?: boolean
150
- /** When true, workflow steps calling this function are dispatched via the queue. No queue service configured is a hard error. */
151
- workflowQueued?: boolean
152
- /** Retry count when this function is used as a workflow step. */
153
- workflowRetries?: number
154
- /** Timeout when this function is used as a workflow step (e.g. '30s', '5m'). */
155
- workflowTimeout?: string
156
- /**
157
- * Scenario steps only: which surfaces this step declares a binding for.
158
- *
159
- * The reporter derives coverage from this — a `then` with no binding for the
160
- * surface the run targeted was never actually witnessed there, which is a gap
161
- * worth counting rather than excusing.
162
- */
163
- scenarioStepSurfaces?: ScenarioSurface[]
164
- /**
165
- * Scenario steps only: who acts. Absent means `persona` — the ordinary step,
166
- * and the only kind that existed before the other two.
167
- *
168
- * A `platform` or `addon` step is the app or a third-party system acting, and
169
- * it must never reach a virtual user's catalogue. That is not tidiness: a
170
- * virtual user that can invoke "Stripe's webhook arrives" can forge its own
171
- * payment success, and every finding downstream of that is worthless.
172
- */
173
- scenarioStepKind?: ScenarioStepKind
174
- /** Addon steps only: the addon whose system acts — `wireAddon`'s `name`. */
175
- scenarioStepAddon?: string
176
- /** Scenario steps only: the prose a reporter renders, with `{placeholders}` filled from the step's recorded input. */
177
- scenarioStepTemplate?: string
178
- /**
179
- * The function's `audit` config, resolved — `audit: true` reads as
180
- * `{ durability: 'best-effort' }`. Absent means the function records nothing:
181
- * `auditLog.write()` from an unmarked function is dropped with a warning, so
182
- * this is the only place a reader can see which functions have a trail at all
183
- * without running them.
184
- *
185
- * Informational. The runner resolves audit from the live function config, not
186
- * from here, so meta and runtime cannot disagree about whether audit is on.
187
- */
188
- audit?: {
189
- durability: AuditDurability
190
- }
191
- version?: number
192
- approvalRequired?: boolean
193
- approvalDescription?: string
194
- implementationHash?: string
195
- contractHash?: string
196
- inputHash?: string
197
- outputHash?: string
198
- }
199
-
200
- export type FunctionMeta = FunctionRuntimeMeta &
201
- Partial<
202
- {
203
- name: string
204
- /** `remote`: a contract with no local body, answered by a connected client. */
205
- functionType: 'user' | 'inline' | 'helper' | 'remote'
206
- funcWrapper: string
207
- services: FunctionServicesMeta
208
- wires: FunctionWiresMeta
209
- inputs: string[] | null
210
- outputs: string[] | null
211
- middleware: MiddlewareMetadata[]
212
- permissions: PermissionMetadata[]
213
- isDirectFunction: boolean
214
- sourceFile: string
215
- exportedName: string
216
- /** File containing the handler body when it differs from sourceFile (imported handlers) */
217
- bodySourceFile?: string
218
- /** 1-indexed first line of the handler body (verbose meta; coverage mapping) */
219
- bodyStart: number
220
- /** 1-indexed last line of the handler body (verbose meta; coverage mapping) */
221
- bodyEnd: number
222
- } & CommonWireMeta
223
- >
224
-
225
- export type FunctionsRuntimeMeta = Record<string, FunctionRuntimeMeta>
226
- export type FunctionsMeta = Record<string, FunctionMeta>
227
-
228
- export type MakeRequired<T, K extends keyof T> = Omit<T, K> &
229
- Required<Pick<T, K>>
230
-
231
- export type JSONPrimitive = string | number | boolean | null | undefined
232
-
233
- export type JSONValue =
234
- | JSONPrimitive
235
- | JSONValue[]
236
- | {
237
- [key: string]: JSONValue
238
- }
239
-
240
- export type PickRequired<T, K extends keyof T> = T & Required<Pick<T, K>>
241
-
242
- export type PickOptional<T, K extends keyof T> = Partial<T> & Pick<T, K>
243
-
244
- export type RequireAtLeastOne<T> = {
245
- [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
246
- }[keyof T]
247
-
248
74
  /**
249
75
  * Runtime pool tuning for the Postgres adapter. The connection string stays
250
76
  * the flat `postgresUrl` config field — the contract the CLI's db commands read.
@@ -325,12 +151,12 @@ export interface CoreSingletonServices<Config extends CoreConfig = CoreConfig> {
325
151
  eventHub?: EventHubService<Record<string, any>>
326
152
  schedulerService?: SchedulerService
327
153
  deploymentService?: DeploymentService
328
- aiStorage?: AIStorageService
154
+ agentStorage?: AgentStorageService
329
155
 
330
156
  content?: ContentService
331
- aiAgentRunner?: AIAgentRunnerService
157
+ agentRunner?: AgentRunnerService
332
158
  aiEmbedding?: AIEmbeddingService
333
- aiRunState?: AIRunStateService
159
+ agentRunState?: AgentRunStateService
334
160
  agentRunService?: AgentRunService
335
161
  workflowRunService?: WorkflowRunService
336
162
  credentialService?: CredentialService
@@ -371,6 +197,22 @@ export interface CoreSingletonServices<Config extends CoreConfig = CoreConfig> {
371
197
  auth?: () => Promise<AuthInstance>
372
198
  }
373
199
 
200
+ /**
201
+ * Reads a single credential. The first signature resolves the value type from
202
+ * the project's generated `CredentialsMap`; the second keeps a name the map
203
+ * does not know callable with an explicit type.
204
+ *
205
+ * `TCredentials` is unconstrained because the generated map is an interface,
206
+ * which has no implicit index signature and so cannot satisfy
207
+ * `Record<string, unknown>`.
208
+ */
209
+ export type GetCredential<TCredentials = Record<string, unknown>> = {
210
+ <K extends keyof TCredentials & string>(
211
+ name: K
212
+ ): TCredentials[K] | null | Promise<TCredentials[K] | null>
213
+ <T = unknown>(name: string): T | null | Promise<T | null>
214
+ }
215
+
374
216
  export type PikkuWire<
375
217
  In = unknown,
376
218
  Out = unknown,
@@ -386,6 +228,7 @@ export type PikkuWire<
386
228
  // `ScenarioContext`.
387
229
  TypedScenario extends PikkuScenarioWire<any> | never = PikkuScenarioWire<any>,
388
230
  TypedActors extends ScenarioPersonas = ScenarioPersonas,
231
+ TypedCredentials = Record<string, unknown>,
389
232
  > = {
390
233
  /** Always present — lazily initialised on first access for every function invocation */
391
234
  rpc: TypedRPC
@@ -415,8 +258,18 @@ export type PikkuWire<
415
258
  workflow: TypedWorkflow
416
259
  scenario: TypedScenario
417
260
  actors: TypedActors
261
+ /**
262
+ * The persona this step runs as, injected by the runner.
263
+ *
264
+ * Required on a `browser` binding, which cannot be provisioned without one,
265
+ * and on any binding whose step declares `actor: true`. A step that declares
266
+ * neither has no `actor` on its wire at all rather than an optional one —
267
+ * a pure assertion has nobody to be, and `attemptsSignIn` deliberately posts
268
+ * credentials instead of reusing an actor's session.
269
+ */
270
+ actor: ScenarioPersonaOf<TypedActors>
418
271
  /** Present on every scenario step invocation */
419
- scenarioStep: PikkuScenarioStepWire<ScenarioPersonaOf<TypedActors>>
272
+ scenarioStep: PikkuScenarioStepWire
420
273
  /** Present only when the runner provisioned a browser for this step */
421
274
  browser: PikkuBrowserWire
422
275
  workflowStep: WorkflowStepWire
@@ -435,11 +288,10 @@ export type PikkuWire<
435
288
  /** Set a credential value (available in middleware) */
436
289
  setCredential: (name: string, value: unknown) => void
437
290
  /** Get a single credential by name — lazy-loads from CredentialService on first call, sync thereafter */
438
- getCredential: <T = unknown>(name: string) => T | null | Promise<T | null>
291
+ getCredential: GetCredential<TypedCredentials>
439
292
  /** Get all resolved credentials — lazy-loads from CredentialService on first call, sync thereafter */
440
293
  getCredentials: () =>
441
- | Record<string, unknown>
442
- | Promise<Record<string, unknown>>
294
+ Record<string, unknown> | Promise<Record<string, unknown>>
443
295
  audit: {
444
296
  durability: AuditDurability
445
297
  }
@@ -462,100 +314,6 @@ export type PikkuWire<
462
314
  /** Wire as constructed by runners, before the function runner lazily adds `rpc`. */
463
315
  export type PikkuRawWire = Omit<PikkuWire, 'rpc'>
464
316
 
465
- export type CorePikkuMiddleware<
466
- SingletonServices extends CoreSingletonServices = CoreSingletonServices,
467
- UserSession extends CoreUserSession = CoreUserSession,
468
- > = (
469
- services: SingletonServices,
470
- wires: PikkuWire,
471
- next: () => Promise<void>
472
- ) => Promise<void>
473
-
474
- /**
475
- * Execution order: `highest` runs first (outermost in the onion), `lowest`
476
- * runs last, closest to the function.
477
- */
478
- export type MiddlewarePriority =
479
- | 'highest'
480
- | 'high'
481
- | 'medium'
482
- | 'low'
483
- | 'lowest'
484
-
485
- export type CorePikkuMiddlewareConfig<
486
- SingletonServices extends CoreSingletonServices = CoreSingletonServices,
487
- UserSession extends CoreUserSession = CoreUserSession,
488
- > = {
489
- func: CorePikkuMiddleware<SingletonServices, UserSession>
490
- name?: string
491
- description?: string
492
- /** Execution priority. Lower runs first (outermost). Defaults to 'medium'. */
493
- priority?: MiddlewarePriority
494
- }
495
-
496
- export type CorePikkuMiddlewareFactory<
497
- In = any,
498
- SingletonServices extends CoreSingletonServices = CoreSingletonServices,
499
- UserSession extends CoreUserSession = CoreUserSession,
500
- > = (input: In) => CorePikkuMiddleware<SingletonServices, UserSession>
501
-
502
- export type CorePikkuMiddlewareGroup<
503
- SingletonServices extends CoreSingletonServices = CoreSingletonServices,
504
- UserSession extends CoreUserSession = CoreUserSession,
505
- > = Array<
506
- | CorePikkuMiddleware<SingletonServices, UserSession>
507
- | CorePikkuMiddlewareFactory<any, SingletonServices, UserSession>
508
- >
509
-
510
- export const pikkuMiddleware = <
511
- SingletonServices extends CoreSingletonServices = CoreSingletonServices,
512
- UserSession extends CoreUserSession = CoreUserSession,
513
- >(
514
- middleware:
515
- | CorePikkuMiddleware<SingletonServices, UserSession>
516
- | CorePikkuMiddlewareConfig<SingletonServices, UserSession>
517
- ): CorePikkuMiddleware<SingletonServices, UserSession> => {
518
- if (typeof middleware === 'function') return middleware
519
- const func = middleware.func as CorePikkuMiddleware<
520
- SingletonServices,
521
- UserSession
522
- > & { __priority?: MiddlewarePriority }
523
- if (middleware.priority) {
524
- func.__priority = middleware.priority
525
- }
526
- return func
527
- }
528
-
529
- export const pikkuMiddlewareFactory = <In = any>(
530
- factory: CorePikkuMiddlewareFactory<In>
531
- ): CorePikkuMiddlewareFactory<In> => {
532
- return factory
533
- }
534
-
535
- export const pikkuChannelMiddleware = <
536
- SingletonServices extends CoreSingletonServices = CoreSingletonServices,
537
- Event = unknown,
538
- >(
539
- middleware: CorePikkuChannelMiddleware<SingletonServices, Event>
540
- ): CorePikkuChannelMiddleware<SingletonServices, Event> => {
541
- return middleware
542
- }
543
-
544
- export const pikkuChannelMiddlewareFactory = <In = any>(
545
- factory: CorePikkuChannelMiddlewareFactory<In>
546
- ): CorePikkuChannelMiddlewareFactory<In> => {
547
- return factory
548
- }
549
-
550
- export type { PikkuAIMiddlewareHooks } from '../wirings/ai-agent/ai-agent.types.js'
551
-
552
- export const pikkuAIMiddleware = <
553
- State extends Record<string, unknown> = Record<string, unknown>,
554
- SingletonServices extends CoreSingletonServices = CoreSingletonServices,
555
- >(
556
- hooks: PikkuAIMiddlewareHooks<State, SingletonServices>
557
- ): PikkuAIMiddlewareHooks<State, SingletonServices> => hooks
558
-
559
317
  export type CoreServices<SingletonServices = CoreSingletonServices> =
560
318
  SingletonServices
561
319
 
@@ -666,16 +424,6 @@ export interface SecurityAuditReport {
666
424
  summary: SecurityAuditSummary
667
425
  }
668
426
 
669
- export interface SerializedError {
670
- message: string
671
- stack?: string
672
- code?: string
673
- // Set for a deliberate PikkuError; survives step-boundary rehydration so
674
- // the workflow runner logs the message alone rather than a stack trace.
675
- expected?: boolean
676
- [key: string]: any
677
- }
678
-
679
427
  /**
680
428
  * A generated schema's declaration site, used by the credential/secret/variable
681
429
  * definition validators to point conflicting definitions at their source.
@@ -0,0 +1,2 @@
1
+ export * from './core.types.js'
2
+ export type * from './state.types.js'
@@ -25,14 +25,11 @@ import type {
25
25
  CoreMCPPrompt,
26
26
  MCPPromptMeta,
27
27
  } from '../wirings/mcp/mcp.types.js'
28
+ import type { CoreAgent, AgentsMeta } from '../wirings/agent/agent.types.js'
28
29
  import type {
29
- CoreAIAgent,
30
- AIAgentMeta,
31
- } from '../wirings/ai-agent/ai-agent.types.js'
32
- import type {
33
- PikkuAIScorer,
30
+ PikkuAgentScorer,
34
31
  ScorerMeta,
35
- } from '../wirings/ai-scorer/ai-scorer.types.js'
32
+ } from '../wirings/agent-scorer/agent-scorer.types.js'
36
33
  import type {
37
34
  CoreGateway,
38
35
  GatewaysMeta,
@@ -57,9 +54,6 @@ import type {
57
54
  TriggerSourceMeta,
58
55
  } from '../wirings/trigger/trigger.types.js'
59
56
  import type {
60
- FunctionsMeta,
61
- CorePikkuMiddleware,
62
- CorePikkuMiddlewareGroup,
63
57
  CreateConfig,
64
58
  CreateSingletonServices,
65
59
  CreateWireServices,
@@ -68,6 +62,11 @@ import type {
68
62
  CoreServices,
69
63
  CoreUserSession,
70
64
  } from './core.types.js'
65
+ import type { FunctionsMeta } from '../function/function-meta.types.js'
66
+ import type {
67
+ CorePikkuMiddleware,
68
+ CorePikkuMiddlewareGroup,
69
+ } from '../middleware/middleware.types.js'
71
70
  import type { CorePikkuChannelMiddleware } from '../wirings/channel/channel.types.js'
72
71
 
73
72
  export interface PikkuPackageState {
@@ -163,9 +162,9 @@ export interface PikkuPackageState {
163
162
  promptsMeta: MCPPromptMeta
164
163
  }
165
164
  agent: {
166
- agents: Map<string, CoreAIAgent>
167
- agentsMeta: AIAgentMeta
168
- scorers: Map<string, PikkuAIScorer>
165
+ agents: Map<string, CoreAgent>
166
+ agentsMeta: AgentsMeta
167
+ scorers: Map<string, PikkuAgentScorer>
169
168
  scorersMeta: ScorerMeta
170
169
  /** Alias -> `provider/model`, from the `models` table in pikku.config.json. */
171
170
  modelAliases: Record<string, string>
@@ -213,8 +212,7 @@ export interface PikkuPackageState {
213
212
  /** The pikkuBetterAuth factory, self-registered when auth.ts is evaluated.
214
213
  * pikkuServices reads it to build and inject the `auth` singleton. */
215
214
  authFactory:
216
- | ((services: CoreSingletonServices) => unknown | Promise<unknown>)
217
- | null
215
+ ((services: CoreSingletonServices) => unknown | Promise<unknown>) | null
218
216
  credentialsMeta: Record<
219
217
  string,
220
218
  { name: string; displayName: string; type: string; oauth2?: boolean }
@@ -0,0 +1,72 @@
1
+ import { describe, test } from 'node:test'
2
+ import assert from 'node:assert/strict'
3
+ import type { CoreUserSession, GetCredential, PikkuWire } from './core.types.js'
4
+ import type { PikkuRPC } from '../wirings/rpc/rpc-types.js'
5
+ import type { PikkuWorkflowWire } from '../wirings/workflow/workflow.types.js'
6
+ import type { PikkuScenarioWire } from '../wirings/workflow/scenario.types.js'
7
+ import type { ScenarioPersonas } from '../services/personas-service.js'
8
+
9
+ interface CredentialsMap {
10
+ slack: { token: string }
11
+ stripe: { apiKey: string; accountId: string }
12
+ }
13
+
14
+ type TypedWire = PikkuWire<
15
+ unknown,
16
+ unknown,
17
+ false,
18
+ CoreUserSession,
19
+ PikkuRPC,
20
+ null,
21
+ never,
22
+ PikkuWorkflowWire,
23
+ unknown,
24
+ PikkuScenarioWire<any>,
25
+ ScenarioPersonas,
26
+ CredentialsMap
27
+ >
28
+
29
+ const VALUES: Record<string, unknown> = {
30
+ slack: { token: 'xoxb-1' },
31
+ stripe: { apiKey: 'sk-1', accountId: 'acct-1' },
32
+ 'not-in-the-map': { anything: true },
33
+ }
34
+
35
+ // Mirrors `createWireServicesCredentialWireProps`, so this also pins that a
36
+ // generic single-signature implementation still satisfies the overload pair.
37
+ const getCredential: NonNullable<TypedWire['getCredential']> = <T = unknown>(
38
+ name: string
39
+ ) => (VALUES[name] ?? null) as T | null
40
+
41
+ describe('wire.getCredential is typed by the generated CredentialsMap', () => {
42
+ test('resolves a mapped name without an explicit type argument', async () => {
43
+ const slack: { token: string } | null | Promise<{ token: string } | null> =
44
+ getCredential('slack')
45
+ assert.deepEqual(await slack, { token: 'xoxb-1' })
46
+
47
+ const stripe = await getCredential('stripe')
48
+ assert.equal(stripe?.accountId, 'acct-1')
49
+ })
50
+
51
+ test('rejects the wrong type for a mapped name', () => {
52
+ // @ts-expect-error 'slack' resolves to { token: string }, not a string
53
+ const wrong: string | null | Promise<string | null> = getCredential('slack')
54
+ assert.ok(wrong)
55
+ })
56
+
57
+ test('keeps an unmapped name callable with an explicit type argument', async () => {
58
+ const other = await getCredential<{ anything: boolean }>('not-in-the-map')
59
+ assert.equal(other?.anything, true)
60
+ })
61
+
62
+ test('falls back to unknown when no map is bound', async () => {
63
+ const untyped: GetCredential = <T = unknown>(name: string) =>
64
+ (VALUES[name] ?? null) as T | null
65
+ // @ts-expect-error no map is bound, so the value is unknown
66
+ const wrong: { token: string } | null = await untyped('slack')
67
+ assert.deepEqual(wrong, { token: 'xoxb-1' })
68
+ assert.deepEqual(await untyped<{ token: string }>('slack'), {
69
+ token: 'xoxb-1',
70
+ })
71
+ })
72
+ })
package/src/utils.ts CHANGED
@@ -129,3 +129,37 @@ export const pikkuServerLifecycle = <
129
129
  >(
130
130
  lifecycle: ServerLifecycle<SS>
131
131
  ): ServerLifecycle<SS> => lifecycle
132
+
133
+ export type MakeRequired<T, K extends keyof T> = Omit<T, K> &
134
+ Required<Pick<T, K>>
135
+
136
+ export type JSONPrimitive = string | number | boolean | null | undefined
137
+
138
+ export type JSONValue =
139
+ | JSONPrimitive
140
+ | JSONValue[]
141
+ | {
142
+ [key: string]: JSONValue
143
+ }
144
+
145
+ export type PickRequired<T, K extends keyof T> = T & Required<Pick<T, K>>
146
+
147
+ export type PickOptional<T, K extends keyof T> = Partial<T> & Pick<T, K>
148
+
149
+ export type RequireAtLeastOne<T> = {
150
+ [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
151
+ }[keyof T]
152
+
153
+ export {
154
+ getDurationInMilliseconds,
155
+ getRelativeTimeOffset,
156
+ getRelativeTimeOffsetFromNow,
157
+ parseDurationString,
158
+ } from './time-utils.js'
159
+ export type { RelativeTimeInput } from './time-utils.js'
160
+
161
+ export {
162
+ formatVersionedId,
163
+ isVersionedId,
164
+ parseVersionedId,
165
+ } from './version.js'
@@ -7,9 +7,9 @@ import type {
7
7
  TargetAgentReply,
8
8
  ActorFlowApprovalPolicy,
9
9
  } from './actor-flow.types.js'
10
- import type { AIAgentStepResult } from '../../services/ai-agent-runner-service.js'
10
+ import type { AgentStepResult } from '../../services/agent-runner-service.js'
11
11
 
12
- const stepResult = (object: unknown): AIAgentStepResult => ({
12
+ const stepResult = (object: unknown): AgentStepResult => ({
13
13
  text: '',
14
14
  object,
15
15
  toolCalls: [],
@@ -5,11 +5,11 @@ import type {
5
5
  TargetPendingApproval,
6
6
  } from './actor-flow.types.js'
7
7
  import type { ResolvedPersona } from '../../services/personas-service.js'
8
- import type { AIMessage } from '../ai-agent/ai-agent.types.js'
8
+ import type { AgentMessage } from '../agent/agent.types.js'
9
9
  import type {
10
- AIAgentRunnerParams,
11
- AIAgentStepResult,
12
- } from '../../services/ai-agent-runner-service.js'
10
+ AgentRunnerParams,
11
+ AgentStepResult,
12
+ } from '../../services/agent-runner-service.js'
13
13
 
14
14
  /** One turn the actor takes: the message to send and whether it's finished. */
15
15
  const ACTOR_TURN_SCHEMA = {
@@ -56,9 +56,7 @@ const DEFAULT_MAX_TURNS = 12
56
56
  const DEFAULT_MAX_APPROVAL_ROUNDS = 16
57
57
 
58
58
  /** The LLM call the actor uses for its own turns/decisions/evaluation. */
59
- export type ActorLLM = (
60
- params: AIAgentRunnerParams
61
- ) => Promise<AIAgentStepResult>
59
+ export type ActorLLM = (params: AgentRunnerParams) => Promise<AgentStepResult>
62
60
 
63
61
  export interface RunConversationParams {
64
62
  /** The person being played — name, job title, personality. */
@@ -85,7 +83,7 @@ export interface RunConversationParams {
85
83
  agentName: string
86
84
  }
87
85
 
88
- function msg(role: AIMessage['role'], content: string): AIMessage {
86
+ function msg(role: AgentMessage['role'], content: string): AgentMessage {
89
87
  return {
90
88
  id: globalThis.crypto.randomUUID(),
91
89
  role,
@@ -221,7 +219,7 @@ export async function runConversation(
221
219
  // Seed a kickoff so the very first actor turn has a non-empty message list
222
220
  // (providers reject an empty prompt). It's an instruction TO the actor, so
223
221
  // it never appears in the transcript.
224
- const actorMessages: AIMessage[] = [
222
+ const actorMessages: AgentMessage[] = [
225
223
  msg(
226
224
  'user',
227
225
  'Begin the conversation now — send your first message to the assistant to work towards your goal.'
@@ -4,7 +4,7 @@ import assert from 'node:assert/strict'
4
4
  import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
5
5
  import { pikkuState, resetPikkuState } from '../../pikku-state.js'
6
6
  import { MissingScopeError } from '../../errors/errors.js'
7
- import { ContextAwareRPCService } from './rpc-runner.js'
7
+ import { ContextAwareRPCService } from '../rpc/rpc-runner.js'
8
8
  import { wireAddon } from './wire-addon.js'
9
9
 
10
10
  const ADDON_PACKAGE = '@addon/console'
@@ -0,0 +1,12 @@
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 {
5
+ WireRemoteAddonConfig,
6
+ RemoteAddonAuth,
7
+ } from './wire-remote-addon.js'
8
+ export {
9
+ resolveRemoteAddonToken,
10
+ RemoteAddonAuthError,
11
+ } from './remote-addon-auth.js'
12
+ export type { RemoteAddonAuthBinding } from './remote-addon-auth.js'