@pikku/core 0.12.82 → 0.12.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +1 -1
  3. package/dist/ecosystem/agent-scorer.d.ts +12 -0
  4. package/dist/ecosystem/agent-scorer.js +5 -0
  5. package/dist/ecosystem/agent.d.ts +18 -0
  6. package/dist/ecosystem/agent.js +6 -0
  7. package/dist/ecosystem/ai-agent.d.ts +18 -0
  8. package/dist/ecosystem/ai-agent.js +6 -0
  9. package/dist/ecosystem/ai-scorer.d.ts +12 -0
  10. package/dist/ecosystem/ai-scorer.js +5 -0
  11. package/dist/ecosystem/channel/local.d.ts +1 -0
  12. package/dist/ecosystem/channel/local.js +1 -0
  13. package/dist/ecosystem/channel.d.ts +12 -0
  14. package/dist/ecosystem/channel.js +4 -0
  15. package/dist/ecosystem/cli/channel.d.ts +16 -0
  16. package/dist/ecosystem/cli/channel.js +2 -0
  17. package/dist/ecosystem/cli.d.ts +9 -0
  18. package/dist/ecosystem/cli.js +2 -0
  19. package/dist/ecosystem/credential.d.ts +9 -0
  20. package/dist/ecosystem/credential.js +1 -0
  21. package/dist/ecosystem/dev.d.ts +8 -0
  22. package/dist/ecosystem/dev.js +1 -0
  23. package/dist/ecosystem/function.d.ts +13 -0
  24. package/dist/ecosystem/function.js +2 -0
  25. package/dist/ecosystem/gateway.d.ts +1 -0
  26. package/dist/ecosystem/gateway.js +1 -0
  27. package/dist/ecosystem/hmac.d.ts +1 -0
  28. package/dist/ecosystem/hmac.js +1 -0
  29. package/dist/ecosystem/http.d.ts +11 -0
  30. package/dist/ecosystem/http.js +3 -0
  31. package/dist/ecosystem/mcp.d.ts +3 -0
  32. package/dist/ecosystem/mcp.js +2 -0
  33. package/dist/ecosystem/middleware.d.ts +17 -0
  34. package/dist/ecosystem/middleware.js +6 -0
  35. package/dist/ecosystem/node-host-resolver.d.ts +1 -0
  36. package/dist/ecosystem/node-host-resolver.js +1 -0
  37. package/dist/ecosystem/node.d.ts +1 -0
  38. package/dist/ecosystem/node.js +1 -0
  39. package/dist/ecosystem/oauth2.d.ts +1 -0
  40. package/dist/ecosystem/oauth2.js +1 -0
  41. package/dist/ecosystem/persona.d.ts +15 -0
  42. package/dist/ecosystem/persona.js +4 -0
  43. package/dist/ecosystem/queue.d.ts +11 -0
  44. package/dist/ecosystem/queue.js +2 -0
  45. package/dist/ecosystem/remote.d.ts +8 -0
  46. package/dist/ecosystem/remote.js +1 -0
  47. package/dist/ecosystem/role.d.ts +3 -0
  48. package/dist/ecosystem/role.js +2 -0
  49. package/dist/ecosystem/rpc.d.ts +4 -0
  50. package/dist/ecosystem/rpc.js +2 -0
  51. package/dist/ecosystem/safe-fetch.d.ts +7 -0
  52. package/dist/ecosystem/safe-fetch.js +1 -0
  53. package/dist/ecosystem/scenario.d.ts +15 -0
  54. package/dist/ecosystem/scenario.js +4 -0
  55. package/dist/ecosystem/scheduler.d.ts +2 -0
  56. package/dist/ecosystem/scheduler.js +1 -0
  57. package/dist/ecosystem/schema.d.ts +1 -0
  58. package/dist/ecosystem/schema.js +1 -0
  59. package/dist/ecosystem/scope.d.ts +3 -0
  60. package/dist/ecosystem/scope.js +2 -0
  61. package/dist/ecosystem/secret.d.ts +9 -0
  62. package/dist/ecosystem/secret.js +1 -0
  63. package/dist/ecosystem/services/istanbul-coverage.d.ts +1 -0
  64. package/dist/ecosystem/services/istanbul-coverage.js +1 -0
  65. package/dist/ecosystem/services/local-content-request-handler.d.ts +9 -0
  66. package/dist/ecosystem/services/local-content-request-handler.js +1 -0
  67. package/dist/ecosystem/services/local-content.d.ts +1 -0
  68. package/dist/ecosystem/services/local-content.js +1 -0
  69. package/dist/ecosystem/services/v8-coverage.d.ts +1 -0
  70. package/dist/ecosystem/services/v8-coverage.js +1 -0
  71. package/dist/ecosystem/services.d.ts +28 -0
  72. package/dist/ecosystem/services.js +6 -0
  73. package/dist/ecosystem/testing.d.ts +7 -0
  74. package/dist/ecosystem/testing.js +1 -0
  75. package/dist/ecosystem/trigger.d.ts +1 -0
  76. package/dist/ecosystem/trigger.js +1 -0
  77. package/dist/ecosystem/types.d.ts +9 -0
  78. package/dist/ecosystem/types.js +5 -0
  79. package/dist/ecosystem/variable.d.ts +8 -0
  80. package/dist/ecosystem/variable.js +1 -0
  81. package/dist/ecosystem/virtual-user.d.ts +21 -0
  82. package/dist/ecosystem/virtual-user.js +5 -0
  83. package/dist/ecosystem/workflow.d.ts +18 -0
  84. package/dist/ecosystem/workflow.js +4 -0
  85. package/dist/index.d.ts +8 -8
  86. package/dist/index.js +3 -3
  87. package/dist/middleware/auth-apikey.d.ts +1 -1
  88. package/dist/middleware/auth-bearer.d.ts +1 -1
  89. package/dist/middleware/auth-cookie.d.ts +1 -1
  90. package/dist/middleware/cors.d.ts +1 -1
  91. package/dist/middleware/remote-auth.d.ts +1 -1
  92. package/dist/middleware/telemetry.d.ts +2 -2
  93. package/dist/services/agent-run-state-service.d.ts +29 -0
  94. package/dist/services/agent-run-state-service.js +1 -0
  95. package/dist/services/agent-runner-service.d.ts +220 -0
  96. package/dist/services/agent-runner-service.js +1 -0
  97. package/dist/services/agent-storage-service.d.ts +18 -0
  98. package/dist/services/agent-storage-service.js +1 -0
  99. package/dist/services/http-personas.d.ts +1 -1
  100. package/dist/services/http-personas.js +3 -3
  101. package/dist/services/in-memory-agent-run-state-service.d.ts +19 -0
  102. package/dist/services/in-memory-agent-run-state-service.js +54 -0
  103. package/dist/services/index.d.ts +9 -10
  104. package/dist/services/index.js +3 -3
  105. package/dist/services/meta-service.d.ts +5 -4
  106. package/dist/testing/service-tests/agent-run-service-tests.d.ts +1 -1
  107. package/dist/testing/service-tests/agent-run-service-tests.js +3 -3
  108. package/dist/testing/service-tests/agent-storage-service-tests.d.ts +3 -0
  109. package/dist/testing/service-tests/agent-storage-service-tests.js +302 -0
  110. package/dist/testing/service-tests.d.ts +4 -4
  111. package/dist/testing/service-tests.js +4 -4
  112. package/dist/types/core.types.d.ts +12 -11
  113. package/dist/types/core.types.js +1 -1
  114. package/dist/types/state.types.d.ts +11 -6
  115. package/dist/wirings/actor-flow/run-conversation.d.ts +2 -2
  116. package/dist/wirings/agent/agent-agui.d.ts +79 -0
  117. package/dist/wirings/agent/agent-agui.js +327 -0
  118. package/dist/wirings/agent/agent-finalize.d.ts +58 -0
  119. package/dist/wirings/agent/agent-finalize.js +138 -0
  120. package/dist/wirings/agent/agent-helpers.d.ts +35 -0
  121. package/dist/wirings/agent/agent-helpers.js +47 -0
  122. package/dist/wirings/agent/agent-interrupt.d.ts +153 -0
  123. package/dist/wirings/agent/agent-interrupt.js +257 -0
  124. package/dist/wirings/agent/agent-memory.d.ts +42 -0
  125. package/dist/wirings/agent/agent-memory.js +333 -0
  126. package/dist/wirings/agent/agent-model-config.d.ts +16 -0
  127. package/dist/wirings/agent/agent-model-config.js +51 -0
  128. package/dist/wirings/agent/agent-prepare.d.ts +117 -0
  129. package/dist/wirings/agent/agent-prepare.js +728 -0
  130. package/dist/wirings/agent/agent-registry.d.ts +16 -0
  131. package/dist/wirings/agent/agent-registry.js +51 -0
  132. package/dist/wirings/agent/agent-rpc.d.ts +15 -0
  133. package/dist/wirings/agent/agent-rpc.js +53 -0
  134. package/dist/wirings/agent/agent-runner.d.ts +7 -0
  135. package/dist/wirings/agent/agent-runner.js +580 -0
  136. package/dist/wirings/agent/agent-stream.d.ts +41 -0
  137. package/dist/wirings/agent/agent-stream.js +1029 -0
  138. package/dist/wirings/agent/agent-turn.d.ts +57 -0
  139. package/dist/wirings/agent/agent-turn.js +82 -0
  140. package/dist/wirings/agent/agent-utils.d.ts +1 -0
  141. package/dist/wirings/agent/agent-utils.js +1 -0
  142. package/dist/wirings/agent/agent.types.d.ts +625 -0
  143. package/dist/wirings/agent/agent.types.js +1 -0
  144. package/dist/wirings/agent/index.d.ts +12 -0
  145. package/dist/wirings/agent/index.js +10 -0
  146. package/dist/wirings/agent/voice-input.d.ts +69 -0
  147. package/dist/wirings/agent/voice-input.js +150 -0
  148. package/dist/wirings/agent/voice-output.d.ts +85 -0
  149. package/dist/wirings/agent/voice-output.js +196 -0
  150. package/dist/wirings/agent-scorer/agent-scorer-grade.d.ts +26 -0
  151. package/dist/wirings/agent-scorer/agent-scorer-grade.js +33 -0
  152. package/dist/wirings/agent-scorer/agent-scorer-judge.d.ts +17 -0
  153. package/dist/wirings/agent-scorer/agent-scorer-judge.js +92 -0
  154. package/dist/wirings/agent-scorer/agent-scorer-live.d.ts +15 -0
  155. package/dist/wirings/agent-scorer/agent-scorer-live.js +38 -0
  156. package/dist/wirings/agent-scorer/agent-scorer-registry.d.ts +18 -0
  157. package/dist/wirings/agent-scorer/agent-scorer-registry.js +46 -0
  158. package/dist/wirings/agent-scorer/agent-scorer-sampling.d.ts +8 -0
  159. package/dist/wirings/agent-scorer/agent-scorer-sampling.js +31 -0
  160. package/dist/wirings/agent-scorer/agent-scorer-snapshots.d.ts +10 -0
  161. package/dist/wirings/agent-scorer/agent-scorer-snapshots.js +40 -0
  162. package/dist/wirings/agent-scorer/agent-scorer-worker.d.ts +15 -0
  163. package/dist/wirings/agent-scorer/agent-scorer-worker.js +60 -0
  164. package/dist/wirings/agent-scorer/agent-scorer.d.ts +39 -0
  165. package/dist/wirings/agent-scorer/agent-scorer.js +40 -0
  166. package/dist/wirings/agent-scorer/agent-scorer.types.d.ts +90 -0
  167. package/dist/wirings/agent-scorer/agent-scorer.types.js +4 -0
  168. package/dist/wirings/agent-scorer/index.d.ts +6 -0
  169. package/dist/wirings/agent-scorer/index.js +5 -0
  170. package/dist/wirings/ai-agent/ai-agent-prepare.js +2 -0
  171. package/dist/wirings/ai-agent/voice-output.d.ts +1 -2
  172. package/dist/wirings/channel/channel-rpc.types.d.ts +2 -2
  173. package/dist/wirings/rpc/addon-runner.d.ts +4 -0
  174. package/dist/wirings/rpc/addon-runner.js +14 -2
  175. package/dist/wirings/rpc/rpc-runner.d.ts +1 -1
  176. package/dist/wirings/rpc/rpc-runner.js +4 -2
  177. package/dist/wirings/rpc/rpc-types.d.ts +5 -1
  178. package/dist/wirings/rpc/wire-addon.d.ts +12 -0
  179. package/dist/wirings/rpc/wire-addon.js +4 -0
  180. package/dist/wirings/virtual-user/prepare-virtual-user-run.js +1 -1
  181. package/dist/wirings/virtual-user/virtual-user-agents.d.ts +1 -1
  182. package/dist/wirings/workflow/feature.d.ts +2 -1
  183. package/dist/wirings/workflow/index.d.ts +3 -14
  184. package/dist/wirings/workflow/index.js +0 -8
  185. package/dist/wirings/workflow/pikku-scenario-service.d.ts +10 -0
  186. package/dist/wirings/workflow/pikku-scenario-service.js +9 -0
  187. package/dist/wirings/workflow/run-timeline.d.ts +1 -2
  188. package/dist/wirings/workflow/scenario.types.d.ts +37 -0
  189. package/dist/wirings/workflow/scenario.types.js +1 -0
  190. package/dist/wirings/workflow/workflow.types.d.ts +2 -37
  191. package/knowledge/decisions/internals/{a-non-streaming-agent-run-registers-with-airunstate-too.md → a-non-streaming-agent-run-registers-with-agentrunstate-too.md} +6 -6
  192. package/knowledge/decisions/internals/a-resumed-agent-turn-is-as-interruptible-as-the-first.md +1 -1
  193. package/knowledge/decisions/internals/actor-flow-drives-the-target-through-a-transport-seam.md +1 -1
  194. package/knowledge/decisions/internals/{ai-agent-agui-bridge-obeys-the-client-ordering-contract.md → agent-agui-bridge-obeys-the-client-ordering-contract.md} +5 -5
  195. package/knowledge/decisions/internals/{ai-agent-audio-chunks-carry-the-format-the-provider-returned.md → agent-audio-chunks-carry-the-format-the-provider-returned.md} +2 -2
  196. package/knowledge/decisions/internals/agent-context-waits-for-a-tool-result-still-being-written.md +1 -1
  197. package/knowledge/decisions/internals/{ai-agent-credential-suspensions-hide-the-tool-result.md → agent-credential-suspensions-hide-the-tool-result.md} +2 -2
  198. package/knowledge/decisions/internals/{ai-agent-delegate-and-supervise-hide-different-text.md → agent-delegate-and-supervise-hide-different-text.md} +4 -4
  199. package/knowledge/decisions/internals/{ai-agent-llm-tool-arguments-have-nulls-stripped.md → agent-llm-tool-arguments-have-nulls-stripped.md} +3 -3
  200. package/knowledge/decisions/internals/{ai-agent-model-config-stays-a-single-resolution-seam.md → agent-model-config-stays-a-single-resolution-seam.md} +3 -3
  201. package/knowledge/decisions/internals/{ai-agent-onerror-hooks-cannot-change-the-failure.md → agent-onerror-hooks-cannot-change-the-failure.md} +6 -6
  202. package/knowledge/decisions/internals/{ai-agent-runner-methods-must-keep-their-receiver.md → agent-runner-methods-must-keep-their-receiver.md} +4 -4
  203. package/knowledge/decisions/internals/agent-speech-travels-as-a-custom-agui-event.md +1 -1
  204. package/knowledge/decisions/internals/{ai-agent-stream-persistence-is-best-effort.md → agent-stream-persistence-is-best-effort.md} +4 -4
  205. package/knowledge/decisions/internals/{ai-agent-sub-agents-inherit-the-parent-context-block.md → agent-sub-agents-inherit-the-parent-context-block.md} +3 -3
  206. package/knowledge/decisions/internals/{ai-agent-tool-execute-failures-are-logged-unconditionally.md → agent-tool-execute-failures-are-logged-unconditionally.md} +3 -3
  207. package/knowledge/decisions/internals/{ai-agent-voice-input-transcribes-audio-parts-in-place.md → agent-voice-input-transcribes-audio-parts-in-place.md} +2 -2
  208. package/knowledge/decisions/internals/{ai-agent-working-memory-is-persisted-only-when-valid.md → agent-working-memory-is-persisted-only-when-valid.md} +2 -2
  209. package/knowledge/decisions/internals/an-agent-interrupt-is-not-a-failure.md +2 -2
  210. package/knowledge/decisions/internals/an-agent-run-owned-by-another-instance-says-so.md +3 -3
  211. package/knowledge/decisions/internals/an-agent-stream-send-must-return-the-inner-sends-promise.md +2 -2
  212. package/knowledge/decisions/internals/an-empty-text-part-is-omitted-from-an-agent-message.md +1 -1
  213. package/knowledge/decisions/internals/an-empty-transcript-is-not-recorded.md +1 -1
  214. package/knowledge/decisions/internals/speech-synthesis-picks-a-voice-per-sentence-and-warns-once.md +1 -1
  215. package/knowledge/decisions/internals/the-agent-done-event-goes-through-the-middleware-and-is-awaited.md +1 -1
  216. package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +1 -1
  217. package/knowledge/decisions/internals/the-per-invocation-rpc-view-is-a-class.md +5 -5
  218. package/knowledge/decisions/internals/the-transcript-event-is-sent-ahead-of-the-run.md +2 -2
  219. package/knowledge/decisions/internals/thread-history-records-the-transcript-not-the-audio.md +2 -2
  220. package/knowledge/decisions/internals/voice-output-speaks-unless-voice-input-explicitly-says-otherwise.md +1 -1
  221. package/knowledge/decisions/security/{ai-agent-approval-forwarding-requires-a-symbol-brand.md → agent-approval-forwarding-requires-a-symbol-brand.md} +3 -3
  222. package/knowledge/decisions/security/{ai-agent-credential-requests-are-symbol-branded.md → agent-credential-requests-are-symbol-branded.md} +4 -4
  223. package/knowledge/decisions/security/{ai-agent-gate-requires-a-session-only-when-auth-is-true.md → agent-gate-requires-a-session-only-when-auth-is-true.md} +3 -3
  224. package/knowledge/decisions/security/{ai-agent-ownership-failures-never-echo-the-resource.md → agent-ownership-failures-never-echo-the-resource.md} +2 -2
  225. package/knowledge/decisions/security/{ai-agent-resume-re-runs-the-authorization-gate.md → agent-resume-re-runs-the-authorization-gate.md} +4 -4
  226. package/knowledge/decisions/security/{ai-agent-sessionless-deployments-have-no-thread-ownership.md → agent-sessionless-deployments-have-no-thread-ownership.md} +5 -5
  227. package/knowledge/decisions/security/{ai-agent-thread-ownership-composes-the-session-principal.md → agent-thread-ownership-composes-the-session-principal.md} +2 -2
  228. package/knowledge/decisions/security/{ai-agent-tool-filtering-reads-the-live-function-config.md → agent-tool-filtering-reads-the-live-function-config.md} +2 -2
  229. package/knowledge/decisions/security/an-agent-approval-is-claimed-before-the-tool-runs.md +3 -3
  230. package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +3 -3
  231. package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +20 -13
  232. package/knowledge/decisions/security/index.md +1 -2
  233. package/package.json +4 -4
  234. package/scripts/generate-api-report.mts +32 -8
  235. package/src/agent-naming.test.ts +68 -0
  236. package/src/ecosystem/agent-scorer.ts +24 -0
  237. package/src/ecosystem/agent.ts +42 -0
  238. package/src/ecosystem/channel/local.ts +1 -0
  239. package/src/ecosystem/channel.ts +22 -0
  240. package/src/ecosystem/cli/channel.ts +25 -0
  241. package/src/ecosystem/cli.ts +21 -0
  242. package/src/ecosystem/credential.ts +10 -0
  243. package/src/ecosystem/dev.ts +12 -0
  244. package/src/ecosystem/function.ts +28 -0
  245. package/src/ecosystem/gateway.ts +4 -0
  246. package/src/ecosystem/hmac.ts +1 -0
  247. package/src/ecosystem/http.ts +22 -0
  248. package/src/ecosystem/mcp.ts +17 -0
  249. package/src/ecosystem/middleware.ts +27 -0
  250. package/src/ecosystem/node-host-resolver.ts +1 -0
  251. package/src/ecosystem/node.ts +5 -0
  252. package/src/ecosystem/oauth2.ts +4 -0
  253. package/src/ecosystem/persona.ts +30 -0
  254. package/src/ecosystem/queue.ts +23 -0
  255. package/src/ecosystem/remote.ts +9 -0
  256. package/src/ecosystem/role.ts +13 -0
  257. package/src/ecosystem/rpc.ts +7 -0
  258. package/src/ecosystem/safe-fetch.ts +8 -0
  259. package/src/ecosystem/scenario.ts +32 -0
  260. package/src/ecosystem/scheduler.ts +5 -0
  261. package/src/ecosystem/schema.ts +1 -0
  262. package/src/ecosystem/scope.ts +14 -0
  263. package/src/ecosystem/secret.ts +15 -0
  264. package/src/ecosystem/services/istanbul-coverage.ts +1 -0
  265. package/src/ecosystem/services/local-content-request-handler.ts +16 -0
  266. package/src/ecosystem/services/local-content.ts +1 -0
  267. package/src/ecosystem/services/v8-coverage.ts +1 -0
  268. package/src/ecosystem/services.ts +82 -0
  269. package/src/ecosystem/testing.ts +8 -0
  270. package/src/ecosystem/trigger.ts +7 -0
  271. package/src/ecosystem/types.ts +34 -0
  272. package/src/ecosystem/variable.ts +14 -0
  273. package/src/ecosystem/virtual-user.ts +48 -0
  274. package/src/ecosystem/workflow.ts +68 -0
  275. package/src/index.ts +8 -19
  276. package/src/pikku-state.ts +3 -3
  277. package/src/public-surface.json +183 -91
  278. package/src/public-surface.json.README +20 -2
  279. package/src/public-surface.test.ts +31 -3
  280. package/src/services/{ai-run-state-service.ts → agent-run-state-service.ts} +5 -5
  281. package/src/services/{ai-agent-runner-service.ts → agent-runner-service.ts} +18 -18
  282. package/src/services/{ai-storage-service.ts → agent-storage-service.ts} +7 -7
  283. package/src/services/http-personas-converse.test.ts +3 -3
  284. package/src/services/http-personas.ts +4 -4
  285. package/src/services/{in-memory-ai-run-state-service.ts → in-memory-agent-run-state-service.ts} +7 -7
  286. package/src/services/index.ts +13 -24
  287. package/src/services/meta-service.ts +5 -7
  288. package/src/testing/service-tests/agent-run-service-tests.ts +4 -4
  289. package/src/testing/service-tests/{ai-storage-service-tests.ts → agent-storage-service-tests.ts} +8 -8
  290. package/src/testing/service-tests.ts +10 -8
  291. package/src/types/core.types.ts +13 -13
  292. package/src/types/state.types.ts +11 -10
  293. package/src/wirings/actor-flow/run-conversation.test.ts +2 -2
  294. package/src/wirings/actor-flow/run-conversation.ts +7 -9
  295. package/src/wirings/{ai-agent/ai-agent-agui.test.ts → agent/agent-agui.test.ts} +126 -105
  296. package/src/wirings/{ai-agent/ai-agent-agui.ts → agent/agent-agui.ts} +7 -7
  297. package/src/wirings/{ai-agent/ai-agent-authorization.test.ts → agent/agent-authorization.test.ts} +6 -6
  298. package/src/wirings/{ai-agent/ai-agent-finalize.test.ts → agent/agent-finalize.test.ts} +17 -16
  299. package/src/wirings/{ai-agent/ai-agent-finalize.ts → agent/agent-finalize.ts} +22 -22
  300. package/src/wirings/{ai-agent/ai-agent-helpers.test.ts → agent/agent-helpers.test.ts} +1 -1
  301. package/src/wirings/{ai-agent/ai-agent-helpers.ts → agent/agent-helpers.ts} +1 -1
  302. package/src/wirings/{ai-agent/ai-agent-interrupt.test.ts → agent/agent-interrupt.test.ts} +67 -77
  303. package/src/wirings/{ai-agent/ai-agent-interrupt.ts → agent/agent-interrupt.ts} +5 -5
  304. package/src/wirings/{ai-agent/ai-agent-memory.test.ts → agent/agent-memory.test.ts} +12 -12
  305. package/src/wirings/{ai-agent/ai-agent-memory.ts → agent/agent-memory.ts} +36 -36
  306. package/src/wirings/{ai-agent/ai-agent-model-config.test.ts → agent/agent-model-config.test.ts} +2 -5
  307. package/src/wirings/{ai-agent/ai-agent-model-config.ts → agent/agent-model-config.ts} +1 -1
  308. package/src/wirings/{ai-agent/ai-agent-prepare.test.ts → agent/agent-prepare.test.ts} +18 -18
  309. package/src/wirings/{ai-agent/ai-agent-prepare.ts → agent/agent-prepare.ts} +54 -51
  310. package/src/wirings/{ai-agent/ai-agent-registry.test.ts → agent/agent-registry.test.ts} +49 -43
  311. package/src/wirings/{ai-agent/ai-agent-registry.ts → agent/agent-registry.ts} +14 -14
  312. package/src/wirings/{ai-agent/ai-agent-resume-authorization.test.ts → agent/agent-resume-authorization.test.ts} +18 -18
  313. package/src/wirings/{ai-agent → agent}/agent-rpc.ts +16 -20
  314. package/src/wirings/{ai-agent/ai-agent-runner.test.ts → agent/agent-runner.test.ts} +105 -106
  315. package/src/wirings/{ai-agent/ai-agent-runner.ts → agent/agent-runner.ts} +90 -80
  316. package/src/wirings/{ai-agent/ai-agent-stream-output-hooks.test.ts → agent/agent-stream-output-hooks.test.ts} +25 -25
  317. package/src/wirings/{ai-agent/ai-agent-stream.test.ts → agent/agent-stream.test.ts} +147 -143
  318. package/src/wirings/{ai-agent/ai-agent-stream.ts → agent/agent-stream.ts} +147 -146
  319. package/src/wirings/{ai-agent/ai-agent-thread-ownership.test.ts → agent/agent-thread-ownership.test.ts} +24 -28
  320. package/src/wirings/{ai-agent/ai-agent-turn.test.ts → agent/agent-turn.test.ts} +3 -5
  321. package/src/wirings/{ai-agent/ai-agent-turn.ts → agent/agent-turn.ts} +7 -7
  322. package/src/wirings/{ai-agent/ai-agent.types.ts → agent/agent.types.ts} +51 -48
  323. package/src/wirings/agent/index.ts +56 -0
  324. package/src/wirings/{ai-agent → agent}/voice-input.test.ts +15 -15
  325. package/src/wirings/{ai-agent → agent}/voice-input.ts +11 -11
  326. package/src/wirings/{ai-agent → agent}/voice-output.test.ts +23 -23
  327. package/src/wirings/{ai-agent → agent}/voice-output.ts +11 -11
  328. package/src/wirings/{ai-scorer/ai-scorer-grade.test.ts → agent-scorer/agent-scorer-grade.test.ts} +8 -8
  329. package/src/wirings/{ai-scorer/ai-scorer-grade.ts → agent-scorer/agent-scorer-grade.ts} +9 -9
  330. package/src/wirings/{ai-scorer/ai-scorer-judge.test.ts → agent-scorer/agent-scorer-judge.test.ts} +11 -14
  331. package/src/wirings/{ai-scorer/ai-scorer-judge.ts → agent-scorer/agent-scorer-judge.ts} +11 -11
  332. package/src/wirings/{ai-scorer/ai-scorer-live.test.ts → agent-scorer/agent-scorer-live.test.ts} +11 -11
  333. package/src/wirings/{ai-scorer/ai-scorer-live.ts → agent-scorer/agent-scorer-live.ts} +3 -3
  334. package/src/wirings/{ai-scorer/ai-scorer-registry.ts → agent-scorer/agent-scorer-registry.ts} +11 -8
  335. package/src/wirings/{ai-scorer/ai-scorer-sampling.test.ts → agent-scorer/agent-scorer-sampling.test.ts} +1 -1
  336. package/src/wirings/{ai-scorer/ai-scorer-snapshots.test.ts → agent-scorer/agent-scorer-snapshots.test.ts} +2 -2
  337. package/src/wirings/{ai-scorer/ai-scorer-snapshots.ts → agent-scorer/agent-scorer-snapshots.ts} +1 -1
  338. package/src/wirings/{ai-scorer/ai-scorer-worker.test.ts → agent-scorer/agent-scorer-worker.test.ts} +15 -15
  339. package/src/wirings/{ai-scorer/ai-scorer-worker.ts → agent-scorer/agent-scorer-worker.ts} +9 -7
  340. package/src/wirings/{ai-scorer/ai-scorer.ts → agent-scorer/agent-scorer.ts} +7 -7
  341. package/src/wirings/{ai-scorer/ai-scorer.types.ts → agent-scorer/agent-scorer.types.ts} +6 -6
  342. package/src/wirings/agent-scorer/index.ts +22 -0
  343. package/src/wirings/channel/channel-rpc.types.ts +2 -2
  344. package/src/wirings/rpc/addon-runner.ts +31 -3
  345. package/src/wirings/rpc/addon-secrets.test.ts +130 -0
  346. package/src/wirings/rpc/rpc-runner.ts +4 -2
  347. package/src/wirings/rpc/rpc-types.ts +5 -1
  348. package/src/wirings/rpc/wire-addon.ts +16 -0
  349. package/src/wirings/virtual-user/prepare-virtual-user-run.ts +1 -1
  350. package/src/wirings/virtual-user/run-virtual-user.test.ts +2 -2
  351. package/src/wirings/virtual-user/run-virtual-user.ts +3 -3
  352. package/src/wirings/virtual-user/virtual-user-agents.ts +1 -1
  353. package/src/wirings/workflow/feature.ts +2 -5
  354. package/src/wirings/workflow/index.ts +1 -49
  355. package/src/wirings/workflow/pikku-scenario-service.ts +21 -1
  356. package/src/wirings/workflow/run-timeline.ts +1 -1
  357. package/src/wirings/workflow/scenario.types.ts +63 -0
  358. package/src/wirings/workflow/workflow.types.ts +1 -54
  359. package/src/wirings-stay-decoupled.test.ts +3 -3
  360. package/tsconfig.tsbuildinfo +1 -1
  361. package/src/wirings/ai-agent/index.ts +0 -65
  362. package/src/wirings/ai-scorer/index.ts +0 -24
  363. /package/src/wirings/{ai-agent/ai-agent-utils.ts → agent/agent-utils.ts} +0 -0
  364. /package/src/wirings/{ai-scorer/ai-scorer-sampling.ts → agent-scorer/agent-scorer-sampling.ts} +0 -0
@@ -1,22 +1,22 @@
1
1
  import { randomUUID } from 'crypto'
2
2
  import type { CoreSingletonServices } from '../../types/core.types.js'
3
3
  import type {
4
- CoreAIAgent,
5
- AIAgentMemoryConfig,
6
- AIAgentInput,
7
- AIAgentStep,
8
- AIMessage,
9
- } from './ai-agent.types.js'
10
- import type { AIStorageService } from '../../services/ai-storage-service.js'
4
+ CoreAgent,
5
+ AgentMemoryConfig,
6
+ AgentInput,
7
+ AgentStep,
8
+ AgentMessage,
9
+ } from './agent.types.js'
10
+ import type { AgentStorageService } from '../../services/agent-storage-service.js'
11
11
  import type { Logger } from '../../services/logger.js'
12
12
  import type { SchemaService } from '../../services/schema-service.js'
13
- import type { PikkuAIMiddlewareHooks } from './ai-agent.types.js'
13
+ import type { PikkuAgentMiddlewareHooks } from './agent.types.js'
14
14
 
15
15
  export function resolveMemoryServices(
16
- agent: CoreAIAgent,
16
+ agent: CoreAgent,
17
17
  singletonServices: CoreSingletonServices
18
18
  ): {
19
- storage: AIStorageService | undefined
19
+ storage: AgentStorageService | undefined
20
20
  } {
21
21
  const memoryConfig = agent.memory
22
22
  const storage = memoryConfig?.storage
@@ -25,16 +25,16 @@ export function resolveMemoryServices(
25
25
  (
26
26
  singletonServices as unknown as Record<
27
27
  string,
28
- AIStorageService | undefined
28
+ AgentStorageService | undefined
29
29
  >
30
30
  )[memoryConfig.storage]
31
- : singletonServices.aiStorage
31
+ : singletonServices.agentStorage
32
32
  return { storage }
33
33
  }
34
34
 
35
35
  export function isWorkingMemoryEnabled(
36
- memoryConfig: AIAgentMemoryConfig | undefined,
37
- storage: AIStorageService | undefined
36
+ memoryConfig: AgentMemoryConfig | undefined,
37
+ storage: AgentStorageService | undefined
38
38
  ): boolean {
39
39
  return !!memoryConfig?.workingMemory && !!storage
40
40
  }
@@ -107,12 +107,12 @@ export function buildWorkingMemoryPrompt(
107
107
  }
108
108
 
109
109
  export async function loadContextMessages(
110
- memoryConfig: AIAgentMemoryConfig | undefined,
111
- storage: AIStorageService | undefined,
112
- input: AIAgentInput,
110
+ memoryConfig: AgentMemoryConfig | undefined,
111
+ storage: AgentStorageService | undefined,
112
+ input: AgentInput,
113
113
  workingMemoryJsonSchema?: Record<string, unknown>
114
- ): Promise<AIMessage[]> {
115
- const contextMessages: AIMessage[] = []
114
+ ): Promise<AgentMessage[]> {
115
+ const contextMessages: AgentMessage[] = []
116
116
 
117
117
  const workingMemoryStorage = isWorkingMemoryEnabled(memoryConfig, storage)
118
118
  ? storage
@@ -136,15 +136,15 @@ export async function loadContextMessages(
136
136
  }
137
137
 
138
138
  export async function saveMessages(
139
- storage: AIStorageService | undefined,
139
+ storage: AgentStorageService | undefined,
140
140
  threadId: string,
141
141
  resourceId: string,
142
- memoryConfig: AIAgentMemoryConfig | undefined,
143
- userMessage: AIMessage | null | undefined,
142
+ memoryConfig: AgentMemoryConfig | undefined,
143
+ userMessage: AgentMessage | null | undefined,
144
144
  result: {
145
145
  text: string
146
146
  uiSpec?: unknown
147
- steps: Pick<AIAgentStep, 'toolCalls'>[]
147
+ steps: Pick<AgentStep, 'toolCalls'>[]
148
148
  }
149
149
  ): Promise<string> {
150
150
  const responseText = memoryConfig?.workingMemory
@@ -152,7 +152,7 @@ export async function saveMessages(
152
152
  : result.text
153
153
 
154
154
  if (storage) {
155
- const newMessages: AIMessage[] = userMessage ? [userMessage] : []
155
+ const newMessages: AgentMessage[] = userMessage ? [userMessage] : []
156
156
 
157
157
  for (const step of result.steps) {
158
158
  if (step.toolCalls?.length) {
@@ -205,13 +205,13 @@ export async function saveMessages(
205
205
  }
206
206
 
207
207
  export function trimMessages(
208
- messages: AIMessage[],
208
+ messages: AgentMessage[],
209
209
  maxTokenBudget: number = 100000
210
- ): AIMessage[] {
210
+ ): AgentMessage[] {
211
211
  const sanitized = sanitizeToolMessages(messages)
212
212
 
213
213
  let estimatedTokens = 0
214
- const result: AIMessage[] = []
214
+ const result: AgentMessage[] = []
215
215
 
216
216
  for (let i = sanitized.length - 1; i >= 0; i--) {
217
217
  const msg = sanitized[i]
@@ -239,8 +239,8 @@ export function trimMessages(
239
239
  return result
240
240
  }
241
241
 
242
- function sanitizeToolMessages(messages: AIMessage[]): AIMessage[] {
243
- const result: AIMessage[] = []
242
+ function sanitizeToolMessages(messages: AgentMessage[]): AgentMessage[] {
243
+ const result: AgentMessage[] = []
244
244
 
245
245
  for (let i = 0; i < messages.length; i++) {
246
246
  const msg = messages[i]
@@ -281,7 +281,7 @@ function sanitizeToolMessages(messages: AIMessage[]): AIMessage[] {
281
281
  )
282
282
  }
283
283
 
284
- function estimateTokens(msg: AIMessage): number {
284
+ function estimateTokens(msg: AgentMessage): number {
285
285
  let chars = 0
286
286
  if (msg.content) {
287
287
  if (typeof msg.content === 'string') {
@@ -368,7 +368,7 @@ export function stripWorkingMemoryForStreaming(text: string): string {
368
368
 
369
369
  async function persistWorkingMemory(
370
370
  options: {
371
- storage?: AIStorageService
371
+ storage?: AgentStorageService
372
372
  threadId: string
373
373
  workingMemorySchemaName?: string | null
374
374
  logger?: Logger
@@ -400,12 +400,12 @@ async function persistWorkingMemory(
400
400
  }
401
401
 
402
402
  export function createWorkingMemoryMiddleware(options: {
403
- storage?: AIStorageService
403
+ storage?: AgentStorageService
404
404
  threadId: string
405
405
  workingMemorySchemaName?: string | null
406
406
  logger?: Logger
407
407
  schemaService?: SchemaService
408
- }): PikkuAIMiddlewareHooks<{
408
+ }): PikkuAgentMiddlewareHooks<{
409
409
  rawText?: string
410
410
  emittedVisibleText?: string
411
411
  }> {
@@ -459,15 +459,15 @@ export function createWorkingMemoryMiddleware(options: {
459
459
  }
460
460
 
461
461
  export function getWorkingMemoryMiddleware(
462
- memoryConfig: AIAgentMemoryConfig | undefined,
463
- storage: AIStorageService | undefined,
462
+ memoryConfig: AgentMemoryConfig | undefined,
463
+ storage: AgentStorageService | undefined,
464
464
  options: {
465
465
  threadId: string
466
466
  workingMemorySchemaName?: string | null
467
467
  logger?: Logger
468
468
  schemaService?: SchemaService
469
469
  }
470
- ): PikkuAIMiddlewareHooks[] {
470
+ ): PikkuAgentMiddlewareHooks[] {
471
471
  if (!isWorkingMemoryEnabled(memoryConfig, storage)) return []
472
472
 
473
473
  return [
@@ -1,9 +1,6 @@
1
1
  import { describe, test, beforeEach, afterEach } from 'node:test'
2
2
  import assert from 'node:assert'
3
- import {
4
- resolveModelAlias,
5
- resolveModelConfig,
6
- } from './ai-agent-model-config.js'
3
+ import { resolveModelAlias, resolveModelConfig } from './agent-model-config.js'
7
4
  import { pikkuState, resetPikkuState } from '../../pikku-state.js'
8
5
 
9
6
  const setAliases = (aliases: Record<string, string>) =>
@@ -81,7 +78,7 @@ describe('resolveModelAlias', () => {
81
78
  test('an env override splits on the first colon only', () => {
82
79
  // A model id may itself contain a colon — `ollama/qwen2.5:7b` is the shape
83
80
  // the runner's own error message cites. It stays provider-qualified so the
84
- // resolved value is one `VercelAIAgentRunner.parseModel` would accept; a
81
+ // resolved value is one `VercelAgentRunner.parseModel` would accept; a
85
82
  // bare `bedrock:nova-lite:1` would pass here and fail the moment anything
86
83
  // tried to use it.
87
84
  process.env.PIKKU_MODEL_ALIASES = 'cheap:ollama/qwen2.5:7b'
@@ -1,4 +1,4 @@
1
- // knowledge: decisions/internals/ai-agent-model-config-stays-a-single-resolution-seam.md
1
+ // knowledge: decisions/internals/agent-model-config-stays-a-single-resolution-seam.md
2
2
  import { pikkuState } from '../../pikku-state.js'
3
3
 
4
4
  const isProviderQualified = (model: string) => model.includes('/')
@@ -18,22 +18,22 @@ import {
18
18
  resolveOwnerResourceId,
19
19
  sessionPrincipals,
20
20
  threadOwnerConstraint,
21
- } from './ai-agent-prepare.js'
21
+ } from './agent-prepare.js'
22
22
  import { ForbiddenError, MissingCredentialError } from '../../errors/errors.js'
23
23
  import { pikkuAuth } from '../../function/functions.types.js'
24
24
  import type {
25
- AIStreamChannel,
26
- AIStreamEvent,
27
- CoreAIAgent,
28
- PikkuAIMiddlewareHooks,
29
- } from './ai-agent.types.js'
25
+ AgentStreamChannel,
26
+ AgentStreamEvent,
27
+ CoreAgent,
28
+ PikkuAgentMiddlewareHooks,
29
+ } from './agent.types.js'
30
30
 
31
31
  beforeEach(() => {
32
32
  resetPikkuState()
33
33
  })
34
34
 
35
- const addAgent = (agentName: string, overrides: Partial<CoreAIAgent> = {}) => {
36
- const agent: CoreAIAgent = {
35
+ const addAgent = (agentName: string, overrides: Partial<CoreAgent> = {}) => {
36
+ const agent: CoreAgent = {
37
37
  name: agentName,
38
38
  description: `${agentName} description`,
39
39
  goal: `${agentName} goal`,
@@ -51,7 +51,7 @@ const addAgent = (agentName: string, overrides: Partial<CoreAIAgent> = {}) => {
51
51
  } as any
52
52
  }
53
53
 
54
- describe('ai-agent-prepare', () => {
54
+ describe('agent-prepare', () => {
55
55
  test('getAddonCredentialRequirements returns deduplicated wire oauth credentials', () => {
56
56
  pikkuState(null, 'addons', 'packages').set('github', {
57
57
  package: '@test/github-addon',
@@ -88,7 +88,7 @@ describe('ai-agent-prepare', () => {
88
88
  test('resolveAgent resolves root and addon agents and rejects missing names', () => {
89
89
  addAgent('root-agent')
90
90
 
91
- const addonAgent: CoreAIAgent = {
91
+ const addonAgent: CoreAgent = {
92
92
  name: 'addon-agent',
93
93
  description: 'addon',
94
94
  goal: 'addon goal',
@@ -164,13 +164,13 @@ describe('ai-agent-prepare', () => {
164
164
  })
165
165
 
166
166
  test('createScopedChannel forwards stream events, captures approvals, and suppresses done', () => {
167
- const events: AIStreamEvent[] = []
167
+ const events: AgentStreamEvent[] = []
168
168
  const channel = createScopedChannel(
169
169
  {
170
170
  channelId: 'root',
171
171
  openingData: undefined,
172
172
  state: 'open',
173
- send: (event: AIStreamEvent) => {
173
+ send: (event: AgentStreamEvent) => {
174
174
  events.push(event)
175
175
  },
176
176
  sendBinary: () => {},
@@ -178,12 +178,12 @@ describe('ai-agent-prepare', () => {
178
178
  setState: () => {},
179
179
  getState: () => 'open',
180
180
  clearState: () => {},
181
- } as AIStreamChannel,
181
+ } as AgentStreamChannel,
182
182
  'sub-agent',
183
183
  'session-1'
184
184
  )
185
185
 
186
- channel.send({ type: 'text-delta', text: 'hello' } as AIStreamEvent)
186
+ channel.send({ type: 'text-delta', text: 'hello' } as AgentStreamEvent)
187
187
  channel.send({
188
188
  type: 'approval-request',
189
189
  toolCallId: 'tc-1',
@@ -191,8 +191,8 @@ describe('ai-agent-prepare', () => {
191
191
  args: { x: 1 },
192
192
  reason: 'Delete todo "x"',
193
193
  runId: 'run-1',
194
- } as AIStreamEvent)
195
- channel.send({ type: 'done' } as AIStreamEvent)
194
+ } as AgentStreamEvent)
195
+ channel.send({ type: 'done' } as AgentStreamEvent)
196
196
 
197
197
  assert.equal(events.length, 1)
198
198
  assert.equal(events[0].type, 'text-delta')
@@ -232,7 +232,7 @@ describe('ai-agent-prepare', () => {
232
232
 
233
233
  const beforeCalls: unknown[] = []
234
234
  const afterCalls: unknown[] = []
235
- const middlewares: PikkuAIMiddlewareHooks[] = [
235
+ const middlewares: PikkuAgentMiddlewareHooks[] = [
236
236
  {
237
237
  beforeToolCall: async (_services, ctx) => {
238
238
  beforeCalls.push(ctx)
@@ -333,7 +333,7 @@ describe('ai-agent-prepare', () => {
333
333
  )
334
334
  })
335
335
 
336
- test('buildToolDefs logs a tool execute() failure even without aiMiddleware hooks, then rethrows', async () => {
336
+ test('buildToolDefs logs a tool execute() failure even without agentMiddleware hooks, then rethrows', async () => {
337
337
  addAgent('ops-agent')
338
338
  pikkuState(null, 'agent', 'agentsMeta')['ops-agent'] = {
339
339
  ...pikkuState(null, 'agent', 'agentsMeta')['ops-agent'],
@@ -1,16 +1,16 @@
1
1
  import type { PikkuRawWire, CoreUserSession } from '../../types/core.types.js'
2
2
  import type {
3
- CoreAIAgent,
4
- AIAgentInput,
5
- AIAgentToolDef,
6
- AIContentPart,
7
- AIMessage,
8
- AIStreamChannel,
9
- AIStreamEvent,
10
- PikkuAIMiddlewareHooks,
3
+ CoreAgent,
4
+ AgentInput,
5
+ AgentToolDef,
6
+ AgentContentPart,
7
+ AgentMessage,
8
+ AgentStreamChannel,
9
+ AgentStreamEvent,
10
+ PikkuAgentMiddlewareHooks,
11
11
  SessionScope,
12
- } from './ai-agent.types.js'
13
- import type { AIAgentRunnerParams } from '../../services/ai-agent-runner-service.js'
12
+ } from './agent.types.js'
13
+ import type { AgentRunnerParams } from '../../services/agent-runner-service.js'
14
14
  import { PikkuError } from '../../errors/error-handler.js'
15
15
  import {
16
16
  checkAuthPermissions,
@@ -23,10 +23,10 @@ import { verifyScopes } from '../../scopes.js'
23
23
  import { pikkuState, getSingletonServices } from '../../pikku-state.js'
24
24
  import { createMiddlewareSessionWireProps } from '../../services/user-session-service.js'
25
25
  import type { SessionService } from '../../services/user-session-service.js'
26
- import { randomUUID } from './ai-agent-utils.js'
27
- import { awaitPendingInterruptNote } from './ai-agent-interrupt.js'
28
- import { streamAIAgent } from './ai-agent-stream.js'
29
- import { runAIAgent } from './ai-agent-runner.js'
26
+ import { randomUUID } from './agent-utils.js'
27
+ import { awaitPendingInterruptNote } from './agent-interrupt.js'
28
+ import { streamAgent } from './agent-stream.js'
29
+ import { runAgent } from './agent-runner.js'
30
30
  import {
31
31
  resolveNamespace,
32
32
  ContextAwareRPCService,
@@ -36,10 +36,10 @@ import {
36
36
  resolveMemoryServices,
37
37
  loadContextMessages,
38
38
  trimMessages,
39
- } from './ai-agent-memory.js'
40
- import { resolveModelConfig } from './ai-agent-model-config.js'
39
+ } from './agent-memory.js'
40
+ import { resolveModelConfig } from './agent-model-config.js'
41
41
 
42
- export type RunAIAgentParams = {
42
+ export type RunAgentParams = {
43
43
  sessionService?: SessionService<CoreUserSession>
44
44
  /** Credential accessor for the current request — used to read per-user overrides (e.g. AI_API_KEY). */
45
45
  getCredential?: <T = unknown>(name: string) => T | null | Promise<T | null>
@@ -48,7 +48,7 @@ export type RunAIAgentParams = {
48
48
  }
49
49
 
50
50
  export function resolveSessionPrincipal(
51
- params: RunAIAgentParams,
51
+ params: RunAgentParams,
52
52
  sessionScope: SessionScope | undefined
53
53
  ): string | undefined {
54
54
  const session = params.sessionService?.get()
@@ -64,7 +64,7 @@ export function resolveSessionPrincipal(
64
64
  }
65
65
 
66
66
  export function resolveOwnerResourceId(
67
- params: RunAIAgentParams,
67
+ params: RunAgentParams,
68
68
  sessionScope: SessionScope | undefined,
69
69
  requestedResourceId: string
70
70
  ): string {
@@ -85,7 +85,7 @@ export function resolveOwnerResourceId(
85
85
  }
86
86
 
87
87
  export function assertResourcePrincipalOwner(
88
- params: RunAIAgentParams,
88
+ params: RunAgentParams,
89
89
  sessionScope: SessionScope | undefined,
90
90
  storedResourceId: string,
91
91
  kind: 'thread' | 'run'
@@ -145,7 +145,7 @@ export function canAccessThread(
145
145
  )
146
146
  }
147
147
 
148
- export type StreamAIAgentOptions = {
148
+ export type StreamAgentOptions = {
149
149
  requiresToolApproval?: 'all' | 'explicit' | false
150
150
  onRunCreated?: (runId: string) => void
151
151
  }
@@ -258,14 +258,14 @@ export function getAddonCredentialRequirements(
258
258
  }
259
259
 
260
260
  export type StreamContext = {
261
- channel: AIStreamChannel
262
- options?: StreamAIAgentOptions
261
+ channel: AgentStreamChannel
262
+ options?: StreamAgentOptions
263
263
  delegateState?: { delegated: boolean }
264
264
  }
265
265
 
266
266
  export const resolveAgent = (
267
267
  agentName: string
268
- ): { agent: CoreAIAgent; packageName: string | null; resolvedName: string } => {
268
+ ): { agent: CoreAgent; packageName: string | null; resolvedName: string } => {
269
269
  if (!agentName) {
270
270
  console.error(
271
271
  '[resolveAgent] agentName is undefined/null! Stack:',
@@ -302,8 +302,8 @@ export const resolveAgent = (
302
302
  }
303
303
 
304
304
  export async function assertAgentAuthorized(
305
- agent: CoreAIAgent,
306
- params: RunAIAgentParams,
305
+ agent: CoreAgent,
306
+ params: RunAgentParams,
307
307
  packageName: string | null
308
308
  ): Promise<void> {
309
309
  const session = params.sessionService
@@ -363,7 +363,7 @@ export async function buildInstructions(
363
363
  return instructions
364
364
  }
365
365
 
366
- export type ScopedChannel = AIStreamChannel & {
366
+ export type ScopedChannel = AgentStreamChannel & {
367
367
  approvals: Array<{
368
368
  toolCallId: string
369
369
  toolName: string
@@ -374,7 +374,7 @@ export type ScopedChannel = AIStreamChannel & {
374
374
  }
375
375
 
376
376
  export function createScopedChannel(
377
- parent: AIStreamChannel,
377
+ parent: AgentStreamChannel,
378
378
  agentName: string,
379
379
  session: string
380
380
  ): ScopedChannel {
@@ -391,7 +391,7 @@ export function createScopedChannel(
391
391
  },
392
392
  close: () => {},
393
393
  sendBinary: (data) => parent.sendBinary(data),
394
- send: (event: AIStreamEvent) => {
394
+ send: (event: AgentStreamEvent) => {
395
395
  if (event.type === 'done') return
396
396
  if (event.type === 'approval-request') {
397
397
  capturedApprovals.push({
@@ -412,7 +412,7 @@ export function createScopedChannel(
412
412
  event.type === 'usage' ||
413
413
  event.type === 'error'
414
414
  ) {
415
- parent.send({ ...event, agent: agentName, session } as AIStreamEvent)
415
+ parent.send({ ...event, agent: agentName, session } as AgentStreamEvent)
416
416
  } else {
417
417
  parent.send(event)
418
418
  }
@@ -434,18 +434,18 @@ export function buildSubAgentRunInput(
434
434
  }
435
435
 
436
436
  export async function buildToolDefs(
437
- params: RunAIAgentParams,
437
+ params: RunAgentParams,
438
438
  agentSessionMap: Map<string, string>,
439
439
  resourceId: string,
440
440
  agentName: string,
441
441
  packageName: string | null,
442
442
  streamContext?: StreamContext,
443
- aiMiddlewares?: PikkuAIMiddlewareHooks[],
443
+ agentMiddlewares?: PikkuAgentMiddlewareHooks[],
444
444
  agentMode?: 'delegate' | 'supervise',
445
445
  parentContext?: string
446
- ): Promise<{ tools: AIAgentToolDef[]; missingRpcs: string[] }> {
446
+ ): Promise<{ tools: AgentToolDef[]; missingRpcs: string[] }> {
447
447
  const singletonServices = getSingletonServices()
448
- const tools: AIAgentToolDef[] = []
448
+ const tools: AgentToolDef[] = []
449
449
  const missingRpcs: string[] = []
450
450
  const approvalPolicy =
451
451
  streamContext?.options?.requiresToolApproval ?? 'explicit'
@@ -565,6 +565,8 @@ export async function buildToolDefs(
565
565
  variableOverrides: capturedAddonConfig?.variableOverrides,
566
566
  credentialOverrides:
567
567
  capturedAddonConfig?.credentialOverrides,
568
+ secretGrants: capturedAddonConfig?.secretGrants,
569
+ credentialGrants: capturedAddonConfig?.credentialGrants,
568
570
  globalSecrets: capturedAddonConfig?.globalSecrets,
569
571
  globalCredentials: capturedAddonConfig?.globalCredentials,
570
572
  }
@@ -676,7 +678,7 @@ export async function buildToolDefs(
676
678
  ? subChannel
677
679
  : {
678
680
  ...subChannel,
679
- send: (event: AIStreamEvent) => {
681
+ send: (event: AgentStreamEvent) => {
680
682
  if (
681
683
  event.type === 'text-delta' ||
682
684
  event.type === 'reasoning-delta'
@@ -685,7 +687,7 @@ export async function buildToolDefs(
685
687
  subChannel.send(event)
686
688
  },
687
689
  }
688
- const resultText = await streamAIAgent(
690
+ const resultText = await streamAgent(
689
691
  subAgentName,
690
692
  buildSubAgentRunInput(
691
693
  message,
@@ -717,7 +719,7 @@ export async function buildToolDefs(
717
719
  return resultText
718
720
  }
719
721
 
720
- const result = await runAIAgent(
722
+ const result = await runAgent(
721
723
  subAgentName,
722
724
  buildSubAgentRunInput(message, threadId, resourceId, parentContext),
723
725
  params,
@@ -828,7 +830,7 @@ export async function buildToolDefs(
828
830
  }
829
831
  }
830
832
 
831
- const hasToolHooks = aiMiddlewares?.some(
833
+ const hasToolHooks = agentMiddlewares?.some(
832
834
  (mw) => mw.beforeToolCall || mw.afterToolCall
833
835
  )
834
836
  if (hasToolHooks) {
@@ -838,7 +840,7 @@ export async function buildToolDefs(
838
840
  const toolCallId = randomUUID()
839
841
  let args = (toolInput ?? {}) as Record<string, unknown>
840
842
 
841
- for (const mw of aiMiddlewares!) {
843
+ for (const mw of agentMiddlewares!) {
842
844
  if (mw.beforeToolCall) {
843
845
  const beforeResult = await mw.beforeToolCall(singletonServices, {
844
846
  toolName: tool.name,
@@ -863,8 +865,8 @@ export async function buildToolDefs(
863
865
  }
864
866
  const durationMs = Date.now() - startTime
865
867
 
866
- for (let i = aiMiddlewares!.length - 1; i >= 0; i--) {
867
- const mw = aiMiddlewares![i]
868
+ for (let i = agentMiddlewares!.length - 1; i >= 0; i--) {
869
+ const mw = agentMiddlewares![i]
868
870
  if (mw.afterToolCall) {
869
871
  const afterResult = await mw.afterToolCall(singletonServices, {
870
872
  toolName: tool.name,
@@ -890,8 +892,8 @@ export async function buildToolDefs(
890
892
 
891
893
  export async function prepareAgentRun(
892
894
  agentName: string,
893
- input: AIAgentInput,
894
- params: RunAIAgentParams,
895
+ input: AgentInput,
896
+ params: RunAgentParams,
895
897
  agentSessionMap: Map<string, string>,
896
898
  streamContext?: StreamContext
897
899
  ) {
@@ -900,7 +902,7 @@ export async function prepareAgentRun(
900
902
 
901
903
  await assertAgentAuthorized(agent, params, packageName)
902
904
 
903
- let agentRunner = singletonServices.aiAgentRunner
905
+ let agentRunner = singletonServices.agentRunner
904
906
  if (!agentRunner) {
905
907
  throw new AIProviderNotConfiguredError()
906
908
  }
@@ -944,7 +946,7 @@ export async function prepareAgentRun(
944
946
  }
945
947
  }
946
948
 
947
- let messages: AIMessage[] = []
949
+ let messages: AgentMessage[] = []
948
950
  if (storage) {
949
951
  // knowledge: decisions/internals/agent-context-waits-for-a-tool-result-still-being-written.md
950
952
  await awaitPendingInterruptNote(threadId)
@@ -960,7 +962,7 @@ export async function prepareAgentRun(
960
962
  workingMemoryJsonSchema
961
963
  )
962
964
 
963
- const userContent: AIMessage['content'] = input.attachments?.length
965
+ const userContent: AgentMessage['content'] = input.attachments?.length
964
966
  ? [
965
967
  // knowledge: decisions/internals/an-empty-text-part-is-omitted-from-an-agent-message.md
966
968
  ...(input.message
@@ -974,12 +976,12 @@ export async function prepareAgentRun(
974
976
  url: a.url,
975
977
  mediaType: a.mediaType,
976
978
  ...(a.filename ? { filename: a.filename } : {}),
977
- }) as AIContentPart
979
+ }) as AgentContentPart
978
980
  ),
979
981
  ]
980
982
  : input.message
981
983
 
982
- const userMessage: AIMessage = {
984
+ const userMessage: AgentMessage = {
983
985
  id: randomUUID(),
984
986
  role: 'user',
985
987
  content: userContent,
@@ -989,7 +991,8 @@ export async function prepareAgentRun(
989
991
  const allMessages = [...contextMessages, ...messages, userMessage]
990
992
  const trimmedMessages = trimMessages(allMessages)
991
993
 
992
- const aiMiddlewares: PikkuAIMiddlewareHooks[] = agent.aiMiddleware ?? []
994
+ const agentMiddlewares: PikkuAgentMiddlewareHooks[] =
995
+ agent.agentMiddleware ?? []
993
996
 
994
997
  const { tools, missingRpcs } = await buildToolDefs(
995
998
  params,
@@ -998,7 +1001,7 @@ export async function prepareAgentRun(
998
1001
  resolvedName,
999
1002
  packageName,
1000
1003
  streamContext,
1001
- aiMiddlewares,
1004
+ agentMiddlewares,
1002
1005
  agent.agentMode,
1003
1006
  input.context
1004
1007
  )
@@ -1022,7 +1025,7 @@ export async function prepareAgentRun(
1022
1025
 
1023
1026
  const maxSteps = resolved.maxSteps ?? 10
1024
1027
 
1025
- const runnerParams: AIAgentRunnerParams = {
1028
+ const runnerParams: AgentRunnerParams = {
1026
1029
  model: resolved.model,
1027
1030
  temperature: resolved.temperature,
1028
1031
  instructions,