@pikku/core 0.12.83 → 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 (343) hide show
  1. package/CHANGELOG.md +68 -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 +4 -4
  104. package/dist/services/index.js +1 -1
  105. package/dist/services/meta-service.d.ts +3 -3
  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 +10 -10
  113. package/dist/types/core.types.js +1 -1
  114. package/dist/types/state.types.d.ts +5 -5
  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/voice-output.d.ts +1 -2
  171. package/dist/wirings/channel/channel-rpc.types.d.ts +2 -2
  172. package/dist/wirings/rpc/rpc-runner.d.ts +1 -1
  173. package/dist/wirings/rpc/rpc-runner.js +2 -2
  174. package/dist/wirings/rpc/rpc-types.d.ts +1 -1
  175. package/dist/wirings/virtual-user/prepare-virtual-user-run.js +1 -1
  176. package/dist/wirings/virtual-user/virtual-user-agents.d.ts +1 -1
  177. package/dist/wirings/workflow/run-timeline.d.ts +1 -2
  178. 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
  179. package/knowledge/decisions/internals/a-resumed-agent-turn-is-as-interruptible-as-the-first.md +1 -1
  180. package/knowledge/decisions/internals/actor-flow-drives-the-target-through-a-transport-seam.md +1 -1
  181. 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
  182. 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
  183. package/knowledge/decisions/internals/agent-context-waits-for-a-tool-result-still-being-written.md +1 -1
  184. package/knowledge/decisions/internals/{ai-agent-credential-suspensions-hide-the-tool-result.md → agent-credential-suspensions-hide-the-tool-result.md} +2 -2
  185. package/knowledge/decisions/internals/{ai-agent-delegate-and-supervise-hide-different-text.md → agent-delegate-and-supervise-hide-different-text.md} +4 -4
  186. package/knowledge/decisions/internals/{ai-agent-llm-tool-arguments-have-nulls-stripped.md → agent-llm-tool-arguments-have-nulls-stripped.md} +3 -3
  187. 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
  188. package/knowledge/decisions/internals/{ai-agent-onerror-hooks-cannot-change-the-failure.md → agent-onerror-hooks-cannot-change-the-failure.md} +6 -6
  189. package/knowledge/decisions/internals/{ai-agent-runner-methods-must-keep-their-receiver.md → agent-runner-methods-must-keep-their-receiver.md} +4 -4
  190. package/knowledge/decisions/internals/agent-speech-travels-as-a-custom-agui-event.md +1 -1
  191. package/knowledge/decisions/internals/{ai-agent-stream-persistence-is-best-effort.md → agent-stream-persistence-is-best-effort.md} +4 -4
  192. 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
  193. package/knowledge/decisions/internals/{ai-agent-tool-execute-failures-are-logged-unconditionally.md → agent-tool-execute-failures-are-logged-unconditionally.md} +3 -3
  194. 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
  195. 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
  196. package/knowledge/decisions/internals/an-agent-interrupt-is-not-a-failure.md +2 -2
  197. package/knowledge/decisions/internals/an-agent-run-owned-by-another-instance-says-so.md +3 -3
  198. package/knowledge/decisions/internals/an-agent-stream-send-must-return-the-inner-sends-promise.md +2 -2
  199. package/knowledge/decisions/internals/an-empty-text-part-is-omitted-from-an-agent-message.md +1 -1
  200. package/knowledge/decisions/internals/an-empty-transcript-is-not-recorded.md +1 -1
  201. package/knowledge/decisions/internals/speech-synthesis-picks-a-voice-per-sentence-and-warns-once.md +1 -1
  202. package/knowledge/decisions/internals/the-agent-done-event-goes-through-the-middleware-and-is-awaited.md +1 -1
  203. package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +1 -1
  204. package/knowledge/decisions/internals/the-per-invocation-rpc-view-is-a-class.md +5 -5
  205. package/knowledge/decisions/internals/the-transcript-event-is-sent-ahead-of-the-run.md +2 -2
  206. package/knowledge/decisions/internals/thread-history-records-the-transcript-not-the-audio.md +2 -2
  207. package/knowledge/decisions/internals/voice-output-speaks-unless-voice-input-explicitly-says-otherwise.md +1 -1
  208. package/knowledge/decisions/security/{ai-agent-approval-forwarding-requires-a-symbol-brand.md → agent-approval-forwarding-requires-a-symbol-brand.md} +3 -3
  209. package/knowledge/decisions/security/{ai-agent-credential-requests-are-symbol-branded.md → agent-credential-requests-are-symbol-branded.md} +4 -4
  210. 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
  211. package/knowledge/decisions/security/{ai-agent-ownership-failures-never-echo-the-resource.md → agent-ownership-failures-never-echo-the-resource.md} +2 -2
  212. package/knowledge/decisions/security/{ai-agent-resume-re-runs-the-authorization-gate.md → agent-resume-re-runs-the-authorization-gate.md} +4 -4
  213. package/knowledge/decisions/security/{ai-agent-sessionless-deployments-have-no-thread-ownership.md → agent-sessionless-deployments-have-no-thread-ownership.md} +5 -5
  214. package/knowledge/decisions/security/{ai-agent-thread-ownership-composes-the-session-principal.md → agent-thread-ownership-composes-the-session-principal.md} +2 -2
  215. 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
  216. package/knowledge/decisions/security/an-agent-approval-is-claimed-before-the-tool-runs.md +3 -3
  217. package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +3 -3
  218. package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +20 -13
  219. package/knowledge/decisions/security/index.md +1 -2
  220. package/package.json +4 -3
  221. package/scripts/generate-api-report.mts +32 -8
  222. package/src/agent-naming.test.ts +68 -0
  223. package/src/ecosystem/agent-scorer.ts +24 -0
  224. package/src/ecosystem/agent.ts +42 -0
  225. package/src/ecosystem/channel/local.ts +1 -0
  226. package/src/ecosystem/channel.ts +22 -0
  227. package/src/ecosystem/cli/channel.ts +25 -0
  228. package/src/ecosystem/cli.ts +21 -0
  229. package/src/ecosystem/credential.ts +10 -0
  230. package/src/ecosystem/dev.ts +12 -0
  231. package/src/ecosystem/function.ts +28 -0
  232. package/src/ecosystem/gateway.ts +4 -0
  233. package/src/ecosystem/hmac.ts +1 -0
  234. package/src/ecosystem/http.ts +22 -0
  235. package/src/ecosystem/mcp.ts +17 -0
  236. package/src/ecosystem/middleware.ts +27 -0
  237. package/src/ecosystem/node-host-resolver.ts +1 -0
  238. package/src/ecosystem/node.ts +5 -0
  239. package/src/ecosystem/oauth2.ts +4 -0
  240. package/src/ecosystem/persona.ts +30 -0
  241. package/src/ecosystem/queue.ts +23 -0
  242. package/src/ecosystem/remote.ts +9 -0
  243. package/src/ecosystem/role.ts +13 -0
  244. package/src/ecosystem/rpc.ts +7 -0
  245. package/src/ecosystem/safe-fetch.ts +8 -0
  246. package/src/ecosystem/scenario.ts +32 -0
  247. package/src/ecosystem/scheduler.ts +5 -0
  248. package/src/ecosystem/schema.ts +1 -0
  249. package/src/ecosystem/scope.ts +14 -0
  250. package/src/ecosystem/secret.ts +15 -0
  251. package/src/ecosystem/services/istanbul-coverage.ts +1 -0
  252. package/src/ecosystem/services/local-content-request-handler.ts +16 -0
  253. package/src/ecosystem/services/local-content.ts +1 -0
  254. package/src/ecosystem/services/v8-coverage.ts +1 -0
  255. package/src/ecosystem/services.ts +82 -0
  256. package/src/ecosystem/testing.ts +8 -0
  257. package/src/ecosystem/trigger.ts +7 -0
  258. package/src/ecosystem/types.ts +34 -0
  259. package/src/ecosystem/variable.ts +14 -0
  260. package/src/ecosystem/virtual-user.ts +48 -0
  261. package/src/ecosystem/workflow.ts +68 -0
  262. package/src/index.ts +8 -19
  263. package/src/pikku-state.ts +3 -3
  264. package/src/public-surface.json +173 -68
  265. package/src/public-surface.json.README +20 -2
  266. package/src/public-surface.test.ts +31 -3
  267. package/src/services/{ai-run-state-service.ts → agent-run-state-service.ts} +5 -5
  268. package/src/services/{ai-agent-runner-service.ts → agent-runner-service.ts} +18 -18
  269. package/src/services/{ai-storage-service.ts → agent-storage-service.ts} +7 -7
  270. package/src/services/http-personas-converse.test.ts +3 -3
  271. package/src/services/http-personas.ts +4 -4
  272. package/src/services/{in-memory-ai-run-state-service.ts → in-memory-agent-run-state-service.ts} +7 -7
  273. package/src/services/index.ts +9 -9
  274. package/src/services/meta-service.ts +3 -3
  275. package/src/testing/service-tests/agent-run-service-tests.ts +4 -4
  276. package/src/testing/service-tests/{ai-storage-service-tests.ts → agent-storage-service-tests.ts} +8 -8
  277. package/src/testing/service-tests.ts +10 -8
  278. package/src/types/core.types.ts +12 -12
  279. package/src/types/state.types.ts +6 -9
  280. package/src/wirings/actor-flow/run-conversation.test.ts +2 -2
  281. package/src/wirings/actor-flow/run-conversation.ts +7 -9
  282. package/src/wirings/{ai-agent/ai-agent-agui.test.ts → agent/agent-agui.test.ts} +126 -105
  283. package/src/wirings/{ai-agent/ai-agent-agui.ts → agent/agent-agui.ts} +7 -7
  284. package/src/wirings/{ai-agent/ai-agent-authorization.test.ts → agent/agent-authorization.test.ts} +6 -6
  285. package/src/wirings/{ai-agent/ai-agent-finalize.test.ts → agent/agent-finalize.test.ts} +17 -16
  286. package/src/wirings/{ai-agent/ai-agent-finalize.ts → agent/agent-finalize.ts} +22 -22
  287. package/src/wirings/{ai-agent/ai-agent-helpers.test.ts → agent/agent-helpers.test.ts} +1 -1
  288. package/src/wirings/{ai-agent/ai-agent-helpers.ts → agent/agent-helpers.ts} +1 -1
  289. package/src/wirings/{ai-agent/ai-agent-interrupt.test.ts → agent/agent-interrupt.test.ts} +67 -77
  290. package/src/wirings/{ai-agent/ai-agent-interrupt.ts → agent/agent-interrupt.ts} +5 -5
  291. package/src/wirings/{ai-agent/ai-agent-memory.test.ts → agent/agent-memory.test.ts} +12 -12
  292. package/src/wirings/{ai-agent/ai-agent-memory.ts → agent/agent-memory.ts} +36 -36
  293. package/src/wirings/{ai-agent/ai-agent-model-config.test.ts → agent/agent-model-config.test.ts} +2 -5
  294. package/src/wirings/{ai-agent/ai-agent-model-config.ts → agent/agent-model-config.ts} +1 -1
  295. package/src/wirings/{ai-agent/ai-agent-prepare.test.ts → agent/agent-prepare.test.ts} +18 -18
  296. package/src/wirings/{ai-agent/ai-agent-prepare.ts → agent/agent-prepare.ts} +52 -51
  297. package/src/wirings/{ai-agent/ai-agent-registry.test.ts → agent/agent-registry.test.ts} +49 -43
  298. package/src/wirings/{ai-agent/ai-agent-registry.ts → agent/agent-registry.ts} +14 -14
  299. package/src/wirings/{ai-agent/ai-agent-resume-authorization.test.ts → agent/agent-resume-authorization.test.ts} +18 -18
  300. package/src/wirings/{ai-agent → agent}/agent-rpc.ts +16 -20
  301. package/src/wirings/{ai-agent/ai-agent-runner.test.ts → agent/agent-runner.test.ts} +105 -106
  302. package/src/wirings/{ai-agent/ai-agent-runner.ts → agent/agent-runner.ts} +90 -80
  303. package/src/wirings/{ai-agent/ai-agent-stream-output-hooks.test.ts → agent/agent-stream-output-hooks.test.ts} +25 -25
  304. package/src/wirings/{ai-agent/ai-agent-stream.test.ts → agent/agent-stream.test.ts} +147 -143
  305. package/src/wirings/{ai-agent/ai-agent-stream.ts → agent/agent-stream.ts} +147 -146
  306. package/src/wirings/{ai-agent/ai-agent-thread-ownership.test.ts → agent/agent-thread-ownership.test.ts} +24 -28
  307. package/src/wirings/{ai-agent/ai-agent-turn.test.ts → agent/agent-turn.test.ts} +3 -5
  308. package/src/wirings/{ai-agent/ai-agent-turn.ts → agent/agent-turn.ts} +7 -7
  309. package/src/wirings/{ai-agent/ai-agent.types.ts → agent/agent.types.ts} +51 -48
  310. package/src/wirings/agent/index.ts +56 -0
  311. package/src/wirings/{ai-agent → agent}/voice-input.test.ts +15 -15
  312. package/src/wirings/{ai-agent → agent}/voice-input.ts +11 -11
  313. package/src/wirings/{ai-agent → agent}/voice-output.test.ts +23 -23
  314. package/src/wirings/{ai-agent → agent}/voice-output.ts +11 -11
  315. package/src/wirings/{ai-scorer/ai-scorer-grade.test.ts → agent-scorer/agent-scorer-grade.test.ts} +8 -8
  316. package/src/wirings/{ai-scorer/ai-scorer-grade.ts → agent-scorer/agent-scorer-grade.ts} +9 -9
  317. package/src/wirings/{ai-scorer/ai-scorer-judge.test.ts → agent-scorer/agent-scorer-judge.test.ts} +11 -14
  318. package/src/wirings/{ai-scorer/ai-scorer-judge.ts → agent-scorer/agent-scorer-judge.ts} +11 -11
  319. package/src/wirings/{ai-scorer/ai-scorer-live.test.ts → agent-scorer/agent-scorer-live.test.ts} +11 -11
  320. package/src/wirings/{ai-scorer/ai-scorer-live.ts → agent-scorer/agent-scorer-live.ts} +3 -3
  321. package/src/wirings/{ai-scorer/ai-scorer-registry.ts → agent-scorer/agent-scorer-registry.ts} +11 -8
  322. package/src/wirings/{ai-scorer/ai-scorer-sampling.test.ts → agent-scorer/agent-scorer-sampling.test.ts} +1 -1
  323. package/src/wirings/{ai-scorer/ai-scorer-snapshots.test.ts → agent-scorer/agent-scorer-snapshots.test.ts} +2 -2
  324. package/src/wirings/{ai-scorer/ai-scorer-snapshots.ts → agent-scorer/agent-scorer-snapshots.ts} +1 -1
  325. package/src/wirings/{ai-scorer/ai-scorer-worker.test.ts → agent-scorer/agent-scorer-worker.test.ts} +15 -15
  326. package/src/wirings/{ai-scorer/ai-scorer-worker.ts → agent-scorer/agent-scorer-worker.ts} +9 -7
  327. package/src/wirings/{ai-scorer/ai-scorer.ts → agent-scorer/agent-scorer.ts} +7 -7
  328. package/src/wirings/{ai-scorer/ai-scorer.types.ts → agent-scorer/agent-scorer.types.ts} +6 -6
  329. package/src/wirings/agent-scorer/index.ts +22 -0
  330. package/src/wirings/channel/channel-rpc.types.ts +2 -2
  331. package/src/wirings/rpc/rpc-runner.ts +2 -2
  332. package/src/wirings/rpc/rpc-types.ts +1 -1
  333. package/src/wirings/virtual-user/prepare-virtual-user-run.ts +1 -1
  334. package/src/wirings/virtual-user/run-virtual-user.test.ts +2 -2
  335. package/src/wirings/virtual-user/run-virtual-user.ts +3 -3
  336. package/src/wirings/virtual-user/virtual-user-agents.ts +1 -1
  337. package/src/wirings/workflow/run-timeline.ts +1 -1
  338. package/src/wirings-stay-decoupled.test.ts +3 -3
  339. package/tsconfig.tsbuildinfo +1 -1
  340. package/src/wirings/ai-agent/index.ts +0 -65
  341. package/src/wirings/ai-scorer/index.ts +0 -24
  342. /package/src/wirings/{ai-agent/ai-agent-utils.ts → agent/agent-utils.ts} +0 -0
  343. /package/src/wirings/{ai-scorer/ai-scorer-sampling.ts → agent-scorer/agent-scorer-sampling.ts} +0 -0
@@ -1,12 +1,12 @@
1
1
  import { describe, it, mock } from 'node:test'
2
2
  import assert from 'node:assert/strict'
3
3
  import { EventSchemas } from '@ag-ui/core'
4
- import { wrapChannelWithAGUI } from './ai-agent-agui.js'
5
- import type { AIStreamChannel, AIStreamEvent } from './ai-agent.types.js'
4
+ import { wrapChannelWithAGUI } from './agent-agui.js'
5
+ import type { AgentStreamChannel, AgentStreamEvent } from './agent.types.js'
6
6
 
7
- function makeChannel(): { channel: AIStreamChannel; events: unknown[] } {
7
+ function makeChannel(): { channel: AgentStreamChannel; events: unknown[] } {
8
8
  const events: unknown[] = []
9
- const channel: AIStreamChannel = {
9
+ const channel: AgentStreamChannel = {
10
10
  channelId: 'test-id',
11
11
  openingData: null,
12
12
  state: 'open',
@@ -39,9 +39,9 @@ describe('wrapChannelWithAGUI — text streaming', () => {
39
39
  const { channel, events } = makeChannel()
40
40
  const wrapped = wrapChannelWithAGUI(channel)
41
41
 
42
- wrapped.send({ type: 'text-delta', text: 'a' } as AIStreamEvent)
43
- wrapped.send({ type: 'text-delta', text: 'b' } as AIStreamEvent)
44
- wrapped.send({ type: 'text-delta', text: 'c' } as AIStreamEvent)
42
+ wrapped.send({ type: 'text-delta', text: 'a' } as AgentStreamEvent)
43
+ wrapped.send({ type: 'text-delta', text: 'b' } as AgentStreamEvent)
44
+ wrapped.send({ type: 'text-delta', text: 'c' } as AgentStreamEvent)
45
45
 
46
46
  assert.equal(
47
47
  events.filter((e: any) => e.type === 'TEXT_MESSAGE_START').length,
@@ -57,9 +57,9 @@ describe('wrapChannelWithAGUI — text streaming', () => {
57
57
  const { channel, events } = makeChannel()
58
58
  const wrapped = wrapChannelWithAGUI(channel)
59
59
 
60
- wrapped.send({ type: 'text-delta', text: 'hello' } as AIStreamEvent)
61
- wrapped.send({ type: 'text-delta', text: ' world' } as AIStreamEvent)
62
- wrapped.send({ type: 'done' } as AIStreamEvent)
60
+ wrapped.send({ type: 'text-delta', text: 'hello' } as AgentStreamEvent)
61
+ wrapped.send({ type: 'text-delta', text: ' world' } as AgentStreamEvent)
62
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
63
63
 
64
64
  const start = find(events, 'TEXT_MESSAGE_START')
65
65
  const end = find(events, 'TEXT_MESSAGE_END')
@@ -79,8 +79,8 @@ describe('wrapChannelWithAGUI — text streaming', () => {
79
79
  const { channel, events } = makeChannel()
80
80
  const wrapped = wrapChannelWithAGUI(channel)
81
81
 
82
- wrapped.send({ type: 'text-delta', text: 'hi' } as AIStreamEvent)
83
- wrapped.send({ type: 'done' } as AIStreamEvent)
82
+ wrapped.send({ type: 'text-delta', text: 'hi' } as AgentStreamEvent)
83
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
84
84
 
85
85
  assert.ok(find(events, 'TEXT_MESSAGE_END'))
86
86
  })
@@ -89,8 +89,8 @@ describe('wrapChannelWithAGUI — text streaming', () => {
89
89
  const { channel, events } = makeChannel()
90
90
  const wrapped = wrapChannelWithAGUI(channel)
91
91
 
92
- wrapped.send({ type: 'text-delta', text: 'partial' } as AIStreamEvent)
93
- wrapped.send({ type: 'error', message: 'oops' } as AIStreamEvent)
92
+ wrapped.send({ type: 'text-delta', text: 'partial' } as AgentStreamEvent)
93
+ wrapped.send({ type: 'error', message: 'oops' } as AgentStreamEvent)
94
94
 
95
95
  const t = types(events)
96
96
  assert.ok(t.indexOf('TEXT_MESSAGE_END') < t.indexOf('RUN_ERROR'))
@@ -100,7 +100,7 @@ describe('wrapChannelWithAGUI — text streaming', () => {
100
100
  const { channel, events } = makeChannel()
101
101
  const wrapped = wrapChannelWithAGUI(channel)
102
102
 
103
- wrapped.send({ type: 'done' } as AIStreamEvent)
103
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
104
104
 
105
105
  assert.equal(
106
106
  events.filter((e: any) => e.type === 'TEXT_MESSAGE_END').length,
@@ -114,8 +114,14 @@ describe('wrapChannelWithAGUI — reasoning streaming', () => {
114
114
  const { channel, events } = makeChannel()
115
115
  const wrapped = wrapChannelWithAGUI(channel)
116
116
 
117
- wrapped.send({ type: 'reasoning-delta', text: 'step 1' } as AIStreamEvent)
118
- wrapped.send({ type: 'reasoning-delta', text: 'step 2' } as AIStreamEvent)
117
+ wrapped.send({
118
+ type: 'reasoning-delta',
119
+ text: 'step 1',
120
+ } as AgentStreamEvent)
121
+ wrapped.send({
122
+ type: 'reasoning-delta',
123
+ text: 'step 2',
124
+ } as AgentStreamEvent)
119
125
 
120
126
  assert.equal(
121
127
  events.filter((e: any) => e.type === 'THINKING_TEXT_MESSAGE_START')
@@ -133,8 +139,11 @@ describe('wrapChannelWithAGUI — reasoning streaming', () => {
133
139
  const { channel, events } = makeChannel()
134
140
  const wrapped = wrapChannelWithAGUI(channel)
135
141
 
136
- wrapped.send({ type: 'reasoning-delta', text: 'thinking' } as AIStreamEvent)
137
- wrapped.send({ type: 'text-delta', text: 'answer' } as AIStreamEvent)
142
+ wrapped.send({
143
+ type: 'reasoning-delta',
144
+ text: 'thinking',
145
+ } as AgentStreamEvent)
146
+ wrapped.send({ type: 'text-delta', text: 'answer' } as AgentStreamEvent)
138
147
 
139
148
  const t = types(events)
140
149
  assert.ok(t.includes('THINKING_TEXT_MESSAGE_END'))
@@ -150,13 +159,13 @@ describe('wrapChannelWithAGUI — reasoning streaming', () => {
150
159
  wrapped.send({
151
160
  type: 'reasoning-delta',
152
161
  text: 'reasoning',
153
- } as AIStreamEvent)
162
+ } as AgentStreamEvent)
154
163
  wrapped.send({
155
164
  type: 'tool-call',
156
165
  toolCallId: 'tc1',
157
166
  toolName: 'fn',
158
167
  args: {},
159
- } as AIStreamEvent)
168
+ } as AgentStreamEvent)
160
169
 
161
170
  const t = types(events)
162
171
  assert.ok(
@@ -168,8 +177,11 @@ describe('wrapChannelWithAGUI — reasoning streaming', () => {
168
177
  const { channel, events } = makeChannel()
169
178
  const wrapped = wrapChannelWithAGUI(channel)
170
179
 
171
- wrapped.send({ type: 'reasoning-delta', text: 'reason' } as AIStreamEvent)
172
- wrapped.send({ type: 'done' } as AIStreamEvent)
180
+ wrapped.send({
181
+ type: 'reasoning-delta',
182
+ text: 'reason',
183
+ } as AgentStreamEvent)
184
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
173
185
 
174
186
  const start = find(events, 'THINKING_TEXT_MESSAGE_START')
175
187
  const end = find(events, 'THINKING_TEXT_MESSAGE_END')
@@ -186,13 +198,13 @@ describe('wrapChannelWithAGUI — tool calls', () => {
186
198
  const { channel, events } = makeChannel()
187
199
  const wrapped = wrapChannelWithAGUI(channel)
188
200
 
189
- wrapped.send({ type: 'text-delta', text: 'preamble' } as AIStreamEvent)
201
+ wrapped.send({ type: 'text-delta', text: 'preamble' } as AgentStreamEvent)
190
202
  wrapped.send({
191
203
  type: 'tool-call',
192
204
  toolCallId: 'tc1',
193
205
  toolName: 'myTool',
194
206
  args: { x: 1 },
195
- } as AIStreamEvent)
207
+ } as AgentStreamEvent)
196
208
 
197
209
  const t = types(events)
198
210
  assert.ok(t.indexOf('TEXT_MESSAGE_END') < t.indexOf('TOOL_CALL_START'))
@@ -207,7 +219,7 @@ describe('wrapChannelWithAGUI — tool calls', () => {
207
219
  toolCallId: 'tc1',
208
220
  toolName: 'search',
209
221
  args: { q: 'hi' },
210
- } as AIStreamEvent)
222
+ } as AgentStreamEvent)
211
223
 
212
224
  const t = types(events)
213
225
  const startIdx = t.indexOf('TOOL_CALL_START')
@@ -227,7 +239,7 @@ describe('wrapChannelWithAGUI — tool calls', () => {
227
239
  toolCallId: 'abc',
228
240
  toolName: 'myFunc',
229
241
  args: { n: 42 },
230
- } as AIStreamEvent)
242
+ } as AgentStreamEvent)
231
243
 
232
244
  const start = find(events, 'TOOL_CALL_START')
233
245
  const args = find(events, 'TOOL_CALL_ARGS')
@@ -248,13 +260,13 @@ describe('wrapChannelWithAGUI — tool calls', () => {
248
260
  toolCallId: 'tc1',
249
261
  toolName: 'fn1',
250
262
  args: {},
251
- } as AIStreamEvent)
263
+ } as AgentStreamEvent)
252
264
  wrapped.send({
253
265
  type: 'tool-call',
254
266
  toolCallId: 'tc2',
255
267
  toolName: 'fn2',
256
268
  args: {},
257
- } as AIStreamEvent)
269
+ } as AgentStreamEvent)
258
270
 
259
271
  const starts = (events as any[]).filter((e) => e.type === 'TOOL_CALL_START')
260
272
  const ends = (events as any[]).filter((e) => e.type === 'TOOL_CALL_END')
@@ -273,7 +285,7 @@ describe('wrapChannelWithAGUI — tool calls', () => {
273
285
  toolCallId: 'tc1',
274
286
  toolName: 'fn',
275
287
  result: { ok: true },
276
- } as AIStreamEvent)
288
+ } as AgentStreamEvent)
277
289
 
278
290
  const r = find(events, 'TOOL_CALL_RESULT')
279
291
  assert.equal(r.content, '{"ok":true}')
@@ -289,7 +301,7 @@ describe('wrapChannelWithAGUI — tool calls', () => {
289
301
  toolCallId: 'tc1',
290
302
  toolName: 'fn',
291
303
  result: 'plain text',
292
- } as AIStreamEvent)
304
+ } as AgentStreamEvent)
293
305
 
294
306
  const r = find(events, 'TOOL_CALL_RESULT')
295
307
  assert.equal(r.content, 'plain text')
@@ -305,8 +317,8 @@ describe('wrapChannelWithAGUI — run lifecycle', () => {
305
317
  type: 'usage',
306
318
  tokens: { input: 100, output: 50 },
307
319
  model: 'claude-3-5',
308
- } as AIStreamEvent)
309
- wrapped.send({ type: 'done' } as AIStreamEvent)
320
+ } as AgentStreamEvent)
321
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
310
322
 
311
323
  const f = find(events, 'RUN_FINISHED')
312
324
  assert.ok(f)
@@ -324,8 +336,8 @@ describe('wrapChannelWithAGUI — run lifecycle', () => {
324
336
  type: 'usage',
325
337
  tokens: { input: 1, output: 1 },
326
338
  model: 'm',
327
- } as AIStreamEvent)
328
- wrapped.send({ type: 'done' } as AIStreamEvent)
339
+ } as AgentStreamEvent)
340
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
329
341
 
330
342
  assert.equal(events.filter((e: any) => e.type === 'RUN_FINISHED').length, 1)
331
343
  })
@@ -334,7 +346,7 @@ describe('wrapChannelWithAGUI — run lifecycle', () => {
334
346
  const { channel, events } = makeChannel()
335
347
  const wrapped = wrapChannelWithAGUI(channel)
336
348
 
337
- wrapped.send({ type: 'done' } as AIStreamEvent)
349
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
338
350
 
339
351
  assert.ok(find(events, 'RUN_FINISHED'))
340
352
  })
@@ -343,13 +355,13 @@ describe('wrapChannelWithAGUI — run lifecycle', () => {
343
355
  const { channel, events } = makeChannel()
344
356
  const wrapped = wrapChannelWithAGUI(channel)
345
357
 
346
- wrapped.send({ type: 'text-delta', text: 'hi' } as AIStreamEvent)
358
+ wrapped.send({ type: 'text-delta', text: 'hi' } as AgentStreamEvent)
347
359
  wrapped.send({
348
360
  type: 'usage',
349
361
  tokens: { input: 1, output: 1 },
350
362
  model: 'm',
351
- } as AIStreamEvent)
352
- wrapped.send({ type: 'done' } as AIStreamEvent)
363
+ } as AgentStreamEvent)
364
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
353
365
 
354
366
  const t = types(events)
355
367
  assert.ok(t.indexOf('TEXT_MESSAGE_END') < t.indexOf('RUN_FINISHED'))
@@ -359,8 +371,11 @@ describe('wrapChannelWithAGUI — run lifecycle', () => {
359
371
  const { channel, events } = makeChannel()
360
372
  const wrapped = wrapChannelWithAGUI(channel)
361
373
 
362
- wrapped.send({ type: 'text-delta', text: 'partial' } as AIStreamEvent)
363
- wrapped.send({ type: 'error', message: 'network timeout' } as AIStreamEvent)
374
+ wrapped.send({ type: 'text-delta', text: 'partial' } as AgentStreamEvent)
375
+ wrapped.send({
376
+ type: 'error',
377
+ message: 'network timeout',
378
+ } as AgentStreamEvent)
364
379
 
365
380
  const err = find(events, 'RUN_ERROR')
366
381
  assert.ok(err)
@@ -373,8 +388,11 @@ describe('wrapChannelWithAGUI — run lifecycle', () => {
373
388
  const { channel, events } = makeChannel()
374
389
  const wrapped = wrapChannelWithAGUI(channel)
375
390
 
376
- wrapped.send({ type: 'reasoning-delta', text: 'thinking' } as AIStreamEvent)
377
- wrapped.send({ type: 'error', message: 'fail' } as AIStreamEvent)
391
+ wrapped.send({
392
+ type: 'reasoning-delta',
393
+ text: 'thinking',
394
+ } as AgentStreamEvent)
395
+ wrapped.send({ type: 'error', message: 'fail' } as AgentStreamEvent)
378
396
 
379
397
  const t = types(events)
380
398
  assert.ok(t.indexOf('THINKING_TEXT_MESSAGE_END') < t.indexOf('RUN_ERROR'))
@@ -390,7 +408,7 @@ describe('wrapChannelWithAGUI — step events', () => {
390
408
  type: 'step-start',
391
409
  stepNumber: 1,
392
410
  agent: 'researcher',
393
- } as AIStreamEvent)
411
+ } as AgentStreamEvent)
394
412
 
395
413
  const s = find(events, 'STEP_STARTED')
396
414
  assert.ok(s)
@@ -403,7 +421,7 @@ describe('wrapChannelWithAGUI — step events', () => {
403
421
  const { channel, events } = makeChannel()
404
422
  const wrapped = wrapChannelWithAGUI(channel)
405
423
 
406
- wrapped.send({ type: 'step-start', stepNumber: 1 } as AIStreamEvent)
424
+ wrapped.send({ type: 'step-start', stepNumber: 1 } as AgentStreamEvent)
407
425
 
408
426
  const s = find(events, 'STEP_STARTED')
409
427
  assert.ok(s)
@@ -424,7 +442,7 @@ describe('wrapChannelWithAGUI — Pikku CUSTOM events', () => {
424
442
  reason: 'irreversible action',
425
443
  agent: 'admin-agent',
426
444
  session: 'sess-1',
427
- } as AIStreamEvent)
445
+ } as AgentStreamEvent)
428
446
 
429
447
  const c = find(events, 'CUSTOM', 'pikku:approval-request')
430
448
  assert.ok(c)
@@ -440,13 +458,16 @@ describe('wrapChannelWithAGUI — Pikku CUSTOM events', () => {
440
458
  const { channel, events } = makeChannel()
441
459
  const wrapped = wrapChannelWithAGUI(channel)
442
460
 
443
- wrapped.send({ type: 'text-delta', text: 'about to ask' } as AIStreamEvent)
461
+ wrapped.send({
462
+ type: 'text-delta',
463
+ text: 'about to ask',
464
+ } as AgentStreamEvent)
444
465
  wrapped.send({
445
466
  type: 'approval-request',
446
467
  toolCallId: 'tc1',
447
468
  toolName: 'fn',
448
469
  args: {},
449
- } as AIStreamEvent)
470
+ } as AgentStreamEvent)
450
471
 
451
472
  const t = types(events)
452
473
  assert.ok(t.indexOf('TEXT_MESSAGE_END') < t.indexOf('CUSTOM'))
@@ -466,7 +487,7 @@ describe('wrapChannelWithAGUI — Pikku CUSTOM events', () => {
466
487
  connectUrl: 'https://github.com/oauth',
467
488
  runId: 'run-abc',
468
489
  agent: 'dev-agent',
469
- } as AIStreamEvent)
490
+ } as AgentStreamEvent)
470
491
 
471
492
  const c = find(events, 'CUSTOM', 'pikku:credential-request')
472
493
  assert.ok(c)
@@ -484,7 +505,7 @@ describe('wrapChannelWithAGUI — Pikku CUSTOM events', () => {
484
505
  wrapped.send({
485
506
  type: 'generative-ui',
486
507
  spec: { component: 'Chart', props: { data: [1, 2] } },
487
- } as AIStreamEvent)
508
+ } as AgentStreamEvent)
488
509
 
489
510
  const c = find(events, 'CUSTOM', 'pikku:generative-ui')
490
511
  assert.ok(c)
@@ -502,7 +523,7 @@ describe('wrapChannelWithAGUI — Pikku CUSTOM events', () => {
502
523
  type: 'data',
503
524
  name: 'search-results',
504
525
  data: [{ title: 'foo' }],
505
- } as AIStreamEvent)
526
+ } as AgentStreamEvent)
506
527
 
507
528
  const c = find(events, 'CUSTOM', 'pikku:data')
508
529
  assert.ok(c)
@@ -519,7 +540,7 @@ describe('wrapChannelWithAGUI — Pikku CUSTOM events', () => {
519
540
  agentName: 'sub-agent',
520
541
  session: 'sess-2',
521
542
  input: { query: 'hello' },
522
- } as AIStreamEvent)
543
+ } as AgentStreamEvent)
523
544
 
524
545
  const c = find(events, 'CUSTOM', 'pikku:agent-call')
525
546
  assert.ok(c)
@@ -537,7 +558,7 @@ describe('wrapChannelWithAGUI — Pikku CUSTOM events', () => {
537
558
  agentName: 'sub-agent',
538
559
  session: 'sess-2',
539
560
  result: 'done',
540
- } as AIStreamEvent)
561
+ } as AgentStreamEvent)
541
562
 
542
563
  const c = find(events, 'CUSTOM', 'pikku:agent-result')
543
564
  assert.ok(c)
@@ -553,7 +574,7 @@ describe('wrapChannelWithAGUI — Pikku CUSTOM events', () => {
553
574
  type: 'suspended',
554
575
  reason: 'rpc-missing',
555
576
  missingRpcs: ['stripe.charge'],
556
- } as AIStreamEvent)
577
+ } as AgentStreamEvent)
557
578
 
558
579
  const c = find(events, 'CUSTOM', 'pikku:suspended')
559
580
  assert.ok(c)
@@ -571,7 +592,7 @@ describe('wrapChannelWithAGUI — speech', () => {
571
592
  type: 'audio-delta',
572
593
  data: 'base64abc',
573
594
  format: 'mp3',
574
- } as AIStreamEvent)
595
+ } as AgentStreamEvent)
575
596
 
576
597
  // AG-UI has no speech event, but dropping it makes a voice agent reached
577
598
  // over HTTP inaudible: every sentence is synthesized and billed, then
@@ -585,7 +606,7 @@ describe('wrapChannelWithAGUI — speech', () => {
585
606
  const { channel, events } = makeChannel()
586
607
  const wrapped = wrapChannelWithAGUI(channel)
587
608
 
588
- wrapped.send({ type: 'audio-done' } as AIStreamEvent)
609
+ wrapped.send({ type: 'audio-done' } as AgentStreamEvent)
589
610
 
590
611
  assert.ok(find(events, 'CUSTOM', 'pikku:audio-done'))
591
612
  })
@@ -597,7 +618,7 @@ describe('wrapChannelWithAGUI — speech', () => {
597
618
  wrapped.send({
598
619
  type: 'transcript',
599
620
  text: 'what the user said',
600
- } as AIStreamEvent)
621
+ } as AgentStreamEvent)
601
622
 
602
623
  // The client sent audio, so this is the only way it learns what its own
603
624
  // turn was. Dropped, the user's message renders as an empty bubble.
@@ -610,13 +631,13 @@ describe('wrapChannelWithAGUI — speech', () => {
610
631
  const { channel, events } = makeChannel()
611
632
  const wrapped = wrapChannelWithAGUI(channel)
612
633
 
613
- wrapped.send({ type: 'text-delta', text: 'hello' } as AIStreamEvent)
634
+ wrapped.send({ type: 'text-delta', text: 'hello' } as AgentStreamEvent)
614
635
  wrapped.send({
615
636
  type: 'audio-delta',
616
637
  data: 'abc',
617
638
  format: 'mp3',
618
- } as AIStreamEvent)
619
- wrapped.send({ type: 'text-delta', text: ' there' } as AIStreamEvent)
639
+ } as AgentStreamEvent)
640
+ wrapped.send({ type: 'text-delta', text: ' there' } as AgentStreamEvent)
620
641
 
621
642
  // Audio arrives interleaved with the text it is saying. Ending the message
622
643
  // around it would render one reply as several.
@@ -786,8 +807,8 @@ describe('wrapChannelWithAGUI — AG-UI protocol conformance', () => {
786
807
  runId: 'run-1',
787
808
  })
788
809
 
789
- wrapped.send({ type: 'text-delta', text: 'hi' } as AIStreamEvent)
790
- wrapped.send({ type: 'done' } as AIStreamEvent)
810
+ wrapped.send({ type: 'text-delta', text: 'hi' } as AgentStreamEvent)
811
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
791
812
 
792
813
  const first = events[0] as any
793
814
  assert.equal(first.type, 'RUN_STARTED')
@@ -802,7 +823,7 @@ describe('wrapChannelWithAGUI — AG-UI protocol conformance', () => {
802
823
  runId: 'run-1',
803
824
  })
804
825
 
805
- wrapped.send({ type: 'done' } as AIStreamEvent)
826
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
806
827
 
807
828
  const f = find(events, 'RUN_FINISHED')
808
829
  assert.equal(f.threadId, 'thread-1')
@@ -813,35 +834,35 @@ describe('wrapChannelWithAGUI — AG-UI protocol conformance', () => {
813
834
  const { channel, events } = makeChannel()
814
835
  const wrapped = wrapChannelWithAGUI(channel)
815
836
 
816
- wrapped.send({ type: 'step-start', stepNumber: 0 } as AIStreamEvent)
837
+ wrapped.send({ type: 'step-start', stepNumber: 0 } as AgentStreamEvent)
817
838
  wrapped.send({
818
839
  type: 'tool-call',
819
840
  toolCallId: 'tc1',
820
841
  toolName: 'listTodos',
821
842
  args: {},
822
- } as AIStreamEvent)
843
+ } as AgentStreamEvent)
823
844
  wrapped.send({
824
845
  type: 'tool-result',
825
846
  toolCallId: 'tc1',
826
847
  toolName: 'listTodos',
827
848
  result: ['a'],
828
- } as AIStreamEvent)
849
+ } as AgentStreamEvent)
829
850
  wrapped.send({
830
851
  type: 'usage',
831
852
  tokens: { input: 10, output: 5 },
832
853
  model: 'gpt-4o',
833
- } as AIStreamEvent)
834
- wrapped.send({ type: 'step-start', stepNumber: 1 } as AIStreamEvent)
854
+ } as AgentStreamEvent)
855
+ wrapped.send({ type: 'step-start', stepNumber: 1 } as AgentStreamEvent)
835
856
  wrapped.send({
836
857
  type: 'text-delta',
837
858
  text: 'You have 1 todo',
838
- } as AIStreamEvent)
859
+ } as AgentStreamEvent)
839
860
  wrapped.send({
840
861
  type: 'usage',
841
862
  tokens: { input: 20, output: 8 },
842
863
  model: 'gpt-4o',
843
- } as AIStreamEvent)
844
- wrapped.send({ type: 'done' } as AIStreamEvent)
864
+ } as AgentStreamEvent)
865
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
845
866
 
846
867
  const finishes = (events as any[]).filter((e) => e.type === 'RUN_FINISHED')
847
868
  assert.equal(finishes.length, 1)
@@ -861,14 +882,14 @@ describe('wrapChannelWithAGUI — AG-UI protocol conformance', () => {
861
882
  const { channel, events } = makeChannel()
862
883
  const wrapped = wrapChannelWithAGUI(channel)
863
884
 
864
- wrapped.send({ type: 'done' } as AIStreamEvent)
885
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
865
886
  wrapped.send({
866
887
  type: 'usage',
867
888
  tokens: { input: 1, output: 1 },
868
889
  model: 'm',
869
- } as AIStreamEvent)
870
- wrapped.send({ type: 'text-delta', text: 'late' } as AIStreamEvent)
871
- wrapped.send({ type: 'done' } as AIStreamEvent)
890
+ } as AgentStreamEvent)
891
+ wrapped.send({ type: 'text-delta', text: 'late' } as AgentStreamEvent)
892
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
872
893
 
873
894
  assert.equal((events as any[]).at(-1).type, 'RUN_FINISHED')
874
895
  assert.equal(events.filter((e: any) => e.type === 'RUN_FINISHED').length, 1)
@@ -883,7 +904,7 @@ describe('wrapChannelWithAGUI — AG-UI protocol conformance', () => {
883
904
  toolCallId: 'tc1',
884
905
  toolName: 'fn',
885
906
  result: 'ok',
886
- } as AIStreamEvent)
907
+ } as AgentStreamEvent)
887
908
 
888
909
  const r = find(events, 'TOOL_CALL_RESULT')
889
910
  assert.ok(r.messageId, 'TOOL_CALL_RESULT requires a messageId')
@@ -898,7 +919,7 @@ describe('wrapChannelWithAGUI — AG-UI protocol conformance', () => {
898
919
  toolCallId: 'tc1',
899
920
  toolName: 'addTodo',
900
921
  args: { text: 'buy milk' },
901
- } as AIStreamEvent)
922
+ } as AgentStreamEvent)
902
923
 
903
924
  const t = types(events)
904
925
  const argsIdx = t.indexOf('TOOL_CALL_ARGS')
@@ -913,9 +934,9 @@ describe('wrapChannelWithAGUI — AG-UI protocol conformance', () => {
913
934
  const { channel, events } = makeChannel()
914
935
  const wrapped = wrapChannelWithAGUI(channel)
915
936
 
916
- wrapped.send({ type: 'reasoning-delta', text: 'hmm' } as AIStreamEvent)
917
- wrapped.send({ type: 'text-delta', text: 'answer' } as AIStreamEvent)
918
- wrapped.send({ type: 'done' } as AIStreamEvent)
937
+ wrapped.send({ type: 'reasoning-delta', text: 'hmm' } as AgentStreamEvent)
938
+ wrapped.send({ type: 'text-delta', text: 'answer' } as AgentStreamEvent)
939
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
919
940
 
920
941
  const t = types(events)
921
942
  assert.ok(
@@ -931,14 +952,14 @@ describe('wrapChannelWithAGUI — AG-UI protocol conformance', () => {
931
952
  const { channel, events } = makeChannel()
932
953
  const wrapped = wrapChannelWithAGUI(channel)
933
954
 
934
- wrapped.send({ type: 'step-start', stepNumber: 0 } as AIStreamEvent)
955
+ wrapped.send({ type: 'step-start', stepNumber: 0 } as AgentStreamEvent)
935
956
  wrapped.send({
936
957
  type: 'step-start',
937
958
  stepNumber: 0,
938
959
  agent: 'todoAgent',
939
- } as AIStreamEvent)
940
- wrapped.send({ type: 'step-start', stepNumber: 1 } as AIStreamEvent)
941
- wrapped.send({ type: 'done' } as AIStreamEvent)
960
+ } as AgentStreamEvent)
961
+ wrapped.send({ type: 'step-start', stepNumber: 1 } as AgentStreamEvent)
962
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
942
963
 
943
964
  const startNames = (events as any[])
944
965
  .filter((e) => e.type === 'STEP_STARTED')
@@ -954,7 +975,7 @@ describe('wrapChannelWithAGUI — AG-UI protocol conformance', () => {
954
975
  runId: 'r1',
955
976
  })
956
977
 
957
- const send = (e: any) => wrapped.send(e as AIStreamEvent)
978
+ const send = (e: any) => wrapped.send(e as AgentStreamEvent)
958
979
  send({ type: 'step-start', stepNumber: 0 })
959
980
  send({
960
981
  type: 'tool-call',
@@ -1034,13 +1055,13 @@ describe('wrapChannelWithAGUI — AG-UI protocol conformance', () => {
1034
1055
  const { channel, events } = makeChannel()
1035
1056
  const wrapped = wrapChannelWithAGUI(channel)
1036
1057
 
1037
- wrapped.send({ type: 'step-start', stepNumber: 0 } as AIStreamEvent)
1058
+ wrapped.send({ type: 'step-start', stepNumber: 0 } as AgentStreamEvent)
1038
1059
  wrapped.send({
1039
1060
  type: 'tool-call',
1040
1061
  toolCallId: 'tc1',
1041
1062
  toolName: 'addTodo',
1042
1063
  args: { text: 'x' },
1043
- } as AIStreamEvent)
1064
+ } as AgentStreamEvent)
1044
1065
  wrapped.send({
1045
1066
  type: 'approval-request',
1046
1067
  toolCallId: 'tc1',
@@ -1048,8 +1069,8 @@ describe('wrapChannelWithAGUI — AG-UI protocol conformance', () => {
1048
1069
  args: { text: 'x' },
1049
1070
  reason: 'Add a todo',
1050
1071
  runId: 'run-9',
1051
- } as AIStreamEvent)
1052
- wrapped.send({ type: 'done' } as AIStreamEvent)
1072
+ } as AgentStreamEvent)
1073
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
1053
1074
 
1054
1075
  assertClientAcceptsStream(events as any[])
1055
1076
  const c = find(events, 'CUSTOM', 'pikku:approval-request')
@@ -1067,33 +1088,33 @@ describe('wrapChannelWithAGUI — realistic full turn', () => {
1067
1088
  wrapped.send({
1068
1089
  type: 'reasoning-delta',
1069
1090
  text: 'let me search',
1070
- } as AIStreamEvent)
1091
+ } as AgentStreamEvent)
1071
1092
  wrapped.send({
1072
1093
  type: 'text-delta',
1073
1094
  text: 'I will look that up.',
1074
- } as AIStreamEvent)
1095
+ } as AgentStreamEvent)
1075
1096
  wrapped.send({
1076
1097
  type: 'tool-call',
1077
1098
  toolCallId: 'tc1',
1078
1099
  toolName: 'search',
1079
1100
  args: { q: 'pikku' },
1080
- } as AIStreamEvent)
1101
+ } as AgentStreamEvent)
1081
1102
  wrapped.send({
1082
1103
  type: 'tool-result',
1083
1104
  toolCallId: 'tc1',
1084
1105
  toolName: 'search',
1085
1106
  result: 'found it',
1086
- } as AIStreamEvent)
1107
+ } as AgentStreamEvent)
1087
1108
  wrapped.send({
1088
1109
  type: 'text-delta',
1089
1110
  text: 'Here is what I found.',
1090
- } as AIStreamEvent)
1111
+ } as AgentStreamEvent)
1091
1112
  wrapped.send({
1092
1113
  type: 'usage',
1093
1114
  tokens: { input: 200, output: 80 },
1094
1115
  model: 'gpt-4o',
1095
- } as AIStreamEvent)
1096
- wrapped.send({ type: 'done' } as AIStreamEvent)
1116
+ } as AgentStreamEvent)
1117
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
1097
1118
 
1098
1119
  const t = types(events)
1099
1120
  assert.ok(t.includes('THINKING_TEXT_MESSAGE_START'))
@@ -1119,8 +1140,8 @@ describe('wrapChannelWithAGUI — late-bound runId', () => {
1119
1140
  })
1120
1141
 
1121
1142
  runId = 'run-from-state-service'
1122
- wrapped.send({ type: 'text-delta', text: 'hi' } as AIStreamEvent)
1123
- wrapped.send({ type: 'done' } as AIStreamEvent)
1143
+ wrapped.send({ type: 'text-delta', text: 'hi' } as AgentStreamEvent)
1144
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
1124
1145
 
1125
1146
  const started = find(events, 'RUN_STARTED')
1126
1147
  const finished = find(events, 'RUN_FINISHED')
@@ -1133,13 +1154,13 @@ describe('wrapChannelWithAGUI — late-bound runId', () => {
1133
1154
  wrapChannelWithAGUI(explicit.channel, {
1134
1155
  runId: 'explicit-run',
1135
1156
  getRunId: () => 'ignored',
1136
- }).send({ type: 'done' } as AIStreamEvent)
1157
+ }).send({ type: 'done' } as AgentStreamEvent)
1137
1158
  assert.equal(find(explicit.events, 'RUN_STARTED').runId, 'explicit-run')
1138
1159
 
1139
1160
  const fallback = makeChannel()
1140
1161
  wrapChannelWithAGUI(fallback.channel, {
1141
1162
  getRunId: () => undefined,
1142
- }).send({ type: 'done' } as AIStreamEvent)
1163
+ }).send({ type: 'done' } as AgentStreamEvent)
1143
1164
  const started = find(fallback.events, 'RUN_STARTED')
1144
1165
  assert.ok(started.runId)
1145
1166
  assert.equal(started.runId, find(fallback.events, 'RUN_FINISHED').runId)
@@ -1154,13 +1175,13 @@ describe('wrapChannelWithAGUI — interruption', () => {
1154
1175
  wrapped.send({
1155
1176
  type: 'text-delta',
1156
1177
  text: 'I will delete the ',
1157
- } as AIStreamEvent)
1178
+ } as AgentStreamEvent)
1158
1179
  wrapped.send({
1159
1180
  type: 'interrupted',
1160
1181
  runId: 'r',
1161
1182
  text: 'I will delete the ',
1162
1183
  reason: 'speech',
1163
- } as AIStreamEvent)
1184
+ } as AgentStreamEvent)
1164
1185
 
1165
1186
  // Leaving TEXT_MESSAGE_END unsent would strand the assistant bubble in a
1166
1187
  // streaming state that never resolves.
@@ -1177,14 +1198,14 @@ describe('wrapChannelWithAGUI — interruption', () => {
1177
1198
  const { channel, events } = makeChannel()
1178
1199
  const wrapped = wrapChannelWithAGUI(channel, { threadId: 't', runId: 'r' })
1179
1200
 
1180
- wrapped.send({ type: 'text-delta', text: 'partial' } as AIStreamEvent)
1201
+ wrapped.send({ type: 'text-delta', text: 'partial' } as AgentStreamEvent)
1181
1202
  wrapped.send({
1182
1203
  type: 'interrupted',
1183
1204
  runId: 'r',
1184
1205
  text: 'partial',
1185
1206
  reason: 'speech',
1186
- } as AIStreamEvent)
1187
- wrapped.send({ type: 'done' } as AIStreamEvent)
1207
+ } as AgentStreamEvent)
1208
+ wrapped.send({ type: 'done' } as AgentStreamEvent)
1188
1209
 
1189
1210
  assert.equal(events.filter((e: any) => e.type === 'RUN_FINISHED').length, 1)
1190
1211
  assert.equal(events.filter((e: any) => e.type === 'RUN_ERROR').length, 0)