@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
@@ -5,14 +5,14 @@ import { ForbiddenError } from '../../errors/errors.js';
5
5
  import { verifyScopes } from '../../scopes.js';
6
6
  import { pikkuState, getSingletonServices } from '../../pikku-state.js';
7
7
  import { createMiddlewareSessionWireProps } from '../../services/user-session-service.js';
8
- import { randomUUID } from './ai-agent-utils.js';
9
- import { awaitPendingInterruptNote } from './ai-agent-interrupt.js';
10
- import { streamAIAgent } from './ai-agent-stream.js';
11
- import { runAIAgent } from './ai-agent-runner.js';
8
+ import { randomUUID } from './agent-utils.js';
9
+ import { awaitPendingInterruptNote } from './agent-interrupt.js';
10
+ import { streamAgent } from './agent-stream.js';
11
+ import { runAgent } from './agent-runner.js';
12
12
  import { resolveNamespace, ContextAwareRPCService, } from '../../wirings/rpc/rpc-runner.js';
13
- import { getOrCreatePackageSingletonServices } from '../../wirings/rpc/addon-runner.js';
14
- import { resolveMemoryServices, loadContextMessages, trimMessages, } from './ai-agent-memory.js';
15
- import { resolveModelConfig } from './ai-agent-model-config.js';
13
+ import { getOrCreatePackageSingletonServices } from '../../wirings/addon/addon-runner.js';
14
+ import { resolveMemoryServices, loadContextMessages, trimMessages, } from './agent-memory.js';
15
+ import { resolveModelConfig } from './agent-model-config.js';
16
16
  export function resolveSessionPrincipal(params, sessionScope) {
17
17
  const session = params.sessionService?.get();
18
18
  if ((sessionScope ?? 'user') === 'org') {
@@ -258,7 +258,7 @@ export function createScopedChannel(parent, agentName, session) {
258
258
  export function buildSubAgentRunInput(message, threadId, resourceId, parentContext) {
259
259
  return { message, threadId, resourceId, context: parentContext };
260
260
  }
261
- export async function buildToolDefs(params, agentSessionMap, resourceId, agentName, packageName, streamContext, aiMiddlewares, agentMode, parentContext) {
261
+ export async function buildToolDefs(params, agentSessionMap, resourceId, agentName, packageName, streamContext, agentMiddlewares, agentMode, parentContext) {
262
262
  const singletonServices = getSingletonServices();
263
263
  const tools = [];
264
264
  const missingRpcs = [];
@@ -451,7 +451,7 @@ export async function buildToolDefs(params, agentSessionMap, resourceId, agentNa
451
451
  subChannel.send(event);
452
452
  },
453
453
  };
454
- const resultText = await streamAIAgent(subAgentName, buildSubAgentRunInput(message, threadId, resourceId, parentContext), effectiveChannel, params, agentSessionMap, streamContext.options);
454
+ const resultText = await streamAgent(subAgentName, buildSubAgentRunInput(message, threadId, resourceId, parentContext), effectiveChannel, params, agentSessionMap, streamContext.options);
455
455
  if (subChannel.approvals.length > 0) {
456
456
  return {
457
457
  [APPROVAL_REQUIRED]: true,
@@ -470,7 +470,7 @@ export async function buildToolDefs(params, agentSessionMap, resourceId, agentNa
470
470
  });
471
471
  return resultText;
472
472
  }
473
- const result = await runAIAgent(subAgentName, buildSubAgentRunInput(message, threadId, resourceId, parentContext), params, agentSessionMap);
473
+ const result = await runAgent(subAgentName, buildSubAgentRunInput(message, threadId, resourceId, parentContext), params, agentSessionMap);
474
474
  if (result.status === 'suspended' &&
475
475
  result.pendingApprovals?.length) {
476
476
  return {
@@ -553,14 +553,14 @@ export async function buildToolDefs(params, agentSessionMap, resourceId, agentNa
553
553
  }
554
554
  };
555
555
  }
556
- const hasToolHooks = aiMiddlewares?.some((mw) => mw.beforeToolCall || mw.afterToolCall);
556
+ const hasToolHooks = agentMiddlewares?.some((mw) => mw.beforeToolCall || mw.afterToolCall);
557
557
  if (hasToolHooks) {
558
558
  for (const tool of tools) {
559
559
  const originalExecute = tool.execute;
560
560
  tool.execute = async (toolInput) => {
561
561
  const toolCallId = randomUUID();
562
562
  let args = (toolInput ?? {});
563
- for (const mw of aiMiddlewares) {
563
+ for (const mw of agentMiddlewares) {
564
564
  if (mw.beforeToolCall) {
565
565
  const beforeResult = await mw.beforeToolCall(singletonServices, {
566
566
  toolName: tool.name,
@@ -585,8 +585,8 @@ export async function buildToolDefs(params, agentSessionMap, resourceId, agentNa
585
585
  result = err instanceof Error ? err.message : String(err);
586
586
  }
587
587
  const durationMs = Date.now() - startTime;
588
- for (let i = aiMiddlewares.length - 1; i >= 0; i--) {
589
- const mw = aiMiddlewares[i];
588
+ for (let i = agentMiddlewares.length - 1; i >= 0; i--) {
589
+ const mw = agentMiddlewares[i];
590
590
  if (mw.afterToolCall) {
591
591
  const afterResult = await mw.afterToolCall(singletonServices, {
592
592
  toolName: tool.name,
@@ -612,7 +612,7 @@ export async function prepareAgentRun(agentName, input, params, agentSessionMap,
612
612
  const singletonServices = getSingletonServices();
613
613
  const { agent, packageName, resolvedName } = resolveAgent(agentName);
614
614
  await assertAgentAuthorized(agent, params, packageName);
615
- let agentRunner = singletonServices.aiAgentRunner;
615
+ let agentRunner = singletonServices.agentRunner;
616
616
  if (!agentRunner) {
617
617
  throw new AIProviderNotConfiguredError();
618
618
  }
@@ -682,8 +682,8 @@ export async function prepareAgentRun(agentName, input, params, agentSessionMap,
682
682
  };
683
683
  const allMessages = [...contextMessages, ...messages, userMessage];
684
684
  const trimmedMessages = trimMessages(allMessages);
685
- const aiMiddlewares = agent.aiMiddleware ?? [];
686
- const { tools, missingRpcs } = await buildToolDefs(params, agentSessionMap, input.resourceId, resolvedName, packageName, streamContext, aiMiddlewares, agent.agentMode, input.context);
685
+ const agentMiddlewares = agent.agentMiddleware ?? [];
686
+ const { tools, missingRpcs } = await buildToolDefs(params, agentSessionMap, input.resourceId, resolvedName, packageName, streamContext, agentMiddlewares, agent.agentMode, input.context);
687
687
  let instructions = await buildInstructions(resolvedName, packageName);
688
688
  if (input.context) {
689
689
  instructions = `${instructions}\n\nCurrent context (use these identifiers directly in tool calls — do not ask the user for them):\n${input.context}`;
@@ -0,0 +1,16 @@
1
+ import type { CoreAgent } from './agent.types.js';
2
+ import type { AgentRunStateService } from '../../services/agent-run-state-service.js';
3
+ import { type RunAgentParams } from './agent-prepare.js';
4
+ export declare const addAgent: (agentName: string, agent: CoreAgent<any, any>, packageName?: string | null) => void;
5
+ export declare function approveAgent(agentRunState: AgentRunStateService, runId: string, approvals: {
6
+ toolCallId: string;
7
+ approved: boolean;
8
+ }[], expectedAgentName?: string, params?: RunAgentParams): Promise<{
9
+ status: 'resumed' | 'suspended';
10
+ runId: string;
11
+ approved: string[];
12
+ rejected: string[];
13
+ remainingApprovals: number;
14
+ }>;
15
+ export declare const getAgents: () => Map<string, CoreAgent>;
16
+ export declare const getAgentsMeta: () => import("./agent.types.js").AgentsMeta;
@@ -1,6 +1,6 @@
1
1
  import { pikkuState } from '../../pikku-state.js';
2
- import { agentSessionScope, assertAgentAuthorized, assertResourcePrincipalOwner, resolveAgent, } from './ai-agent-prepare.js';
3
- export const addAIAgent = (agentName, agent, packageName = null) => {
2
+ import { agentSessionScope, assertAgentAuthorized, assertResourcePrincipalOwner, resolveAgent, } from './agent-prepare.js';
3
+ export const addAgent = (agentName, agent, packageName = null) => {
4
4
  const agentsMeta = pikkuState(packageName, 'agent', 'agentsMeta');
5
5
  const agentMeta = agentsMeta[agentName];
6
6
  if (!agentMeta) {
@@ -13,10 +13,10 @@ export const addAIAgent = (agentName, agent, packageName = null) => {
13
13
  }
14
14
  agents.set(agentName, agent);
15
15
  };
16
- export async function approveAIAgent(aiRunState, runId, approvals, expectedAgentName, params = {}) {
17
- if (!aiRunState)
18
- throw new Error('AIRunStateService not available');
19
- const run = await aiRunState.getRun(runId);
16
+ export async function approveAgent(agentRunState, runId, approvals, expectedAgentName, params = {}) {
17
+ if (!agentRunState)
18
+ throw new Error('AgentRunStateService not available');
19
+ const run = await agentRunState.getRun(runId);
20
20
  if (!run)
21
21
  throw new Error('Run not found: ' + runId);
22
22
  assertResourcePrincipalOwner(params, agentSessionScope(run.agentName), run.resourceId, 'run');
@@ -31,7 +31,7 @@ export async function approveAIAgent(aiRunState, runId, approvals, expectedAgent
31
31
  const rejectedIds = new Set(approvals.filter((a) => !a.approved).map((a) => a.toolCallId));
32
32
  const remaining = (run.pendingApprovals ?? []).filter((p) => !approvedIds.has(p.toolCallId) && !rejectedIds.has(p.toolCallId));
33
33
  const hasApproved = approvedIds.size > 0;
34
- await aiRunState.updateRun(runId, {
34
+ await agentRunState.updateRun(runId, {
35
35
  status: hasApproved ? 'running' : 'suspended',
36
36
  pendingApprovals: remaining.length > 0 ? remaining : undefined,
37
37
  });
@@ -43,9 +43,9 @@ export async function approveAIAgent(aiRunState, runId, approvals, expectedAgent
43
43
  remainingApprovals: remaining.length,
44
44
  };
45
45
  }
46
- export const getAIAgents = () => {
46
+ export const getAgents = () => {
47
47
  return pikkuState(null, 'agent', 'agents');
48
48
  };
49
- export const getAIAgentsMeta = () => {
49
+ export const getAgentsMeta = () => {
50
50
  return pikkuState(null, 'agent', 'agentsMeta');
51
51
  };
@@ -1,6 +1,6 @@
1
- import { runAIAgent, resumeAIAgentSync } from './ai-agent-runner.js';
2
- import { streamAIAgent, resumeAIAgent, interruptAIAgent, } from './ai-agent-stream.js';
3
- import { wrapChannelWithAGUI } from './ai-agent-agui.js';
1
+ import { runAgent, resumeAgentSync } from './agent-runner.js';
2
+ import { streamAgent, resumeAgent, interruptAgent } from './agent-stream.js';
3
+ import { wrapChannelWithAGUI } from './agent-agui.js';
4
4
  /**
5
5
  * `wire.rpc.agent`, implemented.
6
6
  *
@@ -30,10 +30,10 @@ export const createAgentRPC = (wire, options) => {
30
30
  }),
31
31
  });
32
32
  return {
33
- run: async (agentName, input) => asRunResult(await runAIAgent(agentName, input, params())),
33
+ run: async (agentName, input) => asRunResult(await runAgent(agentName, input, params())),
34
34
  stream: async (agentName, input, streamOptions) => {
35
35
  let currentRunId;
36
- await streamAIAgent(agentName, input, wrapChannelWithAGUI(streamingChannel(), {
36
+ await streamAgent(agentName, input, wrapChannelWithAGUI(streamingChannel(), {
37
37
  threadId: input.threadId,
38
38
  getRunId: () => currentRunId,
39
39
  }), params(), undefined, {
@@ -45,9 +45,9 @@ export const createAgentRPC = (wire, options) => {
45
45
  });
46
46
  },
47
47
  resume: async (runId, input, streamOptions) => {
48
- await resumeAIAgent({ runId, ...input }, wrapChannelWithAGUI(streamingChannel(), { runId }), params(), streamOptions);
48
+ await resumeAgent({ runId, ...input }, wrapChannelWithAGUI(streamingChannel(), { runId }), params(), streamOptions);
49
49
  },
50
- interrupt: async (runId, reason) => interruptAIAgent({ runId, ...(reason ? { reason } : {}) }, { sessionService: options.sessionService }),
51
- approve: async (runId, approvals, expectedAgentName) => asRunResult(await resumeAIAgentSync(runId, approvals, { sessionService: options.sessionService }, expectedAgentName)),
50
+ interrupt: async (runId, reason) => interruptAgent({ runId, ...(reason ? { reason } : {}) }, { sessionService: options.sessionService }),
51
+ approve: async (runId, approvals, expectedAgentName) => asRunResult(await resumeAgentSync(runId, approvals, { sessionService: options.sessionService }, expectedAgentName)),
52
52
  };
53
53
  };
@@ -0,0 +1,7 @@
1
+ import type { AgentInput, AgentOutput } from './agent.types.js';
2
+ import { type RunAgentParams } from './agent-prepare.js';
3
+ export declare function runAgent(agentName: string, input: AgentInput, params: RunAgentParams, agentSessionMap?: Map<string, string>): Promise<AgentOutput>;
4
+ export declare function resumeAgentSync(runId: string, approvals: {
5
+ toolCallId: string;
6
+ approved: boolean;
7
+ }[], params: RunAgentParams, expectedAgentName?: string): Promise<AgentOutput>;
@@ -1,13 +1,13 @@
1
- import { saveMessages, resolveMemoryServices, loadContextMessages, trimMessages, getWorkingMemoryMiddleware, } from './ai-agent-memory.js';
2
- import { prepareAgentRun, resolveAgent, buildInstructions, buildToolDefs, resolveOwnerResourceId, agentSessionScope, assertResourcePrincipalOwner, assertAgentAuthorized, } from './ai-agent-prepare.js';
3
- import { checkForApprovals, appendStepMessages } from './ai-agent-stream.js';
4
- import { AgentInterruptedError, isAbortError, persistOrphanedToolResults, registerInterruptibleRun, trackInterruptNote, trackToolExecution, } from './ai-agent-interrupt.js';
1
+ import { saveMessages, resolveMemoryServices, loadContextMessages, trimMessages, getWorkingMemoryMiddleware, } from './agent-memory.js';
2
+ import { prepareAgentRun, resolveAgent, buildInstructions, buildToolDefs, resolveOwnerResourceId, agentSessionScope, assertResourcePrincipalOwner, assertAgentAuthorized, } from './agent-prepare.js';
3
+ import { checkForApprovals, appendStepMessages } from './agent-stream.js';
4
+ import { AgentInterruptedError, isAbortError, persistOrphanedToolResults, registerInterruptibleRun, trackInterruptNote, trackToolExecution, } from './agent-interrupt.js';
5
5
  import { pikkuState, getSingletonServices } from '../../pikku-state.js';
6
- import { applyInputMiddleware, describeApprovals, notifyAfterStep, toAccumulatedStep, } from './ai-agent-turn.js';
7
- import { applyOutputMiddleware, finalizeAgentRun, lastUserMessageText, } from './ai-agent-finalize.js';
8
- import { resolveModelConfig } from './ai-agent-model-config.js';
6
+ import { applyInputMiddleware, describeApprovals, notifyAfterStep, toAccumulatedStep, } from './agent-turn.js';
7
+ import { applyOutputMiddleware, finalizeAgentRun, lastUserMessageText, } from './agent-finalize.js';
8
+ import { resolveModelConfig } from './agent-model-config.js';
9
9
  import { AIProviderNotConfiguredError } from '../../errors/errors.js';
10
- import { randomUUID } from './ai-agent-utils.js';
10
+ import { deniedToolResult, randomUUID } from './agent-utils.js';
11
11
  function stripNulls(obj) {
12
12
  if (obj === null)
13
13
  return undefined;
@@ -33,7 +33,7 @@ function extractStructuredAssistantOutput(object) {
33
33
  uiSpec: record.ui ?? null,
34
34
  };
35
35
  }
36
- export async function runAIAgent(agentName, input, params, agentSessionMap) {
36
+ export async function runAgent(agentName, input, params, agentSessionMap) {
37
37
  const sessionMap = agentSessionMap ?? new Map();
38
38
  input = {
39
39
  ...input,
@@ -42,12 +42,12 @@ export async function runAIAgent(agentName, input, params, agentSessionMap) {
42
42
  const { agent, agentRunner, storage, memoryConfig, threadId, userMessage, runnerParams, maxSteps, missingRpcs, workingMemorySchemaName, } = await prepareAgentRun(agentName, input, params, sessionMap);
43
43
  runnerParams.agentId = agentName;
44
44
  const singletonServices = getSingletonServices();
45
- const { aiRunState } = singletonServices;
46
- if (!aiRunState) {
47
- throw new Error('AIRunStateService not available in singletonServices');
45
+ const { agentRunState } = singletonServices;
46
+ if (!agentRunState) {
47
+ throw new Error('AgentRunStateService not available in singletonServices');
48
48
  }
49
49
  if (missingRpcs.length > 0) {
50
- const runId = await aiRunState.createRun({
50
+ const runId = await agentRunState.createRun({
51
51
  agentName,
52
52
  threadId,
53
53
  resourceId: input.resourceId,
@@ -66,18 +66,18 @@ export async function runAIAgent(agentName, input, params, agentSessionMap) {
66
66
  usage: { inputTokens: 0, outputTokens: 0 },
67
67
  };
68
68
  }
69
- const aiMiddlewares = [
69
+ const agentMiddlewares = [
70
70
  ...getWorkingMemoryMiddleware(memoryConfig, storage, {
71
71
  threadId,
72
72
  workingMemorySchemaName,
73
73
  logger: singletonServices.logger,
74
74
  schemaService: singletonServices.schema,
75
75
  }),
76
- ...(agent.aiMiddleware ?? []),
76
+ ...(agent.agentMiddleware ?? []),
77
77
  ];
78
- // One bag per run, shared by every middleware — see PikkuAIMiddlewareHooks.
78
+ // One bag per run, shared by every middleware — see PikkuAgentMiddlewareHooks.
79
79
  const sharedNotes = {};
80
- const { messages: modifiedMessages, instructions: modifiedInstructions } = await applyInputMiddleware(aiMiddlewares, singletonServices, {
80
+ const { messages: modifiedMessages, instructions: modifiedInstructions } = await applyInputMiddleware(agentMiddlewares, singletonServices, {
81
81
  messages: runnerParams.messages,
82
82
  instructions: runnerParams.instructions,
83
83
  }, sharedNotes);
@@ -86,7 +86,7 @@ export async function runAIAgent(agentName, input, params, agentSessionMap) {
86
86
  // knowledge: decisions/internals/thread-history-records-the-transcript-not-the-audio.md
87
87
  const lastModified = modifiedMessages[modifiedMessages.length - 1];
88
88
  const persistedUserMessage = lastModified?.id === userMessage.id ? lastModified : userMessage;
89
- const runId = await aiRunState.createRun({
89
+ const runId = await agentRunState.createRun({
90
90
  agentName,
91
91
  threadId,
92
92
  resourceId: input.resourceId,
@@ -123,7 +123,7 @@ export async function runAIAgent(agentName, input, params, agentSessionMap) {
123
123
  lastStepResult = stepResult;
124
124
  totalUsage.inputTokens += stepResult.usage.inputTokens;
125
125
  totalUsage.outputTokens += stepResult.usage.outputTokens;
126
- await notifyAfterStep(aiMiddlewares, singletonServices, step, stepResult);
126
+ await notifyAfterStep(agentMiddlewares, singletonServices, step, stepResult);
127
127
  accumulatedSteps.push(toAccumulatedStep(stepResult));
128
128
  if (stepResult.toolCalls.length === 0)
129
129
  break;
@@ -161,7 +161,7 @@ export async function runAIAgent(agentName, input, params, agentSessionMap) {
161
161
  },
162
162
  ]);
163
163
  }
164
- await aiRunState.updateRun(runId, {
164
+ await agentRunState.updateRun(runId, {
165
165
  status: 'suspended',
166
166
  suspendReason: 'approval',
167
167
  pendingApprovals,
@@ -193,7 +193,7 @@ export async function runAIAgent(agentName, input, params, agentSessionMap) {
193
193
  text: finalText,
194
194
  steps: accumulatedSteps,
195
195
  };
196
- const { text: outputText, steps: outputSteps } = await applyOutputMiddleware(aiMiddlewares, singletonServices, {
196
+ const { text: outputText, steps: outputSteps } = await applyOutputMiddleware(agentMiddlewares, singletonServices, {
197
197
  text: finalText,
198
198
  messages: runnerParams.messages,
199
199
  steps: result.steps,
@@ -204,7 +204,7 @@ export async function runAIAgent(agentName, input, params, agentSessionMap) {
204
204
  steps: outputSteps,
205
205
  uiSpec: structuredOutput.uiSpec,
206
206
  });
207
- await finalizeAgentRun(aiRunState, {
207
+ await finalizeAgentRun(agentRunState, {
208
208
  runId,
209
209
  agentName,
210
210
  threadId,
@@ -227,13 +227,13 @@ export async function runAIAgent(agentName, input, params, agentSessionMap) {
227
227
  // knowledge: decisions/internals/an-agent-interrupt-is-not-a-failure.md
228
228
  const interruption = interruptHandle.interruption;
229
229
  if (interruption || isAbortError(error)) {
230
- await aiRunState.updateRun(runId, { status: 'interrupted' });
230
+ await agentRunState.updateRun(runId, { status: 'interrupted' });
231
231
  if (storage) {
232
232
  trackInterruptNote(threadId, persistOrphanedToolResults(interruptHandle, storage, threadId));
233
233
  }
234
234
  throw new AgentInterruptedError(runId, interruption ?? { reason: 'user' });
235
235
  }
236
- for (const mw of aiMiddlewares) {
236
+ for (const mw of agentMiddlewares) {
237
237
  if (mw.onError) {
238
238
  try {
239
239
  await mw.onError(singletonServices, {
@@ -245,7 +245,7 @@ export async function runAIAgent(agentName, input, params, agentSessionMap) {
245
245
  catch { }
246
246
  }
247
247
  }
248
- await aiRunState.updateRun(runId, {
248
+ await agentRunState.updateRun(runId, {
249
249
  status: 'failed',
250
250
  errorMessage: error instanceof Error ? error.message : String(error),
251
251
  });
@@ -255,13 +255,13 @@ export async function runAIAgent(agentName, input, params, agentSessionMap) {
255
255
  interruptHandle.release();
256
256
  }
257
257
  }
258
- export async function resumeAIAgentSync(runId, approvals, params, expectedAgentName) {
258
+ export async function resumeAgentSync(runId, approvals, params, expectedAgentName) {
259
259
  const singletonServices = getSingletonServices();
260
- const { aiRunState } = singletonServices;
261
- if (!aiRunState) {
262
- throw new Error('AIRunStateService not available in singletonServices');
260
+ const { agentRunState } = singletonServices;
261
+ if (!agentRunState) {
262
+ throw new Error('AgentRunStateService not available in singletonServices');
263
263
  }
264
- const run = await aiRunState.getRun(runId);
264
+ const run = await agentRunState.getRun(runId);
265
265
  if (!run)
266
266
  throw new Error(`No run found for runId ${runId}`);
267
267
  assertResourcePrincipalOwner(params, agentSessionScope(run.agentName), run.resourceId, 'run');
@@ -275,7 +275,7 @@ export async function resumeAIAgentSync(runId, approvals, params, expectedAgentN
275
275
  await assertAgentAuthorized(agent, params, packageName);
276
276
  const { storage } = resolveMemoryServices(agent, singletonServices);
277
277
  const memoryConfig = agent.memory;
278
- const agentRunner = singletonServices.aiAgentRunner;
278
+ const agentRunner = singletonServices.agentRunner;
279
279
  if (!agentRunner) {
280
280
  throw new AIProviderNotConfiguredError();
281
281
  }
@@ -287,7 +287,7 @@ export async function resumeAIAgentSync(runId, approvals, params, expectedAgentN
287
287
  // for may run the tool.
288
288
  const claimedIds = new Set();
289
289
  for (const { toolCallId, approved } of approvals) {
290
- const claimed = await aiRunState.resolveApproval(toolCallId, approved ? 'approved' : 'denied');
290
+ const claimed = await agentRunState.resolveApproval(toolCallId, approved ? 'approved' : 'denied');
291
291
  if (claimed) {
292
292
  claimedIds.add(toolCallId);
293
293
  }
@@ -295,7 +295,7 @@ export async function resumeAIAgentSync(runId, approvals, params, expectedAgentN
295
295
  if (approvals.length > 0 && claimedIds.size === 0) {
296
296
  throw new Error(`Approvals for run ${runId} were already resolved by another caller`);
297
297
  }
298
- const { tools } = await buildToolDefs(params, new Map(), run.resourceId, resolvedName, packageName, undefined, agent.aiMiddleware ?? []);
298
+ const { tools } = await buildToolDefs(params, new Map(), run.resourceId, resolvedName, packageName, undefined, agent.agentMiddleware ?? []);
299
299
  const toolCallMessages = [];
300
300
  for (const pending of savedPendingApprovals) {
301
301
  if (pending.type !== 'tool-call')
@@ -306,8 +306,7 @@ export async function resumeAIAgentSync(runId, approvals, params, expectedAgentN
306
306
  let resultStr;
307
307
  let toolError;
308
308
  if (rejectedIds.has(toolCallId)) {
309
- resultStr =
310
- 'The user explicitly declined this action. Inform them that it was declined and do not retry.';
309
+ resultStr = deniedToolResult();
311
310
  }
312
311
  else if (approvedIds.has(toolCallId)) {
313
312
  const matchingTool = tools.find((t) => t.name === pending.toolName);
@@ -362,8 +361,8 @@ export async function resumeAIAgentSync(runId, approvals, params, expectedAgentN
362
361
  },
363
362
  ]);
364
363
  }
365
- await aiRunState.updateRun(runId, { status: 'running' });
366
- return continueAfterToolResultSync(run, agent, packageName, resolvedName, storage, memoryConfig, agentRunner, params, aiRunState,
364
+ await agentRunState.updateRun(runId, { status: 'running' });
365
+ return continueAfterToolResultSync(run, agent, packageName, resolvedName, storage, memoryConfig, agentRunner, params, agentRunState,
367
366
  // The approved tools were executed here, before the model was re-entered,
368
367
  // so they belong to the run's step record — otherwise a tool that failed
369
368
  // after approval leaves no trace on the run at all.
@@ -379,7 +378,7 @@ export async function resumeAIAgentSync(runId, approvals, params, expectedAgentN
379
378
  }
380
379
  : undefined);
381
380
  }
382
- async function continueAfterToolResultSync(run, agent, packageName, resolvedName, storage, memoryConfig, agentRunner, params, aiRunState, resumedToolStep) {
381
+ async function continueAfterToolResultSync(run, agent, packageName, resolvedName, storage, memoryConfig, agentRunner, params, agentRunState, resumedToolStep) {
383
382
  const singletonServices = getSingletonServices();
384
383
  const agentsMeta = pikkuState(packageName, 'agent', 'agentsMeta');
385
384
  const meta = agentsMeta[resolvedName];
@@ -396,19 +395,19 @@ async function continueAfterToolResultSync(run, agent, packageName, resolvedName
396
395
  const allMessages = [...contextMessages, ...messages];
397
396
  const trimmedMessages = trimMessages(allMessages);
398
397
  const instructions = await buildInstructions(resolvedName, packageName);
399
- const aiMiddlewares = [
398
+ const agentMiddlewares = [
400
399
  ...getWorkingMemoryMiddleware(memoryConfig, storage, {
401
400
  threadId: run.threadId,
402
401
  workingMemorySchemaName,
403
402
  logger: singletonServices.logger,
404
403
  schemaService: singletonServices.schema,
405
404
  }),
406
- ...(agent.aiMiddleware ?? []),
405
+ ...(agent.agentMiddleware ?? []),
407
406
  ];
408
- // One bag per run, shared by every middleware — see PikkuAIMiddlewareHooks.
407
+ // One bag per run, shared by every middleware — see PikkuAgentMiddlewareHooks.
409
408
  const sharedNotes = {};
410
- const { messages: modifiedMessages, instructions: modifiedInstructions } = await applyInputMiddleware(aiMiddlewares, singletonServices, { messages: trimmedMessages, instructions: instructions }, sharedNotes);
411
- const { tools: resumeTools } = await buildToolDefs(params, new Map(), run.resourceId, resolvedName, packageName, undefined, aiMiddlewares);
409
+ const { messages: modifiedMessages, instructions: modifiedInstructions } = await applyInputMiddleware(agentMiddlewares, singletonServices, { messages: trimmedMessages, instructions: instructions }, sharedNotes);
410
+ const { tools: resumeTools } = await buildToolDefs(params, new Map(), run.resourceId, resolvedName, packageName, undefined, agentMiddlewares);
412
411
  const resolved = resolveModelConfig(resolvedName, agent);
413
412
  const maxSteps = resolved.maxSteps ?? 10;
414
413
  const runnerParams = {
@@ -445,7 +444,7 @@ async function continueAfterToolResultSync(run, agent, packageName, resolvedName
445
444
  lastStepResult = stepResult;
446
445
  totalUsage.inputTokens += stepResult.usage.inputTokens;
447
446
  totalUsage.outputTokens += stepResult.usage.outputTokens;
448
- await notifyAfterStep(aiMiddlewares, singletonServices, step, stepResult);
447
+ await notifyAfterStep(agentMiddlewares, singletonServices, step, stepResult);
449
448
  accumulatedSteps.push(toAccumulatedStep(stepResult));
450
449
  if (stepResult.toolCalls.length === 0)
451
450
  break;
@@ -485,7 +484,7 @@ async function continueAfterToolResultSync(run, agent, packageName, resolvedName
485
484
  },
486
485
  ]);
487
486
  }
488
- await aiRunState.updateRun(run.runId, {
487
+ await agentRunState.updateRun(run.runId, {
489
488
  status: 'suspended',
490
489
  suspendReason: 'approval',
491
490
  pendingApprovals,
@@ -516,7 +515,7 @@ async function continueAfterToolResultSync(run, agent, packageName, resolvedName
516
515
  text: finalText,
517
516
  steps: accumulatedSteps,
518
517
  };
519
- const { text: outputText, steps: outputSteps } = await applyOutputMiddleware(aiMiddlewares, singletonServices, {
518
+ const { text: outputText, steps: outputSteps } = await applyOutputMiddleware(agentMiddlewares, singletonServices, {
520
519
  text: finalText,
521
520
  messages: runnerParams.messages,
522
521
  steps: withResumedStep(result.steps),
@@ -528,7 +527,7 @@ async function continueAfterToolResultSync(run, agent, packageName, resolvedName
528
527
  // re-entered, so only the steps this leg generated are persisted here.
529
528
  steps: accumulatedSteps,
530
529
  });
531
- await finalizeAgentRun(aiRunState, {
530
+ await finalizeAgentRun(agentRunState, {
532
531
  runId: run.runId,
533
532
  agentName: resolvedName,
534
533
  threadId: run.threadId,
@@ -550,13 +549,13 @@ async function continueAfterToolResultSync(run, agent, packageName, resolvedName
550
549
  catch (error) {
551
550
  const interruption = interruptHandle.interruption;
552
551
  if (interruption || isAbortError(error)) {
553
- await aiRunState.updateRun(run.runId, { status: 'interrupted' });
552
+ await agentRunState.updateRun(run.runId, { status: 'interrupted' });
554
553
  if (storage) {
555
554
  trackInterruptNote(run.threadId, persistOrphanedToolResults(interruptHandle, storage, run.threadId));
556
555
  }
557
556
  throw new AgentInterruptedError(run.runId, interruption ?? { reason: 'user' });
558
557
  }
559
- for (const mw of aiMiddlewares) {
558
+ for (const mw of agentMiddlewares) {
560
559
  if (mw.onError) {
561
560
  try {
562
561
  await mw.onError(singletonServices, {
@@ -568,7 +567,7 @@ async function continueAfterToolResultSync(run, agent, packageName, resolvedName
568
567
  catch { }
569
568
  }
570
569
  }
571
- await aiRunState.updateRun(run.runId, {
570
+ await agentRunState.updateRun(run.runId, {
572
571
  status: 'failed',
573
572
  errorMessage: error instanceof Error ? error.message : String(error),
574
573
  });
@@ -1,23 +1,23 @@
1
- import type { AIStreamChannel } from './ai-agent.types.js';
2
- import type { AIAgentRunnerParams, AIAgentStepResult } from '../../services/ai-agent-runner-service.js';
3
- import { ToolApprovalRequired, ToolCredentialRequired, type RunAIAgentParams, type StreamAIAgentOptions } from './ai-agent-prepare.js';
4
- import { type AgentInterruption, type AgentInterruptResult } from './ai-agent-interrupt.js';
5
- export declare function checkForApprovals(stepResult: AIAgentStepResult, tools: AIAgentRunnerParams['tools']): ToolApprovalRequired[];
6
- export declare function checkForCredentialRequests(stepResult: AIAgentStepResult): ToolCredentialRequired[];
7
- export declare function appendStepMessages(runnerParams: AIAgentRunnerParams, stepResult: AIAgentStepResult): void;
8
- export declare function streamAIAgent(agentName: string, input: {
1
+ import type { AgentStreamChannel } from './agent.types.js';
2
+ import type { AgentRunnerParams, AgentStepResult } from '../../services/agent-runner-service.js';
3
+ import { ToolApprovalRequired, ToolCredentialRequired, type RunAgentParams, type StreamAgentOptions } from './agent-prepare.js';
4
+ import { type AgentInterruption, type AgentInterruptResult } from './agent-interrupt.js';
5
+ export declare function checkForApprovals(stepResult: AgentStepResult, tools: AgentRunnerParams['tools']): ToolApprovalRequired[];
6
+ export declare function checkForCredentialRequests(stepResult: AgentStepResult): ToolCredentialRequired[];
7
+ export declare function appendStepMessages(runnerParams: AgentRunnerParams, stepResult: AgentStepResult): void;
8
+ export declare function streamAgent(agentName: string, input: {
9
9
  message: string;
10
10
  threadId: string;
11
11
  resourceId: string;
12
12
  model?: string;
13
13
  temperature?: number;
14
- }, channel: AIStreamChannel, params: RunAIAgentParams, agentSessionMap?: Map<string, string>, options?: StreamAIAgentOptions): Promise<string>;
14
+ }, channel: AgentStreamChannel, params: RunAgentParams, agentSessionMap?: Map<string, string>, options?: StreamAgentOptions): Promise<string>;
15
15
  /**
16
16
  * Stop an in-flight run on behalf of a caller, after checking the run is theirs.
17
17
  *
18
- * Unlike {@link resumeAIAgent} this needs no channel: it does not continue the
18
+ * Unlike {@link resumeAgent} this needs no channel: it does not continue the
19
19
  * stream, it ends one. The `interrupted` event and the truncated message are
20
- * emitted by the original {@link streamAIAgent} call on its own channel, so this
20
+ * emitted by the original {@link streamAgent} call on its own channel, so this
21
21
  * can be reached over a plain RPC while the stream is held open elsewhere —
22
22
  * which is exactly the shape a voice barge-in needs.
23
23
  *
@@ -30,12 +30,12 @@ export declare function streamAIAgent(agentName: string, input: {
30
30
  * Returns `false` when there was nothing to stop. Racing a run that finishes on
31
31
  * its own is the normal case in voice, so it is not an error.
32
32
  */
33
- export declare function interruptAIAgent(input: {
33
+ export declare function interruptAgent(input: {
34
34
  runId: string;
35
35
  reason?: AgentInterruption['reason'];
36
- }, params: RunAIAgentParams): Promise<AgentInterruptResult>;
37
- export declare function resumeAIAgent(input: {
36
+ }, params: RunAgentParams): Promise<AgentInterruptResult>;
37
+ export declare function resumeAgent(input: {
38
38
  runId: string;
39
39
  toolCallId: string;
40
40
  approved: boolean;
41
- }, channel: AIStreamChannel, params: RunAIAgentParams, options?: StreamAIAgentOptions): Promise<void>;
41
+ }, channel: AgentStreamChannel, params: RunAgentParams, options?: StreamAgentOptions): Promise<void>;