@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,14 +1,14 @@
1
- import { finalizeAgentRun, lastUserMessageText, } from './ai-agent-finalize.js';
1
+ import { finalizeAgentRun, lastUserMessageText } from './agent-finalize.js';
2
2
  import { pikkuState, getSingletonServices } from '../../pikku-state.js';
3
- import { applyInputMiddleware } from './ai-agent-turn.js';
3
+ import { applyInputMiddleware } from './agent-turn.js';
4
4
  import { AIProviderNotConfiguredError } from '../../errors/errors.js';
5
- import { randomUUID } from './ai-agent-utils.js';
5
+ import { deniedToolResult, randomUUID } from './agent-utils.js';
6
6
  import { SPOKEN_TRANSCRIPT } from './voice-input.js';
7
7
  import { combineChannelMiddleware, wrapChannelWithMiddleware, } from '../channel/channel-middleware-runner.js';
8
- import { resolveMemoryServices, loadContextMessages, trimMessages, getWorkingMemoryMiddleware, } from './ai-agent-memory.js';
9
- import { prepareAgentRun, resolveAgent, buildInstructions, buildToolDefs, createScopedChannel, resolveOwnerResourceId, agentSessionScope, assertResourceOwner, assertResourcePrincipalOwner, assertAgentAuthorized, ToolApprovalRequired, ToolCredentialRequired, APPROVAL_REQUIRED, CREDENTIAL_REQUIRED, } from './ai-agent-prepare.js';
10
- import { resolveModelConfig } from './ai-agent-model-config.js';
11
- import { getInFlightTools, isAbortError, persistOrphanedToolResults, registerInterruptibleRun, signalRunInterrupt, trackInterruptNote, trackToolExecution, } from './ai-agent-interrupt.js';
8
+ import { resolveMemoryServices, loadContextMessages, trimMessages, getWorkingMemoryMiddleware, } from './agent-memory.js';
9
+ import { prepareAgentRun, resolveAgent, buildInstructions, buildToolDefs, createScopedChannel, resolveOwnerResourceId, agentSessionScope, assertResourceOwner, assertResourcePrincipalOwner, assertAgentAuthorized, ToolApprovalRequired, ToolCredentialRequired, APPROVAL_REQUIRED, CREDENTIAL_REQUIRED, } from './agent-prepare.js';
10
+ import { resolveModelConfig } from './agent-model-config.js';
11
+ import { getInFlightTools, isAbortError, persistOrphanedToolResults, registerInterruptibleRun, signalRunInterrupt, trackInterruptNote, trackToolExecution, } from './agent-interrupt.js';
12
12
  function createPersistingChannel(parent, storage, threadId, logger) {
13
13
  let fullText = '';
14
14
  let stepText = '';
@@ -175,17 +175,17 @@ const warnedUnstreamedOutputHooks = new Set();
175
175
  * rewrites in `modifyOutput` only — a redaction hook, typically — is therefore
176
176
  * silently ineffective when the agent is streamed, and is told so once.
177
177
  */
178
- const warnUnstreamedOutputHooks = (agentName, aiMiddlewares, logger) => {
178
+ const warnUnstreamedOutputHooks = (agentName, agentMiddlewares, logger) => {
179
179
  if (warnedUnstreamedOutputHooks.has(agentName))
180
180
  return;
181
- const unstreamed = aiMiddlewares.some((mw) => mw.modifyOutput && !mw.modifyOutputStream);
181
+ const unstreamed = agentMiddlewares.some((mw) => mw.modifyOutput && !mw.modifyOutputStream);
182
182
  if (!unstreamed)
183
183
  return;
184
184
  warnedUnstreamedOutputHooks.add(agentName);
185
185
  logger?.warn(`Agent '${agentName}' has AI middleware with modifyOutput but no modifyOutputStream — modifyOutput does not apply to streamed runs. Implement modifyOutputStream to affect a streamed reply.`);
186
186
  };
187
- async function postStreamCleanup(persistingChannel, aiRunState, runId, run) {
188
- await finalizeAgentRun(aiRunState, {
187
+ async function postStreamCleanup(persistingChannel, agentRunState, runId, run) {
188
+ await finalizeAgentRun(agentRunState, {
189
189
  runId,
190
190
  agentName: run.agentName,
191
191
  threadId: run.threadId,
@@ -204,7 +204,7 @@ async function postStreamCleanup(persistingChannel, aiRunState, runId, run) {
204
204
  });
205
205
  }
206
206
  async function runStreamStepLoop(params) {
207
- const { agent, runnerParams, maxSteps, agentRunner, streamChannel, channel, aiMiddlewares, } = params;
207
+ const { agent, runnerParams, maxSteps, agentRunner, streamChannel, channel, agentMiddlewares, } = params;
208
208
  const singletonServices = getSingletonServices();
209
209
  for (let step = 0; step < maxSteps; step++) {
210
210
  if (agent.prepareStep) {
@@ -224,7 +224,7 @@ async function runStreamStepLoop(params) {
224
224
  }
225
225
  channel.send({ type: 'step-start', stepNumber: step });
226
226
  const stepResult = await agentRunner.stream(runnerParams, streamChannel);
227
- for (const mw of aiMiddlewares) {
227
+ for (const mw of agentMiddlewares) {
228
228
  if (mw.afterStep) {
229
229
  await mw.afterStep(singletonServices, {
230
230
  stepNumber: step,
@@ -291,7 +291,7 @@ export function checkForApprovals(stepResult, tools) {
291
291
  export function checkForCredentialRequests(stepResult) {
292
292
  const requests = [];
293
293
  for (const tr of stepResult.toolResults) {
294
- // knowledge: decisions/security/ai-agent-credential-requests-are-symbol-branded.md
294
+ // knowledge: decisions/security/agent-credential-requests-are-symbol-branded.md
295
295
  if (tr.result &&
296
296
  typeof tr.result === 'object' &&
297
297
  CREDENTIAL_REQUIRED in tr.result) {
@@ -345,7 +345,7 @@ export function appendStepMessages(runnerParams, stepResult) {
345
345
  runnerParams.messages.push(toolMsg);
346
346
  }
347
347
  }
348
- function handleApprovals(approvals, runId, channel, aiRunState, persistingChannel) {
348
+ function handleApprovals(approvals, runId, channel, agentRunState, persistingChannel) {
349
349
  return (async () => {
350
350
  await persistingChannel.flush();
351
351
  const pendingApprovals = approvals.map((err) => err.agentRunId
@@ -363,7 +363,7 @@ function handleApprovals(approvals, runId, channel, aiRunState, persistingChanne
363
363
  toolName: err.toolName,
364
364
  args: err.args,
365
365
  });
366
- await aiRunState.updateRun(runId, {
366
+ await agentRunState.updateRun(runId, {
367
367
  status: 'suspended',
368
368
  suspendReason: 'approval',
369
369
  pendingApprovals,
@@ -383,7 +383,7 @@ function handleApprovals(approvals, runId, channel, aiRunState, persistingChanne
383
383
  channel.close();
384
384
  })();
385
385
  }
386
- function handleCredentialRequests(requests, runId, channel, aiRunState, persistingChannel) {
386
+ function handleCredentialRequests(requests, runId, channel, agentRunState, persistingChannel) {
387
387
  return (async () => {
388
388
  await persistingChannel.flush();
389
389
  const pendingApprovals = requests.map((req) => ({
@@ -395,7 +395,7 @@ function handleCredentialRequests(requests, runId, channel, aiRunState, persisti
395
395
  credentialType: req.credentialType,
396
396
  connectUrl: req.connectUrl,
397
397
  }));
398
- await aiRunState.updateRun(runId, {
398
+ await agentRunState.updateRun(runId, {
399
399
  status: 'suspended',
400
400
  suspendReason: 'credential',
401
401
  pendingApprovals,
@@ -416,7 +416,7 @@ function handleCredentialRequests(requests, runId, channel, aiRunState, persisti
416
416
  channel.close();
417
417
  })();
418
418
  }
419
- export async function streamAIAgent(agentName, input, channel, params, agentSessionMap, options) {
419
+ export async function streamAgent(agentName, input, channel, params, agentSessionMap, options) {
420
420
  const sessionMap = agentSessionMap ?? new Map();
421
421
  const normalizedInput = {
422
422
  ...input,
@@ -426,12 +426,12 @@ export async function streamAIAgent(agentName, input, channel, params, agentSess
426
426
  const { agent, packageName, resolvedName, agentRunner, storage, memoryConfig, threadId, userMessage, runnerParams, maxSteps, missingRpcs, workingMemorySchemaName, } = await prepareAgentRun(agentName, normalizedInput, params, sessionMap, streamContext);
427
427
  runnerParams.agentId = agentName;
428
428
  const singletonServices = getSingletonServices();
429
- const { aiRunState } = singletonServices;
430
- if (!aiRunState) {
431
- throw new Error('AIRunStateService not available in singletonServices');
429
+ const { agentRunState } = singletonServices;
430
+ if (!agentRunState) {
431
+ throw new Error('AgentRunStateService not available in singletonServices');
432
432
  }
433
433
  if (missingRpcs.length > 0) {
434
- await aiRunState.createRun({
434
+ await agentRunState.createRun({
435
435
  agentName,
436
436
  threadId,
437
437
  resourceId: normalizedInput.resourceId,
@@ -446,18 +446,18 @@ export async function streamAIAgent(agentName, input, channel, params, agentSess
446
446
  channel.send({ type: 'done' });
447
447
  return '';
448
448
  }
449
- const aiMiddlewares = [
449
+ const agentMiddlewares = [
450
450
  ...getWorkingMemoryMiddleware(memoryConfig, storage, {
451
451
  threadId,
452
452
  workingMemorySchemaName,
453
453
  logger: singletonServices.logger,
454
454
  schemaService: singletonServices.schema,
455
455
  }),
456
- ...(agent.aiMiddleware ?? []),
456
+ ...(agent.agentMiddleware ?? []),
457
457
  ];
458
- // One bag per run, shared by every middleware — see PikkuAIMiddlewareHooks.
458
+ // One bag per run, shared by every middleware — see PikkuAgentMiddlewareHooks.
459
459
  const sharedNotes = {};
460
- const { messages: modifiedMessages, instructions: modifiedInstructions } = await applyInputMiddleware(aiMiddlewares, singletonServices, {
460
+ const { messages: modifiedMessages, instructions: modifiedInstructions } = await applyInputMiddleware(agentMiddlewares, singletonServices, {
461
461
  messages: runnerParams.messages,
462
462
  instructions: runnerParams.instructions,
463
463
  }, sharedNotes);
@@ -471,7 +471,7 @@ export async function streamAIAgent(agentName, input, channel, params, agentSess
471
471
  // knowledge: decisions/internals/thread-history-records-the-transcript-not-the-audio.md
472
472
  const lastModified = modifiedMessages[modifiedMessages.length - 1];
473
473
  const persistedUserMessage = lastModified?.id === userMessage.id ? lastModified : userMessage;
474
- const runId = await aiRunState.createRun({
474
+ const runId = await agentRunState.createRun({
475
475
  agentName,
476
476
  threadId,
477
477
  resourceId: normalizedInput.resourceId,
@@ -490,8 +490,8 @@ export async function streamAIAgent(agentName, input, channel, params, agentSess
490
490
  if (storage) {
491
491
  await storage.saveMessages(threadId, [persistedUserMessage]);
492
492
  }
493
- warnUnstreamedOutputHooks(agentName, aiMiddlewares, singletonServices.logger);
494
- const streamMiddleware = aiMiddlewares
493
+ warnUnstreamedOutputHooks(agentName, agentMiddlewares, singletonServices.logger);
494
+ const streamMiddleware = agentMiddlewares
495
495
  .filter((mw) => mw.modifyOutputStream)
496
496
  .map((mw) => {
497
497
  const state = {};
@@ -571,17 +571,17 @@ export async function streamAIAgent(agentName, input, channel, params, agentSess
571
571
  streamChannel: outputChannel,
572
572
  persistingChannel,
573
573
  channel,
574
- aiMiddlewares,
574
+ agentMiddlewares,
575
575
  });
576
576
  if (loopResult.outcome === 'approval') {
577
- await handleApprovals(loopResult.approvals, runId, channel, aiRunState, persistingChannel);
577
+ await handleApprovals(loopResult.approvals, runId, channel, agentRunState, persistingChannel);
578
578
  return persistingChannel.fullText;
579
579
  }
580
580
  if (loopResult.outcome === 'credential') {
581
- await handleCredentialRequests(loopResult.credentialRequests, runId, channel, aiRunState, persistingChannel);
581
+ await handleCredentialRequests(loopResult.credentialRequests, runId, channel, agentRunState, persistingChannel);
582
582
  return persistingChannel.fullText;
583
583
  }
584
- await postStreamCleanup(persistingChannel, aiRunState, runId, {
584
+ await postStreamCleanup(persistingChannel, agentRunState, runId, {
585
585
  agentName,
586
586
  threadId,
587
587
  resourceId: input.resourceId,
@@ -598,7 +598,7 @@ export async function streamAIAgent(agentName, input, channel, params, agentSess
598
598
  const interruption = interruptHandle.interruption;
599
599
  if (interruption || isAbortError(err)) {
600
600
  await persistingChannel.flush({ interrupted: true });
601
- await aiRunState.updateRun(runId, { status: 'interrupted' });
601
+ await agentRunState.updateRun(runId, { status: 'interrupted' });
602
602
  // Deliberately not awaited. A tool still running must not hold the stream
603
603
  // open — the whole point of barge-in is that the agent stops now — so the
604
604
  // note lands later and the next run on this thread waits for it instead.
@@ -615,7 +615,7 @@ export async function streamAIAgent(agentName, input, channel, params, agentSess
615
615
  channel.close();
616
616
  return persistingChannel.fullText;
617
617
  }
618
- for (const mw of aiMiddlewares) {
618
+ for (const mw of agentMiddlewares) {
619
619
  if (mw.onError) {
620
620
  try {
621
621
  await mw.onError(singletonServices, {
@@ -627,7 +627,7 @@ export async function streamAIAgent(agentName, input, channel, params, agentSess
627
627
  catch { }
628
628
  }
629
629
  }
630
- await aiRunState.updateRun(runId, {
630
+ await agentRunState.updateRun(runId, {
631
631
  status: 'failed',
632
632
  errorMessage: err instanceof Error ? err.message : String(err),
633
633
  });
@@ -646,9 +646,9 @@ export async function streamAIAgent(agentName, input, channel, params, agentSess
646
646
  /**
647
647
  * Stop an in-flight run on behalf of a caller, after checking the run is theirs.
648
648
  *
649
- * Unlike {@link resumeAIAgent} this needs no channel: it does not continue the
649
+ * Unlike {@link resumeAgent} this needs no channel: it does not continue the
650
650
  * stream, it ends one. The `interrupted` event and the truncated message are
651
- * emitted by the original {@link streamAIAgent} call on its own channel, so this
651
+ * emitted by the original {@link streamAgent} call on its own channel, so this
652
652
  * can be reached over a plain RPC while the stream is held open elsewhere —
653
653
  * which is exactly the shape a voice barge-in needs.
654
654
  *
@@ -661,12 +661,12 @@ export async function streamAIAgent(agentName, input, channel, params, agentSess
661
661
  * Returns `false` when there was nothing to stop. Racing a run that finishes on
662
662
  * its own is the normal case in voice, so it is not an error.
663
663
  */
664
- export async function interruptAIAgent(input, params) {
665
- const { aiRunState, logger } = getSingletonServices();
666
- if (!aiRunState) {
667
- throw new Error('AIRunStateService not available in singletonServices');
664
+ export async function interruptAgent(input, params) {
665
+ const { agentRunState, logger } = getSingletonServices();
666
+ if (!agentRunState) {
667
+ throw new Error('AgentRunStateService not available in singletonServices');
668
668
  }
669
- const run = await aiRunState.getRun(input.runId);
669
+ const run = await agentRunState.getRun(input.runId);
670
670
  if (!run) {
671
671
  throw new Error(`No run found for runId ${input.runId}`);
672
672
  }
@@ -683,13 +683,13 @@ export async function interruptAIAgent(input, params) {
683
683
  // model call does nothing to a tool already executing.
684
684
  return { stopped, inFlightTools: getInFlightTools(input.runId) };
685
685
  }
686
- export async function resumeAIAgent(input, channel, params, options) {
686
+ export async function resumeAgent(input, channel, params, options) {
687
687
  const singletonServices = getSingletonServices();
688
- const { aiRunState } = singletonServices;
689
- if (!aiRunState) {
690
- throw new Error('AIRunStateService not available in singletonServices');
688
+ const { agentRunState } = singletonServices;
689
+ if (!agentRunState) {
690
+ throw new Error('AgentRunStateService not available in singletonServices');
691
691
  }
692
- const run = await aiRunState.getRun(input.runId);
692
+ const run = await agentRunState.getRun(input.runId);
693
693
  if (!run) {
694
694
  throw new Error(`No run found for runId ${input.runId}`);
695
695
  }
@@ -703,21 +703,21 @@ export async function resumeAIAgent(input, channel, params, options) {
703
703
  // The read above is not a claim — concurrent resumes all see the same pending
704
704
  // approval. `resolveApproval` is the claim, and the loser must not go on to
705
705
  // run the tool a second time.
706
- const claimed = await aiRunState.resolveApproval(input.toolCallId, input.approved ? 'approved' : 'denied');
706
+ const claimed = await agentRunState.resolveApproval(input.toolCallId, input.approved ? 'approved' : 'denied');
707
707
  if (!claimed) {
708
708
  throw new Error(`Approval for toolCallId ${input.toolCallId} was already resolved by another caller`);
709
709
  }
710
710
  const { storage } = resolveMemoryServices(agent, singletonServices);
711
711
  const memoryConfig = agent.memory;
712
- const agentRunner = singletonServices.aiAgentRunner;
712
+ const agentRunner = singletonServices.agentRunner;
713
713
  if (!agentRunner) {
714
714
  throw new AIProviderNotConfiguredError();
715
715
  }
716
716
  if (!input.approved) {
717
717
  if (pending.type === 'agent-call') {
718
- await aiRunState.updateRun(pending.agentRunId, { status: 'failed' });
718
+ await agentRunState.updateRun(pending.agentRunId, { status: 'failed' });
719
719
  }
720
- const denialResult = 'The user explicitly declined this action. Inform them that it was declined and do not retry.';
720
+ const denialResult = deniedToolResult();
721
721
  if (storage) {
722
722
  await storage.saveMessages(run.threadId, [
723
723
  {
@@ -745,19 +745,19 @@ export async function resumeAIAgent(input, channel, params, options) {
745
745
  : pending.agentName,
746
746
  result: denialResult,
747
747
  });
748
- const updatedRun = await aiRunState.getRun(run.runId);
748
+ const updatedRun = await agentRunState.getRun(run.runId);
749
749
  const remaining = updatedRun?.pendingApprovals ?? [];
750
750
  if (remaining.length > 0) {
751
751
  channel.send({ type: 'done' });
752
752
  channel.close();
753
753
  return;
754
754
  }
755
- await aiRunState.updateRun(run.runId, { status: 'running' });
756
- await continueAfterToolResult(run, agent, packageName, resolvedName, storage, memoryConfig, agentRunner, channel, params, aiRunState, options);
755
+ await agentRunState.updateRun(run.runId, { status: 'running' });
756
+ await continueAfterToolResult(run, agent, packageName, resolvedName, storage, memoryConfig, agentRunner, channel, params, agentRunState, options);
757
757
  return;
758
758
  }
759
759
  if (pending.type === 'agent-call') {
760
- const subRun = await aiRunState.getRun(pending.agentRunId);
760
+ const subRun = await agentRunState.getRun(pending.agentRunId);
761
761
  if (!subRun) {
762
762
  throw new Error(`Sub-agent run not found: ${pending.agentRunId}`);
763
763
  }
@@ -773,7 +773,7 @@ export async function resumeAIAgent(input, channel, params, options) {
773
773
  session: 'resume',
774
774
  input: null,
775
775
  });
776
- await resumeAIAgent({
776
+ await resumeAgent({
777
777
  runId: pending.agentRunId,
778
778
  toolCallId: subPending.toolCallId,
779
779
  approved: true,
@@ -806,8 +806,8 @@ export async function resumeAIAgent(input, channel, params, options) {
806
806
  channel,
807
807
  options: { ...options, requiresToolApproval: false },
808
808
  };
809
- const aiMiddlewaresForResume = agent.aiMiddleware ?? [];
810
- const { tools } = await buildToolDefs(params, new Map(), run.resourceId, resolvedName, packageName, streamContext, aiMiddlewaresForResume);
809
+ const agentMiddlewaresForResume = agent.agentMiddleware ?? [];
810
+ const { tools } = await buildToolDefs(params, new Map(), run.resourceId, resolvedName, packageName, streamContext, agentMiddlewaresForResume);
811
811
  const matchingTool = tools.find((t) => t.name === pending.toolName);
812
812
  if (!matchingTool) {
813
813
  throw new Error(`Tool "${pending.toolName}" not found in agent definition`);
@@ -853,17 +853,17 @@ export async function resumeAIAgent(input, channel, params, options) {
853
853
  ...(toolError ? { error: toolError } : {}),
854
854
  });
855
855
  }
856
- const updatedRun = await aiRunState.getRun(run.runId);
856
+ const updatedRun = await agentRunState.getRun(run.runId);
857
857
  const remaining = updatedRun?.pendingApprovals ?? [];
858
858
  if (remaining.length > 0) {
859
859
  channel.send({ type: 'done' });
860
860
  channel.close();
861
861
  return;
862
862
  }
863
- await aiRunState.updateRun(run.runId, { status: 'running' });
864
- await continueAfterToolResult(run, agent, packageName, resolvedName, storage, memoryConfig, agentRunner, channel, params, aiRunState, options);
863
+ await agentRunState.updateRun(run.runId, { status: 'running' });
864
+ await continueAfterToolResult(run, agent, packageName, resolvedName, storage, memoryConfig, agentRunner, channel, params, agentRunState, options);
865
865
  }
866
- async function continueAfterToolResult(run, agent, packageName, resolvedName, storage, memoryConfig, agentRunner, channel, params, aiRunState, options) {
866
+ async function continueAfterToolResult(run, agent, packageName, resolvedName, storage, memoryConfig, agentRunner, channel, params, agentRunState, options) {
867
867
  const singletonServices = getSingletonServices();
868
868
  const agentsMeta = pikkuState(packageName, 'agent', 'agentsMeta');
869
869
  const meta = agentsMeta[resolvedName];
@@ -880,22 +880,22 @@ async function continueAfterToolResult(run, agent, packageName, resolvedName, st
880
880
  const allMessages = [...contextMessages, ...messages];
881
881
  const trimmedMessages = trimMessages(allMessages);
882
882
  const instructions = await buildInstructions(resolvedName, packageName);
883
- const aiMiddlewares = [
883
+ const agentMiddlewares = [
884
884
  ...getWorkingMemoryMiddleware(memoryConfig, storage, {
885
885
  threadId: run.threadId,
886
886
  workingMemorySchemaName,
887
887
  logger: singletonServices.logger,
888
888
  schemaService: singletonServices.schema,
889
889
  }),
890
- ...(agent.aiMiddleware ?? []),
890
+ ...(agent.agentMiddleware ?? []),
891
891
  ];
892
- // One bag per run, shared by every middleware — see PikkuAIMiddlewareHooks.
892
+ // One bag per run, shared by every middleware — see PikkuAgentMiddlewareHooks.
893
893
  const sharedNotes = {};
894
- const { messages: modifiedMessages, instructions: modifiedInstructions } = await applyInputMiddleware(aiMiddlewares, singletonServices, { messages: trimmedMessages, instructions: instructions }, sharedNotes);
894
+ const { messages: modifiedMessages, instructions: modifiedInstructions } = await applyInputMiddleware(agentMiddlewares, singletonServices, { messages: trimmedMessages, instructions: instructions }, sharedNotes);
895
895
  // knowledge: decisions/internals/a-resumed-agent-turn-is-as-interruptible-as-the-first.md
896
896
  const interruptHandle = registerInterruptibleRun(run.runId);
897
- warnUnstreamedOutputHooks(run.agentName, aiMiddlewares, singletonServices.logger);
898
- const streamMiddleware = aiMiddlewares
897
+ warnUnstreamedOutputHooks(run.agentName, agentMiddlewares, singletonServices.logger);
898
+ const streamMiddleware = agentMiddlewares
899
899
  .filter((mw) => mw.modifyOutputStream)
900
900
  .map((mw) => {
901
901
  const state = {};
@@ -935,7 +935,7 @@ async function continueAfterToolResult(run, agent, packageName, resolvedName, st
935
935
  ? wrapChannelWithMiddleware({ channel: persistingChannel }, singletonServices, allChannelMiddleware).channel
936
936
  : persistingChannel;
937
937
  const streamContext = { channel, options };
938
- const resumeTools = (await buildToolDefs(params, new Map(), run.resourceId, resolvedName, packageName, streamContext, aiMiddlewares)).tools;
938
+ const resumeTools = (await buildToolDefs(params, new Map(), run.resourceId, resolvedName, packageName, streamContext, agentMiddlewares)).tools;
939
939
  const resolved = resolveModelConfig(resolvedName, agent);
940
940
  const maxSteps = resolved.maxSteps ?? 10;
941
941
  const runnerParams = {
@@ -962,17 +962,17 @@ async function continueAfterToolResult(run, agent, packageName, resolvedName, st
962
962
  streamChannel: wrappedChannel,
963
963
  persistingChannel,
964
964
  channel,
965
- aiMiddlewares,
965
+ agentMiddlewares,
966
966
  });
967
967
  if (loopResult.outcome === 'approval') {
968
- await handleApprovals(loopResult.approvals, run.runId, channel, aiRunState, persistingChannel);
968
+ await handleApprovals(loopResult.approvals, run.runId, channel, agentRunState, persistingChannel);
969
969
  return;
970
970
  }
971
971
  if (loopResult.outcome === 'credential') {
972
- await handleCredentialRequests(loopResult.credentialRequests, run.runId, channel, aiRunState, persistingChannel);
972
+ await handleCredentialRequests(loopResult.credentialRequests, run.runId, channel, agentRunState, persistingChannel);
973
973
  return;
974
974
  }
975
- await postStreamCleanup(persistingChannel, aiRunState, run.runId, {
975
+ await postStreamCleanup(persistingChannel, agentRunState, run.runId, {
976
976
  ...run,
977
977
  input: lastUserMessageText(runnerParams.messages),
978
978
  });
@@ -986,7 +986,7 @@ async function continueAfterToolResult(run, agent, packageName, resolvedName, st
986
986
  const interruption = interruptHandle.interruption;
987
987
  if (interruption || isAbortError(err)) {
988
988
  await persistingChannel.flush({ interrupted: true });
989
- await aiRunState.updateRun(run.runId, { status: 'interrupted' });
989
+ await agentRunState.updateRun(run.runId, { status: 'interrupted' });
990
990
  if (storage) {
991
991
  trackInterruptNote(run.threadId, persistOrphanedToolResults(interruptHandle, storage, run.threadId));
992
992
  }
@@ -1000,7 +1000,7 @@ async function continueAfterToolResult(run, agent, packageName, resolvedName, st
1000
1000
  channel.close();
1001
1001
  return;
1002
1002
  }
1003
- for (const mw of aiMiddlewares) {
1003
+ for (const mw of agentMiddlewares) {
1004
1004
  if (mw.onError) {
1005
1005
  try {
1006
1006
  await mw.onError(singletonServices, {
@@ -1012,7 +1012,7 @@ async function continueAfterToolResult(run, agent, packageName, resolvedName, st
1012
1012
  catch { }
1013
1013
  }
1014
1014
  }
1015
- await aiRunState.updateRun(run.runId, {
1015
+ await agentRunState.updateRun(run.runId, {
1016
1016
  status: 'failed',
1017
1017
  errorMessage: err instanceof Error ? err.message : String(err),
1018
1018
  });
@@ -1,7 +1,7 @@
1
1
  import type { CoreSingletonServices } from '../../types/core.types.js';
2
- import type { PikkuAIMiddlewareHooks } from './ai-agent.types.js';
2
+ import type { PikkuAgentMiddlewareHooks } from './agent.types.js';
3
3
  /** Exactly what `modifyInput` accepts and returns, taken from the hook itself. */
4
- type TurnInput = Pick<Parameters<NonNullable<PikkuAIMiddlewareHooks['modifyInput']>>[1], 'messages' | 'instructions'>;
4
+ type TurnInput = Pick<Parameters<NonNullable<PikkuAgentMiddlewareHooks['modifyInput']>>[1], 'messages' | 'instructions'>;
5
5
  /**
6
6
  * Run every `modifyInput` hook in order, threading each result into the next.
7
7
  *
@@ -10,14 +10,14 @@ type TurnInput = Pick<Parameters<NonNullable<PikkuAIMiddlewareHooks['modifyInput
10
10
  * caller keeps, because hooks use it to pass things forward (`voiceInput`
11
11
  * leaves the transcript there for `voiceOutput`).
12
12
  */
13
- export declare const applyInputMiddleware: (aiMiddlewares: PikkuAIMiddlewareHooks[], singletonServices: CoreSingletonServices, input: TurnInput, sharedNotes: Record<string, unknown>) => Promise<TurnInput>;
13
+ export declare const applyInputMiddleware: (agentMiddlewares: PikkuAgentMiddlewareHooks[], singletonServices: CoreSingletonServices, input: TurnInput, sharedNotes: Record<string, unknown>) => Promise<TurnInput>;
14
14
  /** The step fields both agent paths hand to `afterStep`, taken from the hook. */
15
- type StepResult = Omit<Parameters<NonNullable<PikkuAIMiddlewareHooks['afterStep']>>[1], 'stepNumber'>;
15
+ type StepResult = Omit<Parameters<NonNullable<PikkuAgentMiddlewareHooks['afterStep']>>[1], 'stepNumber'>;
16
16
  /**
17
17
  * Notify every `afterStep` hook. The payload is the step verbatim plus its
18
18
  * ordinal — a hook that wants the run's totals accumulates them itself.
19
19
  */
20
- export declare const notifyAfterStep: (aiMiddlewares: PikkuAIMiddlewareHooks[], singletonServices: CoreSingletonServices, stepNumber: number, stepResult: StepResult) => Promise<void>;
20
+ export declare const notifyAfterStep: (agentMiddlewares: PikkuAgentMiddlewareHooks[], singletonServices: CoreSingletonServices, stepNumber: number, stepResult: StepResult) => Promise<void>;
21
21
  /**
22
22
  * The step shape kept on the run: each tool call paired with its result.
23
23
  *
@@ -6,9 +6,9 @@
6
6
  * caller keeps, because hooks use it to pass things forward (`voiceInput`
7
7
  * leaves the transcript there for `voiceOutput`).
8
8
  */
9
- export const applyInputMiddleware = async (aiMiddlewares, singletonServices, input, sharedNotes) => {
9
+ export const applyInputMiddleware = async (agentMiddlewares, singletonServices, input, sharedNotes) => {
10
10
  let { messages, instructions } = input;
11
- for (const mw of aiMiddlewares) {
11
+ for (const mw of agentMiddlewares) {
12
12
  if (!mw.modifyInput)
13
13
  continue;
14
14
  const result = await mw.modifyInput(singletonServices, {
@@ -25,8 +25,8 @@ export const applyInputMiddleware = async (aiMiddlewares, singletonServices, inp
25
25
  * Notify every `afterStep` hook. The payload is the step verbatim plus its
26
26
  * ordinal — a hook that wants the run's totals accumulates them itself.
27
27
  */
28
- export const notifyAfterStep = async (aiMiddlewares, singletonServices, stepNumber, stepResult) => {
29
- for (const mw of aiMiddlewares) {
28
+ export const notifyAfterStep = async (agentMiddlewares, singletonServices, stepNumber, stepResult) => {
29
+ for (const mw of agentMiddlewares) {
30
30
  if (!mw.afterStep)
31
31
  continue;
32
32
  await mw.afterStep(singletonServices, {
@@ -0,0 +1,14 @@
1
+ export declare const randomUUID: () => string;
2
+ /**
3
+ * The tool result stored and streamed when a user denies an approval.
4
+ *
5
+ * Two readers, one string. The model needs the sentence — it has to tell the
6
+ * user the action was declined and not retry it. A client needs to know a
7
+ * denial when it sees one, so it can render the call as denied rather than as
8
+ * a successful call that happened to return prose; that is what `approved`
9
+ * carries, and it is the same flag a client sets optimistically the moment the
10
+ * deny button is clicked. Emitting only the sentence made the two disagree:
11
+ * live the call showed denied, and on any re-render from storage the same call
12
+ * came back green.
13
+ */
14
+ export declare const deniedToolResult: () => string;
@@ -0,0 +1,17 @@
1
+ export const randomUUID = () => globalThis.crypto.randomUUID();
2
+ /**
3
+ * The tool result stored and streamed when a user denies an approval.
4
+ *
5
+ * Two readers, one string. The model needs the sentence — it has to tell the
6
+ * user the action was declined and not retry it. A client needs to know a
7
+ * denial when it sees one, so it can render the call as denied rather than as
8
+ * a successful call that happened to return prose; that is what `approved`
9
+ * carries, and it is the same flag a client sets optimistically the moment the
10
+ * deny button is clicked. Emitting only the sentence made the two disagree:
11
+ * live the call showed denied, and on any re-render from storage the same call
12
+ * came back green.
13
+ */
14
+ export const deniedToolResult = () => JSON.stringify({
15
+ approved: false,
16
+ message: 'The user explicitly declined this action. Inform them that it was declined and do not retry.',
17
+ });