@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
@@ -1,10 +1,11 @@
1
1
  import type { CorePermissionGroup, CorePikkuPermission } from '../../function/functions.types.js';
2
- import type { CorePikkuMiddleware, MiddlewareMetadata, PermissionMetadata } from '../../types/core.types.js';
3
- import type { AIProviderOptions } from '../../services/ai-agent-runner-service.js';
2
+ import type { CorePikkuMiddleware, MiddlewareMetadata } from '../../middleware/middleware.types.js';
3
+ import type { PermissionMetadata } from '../../function/function-meta.types.js';
4
+ import type { AIProviderOptions } from '../../services/agent-runner-service.js';
4
5
  import type { PikkuChannel } from '../channel/channel.types.js';
5
6
  import type { CorePikkuChannelMiddleware } from '../channel/channel.types.js';
6
7
  import type { ApprovalPolicy } from '../channel/channel-rpc.js';
7
- export interface AIThread {
8
+ export interface AgentThread {
8
9
  id: string;
9
10
  resourceId: string;
10
11
  title?: string;
@@ -12,7 +13,7 @@ export interface AIThread {
12
13
  createdAt: Date;
13
14
  updatedAt: Date;
14
15
  }
15
- export type AIContentPart = {
16
+ export type AgentContentPart = {
16
17
  type: 'text';
17
18
  text: string;
18
19
  } | {
@@ -34,12 +35,12 @@ export type AIContentPart = {
34
35
  type: 'generative-ui';
35
36
  spec: unknown;
36
37
  };
37
- export interface AIToolCall {
38
+ export interface AgentToolCall {
38
39
  id: string;
39
40
  name: string;
40
41
  args: Record<string, unknown>;
41
42
  }
42
- export interface AIToolResult {
43
+ export interface AgentToolResult {
43
44
  id: string;
44
45
  name: string;
45
46
  result: string;
@@ -51,12 +52,12 @@ export interface AIToolResult {
51
52
  */
52
53
  error?: string;
53
54
  }
54
- export interface AIMessage {
55
+ export interface AgentMessage {
55
56
  id: string;
56
57
  role: 'system' | 'user' | 'assistant' | 'tool';
57
- content?: string | AIContentPart[];
58
- toolCalls?: AIToolCall[];
59
- toolResults?: AIToolResult[];
58
+ content?: string | AgentContentPart[];
59
+ toolCalls?: AgentToolCall[];
60
+ toolResults?: AgentToolResult[];
60
61
  reasoningContent?: string;
61
62
  /**
62
63
  * Set on an assistant message whose generation was cut short by
@@ -77,7 +78,7 @@ export interface AIMessage {
77
78
  undelivered?: boolean;
78
79
  createdAt: Date;
79
80
  }
80
- export interface AIAgentStep {
81
+ export interface AgentStep {
81
82
  usage: {
82
83
  inputTokens: number;
83
84
  outputTokens: number;
@@ -90,18 +91,18 @@ export interface AIAgentStep {
90
91
  error?: string;
91
92
  }[];
92
93
  }
93
- export interface AIAgentInputAttachment {
94
+ export interface AgentInputAttachment {
94
95
  type: 'image' | 'file';
95
96
  data?: string;
96
97
  url?: string;
97
98
  mediaType?: string;
98
99
  filename?: string;
99
100
  }
100
- export interface AIAgentInput {
101
+ export interface AgentInput {
101
102
  message: string;
102
103
  threadId: string;
103
104
  resourceId: string;
104
- attachments?: AIAgentInputAttachment[];
105
+ attachments?: AgentInputAttachment[];
105
106
  model?: string;
106
107
  temperature?: number;
107
108
  /** Structured context injected into the system instructions for this request.
@@ -109,12 +110,12 @@ export interface AIAgentInput {
109
110
  * so the agent can call tools without asking the user for identifiers. */
110
111
  context?: string;
111
112
  }
112
- export interface AIAgentOutput {
113
+ export interface AgentOutput {
113
114
  runId: string;
114
115
  text: string;
115
116
  object?: unknown;
116
117
  threadId: string;
117
- steps: AIAgentStep[];
118
+ steps: AgentStep[];
118
119
  usage: {
119
120
  inputTokens: number;
120
121
  outputTokens: number;
@@ -147,7 +148,7 @@ export type SessionScope = 'user' | 'org';
147
148
  * written by whoever runs the server it executes on. A capability runs on
148
149
  * someone else's machine, so it requires the field instead.
149
150
  */
150
- export interface AIAgentToolDef extends Partial<ApprovalPolicy> {
151
+ export interface AgentToolDef extends Partial<ApprovalPolicy> {
151
152
  name: string;
152
153
  description: string;
153
154
  inputSchema: Record<string, unknown>;
@@ -168,9 +169,9 @@ export interface AIAgentToolDef extends Partial<ApprovalPolicy> {
168
169
  */
169
170
  forwardsApproval?: boolean;
170
171
  }
171
- export interface PikkuAIMiddlewareHooks<State extends Record<string, unknown> = Record<string, unknown>, Services = any> {
172
+ export interface PikkuAgentMiddlewareHooks<State extends Record<string, unknown> = Record<string, unknown>, Services = any> {
172
173
  modifyInput?: (services: Services, ctx: {
173
- messages: AIMessage[];
174
+ messages: AgentMessage[];
174
175
  instructions: string;
175
176
  /**
176
177
  * Notes about this run that every middleware can read and write, as
@@ -190,15 +191,15 @@ export interface PikkuAIMiddlewareHooks<State extends Record<string, unknown> =
190
191
  */
191
192
  shared: Record<string, unknown>;
192
193
  }) => Promise<{
193
- messages: AIMessage[];
194
+ messages: AgentMessage[];
194
195
  instructions: string;
195
196
  }> | {
196
- messages: AIMessage[];
197
+ messages: AgentMessage[];
197
198
  instructions: string;
198
199
  };
199
200
  modifyOutputStream?: (services: Services, ctx: {
200
- event: AIStreamEvent;
201
- allEvents: readonly AIStreamEvent[];
201
+ event: AgentStreamEvent;
202
+ allEvents: readonly AgentStreamEvent[];
202
203
  /** Private to this middleware, for this run. Cross-middleware facts go in `shared`. */
203
204
  state: State;
204
205
  /** Per-run notes shared with every middleware — see {@link modifyInput}. */
@@ -217,14 +218,14 @@ export interface PikkuAIMiddlewareHooks<State extends Record<string, unknown> =
217
218
  * it matters — and a hook that emits must make sure anything still
218
219
  * outstanding has landed before it lets `done` through.
219
220
  */
220
- emit: (event: AIStreamEvent) => Promise<void>;
221
+ emit: (event: AgentStreamEvent) => Promise<void>;
221
222
  /**
222
223
  * Aborts when the run is interrupted. Pass it to any provider call the
223
224
  * hook makes: work started for a reply the user has already talked over
224
225
  * is billed but never heard.
225
226
  */
226
227
  signal?: AbortSignal;
227
- }) => Promise<AIStreamEvent | AIStreamEvent[] | null> | AIStreamEvent | AIStreamEvent[] | null;
228
+ }) => Promise<AgentStreamEvent | AgentStreamEvent[] | null> | AgentStreamEvent | AgentStreamEvent[] | null;
228
229
  /**
229
230
  * The last chance to rewrite what the run produced, before it is persisted
230
231
  * and returned.
@@ -242,20 +243,20 @@ export interface PikkuAIMiddlewareHooks<State extends Record<string, unknown> =
242
243
  */
243
244
  modifyOutput?: (services: Services, ctx: {
244
245
  text: string;
245
- messages: AIMessage[];
246
+ messages: AgentMessage[];
246
247
  usage: {
247
248
  inputTokens: number;
248
249
  outputTokens: number;
249
250
  };
250
- toolCalls: NonNullable<AIAgentStep['toolCalls']>;
251
+ toolCalls: NonNullable<AgentStep['toolCalls']>;
251
252
  }) => Promise<{
252
253
  text: string;
253
- messages: AIMessage[];
254
- toolCalls?: NonNullable<AIAgentStep['toolCalls']>;
254
+ messages: AgentMessage[];
255
+ toolCalls?: NonNullable<AgentStep['toolCalls']>;
255
256
  }> | {
256
257
  text: string;
257
- messages: AIMessage[];
258
- toolCalls?: NonNullable<AIAgentStep['toolCalls']>;
258
+ messages: AgentMessage[];
259
+ toolCalls?: NonNullable<AgentStep['toolCalls']>;
259
260
  };
260
261
  beforeToolCall?: (services: Services, ctx: {
261
262
  toolName: string;
@@ -301,17 +302,17 @@ export interface PikkuAIMiddlewareHooks<State extends Record<string, unknown> =
301
302
  onError?: (services: Services, ctx: {
302
303
  error: Error;
303
304
  stepNumber: number;
304
- messages: AIMessage[];
305
+ messages: AgentMessage[];
305
306
  }) => Promise<void> | void;
306
307
  }
307
- export type AIAgentMemoryConfig = {
308
+ export type AgentMemoryConfig = {
308
309
  storage?: string;
309
310
  vector?: string;
310
311
  embedder?: string;
311
312
  lastMessages?: number;
312
313
  workingMemory?: unknown;
313
314
  };
314
- export type CoreAIAgent<PikkuPermission = CorePikkuPermission<any, any>, PikkuMiddleware = CorePikkuMiddleware<any>, Scope extends string = string, Scorer extends string = string> = {
315
+ export type CoreAgent<PikkuPermission = CorePikkuPermission<any, any>, PikkuMiddleware = CorePikkuMiddleware<any>, Scope extends string = string, Scorer extends string = string> = {
315
316
  name: string;
316
317
  description: string;
317
318
  summary?: string;
@@ -348,7 +349,7 @@ export type CoreAIAgent<PikkuPermission = CorePikkuPermission<any, any>, PikkuMi
348
349
  */
349
350
  scorers?: Scorer[];
350
351
  agentMode?: 'delegate' | 'supervise';
351
- memory?: AIAgentMemoryConfig;
352
+ memory?: AgentMemoryConfig;
352
353
  maxSteps?: number;
353
354
  toolChoice?: 'auto' | 'required' | 'none';
354
355
  /**
@@ -366,15 +367,15 @@ export type CoreAIAgent<PikkuPermission = CorePikkuPermission<any, any>, PikkuMi
366
367
  tags?: string[];
367
368
  prepareStep?: (ctx: {
368
369
  stepNumber: number;
369
- messages: AIMessage[];
370
- tools: AIAgentToolDef[];
370
+ messages: AgentMessage[];
371
+ tools: AgentToolDef[];
371
372
  toolChoice: 'auto' | 'required' | 'none';
372
373
  model: string;
373
374
  stop: () => void;
374
375
  }) => void | Promise<void>;
375
376
  middleware?: PikkuMiddleware[];
376
377
  channelMiddleware?: CorePikkuChannelMiddleware<any, any>[];
377
- aiMiddleware?: PikkuAIMiddlewareHooks<any, any>[];
378
+ agentMiddleware?: PikkuAgentMiddlewareHooks<any, any>[];
378
379
  /**
379
380
  * Whether a session is required to run this agent. Defaults to `false`, since
380
381
  * agents are commonly invoked from an already-authenticated `pikkuFunc` or
@@ -389,12 +390,12 @@ export type CoreAIAgent<PikkuPermission = CorePikkuPermission<any, any>, PikkuMi
389
390
  * which OR together, a scope can only narrow access.
390
391
  *
391
392
  * Narrowed to the generated `ScopeId` union in a project's own
392
- * `pikku-types.gen.ts`, so an undeclared scope is a compile error.
393
+ * `#pikku/scopes`, so an undeclared scope is a compile error.
393
394
  */
394
395
  scopes?: Scope[];
395
396
  permissions?: CorePermissionGroup<PikkuPermission>;
396
397
  };
397
- export type AIStreamEvent = {
398
+ export type AgentStreamEvent = {
398
399
  type: 'step-start';
399
400
  stepNumber: number;
400
401
  agent?: string;
@@ -529,7 +530,7 @@ export type AIStreamEvent = {
529
530
  } | {
530
531
  type: 'done';
531
532
  };
532
- export interface AIStreamChannel extends PikkuChannel<unknown, AIStreamEvent> {
533
+ export interface AgentStreamChannel extends PikkuChannel<unknown, AgentStreamEvent> {
533
534
  }
534
535
  export type PendingApproval = {
535
536
  type: 'tool-call';
@@ -602,14 +603,14 @@ export interface AgentRunService {
602
603
  owners?: string[];
603
604
  limit?: number;
604
605
  offset?: number;
605
- }): Promise<AIThread[]>;
606
- getThread(threadId: string): Promise<AIThread | null>;
607
- getThreadMessages(threadId: string): Promise<AIMessage[]>;
606
+ }): Promise<AgentThread[]>;
607
+ getThread(threadId: string): Promise<AgentThread | null>;
608
+ getThreadMessages(threadId: string): Promise<AgentMessage[]>;
608
609
  getThreadRuns(threadId: string): Promise<AgentRunRow[]>;
609
610
  deleteThread(threadId: string): Promise<boolean>;
610
611
  getDistinctAgentNames(): Promise<string[]>;
611
612
  }
612
- export type AIAgentMeta = Record<string, Omit<CoreAIAgent, 'input' | 'output' | 'tools' | 'agents' | 'workflows' | 'middleware' | 'channelMiddleware' | 'aiMiddleware' | 'permissions'> & {
613
+ export type AgentsMeta = Record<string, Omit<CoreAgent, 'input' | 'output' | 'tools' | 'agents' | 'workflows' | 'middleware' | 'channelMiddleware' | 'agentMiddleware' | 'permissions'> & {
613
614
  tools?: string[];
614
615
  agents?: string[];
615
616
  workflows?: string[];
@@ -618,7 +619,7 @@ export type AIAgentMeta = Record<string, Omit<CoreAIAgent, 'input' | 'output' |
618
619
  workingMemorySchema: string | null;
619
620
  middleware?: MiddlewareMetadata[];
620
621
  channelMiddleware?: MiddlewareMetadata[];
621
- aiMiddleware?: MiddlewareMetadata[];
622
+ agentMiddleware?: MiddlewareMetadata[];
622
623
  permissions?: PermissionMetadata[];
623
624
  sourceFile?: string;
624
625
  exportedName?: string;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ export { agent, agentStream, agentResume, agentApprove, agentInterrupt, } from './agent-helpers.js';
2
+ export { wrapChannelWithAGUI } from './agent-agui.js';
3
+ export { runAgent, resumeAgentSync } from './agent-runner.js';
4
+ export { resolveModelAlias } from './agent-model-config.js';
5
+ export { streamAgent, resumeAgent, interruptAgent } from './agent-stream.js';
6
+ export { voiceInput, NoSpeechDetectedError, SPOKEN_TURN, SPOKEN_TRANSCRIPT, } from './voice-input.js';
7
+ export { voiceOutput, unspeakableScripts, voiceForText, type SpeakableScripts, type VoiceOutputState, } from './voice-output.js';
8
+ export { AgentInterruptedError, signalRunInterrupt } from './agent-interrupt.js';
9
+ export type { AgentInterruption, AgentInterruptResult, InterruptibleRunHandle, } from './agent-interrupt.js';
10
+ export { type RunAgentParams, type StreamAgentOptions, ToolApprovalRequired, ToolCredentialRequired, canAccessThread, isOwnedByPrincipal, threadOwnerConstraint, } from './agent-prepare.js';
11
+ export { addAgent } from './agent-registry.js';
12
+ export type { AgentInput, AgentsMeta, AgentMemoryConfig, AgentStep, AgentContentPart, AgentRunRow, AgentRunService, AgentRunState, AgentMessage, AgentStreamChannel, AgentStreamEvent, AgentThread, CoreAgent, PendingApproval, PikkuAgentMiddlewareHooks, } from './agent.types.js';
@@ -0,0 +1,10 @@
1
+ export { agent, agentStream, agentResume, agentApprove, agentInterrupt, } from './agent-helpers.js';
2
+ export { wrapChannelWithAGUI } from './agent-agui.js';
3
+ export { runAgent, resumeAgentSync } from './agent-runner.js';
4
+ export { resolveModelAlias } from './agent-model-config.js';
5
+ export { streamAgent, resumeAgent, interruptAgent } from './agent-stream.js';
6
+ export { voiceInput, NoSpeechDetectedError, SPOKEN_TURN, SPOKEN_TRANSCRIPT, } from './voice-input.js';
7
+ export { voiceOutput, unspeakableScripts, voiceForText, } from './voice-output.js';
8
+ export { AgentInterruptedError, signalRunInterrupt } from './agent-interrupt.js';
9
+ export { ToolApprovalRequired, ToolCredentialRequired, canAccessThread, isOwnedByPrincipal, threadOwnerConstraint, } from './agent-prepare.js';
10
+ export { addAgent } from './agent-registry.js';
@@ -58,7 +58,7 @@ export declare const voiceInput: (config?: {
58
58
  language?: string;
59
59
  model?: string;
60
60
  allowedAudioHosts?: string[];
61
- }) => import("./ai-agent.types.js").PikkuAIMiddlewareHooks<Record<string, unknown>, import("../../types/core.types.js").CoreSingletonServices<{
61
+ }) => import("./agent.types.js").PikkuAgentMiddlewareHooks<Record<string, unknown>, import("../../types/core.types.js").CoreSingletonServices<{
62
62
  logLevel?: import("../../services/logger.js").LogLevel;
63
63
  secrets?: {
64
64
  requireAllowedHosts?: boolean;
@@ -1,4 +1,4 @@
1
- import { pikkuAIMiddleware } from '../../types/core.types.js';
1
+ import { pikkuAgentMiddleware } from '../../middleware/middleware-factories.js';
2
2
  import { safeFetch } from '../../utils/safe-fetch.js';
3
3
  function base64ToUint8Array(base64) {
4
4
  const binary = atob(base64);
@@ -78,10 +78,10 @@ export const SPOKEN_TURN = 'voice:spokenTurn';
78
78
  * bubble followed by an answer to a question they cannot see.
79
79
  */
80
80
  export const SPOKEN_TRANSCRIPT = 'voice:transcript';
81
- export const voiceInput = (config) => pikkuAIMiddleware({
81
+ export const voiceInput = (config) => pikkuAgentMiddleware({
82
82
  modifyInput: async (services, { messages, instructions, shared }) => {
83
- const aiAgentRunner = services.aiAgentRunner;
84
- if (!aiAgentRunner?.transcribe)
83
+ const agentRunner = services.agentRunner;
84
+ if (!agentRunner?.transcribe)
85
85
  return { messages, instructions };
86
86
  const last = messages[messages.length - 1];
87
87
  const parts = last?.role === 'user' && typeof last.content !== 'string'
@@ -110,7 +110,7 @@ export const voiceInput = (config) => pikkuAIMiddleware({
110
110
  if (audioData.byteLength > MAX_AUDIO_SIZE) {
111
111
  throw new Error('Audio file exceeds maximum size');
112
112
  }
113
- const result = await aiAgentRunner.transcribe({
113
+ const result = await agentRunner.transcribe({
114
114
  model: config.model,
115
115
  audio: audioData,
116
116
  ...(config.language
@@ -1,4 +1,4 @@
1
- type VoiceOutputState = {
1
+ export type VoiceOutputState = {
2
2
  textBuffer?: string;
3
3
  /**
4
4
  * The audio emitted so far, as a chain.
@@ -74,7 +74,7 @@ export declare const voiceOutput: (config?: {
74
74
  * meant to be heard.
75
75
  */
76
76
  always?: boolean;
77
- }) => import("./ai-agent.types.js").PikkuAIMiddlewareHooks<VoiceOutputState, import("../../types/core.types.js").CoreSingletonServices<{
77
+ }) => import("./agent.types.js").PikkuAgentMiddlewareHooks<VoiceOutputState, import("../../types/core.types.js").CoreSingletonServices<{
78
78
  logLevel?: import("../../services/logger.js").LogLevel;
79
79
  secrets?: {
80
80
  requireAllowedHosts?: boolean;
@@ -83,4 +83,3 @@ export declare const voiceOutput: (config?: {
83
83
  webhook?: import("../../services/webhook-service.js").WebhookServiceConfig;
84
84
  postgres?: import("../../types/core.types.js").PostgresConfig;
85
85
  }>>;
86
- export {};
@@ -1,4 +1,4 @@
1
- import { pikkuAIMiddleware } from '../../types/core.types.js';
1
+ import { pikkuAgentMiddleware } from '../../middleware/middleware-factories.js';
2
2
  import { SPOKEN_TURN } from './voice-input.js';
3
3
  function bufferToBase64(data) {
4
4
  let binary = '';
@@ -81,8 +81,8 @@ export const voiceForText = (text, speakable, fallback) => {
81
81
  }
82
82
  return fallback;
83
83
  };
84
- async function synthesizeAudio(aiAgentRunner, input) {
85
- const result = await aiAgentRunner.generateSpeech?.({
84
+ async function synthesizeAudio(agentRunner, input) {
85
+ const result = await agentRunner.generateSpeech?.({
86
86
  model: input.model,
87
87
  text: input.text,
88
88
  voice: input.voice,
@@ -93,17 +93,17 @@ async function synthesizeAudio(aiAgentRunner, input) {
93
93
  abortSignal: input.abortSignal,
94
94
  });
95
95
  if (!result) {
96
- throw new Error('voiceOutput requires an aiAgentRunner with generateSpeech support');
96
+ throw new Error('voiceOutput requires an agentRunner with generateSpeech support');
97
97
  }
98
98
  return {
99
99
  bytes: result.audio.uint8Array,
100
100
  format: result.audio.format || input.format || 'pcm16',
101
101
  };
102
102
  }
103
- export const voiceOutput = (config) => pikkuAIMiddleware({
103
+ export const voiceOutput = (config) => pikkuAgentMiddleware({
104
104
  modifyOutputStream: async (services, { event, state, shared, emit, signal }) => {
105
- const { aiAgentRunner, logger } = services;
106
- if (!aiAgentRunner?.generateSpeech)
105
+ const { agentRunner, logger } = services;
106
+ if (!agentRunner?.generateSpeech)
107
107
  return event;
108
108
  // knowledge: decisions/internals/voice-output-speaks-unless-voice-input-explicitly-says-otherwise.md
109
109
  if (!config?.always && shared[SPOKEN_TURN] === false)
@@ -140,7 +140,7 @@ export const voiceOutput = (config) => pikkuAIMiddleware({
140
140
  // Settled into a value rather than left as a rejectable promise: it
141
141
  // sits unobserved until the chain reaches it, and an unhandled
142
142
  // rejection in that window would take the process down.
143
- const synthesis = synthesizeAudio(aiAgentRunner, {
143
+ const synthesis = synthesizeAudio(agentRunner, {
144
144
  model: config.model,
145
145
  text,
146
146
  voice,
@@ -1,4 +1,4 @@
1
- import type { ScoreJob, ScorerOutput } from './ai-scorer.types.js';
1
+ import type { ScoreJob, ScorerOutput } from './agent-scorer.types.js';
2
2
  /**
3
3
  * Grade one run with one scorer.
4
4
  *
@@ -11,8 +11,8 @@ import type { ScoreJob, ScorerOutput } from './ai-scorer.types.js';
11
11
  * runs against servers that may have no run-state adapter at all.
12
12
  */
13
13
  export declare const gradeRun: (job: ScoreJob, services: {
14
- aiAgentRunner?: unknown;
15
- aiRunState?: {
14
+ agentRunner?: unknown;
15
+ agentRunState?: {
16
16
  saveScore: (score: {
17
17
  runId: string;
18
18
  scorerName: string;
@@ -1,5 +1,5 @@
1
- import { runJudge } from './ai-scorer-judge.js';
2
- import { resolveAIScorer } from './ai-scorer-registry.js';
1
+ import { runJudge } from './agent-scorer-judge.js';
2
+ import { resolveAgentScorer } from './agent-scorer-registry.js';
3
3
  /**
4
4
  * Grade one run with one scorer.
5
5
  *
@@ -13,15 +13,15 @@ import { resolveAIScorer } from './ai-scorer-registry.js';
13
13
  */
14
14
  export const gradeRun = async (job, services, options) => {
15
15
  const { scorerName, ...input } = job;
16
- const scorer = resolveAIScorer(scorerName);
16
+ const scorer = resolveAgentScorer(scorerName);
17
17
  const result = scorer.score
18
18
  ? await scorer.score(input, services)
19
- : await runJudge(scorer, input, services.aiAgentRunner);
19
+ : await runJudge(scorer, input, services.agentRunner);
20
20
  if (options.persist) {
21
- if (!services.aiRunState) {
21
+ if (!services.agentRunState) {
22
22
  throw new Error(`AI run state service not initialized: cannot record the '${scorerName}' grade of run ${job.runId}`);
23
23
  }
24
- await services.aiRunState.saveScore({
24
+ await services.agentRunState.saveScore({
25
25
  runId: job.runId,
26
26
  scorerName,
27
27
  score: result.score,
@@ -0,0 +1,30 @@
1
+ import type { AgentRunnerService } from '../../services/agent-runner-service.js';
2
+ import type { PikkuAgentScorer, ScorerInput, ScorerJudgeConfig, ScorerOutput } from './agent-scorer.types.js';
3
+ /**
4
+ * The message a judge grades when its scorer supplies no `prompt`.
5
+ *
6
+ * A reference-based judge is shown the answer key; a reference-free one is not,
7
+ * and grades the answer on its own merits.
8
+ *
9
+ * The tool calls are shown because without them a judge cannot tell a fact from
10
+ * a fabrication. Grading a todo agent that had just listed the user's todos
11
+ * correctly, a judge given only the answer called it "a plausible-looking list"
12
+ * that "offers no real access to your actual list, making it effectively a
13
+ * guess", and scored 0.2 what it scored 1 on other runs — right by its rubric,
14
+ * on the evidence it was given, and wrong about the run. An agent that answers
15
+ * from a tool and one that invents the same sentence are indistinguishable in
16
+ * the output alone; they differ only in what the run did to get there.
17
+ *
18
+ * How much of that to show is `judge.toolCalls`, and the default stops at the
19
+ * names: the 0.2 was the judge doubting the run had any access, and a name
20
+ * settles that without handing a third-party model the rows.
21
+ */
22
+ export declare const buildJudgePrompt: (judge: ScorerJudgeConfig, input: ScorerInput) => string;
23
+ /**
24
+ * Run an LLM judge and force the `{ score, reason }` contract, so a scorer
25
+ * author writes a rubric rather than a parser.
26
+ *
27
+ * A judge has no tools, which is the one case where an output schema is
28
+ * reliably honoured.
29
+ */
30
+ export declare const runJudge: (scorer: PikkuAgentScorer<any>, input: ScorerInput, agentRunner: AgentRunnerService | undefined) => Promise<ScorerOutput>;
@@ -1,4 +1,4 @@
1
- import { randomUUID } from '../ai-agent/ai-agent-utils.js';
1
+ import { randomUUID } from '../agent/agent-utils.js';
2
2
  const JUDGE_OUTPUT_SCHEMA = {
3
3
  type: 'object',
4
4
  properties: {
@@ -16,11 +16,59 @@ const JUDGE_OUTPUT_SCHEMA = {
16
16
  required: ['score', 'reason'],
17
17
  additionalProperties: false,
18
18
  };
19
+ /**
20
+ * The default disclosure: which tools ran and which failed, and nothing about
21
+ * what went in or came back. A judge that can see a run reached `listTodos`
22
+ * can tell a retrieved list from an invented one, which is the whole of what
23
+ * the trajectory is needed for — the rows themselves it does not need, and an
24
+ * error string is a tool's own words about the caller's data, so it is
25
+ * summarised rather than quoted.
26
+ */
27
+ const describeToolCallName = (call) => `- ${call.name}${call.error ? ' (failed)' : ''}`;
28
+ /** Everything about a call, for a judge that grades against what came back. */
29
+ const describeToolCall = (call) => {
30
+ const outcome = call.error
31
+ ? `failed: ${call.error}`
32
+ : `returned ${formatToolValue(call.result)}`;
33
+ return `- ${call.name}(${formatToolValue(call.args)}) ${outcome}`;
34
+ };
35
+ /**
36
+ * A tool's arguments and result are arbitrary JSON, and some of it is large —
37
+ * a listing, a document, a page of search results. Truncating keeps a single
38
+ * fat call from crowding the answer out of the judge's context; what survives
39
+ * is the head, which is where the shape of a value is.
40
+ */
41
+ const TOOL_VALUE_LIMIT = 500;
42
+ const formatToolValue = (value) => {
43
+ if (value === undefined) {
44
+ return 'nothing';
45
+ }
46
+ const text = typeof value === 'string' ? value : JSON.stringify(value);
47
+ if (text === undefined) {
48
+ return 'nothing';
49
+ }
50
+ return text.length > TOOL_VALUE_LIMIT
51
+ ? `${text.slice(0, TOOL_VALUE_LIMIT)}… (truncated)`
52
+ : text;
53
+ };
19
54
  /**
20
55
  * The message a judge grades when its scorer supplies no `prompt`.
21
56
  *
22
57
  * A reference-based judge is shown the answer key; a reference-free one is not,
23
58
  * and grades the answer on its own merits.
59
+ *
60
+ * The tool calls are shown because without them a judge cannot tell a fact from
61
+ * a fabrication. Grading a todo agent that had just listed the user's todos
62
+ * correctly, a judge given only the answer called it "a plausible-looking list"
63
+ * that "offers no real access to your actual list, making it effectively a
64
+ * guess", and scored 0.2 what it scored 1 on other runs — right by its rubric,
65
+ * on the evidence it was given, and wrong about the run. An agent that answers
66
+ * from a tool and one that invents the same sentence are indistinguishable in
67
+ * the output alone; they differ only in what the run did to get there.
68
+ *
69
+ * How much of that to show is `judge.toolCalls`, and the default stops at the
70
+ * names: the 0.2 was the judge doubting the run had any access, and a name
71
+ * settles that without handing a third-party model the rows.
24
72
  */
25
73
  export const buildJudgePrompt = (judge, input) => {
26
74
  if (judge.prompt)
@@ -30,6 +78,10 @@ export const buildJudgePrompt = (judge, input) => {
30
78
  sections.push(`Reference answer:\n${input.reference}`);
31
79
  }
32
80
  sections.push(`Assistant answered:\n${input.output}`);
81
+ if (judge.toolCalls !== 'off' && input.toolCalls.length > 0) {
82
+ const describe = judge.toolCalls === 'full' ? describeToolCall : describeToolCallName;
83
+ sections.push(`Tools the assistant ran:\n${input.toolCalls.map(describe).join('\n')}`);
84
+ }
33
85
  sections.push(judge.goal);
34
86
  sections.push('Respond with a score 0..1 and a brief reason.');
35
87
  return sections.join('\n\n');
@@ -51,13 +103,13 @@ const normalizeScore = (scorerName, value) => {
51
103
  * A judge has no tools, which is the one case where an output schema is
52
104
  * reliably honoured.
53
105
  */
54
- export const runJudge = async (scorer, input, aiAgentRunner) => {
106
+ export const runJudge = async (scorer, input, agentRunner) => {
55
107
  const judge = scorer.judge;
56
108
  if (!judge) {
57
109
  throw new Error(`Scorer '${scorer.name}' is not a judge`);
58
110
  }
59
- if (!aiAgentRunner) {
60
- throw new Error(`Judge '${scorer.name}' needs an AI provider, but no aiAgentRunner is registered in this process. ` +
111
+ if (!agentRunner) {
112
+ throw new Error(`Judge '${scorer.name}' needs an AI provider, but no agentRunner is registered in this process. ` +
61
113
  `A worker deployed apart from the API has to register one to run the slow scoring lane.`);
62
114
  }
63
115
  if (scorer.requiresReference && input.reference === undefined) {
@@ -71,7 +123,7 @@ export const runJudge = async (scorer, input, aiAgentRunner) => {
71
123
  createdAt: new Date(),
72
124
  },
73
125
  ];
74
- const result = await aiAgentRunner.run({
126
+ const result = await agentRunner.run({
75
127
  model: judge.model,
76
128
  instructions: judge.goal,
77
129
  messages,
@@ -1,5 +1,5 @@
1
1
  import type { CoreSingletonServices } from '../../types/core.types.js';
2
- import { type ScorerInput } from './ai-scorer.types.js';
2
+ import { type ScorerInput } from './agent-scorer.types.js';
3
3
  /**
4
4
  * Grade one finished run on live traffic.
5
5
  *
@@ -1,6 +1,6 @@
1
- import { scorersForAgent } from './ai-scorer-registry.js';
2
- import { isSampled } from './ai-scorer-sampling.js';
3
- import { SCORER_LANE_QUEUES } from './ai-scorer.types.js';
1
+ import { scorersForAgent } from './agent-scorer-registry.js';
2
+ import { isSampled } from './agent-scorer-sampling.js';
3
+ import { SCORER_LANE_QUEUES } from './agent-scorer.types.js';
4
4
  /**
5
5
  * Grade one finished run on live traffic.
6
6
  *
@@ -1,12 +1,12 @@
1
- import type { PikkuAIScorer } from './ai-scorer.types.js';
2
- export declare const addAIScorer: (scorerName: string, scorer: PikkuAIScorer<any>, packageName?: string | null) => void;
3
- export declare const getAIScorers: () => Map<string, PikkuAIScorer>;
4
- export declare const getAIScorersMeta: () => import("./ai-scorer.types.js").ScorerMeta;
1
+ import type { PikkuAgentScorer } from './agent-scorer.types.js';
2
+ export declare const addAgentScorer: (scorerName: string, scorer: PikkuAgentScorer<any>, packageName?: string | null) => void;
3
+ export declare const getAgentScorers: () => Map<string, PikkuAgentScorer>;
4
+ export declare const getAgentScorersMeta: () => import("./agent-scorer.types.js").ScorerMeta;
5
5
  /**
6
6
  * Resolve a scorer by name across every registered package, the way an agent's
7
7
  * tools are resolved: a scorer declared in an addon is nameable by an app agent.
8
8
  */
9
- export declare const resolveAIScorer: (scorerName: string) => PikkuAIScorer<any>;
9
+ export declare const resolveAgentScorer: (scorerName: string) => PikkuAgentScorer<any>;
10
10
  /**
11
11
  * The scorers an agent asked to be graded by.
12
12
  *
@@ -15,4 +15,4 @@ export declare const resolveAIScorer: (scorerName: string) => PikkuAIScorer<any>
15
15
  */
16
16
  export declare const scorersForAgent: (agentName: string, logger?: {
17
17
  warn: (message: string) => void;
18
- }) => PikkuAIScorer<any>[];
18
+ }) => PikkuAgentScorer<any>[];