@pikku/core 0.12.82 → 0.12.84

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 (364) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +1 -1
  3. package/dist/ecosystem/agent-scorer.d.ts +12 -0
  4. package/dist/ecosystem/agent-scorer.js +5 -0
  5. package/dist/ecosystem/agent.d.ts +18 -0
  6. package/dist/ecosystem/agent.js +6 -0
  7. package/dist/ecosystem/ai-agent.d.ts +18 -0
  8. package/dist/ecosystem/ai-agent.js +6 -0
  9. package/dist/ecosystem/ai-scorer.d.ts +12 -0
  10. package/dist/ecosystem/ai-scorer.js +5 -0
  11. package/dist/ecosystem/channel/local.d.ts +1 -0
  12. package/dist/ecosystem/channel/local.js +1 -0
  13. package/dist/ecosystem/channel.d.ts +12 -0
  14. package/dist/ecosystem/channel.js +4 -0
  15. package/dist/ecosystem/cli/channel.d.ts +16 -0
  16. package/dist/ecosystem/cli/channel.js +2 -0
  17. package/dist/ecosystem/cli.d.ts +9 -0
  18. package/dist/ecosystem/cli.js +2 -0
  19. package/dist/ecosystem/credential.d.ts +9 -0
  20. package/dist/ecosystem/credential.js +1 -0
  21. package/dist/ecosystem/dev.d.ts +8 -0
  22. package/dist/ecosystem/dev.js +1 -0
  23. package/dist/ecosystem/function.d.ts +13 -0
  24. package/dist/ecosystem/function.js +2 -0
  25. package/dist/ecosystem/gateway.d.ts +1 -0
  26. package/dist/ecosystem/gateway.js +1 -0
  27. package/dist/ecosystem/hmac.d.ts +1 -0
  28. package/dist/ecosystem/hmac.js +1 -0
  29. package/dist/ecosystem/http.d.ts +11 -0
  30. package/dist/ecosystem/http.js +3 -0
  31. package/dist/ecosystem/mcp.d.ts +3 -0
  32. package/dist/ecosystem/mcp.js +2 -0
  33. package/dist/ecosystem/middleware.d.ts +17 -0
  34. package/dist/ecosystem/middleware.js +6 -0
  35. package/dist/ecosystem/node-host-resolver.d.ts +1 -0
  36. package/dist/ecosystem/node-host-resolver.js +1 -0
  37. package/dist/ecosystem/node.d.ts +1 -0
  38. package/dist/ecosystem/node.js +1 -0
  39. package/dist/ecosystem/oauth2.d.ts +1 -0
  40. package/dist/ecosystem/oauth2.js +1 -0
  41. package/dist/ecosystem/persona.d.ts +15 -0
  42. package/dist/ecosystem/persona.js +4 -0
  43. package/dist/ecosystem/queue.d.ts +11 -0
  44. package/dist/ecosystem/queue.js +2 -0
  45. package/dist/ecosystem/remote.d.ts +8 -0
  46. package/dist/ecosystem/remote.js +1 -0
  47. package/dist/ecosystem/role.d.ts +3 -0
  48. package/dist/ecosystem/role.js +2 -0
  49. package/dist/ecosystem/rpc.d.ts +4 -0
  50. package/dist/ecosystem/rpc.js +2 -0
  51. package/dist/ecosystem/safe-fetch.d.ts +7 -0
  52. package/dist/ecosystem/safe-fetch.js +1 -0
  53. package/dist/ecosystem/scenario.d.ts +15 -0
  54. package/dist/ecosystem/scenario.js +4 -0
  55. package/dist/ecosystem/scheduler.d.ts +2 -0
  56. package/dist/ecosystem/scheduler.js +1 -0
  57. package/dist/ecosystem/schema.d.ts +1 -0
  58. package/dist/ecosystem/schema.js +1 -0
  59. package/dist/ecosystem/scope.d.ts +3 -0
  60. package/dist/ecosystem/scope.js +2 -0
  61. package/dist/ecosystem/secret.d.ts +9 -0
  62. package/dist/ecosystem/secret.js +1 -0
  63. package/dist/ecosystem/services/istanbul-coverage.d.ts +1 -0
  64. package/dist/ecosystem/services/istanbul-coverage.js +1 -0
  65. package/dist/ecosystem/services/local-content-request-handler.d.ts +9 -0
  66. package/dist/ecosystem/services/local-content-request-handler.js +1 -0
  67. package/dist/ecosystem/services/local-content.d.ts +1 -0
  68. package/dist/ecosystem/services/local-content.js +1 -0
  69. package/dist/ecosystem/services/v8-coverage.d.ts +1 -0
  70. package/dist/ecosystem/services/v8-coverage.js +1 -0
  71. package/dist/ecosystem/services.d.ts +28 -0
  72. package/dist/ecosystem/services.js +6 -0
  73. package/dist/ecosystem/testing.d.ts +7 -0
  74. package/dist/ecosystem/testing.js +1 -0
  75. package/dist/ecosystem/trigger.d.ts +1 -0
  76. package/dist/ecosystem/trigger.js +1 -0
  77. package/dist/ecosystem/types.d.ts +9 -0
  78. package/dist/ecosystem/types.js +5 -0
  79. package/dist/ecosystem/variable.d.ts +8 -0
  80. package/dist/ecosystem/variable.js +1 -0
  81. package/dist/ecosystem/virtual-user.d.ts +21 -0
  82. package/dist/ecosystem/virtual-user.js +5 -0
  83. package/dist/ecosystem/workflow.d.ts +18 -0
  84. package/dist/ecosystem/workflow.js +4 -0
  85. package/dist/index.d.ts +8 -8
  86. package/dist/index.js +3 -3
  87. package/dist/middleware/auth-apikey.d.ts +1 -1
  88. package/dist/middleware/auth-bearer.d.ts +1 -1
  89. package/dist/middleware/auth-cookie.d.ts +1 -1
  90. package/dist/middleware/cors.d.ts +1 -1
  91. package/dist/middleware/remote-auth.d.ts +1 -1
  92. package/dist/middleware/telemetry.d.ts +2 -2
  93. package/dist/services/agent-run-state-service.d.ts +29 -0
  94. package/dist/services/agent-run-state-service.js +1 -0
  95. package/dist/services/agent-runner-service.d.ts +220 -0
  96. package/dist/services/agent-runner-service.js +1 -0
  97. package/dist/services/agent-storage-service.d.ts +18 -0
  98. package/dist/services/agent-storage-service.js +1 -0
  99. package/dist/services/http-personas.d.ts +1 -1
  100. package/dist/services/http-personas.js +3 -3
  101. package/dist/services/in-memory-agent-run-state-service.d.ts +19 -0
  102. package/dist/services/in-memory-agent-run-state-service.js +54 -0
  103. package/dist/services/index.d.ts +9 -10
  104. package/dist/services/index.js +3 -3
  105. package/dist/services/meta-service.d.ts +5 -4
  106. package/dist/testing/service-tests/agent-run-service-tests.d.ts +1 -1
  107. package/dist/testing/service-tests/agent-run-service-tests.js +3 -3
  108. package/dist/testing/service-tests/agent-storage-service-tests.d.ts +3 -0
  109. package/dist/testing/service-tests/agent-storage-service-tests.js +302 -0
  110. package/dist/testing/service-tests.d.ts +4 -4
  111. package/dist/testing/service-tests.js +4 -4
  112. package/dist/types/core.types.d.ts +12 -11
  113. package/dist/types/core.types.js +1 -1
  114. package/dist/types/state.types.d.ts +11 -6
  115. package/dist/wirings/actor-flow/run-conversation.d.ts +2 -2
  116. package/dist/wirings/agent/agent-agui.d.ts +79 -0
  117. package/dist/wirings/agent/agent-agui.js +327 -0
  118. package/dist/wirings/agent/agent-finalize.d.ts +58 -0
  119. package/dist/wirings/agent/agent-finalize.js +138 -0
  120. package/dist/wirings/agent/agent-helpers.d.ts +35 -0
  121. package/dist/wirings/agent/agent-helpers.js +47 -0
  122. package/dist/wirings/agent/agent-interrupt.d.ts +153 -0
  123. package/dist/wirings/agent/agent-interrupt.js +257 -0
  124. package/dist/wirings/agent/agent-memory.d.ts +42 -0
  125. package/dist/wirings/agent/agent-memory.js +333 -0
  126. package/dist/wirings/agent/agent-model-config.d.ts +16 -0
  127. package/dist/wirings/agent/agent-model-config.js +51 -0
  128. package/dist/wirings/agent/agent-prepare.d.ts +117 -0
  129. package/dist/wirings/agent/agent-prepare.js +728 -0
  130. package/dist/wirings/agent/agent-registry.d.ts +16 -0
  131. package/dist/wirings/agent/agent-registry.js +51 -0
  132. package/dist/wirings/agent/agent-rpc.d.ts +15 -0
  133. package/dist/wirings/agent/agent-rpc.js +53 -0
  134. package/dist/wirings/agent/agent-runner.d.ts +7 -0
  135. package/dist/wirings/agent/agent-runner.js +580 -0
  136. package/dist/wirings/agent/agent-stream.d.ts +41 -0
  137. package/dist/wirings/agent/agent-stream.js +1029 -0
  138. package/dist/wirings/agent/agent-turn.d.ts +57 -0
  139. package/dist/wirings/agent/agent-turn.js +82 -0
  140. package/dist/wirings/agent/agent-utils.d.ts +1 -0
  141. package/dist/wirings/agent/agent-utils.js +1 -0
  142. package/dist/wirings/agent/agent.types.d.ts +625 -0
  143. package/dist/wirings/agent/agent.types.js +1 -0
  144. package/dist/wirings/agent/index.d.ts +12 -0
  145. package/dist/wirings/agent/index.js +10 -0
  146. package/dist/wirings/agent/voice-input.d.ts +69 -0
  147. package/dist/wirings/agent/voice-input.js +150 -0
  148. package/dist/wirings/agent/voice-output.d.ts +85 -0
  149. package/dist/wirings/agent/voice-output.js +196 -0
  150. package/dist/wirings/agent-scorer/agent-scorer-grade.d.ts +26 -0
  151. package/dist/wirings/agent-scorer/agent-scorer-grade.js +33 -0
  152. package/dist/wirings/agent-scorer/agent-scorer-judge.d.ts +17 -0
  153. package/dist/wirings/agent-scorer/agent-scorer-judge.js +92 -0
  154. package/dist/wirings/agent-scorer/agent-scorer-live.d.ts +15 -0
  155. package/dist/wirings/agent-scorer/agent-scorer-live.js +38 -0
  156. package/dist/wirings/agent-scorer/agent-scorer-registry.d.ts +18 -0
  157. package/dist/wirings/agent-scorer/agent-scorer-registry.js +46 -0
  158. package/dist/wirings/agent-scorer/agent-scorer-sampling.d.ts +8 -0
  159. package/dist/wirings/agent-scorer/agent-scorer-sampling.js +31 -0
  160. package/dist/wirings/agent-scorer/agent-scorer-snapshots.d.ts +10 -0
  161. package/dist/wirings/agent-scorer/agent-scorer-snapshots.js +40 -0
  162. package/dist/wirings/agent-scorer/agent-scorer-worker.d.ts +15 -0
  163. package/dist/wirings/agent-scorer/agent-scorer-worker.js +60 -0
  164. package/dist/wirings/agent-scorer/agent-scorer.d.ts +39 -0
  165. package/dist/wirings/agent-scorer/agent-scorer.js +40 -0
  166. package/dist/wirings/agent-scorer/agent-scorer.types.d.ts +90 -0
  167. package/dist/wirings/agent-scorer/agent-scorer.types.js +4 -0
  168. package/dist/wirings/agent-scorer/index.d.ts +6 -0
  169. package/dist/wirings/agent-scorer/index.js +5 -0
  170. package/dist/wirings/ai-agent/ai-agent-prepare.js +2 -0
  171. package/dist/wirings/ai-agent/voice-output.d.ts +1 -2
  172. package/dist/wirings/channel/channel-rpc.types.d.ts +2 -2
  173. package/dist/wirings/rpc/addon-runner.d.ts +4 -0
  174. package/dist/wirings/rpc/addon-runner.js +14 -2
  175. package/dist/wirings/rpc/rpc-runner.d.ts +1 -1
  176. package/dist/wirings/rpc/rpc-runner.js +4 -2
  177. package/dist/wirings/rpc/rpc-types.d.ts +5 -1
  178. package/dist/wirings/rpc/wire-addon.d.ts +12 -0
  179. package/dist/wirings/rpc/wire-addon.js +4 -0
  180. package/dist/wirings/virtual-user/prepare-virtual-user-run.js +1 -1
  181. package/dist/wirings/virtual-user/virtual-user-agents.d.ts +1 -1
  182. package/dist/wirings/workflow/feature.d.ts +2 -1
  183. package/dist/wirings/workflow/index.d.ts +3 -14
  184. package/dist/wirings/workflow/index.js +0 -8
  185. package/dist/wirings/workflow/pikku-scenario-service.d.ts +10 -0
  186. package/dist/wirings/workflow/pikku-scenario-service.js +9 -0
  187. package/dist/wirings/workflow/run-timeline.d.ts +1 -2
  188. package/dist/wirings/workflow/scenario.types.d.ts +37 -0
  189. package/dist/wirings/workflow/scenario.types.js +1 -0
  190. package/dist/wirings/workflow/workflow.types.d.ts +2 -37
  191. 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
  192. package/knowledge/decisions/internals/a-resumed-agent-turn-is-as-interruptible-as-the-first.md +1 -1
  193. package/knowledge/decisions/internals/actor-flow-drives-the-target-through-a-transport-seam.md +1 -1
  194. 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
  195. 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
  196. package/knowledge/decisions/internals/agent-context-waits-for-a-tool-result-still-being-written.md +1 -1
  197. package/knowledge/decisions/internals/{ai-agent-credential-suspensions-hide-the-tool-result.md → agent-credential-suspensions-hide-the-tool-result.md} +2 -2
  198. package/knowledge/decisions/internals/{ai-agent-delegate-and-supervise-hide-different-text.md → agent-delegate-and-supervise-hide-different-text.md} +4 -4
  199. package/knowledge/decisions/internals/{ai-agent-llm-tool-arguments-have-nulls-stripped.md → agent-llm-tool-arguments-have-nulls-stripped.md} +3 -3
  200. 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
  201. package/knowledge/decisions/internals/{ai-agent-onerror-hooks-cannot-change-the-failure.md → agent-onerror-hooks-cannot-change-the-failure.md} +6 -6
  202. package/knowledge/decisions/internals/{ai-agent-runner-methods-must-keep-their-receiver.md → agent-runner-methods-must-keep-their-receiver.md} +4 -4
  203. package/knowledge/decisions/internals/agent-speech-travels-as-a-custom-agui-event.md +1 -1
  204. package/knowledge/decisions/internals/{ai-agent-stream-persistence-is-best-effort.md → agent-stream-persistence-is-best-effort.md} +4 -4
  205. 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
  206. package/knowledge/decisions/internals/{ai-agent-tool-execute-failures-are-logged-unconditionally.md → agent-tool-execute-failures-are-logged-unconditionally.md} +3 -3
  207. 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
  208. 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
  209. package/knowledge/decisions/internals/an-agent-interrupt-is-not-a-failure.md +2 -2
  210. package/knowledge/decisions/internals/an-agent-run-owned-by-another-instance-says-so.md +3 -3
  211. package/knowledge/decisions/internals/an-agent-stream-send-must-return-the-inner-sends-promise.md +2 -2
  212. package/knowledge/decisions/internals/an-empty-text-part-is-omitted-from-an-agent-message.md +1 -1
  213. package/knowledge/decisions/internals/an-empty-transcript-is-not-recorded.md +1 -1
  214. package/knowledge/decisions/internals/speech-synthesis-picks-a-voice-per-sentence-and-warns-once.md +1 -1
  215. package/knowledge/decisions/internals/the-agent-done-event-goes-through-the-middleware-and-is-awaited.md +1 -1
  216. package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +1 -1
  217. package/knowledge/decisions/internals/the-per-invocation-rpc-view-is-a-class.md +5 -5
  218. package/knowledge/decisions/internals/the-transcript-event-is-sent-ahead-of-the-run.md +2 -2
  219. package/knowledge/decisions/internals/thread-history-records-the-transcript-not-the-audio.md +2 -2
  220. package/knowledge/decisions/internals/voice-output-speaks-unless-voice-input-explicitly-says-otherwise.md +1 -1
  221. package/knowledge/decisions/security/{ai-agent-approval-forwarding-requires-a-symbol-brand.md → agent-approval-forwarding-requires-a-symbol-brand.md} +3 -3
  222. package/knowledge/decisions/security/{ai-agent-credential-requests-are-symbol-branded.md → agent-credential-requests-are-symbol-branded.md} +4 -4
  223. 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} +3 -3
  224. package/knowledge/decisions/security/{ai-agent-ownership-failures-never-echo-the-resource.md → agent-ownership-failures-never-echo-the-resource.md} +2 -2
  225. package/knowledge/decisions/security/{ai-agent-resume-re-runs-the-authorization-gate.md → agent-resume-re-runs-the-authorization-gate.md} +4 -4
  226. package/knowledge/decisions/security/{ai-agent-sessionless-deployments-have-no-thread-ownership.md → agent-sessionless-deployments-have-no-thread-ownership.md} +5 -5
  227. package/knowledge/decisions/security/{ai-agent-thread-ownership-composes-the-session-principal.md → agent-thread-ownership-composes-the-session-principal.md} +2 -2
  228. 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
  229. package/knowledge/decisions/security/an-agent-approval-is-claimed-before-the-tool-runs.md +3 -3
  230. package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +3 -3
  231. package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +20 -13
  232. package/knowledge/decisions/security/index.md +1 -2
  233. package/package.json +4 -4
  234. package/scripts/generate-api-report.mts +32 -8
  235. package/src/agent-naming.test.ts +68 -0
  236. package/src/ecosystem/agent-scorer.ts +24 -0
  237. package/src/ecosystem/agent.ts +42 -0
  238. package/src/ecosystem/channel/local.ts +1 -0
  239. package/src/ecosystem/channel.ts +22 -0
  240. package/src/ecosystem/cli/channel.ts +25 -0
  241. package/src/ecosystem/cli.ts +21 -0
  242. package/src/ecosystem/credential.ts +10 -0
  243. package/src/ecosystem/dev.ts +12 -0
  244. package/src/ecosystem/function.ts +28 -0
  245. package/src/ecosystem/gateway.ts +4 -0
  246. package/src/ecosystem/hmac.ts +1 -0
  247. package/src/ecosystem/http.ts +22 -0
  248. package/src/ecosystem/mcp.ts +17 -0
  249. package/src/ecosystem/middleware.ts +27 -0
  250. package/src/ecosystem/node-host-resolver.ts +1 -0
  251. package/src/ecosystem/node.ts +5 -0
  252. package/src/ecosystem/oauth2.ts +4 -0
  253. package/src/ecosystem/persona.ts +30 -0
  254. package/src/ecosystem/queue.ts +23 -0
  255. package/src/ecosystem/remote.ts +9 -0
  256. package/src/ecosystem/role.ts +13 -0
  257. package/src/ecosystem/rpc.ts +7 -0
  258. package/src/ecosystem/safe-fetch.ts +8 -0
  259. package/src/ecosystem/scenario.ts +32 -0
  260. package/src/ecosystem/scheduler.ts +5 -0
  261. package/src/ecosystem/schema.ts +1 -0
  262. package/src/ecosystem/scope.ts +14 -0
  263. package/src/ecosystem/secret.ts +15 -0
  264. package/src/ecosystem/services/istanbul-coverage.ts +1 -0
  265. package/src/ecosystem/services/local-content-request-handler.ts +16 -0
  266. package/src/ecosystem/services/local-content.ts +1 -0
  267. package/src/ecosystem/services/v8-coverage.ts +1 -0
  268. package/src/ecosystem/services.ts +82 -0
  269. package/src/ecosystem/testing.ts +8 -0
  270. package/src/ecosystem/trigger.ts +7 -0
  271. package/src/ecosystem/types.ts +34 -0
  272. package/src/ecosystem/variable.ts +14 -0
  273. package/src/ecosystem/virtual-user.ts +48 -0
  274. package/src/ecosystem/workflow.ts +68 -0
  275. package/src/index.ts +8 -19
  276. package/src/pikku-state.ts +3 -3
  277. package/src/public-surface.json +183 -91
  278. package/src/public-surface.json.README +20 -2
  279. package/src/public-surface.test.ts +31 -3
  280. package/src/services/{ai-run-state-service.ts → agent-run-state-service.ts} +5 -5
  281. package/src/services/{ai-agent-runner-service.ts → agent-runner-service.ts} +18 -18
  282. package/src/services/{ai-storage-service.ts → agent-storage-service.ts} +7 -7
  283. package/src/services/http-personas-converse.test.ts +3 -3
  284. package/src/services/http-personas.ts +4 -4
  285. package/src/services/{in-memory-ai-run-state-service.ts → in-memory-agent-run-state-service.ts} +7 -7
  286. package/src/services/index.ts +13 -24
  287. package/src/services/meta-service.ts +5 -7
  288. package/src/testing/service-tests/agent-run-service-tests.ts +4 -4
  289. package/src/testing/service-tests/{ai-storage-service-tests.ts → agent-storage-service-tests.ts} +8 -8
  290. package/src/testing/service-tests.ts +10 -8
  291. package/src/types/core.types.ts +13 -13
  292. package/src/types/state.types.ts +11 -10
  293. package/src/wirings/actor-flow/run-conversation.test.ts +2 -2
  294. package/src/wirings/actor-flow/run-conversation.ts +7 -9
  295. package/src/wirings/{ai-agent/ai-agent-agui.test.ts → agent/agent-agui.test.ts} +126 -105
  296. package/src/wirings/{ai-agent/ai-agent-agui.ts → agent/agent-agui.ts} +7 -7
  297. package/src/wirings/{ai-agent/ai-agent-authorization.test.ts → agent/agent-authorization.test.ts} +6 -6
  298. package/src/wirings/{ai-agent/ai-agent-finalize.test.ts → agent/agent-finalize.test.ts} +17 -16
  299. package/src/wirings/{ai-agent/ai-agent-finalize.ts → agent/agent-finalize.ts} +22 -22
  300. package/src/wirings/{ai-agent/ai-agent-helpers.test.ts → agent/agent-helpers.test.ts} +1 -1
  301. package/src/wirings/{ai-agent/ai-agent-helpers.ts → agent/agent-helpers.ts} +1 -1
  302. package/src/wirings/{ai-agent/ai-agent-interrupt.test.ts → agent/agent-interrupt.test.ts} +67 -77
  303. package/src/wirings/{ai-agent/ai-agent-interrupt.ts → agent/agent-interrupt.ts} +5 -5
  304. package/src/wirings/{ai-agent/ai-agent-memory.test.ts → agent/agent-memory.test.ts} +12 -12
  305. package/src/wirings/{ai-agent/ai-agent-memory.ts → agent/agent-memory.ts} +36 -36
  306. package/src/wirings/{ai-agent/ai-agent-model-config.test.ts → agent/agent-model-config.test.ts} +2 -5
  307. package/src/wirings/{ai-agent/ai-agent-model-config.ts → agent/agent-model-config.ts} +1 -1
  308. package/src/wirings/{ai-agent/ai-agent-prepare.test.ts → agent/agent-prepare.test.ts} +18 -18
  309. package/src/wirings/{ai-agent/ai-agent-prepare.ts → agent/agent-prepare.ts} +54 -51
  310. package/src/wirings/{ai-agent/ai-agent-registry.test.ts → agent/agent-registry.test.ts} +49 -43
  311. package/src/wirings/{ai-agent/ai-agent-registry.ts → agent/agent-registry.ts} +14 -14
  312. package/src/wirings/{ai-agent/ai-agent-resume-authorization.test.ts → agent/agent-resume-authorization.test.ts} +18 -18
  313. package/src/wirings/{ai-agent → agent}/agent-rpc.ts +16 -20
  314. package/src/wirings/{ai-agent/ai-agent-runner.test.ts → agent/agent-runner.test.ts} +105 -106
  315. package/src/wirings/{ai-agent/ai-agent-runner.ts → agent/agent-runner.ts} +90 -80
  316. package/src/wirings/{ai-agent/ai-agent-stream-output-hooks.test.ts → agent/agent-stream-output-hooks.test.ts} +25 -25
  317. package/src/wirings/{ai-agent/ai-agent-stream.test.ts → agent/agent-stream.test.ts} +147 -143
  318. package/src/wirings/{ai-agent/ai-agent-stream.ts → agent/agent-stream.ts} +147 -146
  319. package/src/wirings/{ai-agent/ai-agent-thread-ownership.test.ts → agent/agent-thread-ownership.test.ts} +24 -28
  320. package/src/wirings/{ai-agent/ai-agent-turn.test.ts → agent/agent-turn.test.ts} +3 -5
  321. package/src/wirings/{ai-agent/ai-agent-turn.ts → agent/agent-turn.ts} +7 -7
  322. package/src/wirings/{ai-agent/ai-agent.types.ts → agent/agent.types.ts} +51 -48
  323. package/src/wirings/agent/index.ts +56 -0
  324. package/src/wirings/{ai-agent → agent}/voice-input.test.ts +15 -15
  325. package/src/wirings/{ai-agent → agent}/voice-input.ts +11 -11
  326. package/src/wirings/{ai-agent → agent}/voice-output.test.ts +23 -23
  327. package/src/wirings/{ai-agent → agent}/voice-output.ts +11 -11
  328. package/src/wirings/{ai-scorer/ai-scorer-grade.test.ts → agent-scorer/agent-scorer-grade.test.ts} +8 -8
  329. package/src/wirings/{ai-scorer/ai-scorer-grade.ts → agent-scorer/agent-scorer-grade.ts} +9 -9
  330. package/src/wirings/{ai-scorer/ai-scorer-judge.test.ts → agent-scorer/agent-scorer-judge.test.ts} +11 -14
  331. package/src/wirings/{ai-scorer/ai-scorer-judge.ts → agent-scorer/agent-scorer-judge.ts} +11 -11
  332. package/src/wirings/{ai-scorer/ai-scorer-live.test.ts → agent-scorer/agent-scorer-live.test.ts} +11 -11
  333. package/src/wirings/{ai-scorer/ai-scorer-live.ts → agent-scorer/agent-scorer-live.ts} +3 -3
  334. package/src/wirings/{ai-scorer/ai-scorer-registry.ts → agent-scorer/agent-scorer-registry.ts} +11 -8
  335. package/src/wirings/{ai-scorer/ai-scorer-sampling.test.ts → agent-scorer/agent-scorer-sampling.test.ts} +1 -1
  336. package/src/wirings/{ai-scorer/ai-scorer-snapshots.test.ts → agent-scorer/agent-scorer-snapshots.test.ts} +2 -2
  337. package/src/wirings/{ai-scorer/ai-scorer-snapshots.ts → agent-scorer/agent-scorer-snapshots.ts} +1 -1
  338. package/src/wirings/{ai-scorer/ai-scorer-worker.test.ts → agent-scorer/agent-scorer-worker.test.ts} +15 -15
  339. package/src/wirings/{ai-scorer/ai-scorer-worker.ts → agent-scorer/agent-scorer-worker.ts} +9 -7
  340. package/src/wirings/{ai-scorer/ai-scorer.ts → agent-scorer/agent-scorer.ts} +7 -7
  341. package/src/wirings/{ai-scorer/ai-scorer.types.ts → agent-scorer/agent-scorer.types.ts} +6 -6
  342. package/src/wirings/agent-scorer/index.ts +22 -0
  343. package/src/wirings/channel/channel-rpc.types.ts +2 -2
  344. package/src/wirings/rpc/addon-runner.ts +31 -3
  345. package/src/wirings/rpc/addon-secrets.test.ts +130 -0
  346. package/src/wirings/rpc/rpc-runner.ts +4 -2
  347. package/src/wirings/rpc/rpc-types.ts +5 -1
  348. package/src/wirings/rpc/wire-addon.ts +16 -0
  349. package/src/wirings/virtual-user/prepare-virtual-user-run.ts +1 -1
  350. package/src/wirings/virtual-user/run-virtual-user.test.ts +2 -2
  351. package/src/wirings/virtual-user/run-virtual-user.ts +3 -3
  352. package/src/wirings/virtual-user/virtual-user-agents.ts +1 -1
  353. package/src/wirings/workflow/feature.ts +2 -5
  354. package/src/wirings/workflow/index.ts +1 -49
  355. package/src/wirings/workflow/pikku-scenario-service.ts +21 -1
  356. package/src/wirings/workflow/run-timeline.ts +1 -1
  357. package/src/wirings/workflow/scenario.types.ts +63 -0
  358. package/src/wirings/workflow/workflow.types.ts +1 -54
  359. package/src/wirings-stay-decoupled.test.ts +3 -3
  360. package/tsconfig.tsbuildinfo +1 -1
  361. package/src/wirings/ai-agent/index.ts +0 -65
  362. package/src/wirings/ai-scorer/index.ts +0 -24
  363. /package/src/wirings/{ai-agent/ai-agent-utils.ts → agent/agent-utils.ts} +0 -0
  364. /package/src/wirings/{ai-scorer/ai-scorer-sampling.ts → agent-scorer/agent-scorer-sampling.ts} +0 -0
@@ -1,19 +1,19 @@
1
1
  import type {
2
- AIAgentInput,
3
- AIAgentOutput,
4
- AIAgentStep,
5
- AIAgentMemoryConfig,
6
- CoreAIAgent,
7
- PikkuAIMiddlewareHooks,
2
+ AgentInput,
3
+ AgentOutput,
4
+ AgentStep,
5
+ AgentMemoryConfig,
6
+ CoreAgent,
7
+ PikkuAgentMiddlewareHooks,
8
8
  AgentRunState,
9
- } from './ai-agent.types.js'
9
+ } from './agent.types.js'
10
10
  import type {
11
- AIAgentStepResult,
12
- AIAgentRunnerParams,
13
- AIAgentRunnerService,
14
- } from '../../services/ai-agent-runner-service.js'
15
- import type { AIStorageService } from '../../services/ai-storage-service.js'
16
- import type { AIRunStateService } from '../../services/ai-run-state-service.js'
11
+ AgentStepResult,
12
+ AgentRunnerParams,
13
+ AgentRunnerService,
14
+ } from '../../services/agent-runner-service.js'
15
+ import type { AgentStorageService } from '../../services/agent-storage-service.js'
16
+ import type { AgentRunStateService } from '../../services/agent-run-state-service.js'
17
17
 
18
18
  import {
19
19
  saveMessages,
@@ -21,7 +21,7 @@ import {
21
21
  loadContextMessages,
22
22
  trimMessages,
23
23
  getWorkingMemoryMiddleware,
24
- } from './ai-agent-memory.js'
24
+ } from './agent-memory.js'
25
25
  import {
26
26
  prepareAgentRun,
27
27
  resolveAgent,
@@ -31,9 +31,9 @@ import {
31
31
  agentSessionScope,
32
32
  assertResourcePrincipalOwner,
33
33
  assertAgentAuthorized,
34
- type RunAIAgentParams,
35
- } from './ai-agent-prepare.js'
36
- import { checkForApprovals, appendStepMessages } from './ai-agent-stream.js'
34
+ type RunAgentParams,
35
+ } from './agent-prepare.js'
36
+ import { checkForApprovals, appendStepMessages } from './agent-stream.js'
37
37
  import {
38
38
  AgentInterruptedError,
39
39
  isAbortError,
@@ -41,22 +41,22 @@ import {
41
41
  registerInterruptibleRun,
42
42
  trackInterruptNote,
43
43
  trackToolExecution,
44
- } from './ai-agent-interrupt.js'
44
+ } from './agent-interrupt.js'
45
45
  import { pikkuState, getSingletonServices } from '../../pikku-state.js'
46
46
  import {
47
47
  applyInputMiddleware,
48
48
  describeApprovals,
49
49
  notifyAfterStep,
50
50
  toAccumulatedStep,
51
- } from './ai-agent-turn.js'
51
+ } from './agent-turn.js'
52
52
  import {
53
53
  applyOutputMiddleware,
54
54
  finalizeAgentRun,
55
55
  lastUserMessageText,
56
- } from './ai-agent-finalize.js'
57
- import { resolveModelConfig } from './ai-agent-model-config.js'
56
+ } from './agent-finalize.js'
57
+ import { resolveModelConfig } from './agent-model-config.js'
58
58
  import { AIProviderNotConfiguredError } from '../../errors/errors.js'
59
- import { randomUUID } from './ai-agent-utils.js'
59
+ import { randomUUID } from './agent-utils.js'
60
60
 
61
61
  function stripNulls(obj: unknown): unknown {
62
62
  if (obj === null) return undefined
@@ -86,12 +86,12 @@ function extractStructuredAssistantOutput(object: unknown): {
86
86
  }
87
87
  }
88
88
 
89
- export async function runAIAgent(
89
+ export async function runAgent(
90
90
  agentName: string,
91
- input: AIAgentInput,
92
- params: RunAIAgentParams,
91
+ input: AgentInput,
92
+ params: RunAgentParams,
93
93
  agentSessionMap?: Map<string, string>
94
- ): Promise<AIAgentOutput> {
94
+ ): Promise<AgentOutput> {
95
95
  const sessionMap = agentSessionMap ?? new Map<string, string>()
96
96
 
97
97
  input = {
@@ -119,13 +119,13 @@ export async function runAIAgent(
119
119
  runnerParams.agentId = agentName
120
120
 
121
121
  const singletonServices = getSingletonServices()
122
- const { aiRunState } = singletonServices
123
- if (!aiRunState) {
124
- throw new Error('AIRunStateService not available in singletonServices')
122
+ const { agentRunState } = singletonServices
123
+ if (!agentRunState) {
124
+ throw new Error('AgentRunStateService not available in singletonServices')
125
125
  }
126
126
 
127
127
  if (missingRpcs.length > 0) {
128
- const runId = await aiRunState.createRun({
128
+ const runId = await agentRunState.createRun({
129
129
  agentName,
130
130
  threadId,
131
131
  resourceId: input.resourceId,
@@ -145,22 +145,22 @@ export async function runAIAgent(
145
145
  }
146
146
  }
147
147
 
148
- const aiMiddlewares: PikkuAIMiddlewareHooks[] = [
148
+ const agentMiddlewares: PikkuAgentMiddlewareHooks[] = [
149
149
  ...getWorkingMemoryMiddleware(memoryConfig, storage, {
150
150
  threadId,
151
151
  workingMemorySchemaName,
152
152
  logger: singletonServices.logger,
153
153
  schemaService: singletonServices.schema,
154
154
  }),
155
- ...(agent.aiMiddleware ?? []),
155
+ ...(agent.agentMiddleware ?? []),
156
156
  ]
157
157
 
158
- // One bag per run, shared by every middleware — see PikkuAIMiddlewareHooks.
158
+ // One bag per run, shared by every middleware — see PikkuAgentMiddlewareHooks.
159
159
  const sharedNotes: Record<string, unknown> = {}
160
160
 
161
161
  const { messages: modifiedMessages, instructions: modifiedInstructions } =
162
162
  await applyInputMiddleware(
163
- aiMiddlewares,
163
+ agentMiddlewares,
164
164
  singletonServices,
165
165
  {
166
166
  messages: runnerParams.messages,
@@ -176,7 +176,7 @@ export async function runAIAgent(
176
176
  const persistedUserMessage =
177
177
  lastModified?.id === userMessage.id ? lastModified : userMessage
178
178
 
179
- const runId = await aiRunState.createRun({
179
+ const runId = await agentRunState.createRun({
180
180
  agentName,
181
181
  threadId,
182
182
  resourceId: input.resourceId,
@@ -192,9 +192,9 @@ export async function runAIAgent(
192
192
  runnerParams.tools = trackToolExecution(runnerParams.tools, interruptHandle)
193
193
 
194
194
  try {
195
- const accumulatedSteps: AIAgentStep[] = []
195
+ const accumulatedSteps: AgentStep[] = []
196
196
  const totalUsage = { inputTokens: 0, outputTokens: 0 }
197
- let lastStepResult: AIAgentStepResult | null = null
197
+ let lastStepResult: AgentStepResult | null = null
198
198
 
199
199
  for (let step = 0; step < maxSteps; step++) {
200
200
  if (agent.prepareStep) {
@@ -218,7 +218,12 @@ export async function runAIAgent(
218
218
  totalUsage.inputTokens += stepResult.usage.inputTokens
219
219
  totalUsage.outputTokens += stepResult.usage.outputTokens
220
220
 
221
- await notifyAfterStep(aiMiddlewares, singletonServices, step, stepResult)
221
+ await notifyAfterStep(
222
+ agentMiddlewares,
223
+ singletonServices,
224
+ step,
225
+ stepResult
226
+ )
222
227
 
223
228
  accumulatedSteps.push(toAccumulatedStep(stepResult))
224
229
 
@@ -271,7 +276,7 @@ export async function runAIAgent(
271
276
  ])
272
277
  }
273
278
 
274
- await aiRunState.updateRun(runId, {
279
+ await agentRunState.updateRun(runId, {
275
280
  status: 'suspended',
276
281
  suspendReason: 'approval',
277
282
  pendingApprovals,
@@ -309,7 +314,7 @@ export async function runAIAgent(
309
314
  }
310
315
 
311
316
  const { text: outputText, steps: outputSteps } =
312
- await applyOutputMiddleware(aiMiddlewares, singletonServices, {
317
+ await applyOutputMiddleware(agentMiddlewares, singletonServices, {
313
318
  text: finalText,
314
319
  messages: runnerParams.messages,
315
320
  steps: result.steps,
@@ -329,7 +334,7 @@ export async function runAIAgent(
329
334
  }
330
335
  )
331
336
 
332
- await finalizeAgentRun(aiRunState, {
337
+ await finalizeAgentRun(agentRunState, {
333
338
  runId,
334
339
  agentName,
335
340
  threadId,
@@ -352,7 +357,7 @@ export async function runAIAgent(
352
357
  // knowledge: decisions/internals/an-agent-interrupt-is-not-a-failure.md
353
358
  const interruption = interruptHandle.interruption
354
359
  if (interruption || isAbortError(error)) {
355
- await aiRunState.updateRun(runId, { status: 'interrupted' })
360
+ await agentRunState.updateRun(runId, { status: 'interrupted' })
356
361
  if (storage) {
357
362
  trackInterruptNote(
358
363
  threadId,
@@ -361,7 +366,7 @@ export async function runAIAgent(
361
366
  }
362
367
  throw new AgentInterruptedError(runId, interruption ?? { reason: 'user' })
363
368
  }
364
- for (const mw of aiMiddlewares) {
369
+ for (const mw of agentMiddlewares) {
365
370
  if (mw.onError) {
366
371
  try {
367
372
  await mw.onError(singletonServices, {
@@ -372,7 +377,7 @@ export async function runAIAgent(
372
377
  } catch {}
373
378
  }
374
379
  }
375
- await aiRunState.updateRun(runId, {
380
+ await agentRunState.updateRun(runId, {
376
381
  status: 'failed',
377
382
  errorMessage: error instanceof Error ? error.message : String(error),
378
383
  })
@@ -382,19 +387,19 @@ export async function runAIAgent(
382
387
  }
383
388
  }
384
389
 
385
- export async function resumeAIAgentSync(
390
+ export async function resumeAgentSync(
386
391
  runId: string,
387
392
  approvals: { toolCallId: string; approved: boolean }[],
388
- params: RunAIAgentParams,
393
+ params: RunAgentParams,
389
394
  expectedAgentName?: string
390
- ): Promise<AIAgentOutput> {
395
+ ): Promise<AgentOutput> {
391
396
  const singletonServices = getSingletonServices()
392
- const { aiRunState } = singletonServices
393
- if (!aiRunState) {
394
- throw new Error('AIRunStateService not available in singletonServices')
397
+ const { agentRunState } = singletonServices
398
+ if (!agentRunState) {
399
+ throw new Error('AgentRunStateService not available in singletonServices')
395
400
  }
396
401
 
397
- const run = await aiRunState.getRun(runId)
402
+ const run = await agentRunState.getRun(runId)
398
403
  if (!run) throw new Error(`No run found for runId ${runId}`)
399
404
  assertResourcePrincipalOwner(
400
405
  params,
@@ -417,7 +422,7 @@ export async function resumeAIAgentSync(
417
422
 
418
423
  const { storage } = resolveMemoryServices(agent, singletonServices)
419
424
  const memoryConfig = agent.memory
420
- const agentRunner = singletonServices.aiAgentRunner
425
+ const agentRunner = singletonServices.agentRunner
421
426
  if (!agentRunner) {
422
427
  throw new AIProviderNotConfiguredError()
423
428
  }
@@ -436,7 +441,7 @@ export async function resumeAIAgentSync(
436
441
  // for may run the tool.
437
442
  const claimedIds = new Set<string>()
438
443
  for (const { toolCallId, approved } of approvals) {
439
- const claimed = await aiRunState.resolveApproval(
444
+ const claimed = await agentRunState.resolveApproval(
440
445
  toolCallId,
441
446
  approved ? 'approved' : 'denied'
442
447
  )
@@ -458,7 +463,7 @@ export async function resumeAIAgentSync(
458
463
  resolvedName,
459
464
  packageName,
460
465
  undefined,
461
- agent.aiMiddleware ?? []
466
+ agent.agentMiddleware ?? []
462
467
  )
463
468
 
464
469
  const toolCallMessages: {
@@ -538,7 +543,7 @@ export async function resumeAIAgentSync(
538
543
  ])
539
544
  }
540
545
 
541
- await aiRunState.updateRun(runId, { status: 'running' })
546
+ await agentRunState.updateRun(runId, { status: 'running' })
542
547
 
543
548
  return continueAfterToolResultSync(
544
549
  run,
@@ -549,7 +554,7 @@ export async function resumeAIAgentSync(
549
554
  memoryConfig,
550
555
  agentRunner,
551
556
  params,
552
- aiRunState,
557
+ agentRunState,
553
558
  // The approved tools were executed here, before the model was re-entered,
554
559
  // so they belong to the run's step record — otherwise a tool that failed
555
560
  // after approval leaves no trace on the run at all.
@@ -569,16 +574,16 @@ export async function resumeAIAgentSync(
569
574
 
570
575
  async function continueAfterToolResultSync(
571
576
  run: AgentRunState,
572
- agent: CoreAIAgent,
577
+ agent: CoreAgent,
573
578
  packageName: string | null,
574
579
  resolvedName: string,
575
- storage: AIStorageService | undefined,
576
- memoryConfig: AIAgentMemoryConfig | undefined,
577
- agentRunner: AIAgentRunnerService,
578
- params: RunAIAgentParams,
579
- aiRunState: AIRunStateService,
580
- resumedToolStep?: AIAgentStep
581
- ): Promise<AIAgentOutput> {
580
+ storage: AgentStorageService | undefined,
581
+ memoryConfig: AgentMemoryConfig | undefined,
582
+ agentRunner: AgentRunnerService,
583
+ params: RunAgentParams,
584
+ agentRunState: AgentRunStateService,
585
+ resumedToolStep?: AgentStep
586
+ ): Promise<AgentOutput> {
582
587
  const singletonServices = getSingletonServices()
583
588
  const agentsMeta = pikkuState(packageName, 'agent', 'agentsMeta')
584
589
  const meta = agentsMeta[resolvedName]
@@ -606,21 +611,21 @@ async function continueAfterToolResultSync(
606
611
 
607
612
  const instructions = await buildInstructions(resolvedName, packageName)
608
613
 
609
- const aiMiddlewares: PikkuAIMiddlewareHooks[] = [
614
+ const agentMiddlewares: PikkuAgentMiddlewareHooks[] = [
610
615
  ...getWorkingMemoryMiddleware(memoryConfig, storage, {
611
616
  threadId: run.threadId,
612
617
  workingMemorySchemaName,
613
618
  logger: singletonServices.logger,
614
619
  schemaService: singletonServices.schema,
615
620
  }),
616
- ...(agent.aiMiddleware ?? []),
621
+ ...(agent.agentMiddleware ?? []),
617
622
  ]
618
- // One bag per run, shared by every middleware — see PikkuAIMiddlewareHooks.
623
+ // One bag per run, shared by every middleware — see PikkuAgentMiddlewareHooks.
619
624
  const sharedNotes: Record<string, unknown> = {}
620
625
 
621
626
  const { messages: modifiedMessages, instructions: modifiedInstructions } =
622
627
  await applyInputMiddleware(
623
- aiMiddlewares,
628
+ agentMiddlewares,
624
629
  singletonServices,
625
630
  { messages: trimmedMessages, instructions: instructions },
626
631
  sharedNotes
@@ -633,13 +638,13 @@ async function continueAfterToolResultSync(
633
638
  resolvedName,
634
639
  packageName,
635
640
  undefined,
636
- aiMiddlewares
641
+ agentMiddlewares
637
642
  )
638
643
 
639
644
  const resolved = resolveModelConfig(resolvedName, agent)
640
645
  const maxSteps = resolved.maxSteps ?? 10
641
646
 
642
- const runnerParams: AIAgentRunnerParams = {
647
+ const runnerParams: AgentRunnerParams = {
643
648
  model: resolved.model,
644
649
  temperature: resolved.temperature,
645
650
  instructions: modifiedInstructions,
@@ -666,12 +671,12 @@ async function continueAfterToolResultSync(
666
671
  // `saveMessages`, and the approved tool's messages were already written to
667
672
  // the thread before the model was re-entered. It belongs to the run's step
668
673
  // record, not to persistence.
669
- const withResumedStep = (steps: AIAgentStep[]): AIAgentStep[] =>
674
+ const withResumedStep = (steps: AgentStep[]): AgentStep[] =>
670
675
  resumedToolStep ? [resumedToolStep, ...steps] : steps
671
676
 
672
- const accumulatedSteps: AIAgentStep[] = []
677
+ const accumulatedSteps: AgentStep[] = []
673
678
  const totalUsage = { inputTokens: 0, outputTokens: 0 }
674
- let lastStepResult: AIAgentStepResult | null = null
679
+ let lastStepResult: AgentStepResult | null = null
675
680
 
676
681
  for (let step = 0; step < maxSteps; step++) {
677
682
  const stepResult = await agentRunner.run(runnerParams)
@@ -680,7 +685,12 @@ async function continueAfterToolResultSync(
680
685
  totalUsage.inputTokens += stepResult.usage.inputTokens
681
686
  totalUsage.outputTokens += stepResult.usage.outputTokens
682
687
 
683
- await notifyAfterStep(aiMiddlewares, singletonServices, step, stepResult)
688
+ await notifyAfterStep(
689
+ agentMiddlewares,
690
+ singletonServices,
691
+ step,
692
+ stepResult
693
+ )
684
694
 
685
695
  accumulatedSteps.push(toAccumulatedStep(stepResult))
686
696
 
@@ -735,7 +745,7 @@ async function continueAfterToolResultSync(
735
745
  ])
736
746
  }
737
747
 
738
- await aiRunState.updateRun(run.runId, {
748
+ await agentRunState.updateRun(run.runId, {
739
749
  status: 'suspended',
740
750
  suspendReason: 'approval',
741
751
  pendingApprovals,
@@ -772,7 +782,7 @@ async function continueAfterToolResultSync(
772
782
  }
773
783
 
774
784
  const { text: outputText, steps: outputSteps } =
775
- await applyOutputMiddleware(aiMiddlewares, singletonServices, {
785
+ await applyOutputMiddleware(agentMiddlewares, singletonServices, {
776
786
  text: finalText,
777
787
  messages: runnerParams.messages,
778
788
  steps: withResumedStep(result.steps),
@@ -793,7 +803,7 @@ async function continueAfterToolResultSync(
793
803
  }
794
804
  )
795
805
 
796
- await finalizeAgentRun(aiRunState, {
806
+ await finalizeAgentRun(agentRunState, {
797
807
  runId: run.runId,
798
808
  agentName: resolvedName,
799
809
  threadId: run.threadId,
@@ -815,7 +825,7 @@ async function continueAfterToolResultSync(
815
825
  } catch (error) {
816
826
  const interruption = interruptHandle.interruption
817
827
  if (interruption || isAbortError(error)) {
818
- await aiRunState.updateRun(run.runId, { status: 'interrupted' })
828
+ await agentRunState.updateRun(run.runId, { status: 'interrupted' })
819
829
  if (storage) {
820
830
  trackInterruptNote(
821
831
  run.threadId,
@@ -827,7 +837,7 @@ async function continueAfterToolResultSync(
827
837
  interruption ?? { reason: 'user' }
828
838
  )
829
839
  }
830
- for (const mw of aiMiddlewares) {
840
+ for (const mw of agentMiddlewares) {
831
841
  if (mw.onError) {
832
842
  try {
833
843
  await mw.onError(singletonServices, {
@@ -838,7 +848,7 @@ async function continueAfterToolResultSync(
838
848
  } catch {}
839
849
  }
840
850
  }
841
- await aiRunState.updateRun(run.runId, {
851
+ await agentRunState.updateRun(run.runId, {
842
852
  status: 'failed',
843
853
  errorMessage: error instanceof Error ? error.message : String(error),
844
854
  })
@@ -2,16 +2,16 @@ import { beforeEach, describe, test } from 'node:test'
2
2
  import assert from 'node:assert/strict'
3
3
 
4
4
  import { resetPikkuState, pikkuState } from '../../pikku-state.js'
5
- import { streamAIAgent } from './ai-agent-stream.js'
6
- import type { CoreAIAgent, PikkuAIMiddlewareHooks } from './ai-agent.types.js'
7
- import type { AIAgentStepResult } from '../../services/ai-agent-runner-service.js'
5
+ import { streamAgent } from './agent-stream.js'
6
+ import type { CoreAgent, PikkuAgentMiddlewareHooks } from './agent.types.js'
7
+ import type { AgentStepResult } from '../../services/agent-runner-service.js'
8
8
 
9
9
  beforeEach(() => {
10
10
  resetPikkuState()
11
11
  })
12
12
 
13
13
  const addTestAgent = (agentName: string) => {
14
- const agent: CoreAIAgent = {
14
+ const agent: CoreAgent = {
15
15
  name: agentName,
16
16
  description: 'test agent',
17
17
  instructions: 'be helpful',
@@ -28,8 +28,8 @@ const addTestAgent = (agentName: string) => {
28
28
  }
29
29
 
30
30
  const makeStepResult = (
31
- overrides?: Partial<AIAgentStepResult>
32
- ): AIAgentStepResult => ({
31
+ overrides?: Partial<AgentStepResult>
32
+ ): AgentStepResult => ({
33
33
  text: '',
34
34
  toolCalls: [],
35
35
  toolResults: [],
@@ -38,7 +38,7 @@ const makeStepResult = (
38
38
  ...overrides,
39
39
  })
40
40
 
41
- describe('streamAIAgent output hooks', () => {
41
+ describe('streamAgent output hooks', () => {
42
42
  test('does not run modifyOutput on a streamed run, and warns the hook it is inert there', async () => {
43
43
  addTestAgent('stream-modify-output-agent')
44
44
 
@@ -46,7 +46,7 @@ describe('streamAIAgent output hooks', () => {
46
46
  const modifyOutputCalls: unknown[] = []
47
47
  const sideEffects: string[] = []
48
48
 
49
- const middleware: PikkuAIMiddlewareHooks = {
49
+ const middleware: PikkuAgentMiddlewareHooks = {
50
50
  modifyOutput: async (_services, ctx) => {
51
51
  modifyOutputCalls.push(ctx)
52
52
  sideEffects.push(ctx.text)
@@ -56,7 +56,7 @@ describe('streamAIAgent output hooks', () => {
56
56
  const agent = pikkuState(null, 'agent', 'agents').get(
57
57
  'stream-modify-output-agent'
58
58
  )!
59
- agent.aiMiddleware = [middleware] as any
59
+ agent.agentMiddleware = [middleware] as any
60
60
  pikkuState(null, 'agent', 'agents').set('stream-modify-output-agent', agent)
61
61
 
62
62
  const mockServices = {
@@ -66,13 +66,13 @@ describe('streamAIAgent output hooks', () => {
66
66
  error: () => {},
67
67
  debug: () => {},
68
68
  },
69
- aiAgentRunner: {
69
+ agentRunner: {
70
70
  stream: async (_params: any, channel: any) => {
71
71
  channel.send({ type: 'text-delta', text: 'Hello' })
72
72
  return makeStepResult({ text: 'Hello', finishReason: 'stop' })
73
73
  },
74
74
  },
75
- aiRunState: {
75
+ agentRunState: {
76
76
  createRun: async () => 'run-modify-output',
77
77
  updateRun: async () => {},
78
78
  },
@@ -80,7 +80,7 @@ describe('streamAIAgent output hooks', () => {
80
80
 
81
81
  pikkuState(null, 'package', 'singletonServices', mockServices)
82
82
 
83
- const result = await streamAIAgent(
83
+ const result = await streamAgent(
84
84
  'stream-modify-output-agent',
85
85
  {
86
86
  message: 'hello',
@@ -139,7 +139,7 @@ describe('streamAIAgent output hooks', () => {
139
139
  error: () => {},
140
140
  debug: () => {},
141
141
  },
142
- aiAgentRunner: {
142
+ agentRunner: {
143
143
  stream: async (_params: any, channel: any) => {
144
144
  channel.send({
145
145
  type: 'text-delta',
@@ -148,11 +148,11 @@ describe('streamAIAgent output hooks', () => {
148
148
  return makeStepResult({ text: 'Noted', finishReason: 'stop' })
149
149
  },
150
150
  },
151
- aiRunState: {
151
+ agentRunState: {
152
152
  createRun: async () => 'run-working-memory',
153
153
  updateRun: async () => {},
154
154
  },
155
- aiStorage: {
155
+ agentStorage: {
156
156
  createThread: async () => {},
157
157
  getMessages: async () => [],
158
158
  saveMessages: async () => {},
@@ -169,7 +169,7 @@ describe('streamAIAgent output hooks', () => {
169
169
 
170
170
  pikkuState(null, 'package', 'singletonServices', mockServices)
171
171
 
172
- await streamAIAgent(
172
+ await streamAgent(
173
173
  'stream-working-memory-agent',
174
174
  {
175
175
  message: 'remember I live in Berlin',
@@ -210,7 +210,7 @@ describe('streamAIAgent output hooks', () => {
210
210
  error: () => {},
211
211
  debug: () => {},
212
212
  },
213
- aiAgentRunner: {
213
+ agentRunner: {
214
214
  stream: async (_params: any, channel: any) => {
215
215
  channel.send({
216
216
  type: 'tool-call',
@@ -240,11 +240,11 @@ describe('streamAIAgent output hooks', () => {
240
240
  return makeStepResult({ text: 'done', finishReason: 'stop' })
241
241
  },
242
242
  },
243
- aiRunState: {
243
+ agentRunState: {
244
244
  createRun: async () => 'run-tool-error',
245
245
  updateRun: async () => {},
246
246
  },
247
- aiStorage: {
247
+ agentStorage: {
248
248
  createThread: async () => {},
249
249
  getMessages: async () => [],
250
250
  saveMessages: async (_threadId: string, messages: any[]) => {
@@ -255,7 +255,7 @@ describe('streamAIAgent output hooks', () => {
255
255
 
256
256
  pikkuState(null, 'package', 'singletonServices', mockServices)
257
257
 
258
- await streamAIAgent(
258
+ await streamAgent(
259
259
  'stream-tool-error-agent',
260
260
  {
261
261
  message: 'look it up',
@@ -290,7 +290,7 @@ describe('streamAIAgent output hooks', () => {
290
290
 
291
291
  const warnings: unknown[][] = []
292
292
 
293
- const middleware: PikkuAIMiddlewareHooks = {
293
+ const middleware: PikkuAgentMiddlewareHooks = {
294
294
  modifyOutput: async (_services, ctx) => ({
295
295
  text: ctx.text,
296
296
  messages: ctx.messages,
@@ -300,7 +300,7 @@ describe('streamAIAgent output hooks', () => {
300
300
  const agent = pikkuState(null, 'agent', 'agents').get(
301
301
  'stream-both-hooks-agent'
302
302
  )!
303
- agent.aiMiddleware = [middleware] as any
303
+ agent.agentMiddleware = [middleware] as any
304
304
  pikkuState(null, 'agent', 'agents').set('stream-both-hooks-agent', agent)
305
305
 
306
306
  const mockServices = {
@@ -310,13 +310,13 @@ describe('streamAIAgent output hooks', () => {
310
310
  error: () => {},
311
311
  debug: () => {},
312
312
  },
313
- aiAgentRunner: {
313
+ agentRunner: {
314
314
  stream: async (_params: any, channel: any) => {
315
315
  channel.send({ type: 'text-delta', text: 'Hi' })
316
316
  return makeStepResult({ text: 'Hi', finishReason: 'stop' })
317
317
  },
318
318
  },
319
- aiRunState: {
319
+ agentRunState: {
320
320
  createRun: async () => 'run-both-hooks',
321
321
  updateRun: async () => {},
322
322
  },
@@ -324,7 +324,7 @@ describe('streamAIAgent output hooks', () => {
324
324
 
325
325
  pikkuState(null, 'package', 'singletonServices', mockServices)
326
326
 
327
- await streamAIAgent(
327
+ await streamAgent(
328
328
  'stream-both-hooks-agent',
329
329
  {
330
330
  message: 'hello',