@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
@@ -70,7 +70,7 @@
70
70
  "isVersionedId",
71
71
  "parseDurationString",
72
72
  "parseVersionedId",
73
- "pikkuAIMiddleware",
73
+ "pikkuAgentMiddleware",
74
74
  "pikkuApprovalDescription",
75
75
  "pikkuAuth",
76
76
  "pikkuCLIRender",
@@ -173,9 +173,7 @@
173
173
  "reconstructStateAt"
174
174
  ],
175
175
  "./workflow/types": [],
176
- "./actor-flow": [
177
- "runConversation"
178
- ],
176
+ "./actor-flow": ["runConversation"],
179
177
  "./virtual-user": [
180
178
  "DISPOSITIONS",
181
179
  "IntentStack",
@@ -218,9 +216,7 @@
218
216
  "wireHTTP",
219
217
  "wireHTTPRoutes"
220
218
  ],
221
- "./remote": [
222
- "buildRemoteHeaders"
223
- ],
219
+ "./remote": ["buildRemoteHeaders"],
224
220
  "./queue": [
225
221
  "QueueJobDiscardedError",
226
222
  "QueueJobFailedError",
@@ -235,11 +231,7 @@
235
231
  "runScheduledTask",
236
232
  "wireScheduler"
237
233
  ],
238
- "./trigger": [
239
- "PikkuTriggerService",
240
- "wireTrigger",
241
- "wireTriggerSource"
242
- ],
234
+ "./trigger": ["PikkuTriggerService", "wireTrigger", "wireTriggerSource"],
243
235
  "./rpc": [
244
236
  "PikkuRPCService",
245
237
  "RPCNotFoundError",
@@ -257,10 +249,7 @@
257
249
  "safeFetch",
258
250
  "setDefaultHostResolver"
259
251
  ],
260
- "./node-host-resolver": [
261
- "installNodeHostResolver",
262
- "nodeHostResolver"
263
- ],
252
+ "./node-host-resolver": ["installNodeHostResolver", "nodeHostResolver"],
264
253
  "./mcp": [
265
254
  "MCPEndpointRegistry",
266
255
  "MCPError",
@@ -273,28 +262,28 @@
273
262
  "wireMCPPrompt",
274
263
  "wireMCPResource"
275
264
  ],
276
- "./ai-agent": [
265
+ "./agent": [
277
266
  "AgentInterruptedError",
278
267
  "NoSpeechDetectedError",
279
268
  "SPOKEN_TRANSCRIPT",
280
269
  "SPOKEN_TURN",
281
270
  "ToolApprovalRequired",
282
271
  "ToolCredentialRequired",
283
- "addAIAgent",
272
+ "addAgent",
284
273
  "agent",
285
274
  "agentApprove",
286
275
  "agentInterrupt",
287
276
  "agentResume",
288
277
  "agentStream",
289
278
  "canAccessThread",
290
- "interruptAIAgent",
279
+ "interruptAgent",
291
280
  "isOwnedByPrincipal",
292
281
  "resolveModelAlias",
293
- "resumeAIAgent",
294
- "resumeAIAgentSync",
295
- "runAIAgent",
282
+ "resumeAgent",
283
+ "resumeAgentSync",
284
+ "runAgent",
296
285
  "signalRunInterrupt",
297
- "streamAIAgent",
286
+ "streamAgent",
298
287
  "threadOwnerConstraint",
299
288
  "unspeakableScripts",
300
289
  "voiceForText",
@@ -302,16 +291,16 @@
302
291
  "voiceOutput",
303
292
  "wrapChannelWithAGUI"
304
293
  ],
305
- "./ai-scorer": [
306
- "addAIScorer",
294
+ "./agent-scorer": [
295
+ "addAgentScorer",
307
296
  "enableScoreSnapshots",
308
- "getAIScorers",
309
- "getAIScorersMeta",
297
+ "getAgentScorers",
298
+ "getAgentScorersMeta",
310
299
  "getScoreSnapshot",
311
300
  "gradeRun",
312
- "pikkuAIJudge",
313
- "pikkuAIScorer",
314
- "wireAIScorerQueueWorkers"
301
+ "pikkuAgentJudge",
302
+ "pikkuAgentScorer",
303
+ "wireAgentScorerQueueWorkers"
315
304
  ],
316
305
  "./gateway": [
317
306
  "createListenerMessageHandler",
@@ -328,10 +317,7 @@
328
317
  "runCLICommand",
329
318
  "wireCLI"
330
319
  ],
331
- "./cli/command-parser": [
332
- "generateCommandHelp",
333
- "parseCLIArguments"
334
- ],
320
+ "./cli/command-parser": ["generateCommandHelp", "parseCLIArguments"],
335
321
  "./cli/channel": [
336
322
  "executeCLIViaChannel",
337
323
  "executeRawCLIViaChannel",
@@ -368,14 +354,8 @@
368
354
  "validateAndBuildPersonasMeta",
369
355
  "verifyPersonaRoles"
370
356
  ],
371
- "./secret": [
372
- "defineSecret",
373
- "validateAndBuildSecretDefinitionsMeta"
374
- ],
375
- "./variable": [
376
- "defineVariable",
377
- "validateAndBuildVariableDefinitionsMeta"
378
- ],
357
+ "./secret": ["defineSecret", "validateAndBuildSecretDefinitionsMeta"],
358
+ "./variable": ["defineVariable", "validateAndBuildVariableDefinitionsMeta"],
379
359
  "./oauth2": [],
380
360
  "./errors": [
381
361
  "AIProviderAuthError",
@@ -428,7 +408,7 @@
428
408
  "./services": [
429
409
  "ConsoleLogger",
430
410
  "DEFAULT_WEBHOOK_RETRIES",
431
- "InMemoryAIRunStateService",
411
+ "InMemoryAgentRunStateService",
432
412
  "InMemoryQueueService",
433
413
  "InMemorySessionStore",
434
414
  "InMemoryTriggerService",
@@ -463,19 +443,10 @@
463
443
  "spy",
464
444
  "stub"
465
445
  ],
466
- "./services/local-meta": [
467
- "LocalMetaService"
468
- ],
469
- "./services/v8-coverage": [
470
- "V8CoverageService"
471
- ],
472
- "./services/istanbul-coverage": [
473
- "IstanbulCoverageService"
474
- ],
475
- "./services/local-content": [
476
- "LocalContent",
477
- "signedContentPath"
478
- ],
446
+ "./services/local-meta": ["LocalMetaService"],
447
+ "./services/v8-coverage": ["V8CoverageService"],
448
+ "./services/istanbul-coverage": ["IstanbulCoverageService"],
449
+ "./services/local-content": ["LocalContent", "signedContentPath"],
479
450
  "./services/local-content-request-handler": [
480
451
  "createLocalContentRequestHandler",
481
452
  "verifySignedContentRequest"
@@ -505,10 +476,7 @@
505
476
  "verifyWithKeyMaterial",
506
477
  "wrapDEK"
507
478
  ],
508
- "./hmac": [
509
- "hmacSha256Hex",
510
- "timingSafeStringEqual"
511
- ],
479
+ "./hmac": ["hmacSha256Hex", "timingSafeStringEqual"],
512
480
  "./ecosystem": [
513
481
  "addFunction",
514
482
  "addGlobalMiddleware",
@@ -522,6 +490,149 @@
522
490
  "runPikkuFunc",
523
491
  "setSingletonServices"
524
492
  ],
493
+ "./ecosystem/agent": [
494
+ "addAgent",
495
+ "agent",
496
+ "agentApprove",
497
+ "agentResume",
498
+ "agentStream",
499
+ "canAccessThread",
500
+ "isOwnedByPrincipal",
501
+ "resolveModelAlias",
502
+ "threadOwnerConstraint",
503
+ "voiceInput",
504
+ "voiceOutput"
505
+ ],
506
+ "./ecosystem/agent-scorer": [
507
+ "addAgentScorer",
508
+ "enableScoreSnapshots",
509
+ "getScoreSnapshot",
510
+ "gradeRun",
511
+ "pikkuAgentJudge",
512
+ "pikkuAgentScorer",
513
+ "wireAgentScorerQueueWorkers"
514
+ ],
515
+ "./ecosystem/channel": [
516
+ "EventHubStore",
517
+ "PikkuAbstractChannelHandler",
518
+ "addChannelMiddleware",
519
+ "logChannels"
520
+ ],
521
+ "./ecosystem/channel/local": ["PikkuLocalChannelHandler"],
522
+ "./ecosystem/cli": ["CLIError", "executeCLI", "generateCommandHelp"],
523
+ "./ecosystem/cli/channel": ["executeRawCLIViaChannel", "handleRawCLI"],
524
+ "./ecosystem/credential": ["validateAndBuildCredentialDefinitionsMeta"],
525
+ "./ecosystem/dev": ["reconcileAddonRegistry", "reloadGeneratedMeta"],
526
+ "./ecosystem/function": ["getAllFunctionNames", "pikkuAuth"],
527
+ "./ecosystem/gateway": [],
528
+ "./ecosystem/hmac": ["hmacSha256Hex", "timingSafeStringEqual"],
529
+ "./ecosystem/http": ["DEFAULT_MAX_BODY_SIZE", "logRoutes", "toWebRequest"],
530
+ "./ecosystem/mcp": [
531
+ "MCPEndpointRegistry",
532
+ "MCPError",
533
+ "getMCPPromptsMeta",
534
+ "getMCPResourcesMeta",
535
+ "getMCPToolsMeta"
536
+ ],
537
+ "./ecosystem/middleware": [
538
+ "addGlobalPermission",
539
+ "authAPIKey",
540
+ "authCookie",
541
+ "pikkuRemoteAuthMiddleware",
542
+ "runMiddleware",
543
+ "telemetryInner",
544
+ "telemetryOuter"
545
+ ],
546
+ "./ecosystem/node": [],
547
+ "./ecosystem/node-host-resolver": ["installNodeHostResolver"],
548
+ "./ecosystem/oauth2": [],
549
+ "./ecosystem/persona": [
550
+ "HttpPersona",
551
+ "createHttpPersonas",
552
+ "personaEmails",
553
+ "personaEnvironmentErrors",
554
+ "personaEnvironmentRefusal",
555
+ "roleMismatchMessage",
556
+ "validateAndBuildPersonasMeta",
557
+ "verifyPersonaRoles"
558
+ ],
559
+ "./ecosystem/queue": [
560
+ "QueueJobDiscardedError",
561
+ "QueueJobFailedError",
562
+ "registerQueueWorkers"
563
+ ],
564
+ "./ecosystem/remote": ["buildRemoteHeaders"],
565
+ "./ecosystem/role": [
566
+ "defineSystemRole",
567
+ "flattenSystemRoleDefinitions",
568
+ "validateAndBuildSystemRoleDefinitionsMeta"
569
+ ],
570
+ "./ecosystem/rpc": ["wireAddon", "wireRemoteAddon"],
571
+ "./ecosystem/safe-fetch": ["safeFetch"],
572
+ "./ecosystem/scenario": [
573
+ "PikkuScenarioService",
574
+ "SCENARIO_SURFACES",
575
+ "addFeature",
576
+ "composeStepProse",
577
+ "resolveFeatureScenarios"
578
+ ],
579
+ "./ecosystem/scheduler": ["getScheduledTasks"],
580
+ "./ecosystem/schema": ["addSchema"],
581
+ "./ecosystem/scope": [
582
+ "defineScope",
583
+ "flattenScopeDefinitions",
584
+ "validateAndBuildScopeDefinitionsMeta"
585
+ ],
586
+ "./ecosystem/secret": ["validateAndBuildSecretDefinitionsMeta"],
587
+ "./ecosystem/services": [
588
+ "InMemoryAgentRunStateService",
589
+ "PIKKU_OUTGOING_WEBHOOK_QUEUE_NAME",
590
+ "PikkuSessionService",
591
+ "TypedVariablesService",
592
+ "createMiddlewareSessionWireProps",
593
+ "getStubTracker",
594
+ "pikkuWebhookWorkerFunc",
595
+ "spy"
596
+ ],
597
+ "./ecosystem/services/istanbul-coverage": ["IstanbulCoverageService"],
598
+ "./ecosystem/services/local-content": ["signedContentPath"],
599
+ "./ecosystem/services/local-content-request-handler": [
600
+ "createLocalContentRequestHandler",
601
+ "verifySignedContentRequest"
602
+ ],
603
+ "./ecosystem/services/v8-coverage": ["V8CoverageService"],
604
+ "./ecosystem/testing": ["defineServiceTests"],
605
+ "./ecosystem/trigger": [],
606
+ "./ecosystem/types": [
607
+ "PikkuRequest",
608
+ "formatVersionedId",
609
+ "isExpectedError",
610
+ "isSerializable",
611
+ "isVersionedId",
612
+ "parseDurationString",
613
+ "parseVersionedId"
614
+ ],
615
+ "./ecosystem/variable": ["validateAndBuildVariableDefinitionsMeta"],
616
+ "./ecosystem/virtual-user": [
617
+ "DISPOSITIONS",
618
+ "PRODUCTION_DISPOSITION",
619
+ "catalogueClassification",
620
+ "dispositionProfile",
621
+ "intentsForPersona",
622
+ "isReadOnly",
623
+ "personaScopes",
624
+ "prepareVirtualUserRun",
625
+ "reachableCatalogue",
626
+ "unreachableCatalogue"
627
+ ],
628
+ "./ecosystem/workflow": [
629
+ "assertWorkflowRunOwner",
630
+ "buildRunTimeline",
631
+ "isRef",
632
+ "reconstructFinalState",
633
+ "reconstructStateAt",
634
+ "template"
635
+ ],
525
636
  "./schema": [
526
637
  "addSchema",
527
638
  "applyDefaultsFromSchema",
@@ -530,12 +641,6 @@
530
641
  "getSchema",
531
642
  "validateSchema"
532
643
  ],
533
- "./testing": [
534
- "defineServiceTests"
535
- ],
536
- "./dev": [
537
- "pikkuDevReloader",
538
- "reconcileAddonRegistry",
539
- "reloadGeneratedMeta"
540
- ]
644
+ "./testing": ["defineServiceTests"],
645
+ "./dev": ["pikkuDevReloader", "reconcileAddonRegistry", "reloadGeneratedMeta"]
541
646
  }
@@ -5,17 +5,35 @@ disagree, so widening the API is a visible diff rather than a side effect of an
5
5
 
6
6
  Types are not pinned: they are erased before the test can enumerate them.
7
7
 
8
+ A wildcard subpath is expanded to the files it matches, so `./ecosystem/*` is
9
+ pinned as one entry per area rather than as a pattern — otherwise a new
10
+ sub-barrel joins the published API without a diff.
11
+
8
12
  Regenerate after an intentional change, from `packages/core`:
9
13
 
10
14
  ```bash
11
15
  cat > src/__gen-surface.mts <<'EOF'
12
- import { readFileSync, writeFileSync } from 'node:fs'
16
+ import { readdirSync, readFileSync, writeFileSync } from 'node:fs'
13
17
  import { resolve } from 'node:path'
14
18
  import { pathToFileURL } from 'node:url'
15
19
 
16
20
  const pkg = JSON.parse(readFileSync('package.json', 'utf-8'))
21
+ const expand = ([sub, dist]: [string, string]): [string, string][] => {
22
+ if (!sub.includes('*')) return [[sub, dist]]
23
+ const [prefix] = dist.split('*') as [string]
24
+ return readdirSync(resolve(prefix.replace('./dist/', './src/')), {
25
+ recursive: true,
26
+ encoding: 'utf-8',
27
+ })
28
+ .filter((f) => f.endsWith('.ts') && !f.endsWith('.d.ts'))
29
+ .map((f) => f.slice(0, -'.ts'.length))
30
+ .sort()
31
+ .map((area) => [sub.replace('*', area), dist.replace('*', area)])
32
+ }
17
33
  const surface: Record<string, string[]> = {}
18
- for (const [sub, dist] of Object.entries(pkg.exports as Record<string, string>)) {
34
+ for (const [sub, dist] of Object.entries(
35
+ pkg.exports as Record<string, string>
36
+ ).flatMap(expand)) {
19
37
  const src = pathToFileURL(resolve(dist.replace('./dist/', './src/'))).href
20
38
  surface[sub] = Object.keys(await import(src)).sort()
21
39
  }
@@ -1,6 +1,6 @@
1
1
  import { describe, test } from 'node:test'
2
2
  import assert from 'node:assert/strict'
3
- import { readFileSync } from 'node:fs'
3
+ import { readdirSync, readFileSync } from 'node:fs'
4
4
  import { fileURLToPath, pathToFileURL } from 'node:url'
5
5
  import { dirname, join, resolve } from 'node:path'
6
6
 
@@ -16,6 +16,34 @@ const expected: Record<string, string[]> = JSON.parse(
16
16
 
17
17
  const subpaths = packageJson.exports as Record<string, string>
18
18
 
19
+ /**
20
+ * `exports` entries, with a wildcard subpath replaced by the files it matches.
21
+ *
22
+ * `./ecosystem/*` publishes one sub-barrel per area, so pinning it as written
23
+ * would pin a pattern rather than a surface — and a new barrel would appear in
24
+ * the published API without a diff. Expanding it is what keeps each area's
25
+ * exports in `public-surface.json` under the same guarantee as every other
26
+ * entry point's.
27
+ */
28
+ const entryPoints = (): [string, string][] =>
29
+ Object.entries(subpaths).flatMap(([subpath, dist]) => {
30
+ if (!subpath.includes('*')) return [[subpath, dist] as [string, string]]
31
+
32
+ const [prefix] = dist.split('*') as [string]
33
+ const directory = resolve(packageRoot, prefix.replace('./dist/', './src/'))
34
+ return readdirSync(directory, { recursive: true, encoding: 'utf-8' })
35
+ .filter((file) => file.endsWith('.ts') && !file.endsWith('.d.ts'))
36
+ .map((file) => file.slice(0, -'.ts'.length))
37
+ .sort()
38
+ .map(
39
+ (area) =>
40
+ [subpath.replace('*', area), dist.replace('*', area)] as [
41
+ string,
42
+ string,
43
+ ]
44
+ )
45
+ })
46
+
19
47
  /**
20
48
  * Every runtime export reachable through an entry point, keyed by subpath.
21
49
  *
@@ -24,7 +52,7 @@ const subpaths = packageJson.exports as Record<string, string>
24
52
  */
25
53
  const actualSurface = async () => {
26
54
  const surface: Record<string, string[]> = {}
27
- for (const [subpath, dist] of Object.entries(subpaths)) {
55
+ for (const [subpath, dist] of entryPoints()) {
28
56
  const src = resolve(packageRoot, dist.replace('./dist/', './src/'))
29
57
  const module = await import(pathToFileURL(src).href)
30
58
  surface[subpath] = Object.keys(module).sort()
@@ -38,7 +66,7 @@ const REGENERATE =
38
66
 
39
67
  describe('the published surface is the surface we meant to publish', () => {
40
68
  test('every export subpath resolves to a source file', () => {
41
- const missing = Object.entries(subpaths).filter(([, dist]) => {
69
+ const missing = entryPoints().filter(([, dist]) => {
42
70
  try {
43
71
  readFileSync(
44
72
  resolve(packageRoot, dist.replace('./dist/', './src/')).replace(
@@ -1,14 +1,14 @@
1
1
  import type {
2
2
  AgentRunState,
3
3
  PendingApproval,
4
- } from '../wirings/ai-agent/ai-agent.types.js'
5
- import type { AIRunScore } from '../wirings/ai-scorer/ai-scorer.types.js'
4
+ } from '../wirings/agent/agent.types.js'
5
+ import type { AgentRunScore } from '../wirings/agent-scorer/agent-scorer.types.js'
6
6
 
7
7
  export type CreateRunInput = Omit<AgentRunState, 'runId'>
8
8
 
9
- export type SaveScoreInput = Omit<AIRunScore, 'createdAt'>
9
+ export type SaveScoreInput = Omit<AgentRunScore, 'createdAt'>
10
10
 
11
- export interface AIRunStateService {
11
+ export interface AgentRunStateService {
12
12
  createRun(run: CreateRunInput): Promise<string>
13
13
  updateRun(runId: string, updates: Partial<AgentRunState>): Promise<void>
14
14
  getRun(runId: string): Promise<AgentRunState | null>
@@ -33,5 +33,5 @@ export interface AIRunStateService {
33
33
  * grade that was acted on.
34
34
  */
35
35
  saveScore(score: SaveScoreInput): Promise<void>
36
- getScores(runId: string): Promise<AIRunScore[]>
36
+ getScores(runId: string): Promise<AgentRunScore[]>
37
37
  }
@@ -1,18 +1,18 @@
1
1
  import type {
2
- AIMessage,
3
- AIAgentStep,
4
- AIAgentToolDef,
5
- AIStreamChannel,
6
- } from '../wirings/ai-agent/ai-agent.types.js'
2
+ AgentMessage,
3
+ AgentStep,
4
+ AgentToolDef,
5
+ AgentStreamChannel,
6
+ } from '../wirings/agent/agent.types.js'
7
7
 
8
8
  export type AIProviderOptions = Record<string, Record<string, unknown>>
9
9
 
10
- export type AIAgentRunnerParams = {
10
+ export type AgentRunnerParams = {
11
11
  model: string
12
12
  temperature?: number
13
13
  instructions: string
14
- messages: AIMessage[]
15
- tools: AIAgentToolDef[]
14
+ messages: AgentMessage[]
15
+ tools: AgentToolDef[]
16
16
  maxSteps: number
17
17
  toolChoice: 'auto' | 'required' | 'none'
18
18
  outputSchema?: Record<string, unknown>
@@ -21,7 +21,7 @@ export type AIAgentRunnerParams = {
21
21
  agentId?: string
22
22
  /**
23
23
  * Cancels the model call itself, not just delivery of its output. Set by
24
- * `streamAIAgent` from the run's interrupt handle so a voice barge-in stops
24
+ * `streamAgent` from the run's interrupt handle so a voice barge-in stops
25
25
  * generation upstream rather than leaving tokens being billed into a stream
26
26
  * nobody reads. A runner that ignores it degrades to "the caller stops
27
27
  * listening", which is the behaviour before this field existed.
@@ -41,14 +41,14 @@ export type AIAgentRunnerParams = {
41
41
  providerOptions?: AIProviderOptions
42
42
  }
43
43
 
44
- export type AIAgentRunnerResult = {
44
+ export type AgentRunnerResult = {
45
45
  text: string
46
46
  object?: unknown
47
- steps: AIAgentStep[]
47
+ steps: AgentStep[]
48
48
  usage: { inputTokens: number; outputTokens: number }
49
49
  }
50
50
 
51
- export type AIAgentStepResult = {
51
+ export type AgentStepResult = {
52
52
  text: string
53
53
  object?: unknown
54
54
  toolCalls: { toolCallId: string; toolName: string; args: unknown }[]
@@ -216,12 +216,12 @@ export type AIRerankResult<VALUE extends string | Record<string, unknown>> = {
216
216
  response?: unknown
217
217
  }
218
218
 
219
- export interface AIAgentRunnerService {
219
+ export interface AgentRunnerService {
220
220
  stream(
221
- params: AIAgentRunnerParams,
222
- channel: AIStreamChannel
223
- ): Promise<AIAgentStepResult>
224
- run(params: AIAgentRunnerParams): Promise<AIAgentStepResult>
221
+ params: AgentRunnerParams,
222
+ channel: AgentStreamChannel
223
+ ): Promise<AgentStepResult>
224
+ run(params: AgentRunnerParams): Promise<AgentStepResult>
225
225
  transcribe?(params: AITranscriptionParams): Promise<AITranscriptionResult>
226
226
  generateSpeech?(
227
227
  params: AIGenerateSpeechParams
@@ -234,5 +234,5 @@ export interface AIAgentRunnerService {
234
234
  ): Promise<AIRerankResult<VALUE>>
235
235
  /** Return a new runner that uses the given API key for every LLM call.
236
236
  * Optional — runners that don't support per-key scoping leave this undefined. */
237
- withApiKey?(apiKey: string): AIAgentRunnerService
237
+ withApiKey?(apiKey: string): AgentRunnerService
238
238
  }
@@ -1,6 +1,6 @@
1
- import type { AIThread, AIMessage } from '../wirings/ai-agent/ai-agent.types.js'
1
+ import type { AgentThread, AgentMessage } from '../wirings/agent/agent.types.js'
2
2
 
3
- export interface AIStorageService {
3
+ export interface AgentStorageService {
4
4
  createThread(
5
5
  resourceId: string,
6
6
  options?: {
@@ -8,11 +8,11 @@ export interface AIStorageService {
8
8
  title?: string
9
9
  metadata?: Record<string, unknown>
10
10
  }
11
- ): Promise<AIThread>
11
+ ): Promise<AgentThread>
12
12
 
13
- getThread(threadId: string): Promise<AIThread>
13
+ getThread(threadId: string): Promise<AgentThread>
14
14
 
15
- getThreads(resourceId: string): Promise<AIThread[]>
15
+ getThreads(resourceId: string): Promise<AgentThread[]>
16
16
 
17
17
  deleteThread(threadId: string): Promise<void>
18
18
 
@@ -22,9 +22,9 @@ export interface AIStorageService {
22
22
  lastN?: number
23
23
  cursor?: string
24
24
  }
25
- ): Promise<AIMessage[]>
25
+ ): Promise<AgentMessage[]>
26
26
 
27
- saveMessages(threadId: string, messages: AIMessage[]): Promise<void>
27
+ saveMessages(threadId: string, messages: AgentMessage[]): Promise<void>
28
28
 
29
29
  getWorkingMemory(
30
30
  id: string,
@@ -4,7 +4,7 @@ import { createServer, type Server } from 'node:http'
4
4
 
5
5
  import { createHttpPersonas } from './http-personas.js'
6
6
  import { pikkuState, resetPikkuState } from '../pikku-state.js'
7
- import type { AIAgentStepResult } from './ai-agent-runner-service.js'
7
+ import type { AgentStepResult } from './agent-runner-service.js'
8
8
 
9
9
  /**
10
10
  * Minimal target app exposing the agent HTTP surface: actor sign-in, the agent
@@ -104,7 +104,7 @@ const scriptedRunner = () => {
104
104
  return {
105
105
  run: async (params: {
106
106
  outputSchema?: unknown
107
- }): Promise<AIAgentStepResult> => {
107
+ }): Promise<AgentStepResult> => {
108
108
  const props =
109
109
  (params.outputSchema as { properties?: Record<string, unknown> })
110
110
  ?.properties ?? {}
@@ -135,7 +135,7 @@ const wireRunner = () => {
135
135
  error: () => {},
136
136
  debug: () => {},
137
137
  },
138
- aiAgentRunner: scriptedRunner(),
138
+ agentRunner: scriptedRunner(),
139
139
  } as any)
140
140
  }
141
141
 
@@ -43,7 +43,7 @@ export interface HttpPersonasConfig {
43
43
  /**
44
44
  * Default model a persona thinks with when `converse(...)` is called without
45
45
  * an explicit `model`. Its own turns/approvals/evaluation run in-process via
46
- * the configured `aiAgentRunner`.
46
+ * the configured `agentRunner`.
47
47
  */
48
48
  model?: string
49
49
  }
@@ -107,8 +107,8 @@ export class HttpPersona implements ScenarioPersona {
107
107
  }
108
108
 
109
109
  async converse(options: ConverseOptions): Promise<ActorFlowVerdict> {
110
- const { aiAgentRunner } = getSingletonServices()
111
- if (!aiAgentRunner) {
110
+ const { agentRunner } = getSingletonServices()
111
+ if (!agentRunner) {
112
112
  throw new AIProviderNotConfiguredError()
113
113
  }
114
114
  const model = options.model ?? this.config.model
@@ -129,7 +129,7 @@ export class HttpPersona implements ScenarioPersona {
129
129
  approvals: options.approvals,
130
130
  model,
131
131
  maxTurns: options.maxTurns,
132
- llm: (params) => aiAgentRunner.run(params),
132
+ llm: (params) => agentRunner.run(params),
133
133
  target: {
134
134
  run: (message) =>
135
135
  this.agentRun(options.agent, message, threadId, resourceId),
@@ -1,17 +1,17 @@
1
1
  import type {
2
- AIRunStateService,
2
+ AgentRunStateService,
3
3
  CreateRunInput,
4
4
  SaveScoreInput,
5
- } from './ai-run-state-service.js'
5
+ } from './agent-run-state-service.js'
6
6
  import type {
7
7
  AgentRunState,
8
8
  PendingApproval,
9
- } from '../wirings/ai-agent/ai-agent.types.js'
10
- import type { AIRunScore } from '../wirings/ai-scorer/ai-scorer.types.js'
9
+ } from '../wirings/agent/agent.types.js'
10
+ import type { AgentRunScore } from '../wirings/agent-scorer/agent-scorer.types.js'
11
11
 
12
- export class InMemoryAIRunStateService implements AIRunStateService {
12
+ export class InMemoryAgentRunStateService implements AgentRunStateService {
13
13
  private runs = new Map<string, AgentRunState>()
14
- private scores = new Map<string, AIRunScore[]>()
14
+ private scores = new Map<string, AgentRunScore[]>()
15
15
  private counter = 0
16
16
 
17
17
  async createRun(run: CreateRunInput): Promise<string> {
@@ -81,7 +81,7 @@ export class InMemoryAIRunStateService implements AIRunStateService {
81
81
  this.scores.set(score.runId, existing)
82
82
  }
83
83
 
84
- async getScores(runId: string): Promise<AIRunScore[]> {
84
+ async getScores(runId: string): Promise<AgentRunScore[]> {
85
85
  return [...(this.scores.get(runId) ?? [])]
86
86
  }
87
87
  }