@theoremjs/agents 0.0.0-stage → 0.3.1

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 (588) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +545 -2
  3. package/esm/_dnt.polyfills.d.ts +66 -0
  4. package/esm/_dnt.polyfills.js +51 -0
  5. package/esm/mod.d.ts +79 -0
  6. package/esm/mod.js +49 -0
  7. package/esm/package.json +3 -0
  8. package/esm/src/cli/bin.d.ts +7 -0
  9. package/esm/src/cli/bin.js +9 -0
  10. package/esm/src/cli/commands/bench.d.ts +6 -0
  11. package/esm/src/cli/commands/bench.js +480 -0
  12. package/esm/src/cli/commands/detect-compile.d.ts +17 -0
  13. package/esm/src/cli/commands/detect-compile.js +22 -0
  14. package/esm/src/cli/commands/eval.d.ts +37 -0
  15. package/esm/src/cli/commands/eval.js +190 -0
  16. package/esm/src/cli/commands/fuzz-canary.d.ts +15 -0
  17. package/esm/src/cli/commands/fuzz-canary.js +241 -0
  18. package/esm/src/cli/commands/fuzz-guardrails.d.ts +2 -0
  19. package/esm/src/cli/commands/fuzz-guardrails.js +5 -0
  20. package/esm/src/cli/commands/profile.d.ts +2 -0
  21. package/esm/src/cli/commands/profile.js +80 -0
  22. package/esm/src/cli/commands/run.d.ts +13 -0
  23. package/esm/src/cli/commands/run.js +45 -0
  24. package/esm/src/cli/commands/test.d.ts +26 -0
  25. package/esm/src/cli/commands/test.js +143 -0
  26. package/esm/src/cli/event-log.d.ts +15 -0
  27. package/esm/src/cli/event-log.js +136 -0
  28. package/esm/src/cli/index.d.ts +10 -0
  29. package/esm/src/cli/index.js +267 -0
  30. package/esm/src/cli/matrix/fixtures.d.ts +10 -0
  31. package/esm/src/cli/matrix/fixtures.js +67 -0
  32. package/esm/src/cli/matrix/synthesizer.d.ts +18 -0
  33. package/esm/src/cli/matrix/synthesizer.js +103 -0
  34. package/esm/src/evals/attachments.d.ts +5 -0
  35. package/esm/src/evals/attachments.js +55 -0
  36. package/esm/src/evals/breakdown.d.ts +30 -0
  37. package/esm/src/evals/breakdown.js +69 -0
  38. package/esm/src/evals/graders/answer.d.ts +16 -0
  39. package/esm/src/evals/graders/answer.js +134 -0
  40. package/esm/src/evals/graders/code.d.ts +40 -0
  41. package/esm/src/evals/graders/code.js +184 -0
  42. package/esm/src/evals/graders/judge.d.ts +24 -0
  43. package/esm/src/evals/graders/judge.js +367 -0
  44. package/esm/src/evals/graders/latency.d.ts +6 -0
  45. package/esm/src/evals/graders/latency.js +82 -0
  46. package/esm/src/evals/graders/live.d.ts +14 -0
  47. package/esm/src/evals/graders/live.js +42 -0
  48. package/esm/src/evals/graders/media.d.ts +18 -0
  49. package/esm/src/evals/graders/media.js +91 -0
  50. package/esm/src/evals/graders/shared.d.ts +11 -0
  51. package/esm/src/evals/graders/shared.js +62 -0
  52. package/esm/src/evals/graders/transcript.d.ts +19 -0
  53. package/esm/src/evals/graders/transcript.js +202 -0
  54. package/esm/src/evals/mod.d.ts +34 -0
  55. package/esm/src/evals/mod.js +22 -0
  56. package/esm/src/evals/record.d.ts +41 -0
  57. package/esm/src/evals/record.js +107 -0
  58. package/esm/src/evals/rubrics/catalog.d.ts +148 -0
  59. package/esm/src/evals/rubrics/catalog.js +846 -0
  60. package/esm/src/evals/rubrics/mod.d.ts +24 -0
  61. package/esm/src/evals/rubrics/mod.js +55 -0
  62. package/esm/src/evals/rubrics/mustache.d.ts +23 -0
  63. package/esm/src/evals/rubrics/mustache.js +154 -0
  64. package/esm/src/evals/rubrics/types.d.ts +54 -0
  65. package/esm/src/evals/rubrics/types.js +74 -0
  66. package/esm/src/evals/run.d.ts +75 -0
  67. package/esm/src/evals/run.js +418 -0
  68. package/esm/src/evals/suite.d.ts +28 -0
  69. package/esm/src/evals/suite.js +97 -0
  70. package/esm/src/evals/summary.d.ts +35 -0
  71. package/esm/src/evals/summary.js +31 -0
  72. package/esm/src/evals/trial.d.ts +14 -0
  73. package/esm/src/evals/trial.js +135 -0
  74. package/esm/src/evals/types.d.ts +169 -0
  75. package/esm/src/evals/types.js +113 -0
  76. package/esm/src/evals/verdict.d.ts +23 -0
  77. package/esm/src/evals/verdict.js +48 -0
  78. package/esm/src/guardrails/boundaries.d.ts +41 -0
  79. package/esm/src/guardrails/boundaries.js +103 -0
  80. package/esm/src/guardrails/canary-gate.d.ts +22 -0
  81. package/esm/src/guardrails/canary-gate.js +40 -0
  82. package/esm/src/guardrails/canary.d.ts +146 -0
  83. package/esm/src/guardrails/canary.js +974 -0
  84. package/esm/src/guardrails/compile-egress.d.ts +12 -0
  85. package/esm/src/guardrails/compile-egress.js +12 -0
  86. package/esm/src/guardrails/corpus/canary-egress-attacks.d.ts +24 -0
  87. package/esm/src/guardrails/corpus/canary-egress-attacks.js +305 -0
  88. package/esm/src/guardrails/corpus/fuzz-inbound.d.ts +5 -0
  89. package/esm/src/guardrails/corpus/fuzz-inbound.js +199 -0
  90. package/esm/src/guardrails/corpus/inbound-payloads.d.ts +5 -0
  91. package/esm/src/guardrails/corpus/inbound-payloads.js +120 -0
  92. package/esm/src/guardrails/corpus/live-attacks.d.ts +15 -0
  93. package/esm/src/guardrails/corpus/live-attacks.js +229 -0
  94. package/esm/src/guardrails/corpus/mod.d.ts +7 -0
  95. package/esm/src/guardrails/corpus/mod.js +4 -0
  96. package/esm/src/guardrails/corpus/secrets.d.ts +12 -0
  97. package/esm/src/guardrails/corpus/secrets.js +16 -0
  98. package/esm/src/guardrails/corpus/strings.d.ts +23 -0
  99. package/esm/src/guardrails/corpus/strings.js +29 -0
  100. package/esm/src/guardrails/corpus/types.d.ts +36 -0
  101. package/esm/src/guardrails/corpus/types.js +1 -0
  102. package/esm/src/guardrails/credential-rules.d.ts +36 -0
  103. package/esm/src/guardrails/credential-rules.js +3001 -0
  104. package/esm/src/guardrails/credential-scan.d.ts +45 -0
  105. package/esm/src/guardrails/credential-scan.js +172 -0
  106. package/esm/src/guardrails/destinations.d.ts +45 -0
  107. package/esm/src/guardrails/destinations.js +234 -0
  108. package/esm/src/guardrails/detect-at.d.ts +107 -0
  109. package/esm/src/guardrails/detect-at.js +434 -0
  110. package/esm/src/guardrails/detect-reply.d.ts +61 -0
  111. package/esm/src/guardrails/detect-reply.js +95 -0
  112. package/esm/src/guardrails/detect-stream.d.ts +33 -0
  113. package/esm/src/guardrails/detect-stream.js +77 -0
  114. package/esm/src/guardrails/detectors.d.ts +216 -0
  115. package/esm/src/guardrails/detectors.js +503 -0
  116. package/esm/src/guardrails/egress-automata.d.ts +12 -0
  117. package/esm/src/guardrails/egress-automata.js +25582 -0
  118. package/esm/src/guardrails/egress-compiler.d.ts +55 -0
  119. package/esm/src/guardrails/egress-compiler.js +431 -0
  120. package/esm/src/guardrails/egress-patterns.d.ts +26 -0
  121. package/esm/src/guardrails/egress-patterns.js +36 -0
  122. package/esm/src/guardrails/egress-stream.d.ts +123 -0
  123. package/esm/src/guardrails/egress-stream.js +774 -0
  124. package/esm/src/guardrails/egress-urls.d.ts +86 -0
  125. package/esm/src/guardrails/egress-urls.js +909 -0
  126. package/esm/src/guardrails/egress.d.ts +46 -0
  127. package/esm/src/guardrails/egress.js +124 -0
  128. package/esm/src/guardrails/error.d.ts +31 -0
  129. package/esm/src/guardrails/error.js +96 -0
  130. package/esm/src/guardrails/event-schemas.d.ts +100 -0
  131. package/esm/src/guardrails/event-schemas.js +48 -0
  132. package/esm/src/guardrails/events.d.ts +13 -0
  133. package/esm/src/guardrails/events.js +45 -0
  134. package/esm/src/guardrails/hints.d.ts +14 -0
  135. package/esm/src/guardrails/hints.js +57 -0
  136. package/esm/src/guardrails/hits.d.ts +14 -0
  137. package/esm/src/guardrails/hits.js +30 -0
  138. package/esm/src/guardrails/host-patterns.d.ts +85 -0
  139. package/esm/src/guardrails/host-patterns.js +173 -0
  140. package/esm/src/guardrails/injection-patterns.d.ts +20 -0
  141. package/esm/src/guardrails/injection-patterns.js +126 -0
  142. package/esm/src/guardrails/injection-reversed.d.ts +9 -0
  143. package/esm/src/guardrails/injection-reversed.js +49 -0
  144. package/esm/src/guardrails/injection.d.ts +30 -0
  145. package/esm/src/guardrails/injection.js +460 -0
  146. package/esm/src/guardrails/labels.d.ts +40 -0
  147. package/esm/src/guardrails/labels.js +874 -0
  148. package/esm/src/guardrails/live-outbound-gate.d.ts +55 -0
  149. package/esm/src/guardrails/live-outbound-gate.js +298 -0
  150. package/esm/src/guardrails/mod.d.ts +54 -0
  151. package/esm/src/guardrails/mod.js +34 -0
  152. package/esm/src/guardrails/network.d.ts +46 -0
  153. package/esm/src/guardrails/network.js +330 -0
  154. package/esm/src/guardrails/normalize.d.ts +20 -0
  155. package/esm/src/guardrails/normalize.js +165 -0
  156. package/esm/src/guardrails/policy.d.ts +4 -0
  157. package/esm/src/guardrails/policy.js +21 -0
  158. package/esm/src/guardrails/progressive-yield.d.ts +110 -0
  159. package/esm/src/guardrails/progressive-yield.js +281 -0
  160. package/esm/src/guardrails/prompt-echo.d.ts +40 -0
  161. package/esm/src/guardrails/prompt-echo.js +306 -0
  162. package/esm/src/guardrails/quota.d.ts +21 -0
  163. package/esm/src/guardrails/quota.js +80 -0
  164. package/esm/src/guardrails/rules.d.ts +47 -0
  165. package/esm/src/guardrails/rules.js +47 -0
  166. package/esm/src/guardrails/sanitize.d.ts +40 -0
  167. package/esm/src/guardrails/sanitize.js +160 -0
  168. package/esm/src/guardrails/sensitive-groups.d.ts +21 -0
  169. package/esm/src/guardrails/sensitive-groups.js +12 -0
  170. package/esm/src/guardrails/sensitive.d.ts +22 -0
  171. package/esm/src/guardrails/sensitive.js +234 -0
  172. package/esm/src/guardrails/serialize.d.ts +15 -0
  173. package/esm/src/guardrails/serialize.js +37 -0
  174. package/esm/src/guardrails/testing.d.ts +11 -0
  175. package/esm/src/guardrails/testing.js +10 -0
  176. package/esm/src/guardrails/theorem-error.d.ts +21 -0
  177. package/esm/src/guardrails/theorem-error.js +54 -0
  178. package/esm/src/guardrails/thought-guard.d.ts +76 -0
  179. package/esm/src/guardrails/thought-guard.js +664 -0
  180. package/esm/src/guardrails/tool-directives.d.ts +38 -0
  181. package/esm/src/guardrails/tool-directives.js +195 -0
  182. package/esm/src/guardrails/tool-leak.d.ts +26 -0
  183. package/esm/src/guardrails/tool-leak.js +45 -0
  184. package/esm/src/guardrails/tool-result.d.ts +92 -0
  185. package/esm/src/guardrails/tool-result.js +272 -0
  186. package/esm/src/guardrails/types.d.ts +250 -0
  187. package/esm/src/guardrails/types.js +58 -0
  188. package/esm/src/host/client-turn.d.ts +36 -0
  189. package/esm/src/host/client-turn.js +80 -0
  190. package/esm/src/host/mint-trace.d.ts +29 -0
  191. package/esm/src/host/mint-trace.js +60 -0
  192. package/esm/src/host/mod.d.ts +13 -0
  193. package/esm/src/host/mod.js +11 -0
  194. package/esm/src/host/readStreamingJsonStringField.d.ts +2 -0
  195. package/esm/src/host/readStreamingJsonStringField.js +27 -0
  196. package/esm/src/host/reply.d.ts +13 -0
  197. package/esm/src/host/reply.js +41 -0
  198. package/esm/src/interface/blocks.d.ts +11 -0
  199. package/esm/src/interface/blocks.js +283 -0
  200. package/esm/src/interface/composer-actions.d.ts +24 -0
  201. package/esm/src/interface/composer-actions.js +33 -0
  202. package/esm/src/interface/draft.d.ts +20 -0
  203. package/esm/src/interface/draft.js +39 -0
  204. package/esm/src/interface/from-profile.d.ts +24 -0
  205. package/esm/src/interface/from-profile.js +179 -0
  206. package/esm/src/interface/history.d.ts +46 -0
  207. package/esm/src/interface/history.js +278 -0
  208. package/esm/src/interface/inputs.d.ts +11 -0
  209. package/esm/src/interface/inputs.js +67 -0
  210. package/esm/src/interface/mod.d.ts +33 -0
  211. package/esm/src/interface/mod.js +22 -0
  212. package/esm/src/interface/models.d.ts +26 -0
  213. package/esm/src/interface/models.js +50 -0
  214. package/esm/src/interface/pending.d.ts +57 -0
  215. package/esm/src/interface/pending.js +152 -0
  216. package/esm/src/interface/profile-interface.d.ts +4 -0
  217. package/esm/src/interface/profile-interface.js +237 -0
  218. package/esm/src/interface/session.d.ts +71 -0
  219. package/esm/src/interface/session.js +128 -0
  220. package/esm/src/interface/stop.d.ts +13 -0
  221. package/esm/src/interface/stop.js +28 -0
  222. package/esm/src/interface/tool-calls.d.ts +32 -0
  223. package/esm/src/interface/tool-calls.js +127 -0
  224. package/esm/src/interface/tool-invoke.d.ts +6 -0
  225. package/esm/src/interface/tool-invoke.js +22 -0
  226. package/esm/src/interface/tool-media.d.ts +11 -0
  227. package/esm/src/interface/tool-media.js +113 -0
  228. package/esm/src/interface/types.d.ts +278 -0
  229. package/esm/src/interface/types.js +5 -0
  230. package/esm/src/kernel/api-catalog.d.ts +85 -0
  231. package/esm/src/kernel/api-catalog.js +229 -0
  232. package/esm/src/kernel/auth/credential-source.d.ts +23 -0
  233. package/esm/src/kernel/auth/credential-source.js +11 -0
  234. package/esm/src/kernel/auth/crypto.d.ts +56 -0
  235. package/esm/src/kernel/auth/crypto.js +163 -0
  236. package/esm/src/kernel/auth/mod.d.ts +5 -0
  237. package/esm/src/kernel/auth/mod.js +5 -0
  238. package/esm/src/kernel/auth/oauth.d.ts +18 -0
  239. package/esm/src/kernel/auth/oauth.js +439 -0
  240. package/esm/src/kernel/auth/scope-refusal.d.ts +9 -0
  241. package/esm/src/kernel/auth/scope-refusal.js +8 -0
  242. package/esm/src/kernel/auth/typed-secret.d.ts +13 -0
  243. package/esm/src/kernel/auth/typed-secret.js +23 -0
  244. package/esm/src/kernel/auth/types.d.ts +152 -0
  245. package/esm/src/kernel/auth/types.js +1 -0
  246. package/esm/src/kernel/checkpoint.d.ts +43 -0
  247. package/esm/src/kernel/checkpoint.js +58 -0
  248. package/esm/src/kernel/default-scope.d.ts +72 -0
  249. package/esm/src/kernel/default-scope.js +121 -0
  250. package/esm/src/kernel/engine/call-trace.d.ts +19 -0
  251. package/esm/src/kernel/engine/call-trace.js +29 -0
  252. package/esm/src/kernel/engine/compaction.d.ts +71 -0
  253. package/esm/src/kernel/engine/compaction.js +203 -0
  254. package/esm/src/kernel/engine/decision.d.ts +43 -0
  255. package/esm/src/kernel/engine/decision.js +439 -0
  256. package/esm/src/kernel/engine/embedding.d.ts +8 -0
  257. package/esm/src/kernel/engine/embedding.js +118 -0
  258. package/esm/src/kernel/engine/hash.d.ts +6 -0
  259. package/esm/src/kernel/engine/hash.js +22 -0
  260. package/esm/src/kernel/engine/live-inbound.d.ts +19 -0
  261. package/esm/src/kernel/engine/live-inbound.js +44 -0
  262. package/esm/src/kernel/engine/live-ingress.d.ts +15 -0
  263. package/esm/src/kernel/engine/live-ingress.js +42 -0
  264. package/esm/src/kernel/engine/record.d.ts +3 -0
  265. package/esm/src/kernel/engine/record.js +11 -0
  266. package/esm/src/kernel/engine/repair.d.ts +7 -0
  267. package/esm/src/kernel/engine/repair.js +36 -0
  268. package/esm/src/kernel/engine/runner/gates.d.ts +5 -0
  269. package/esm/src/kernel/engine/runner/gates.js +508 -0
  270. package/esm/src/kernel/engine/runner/mod.d.ts +29 -0
  271. package/esm/src/kernel/engine/runner/mod.js +625 -0
  272. package/esm/src/kernel/engine/runner/nested.d.ts +32 -0
  273. package/esm/src/kernel/engine/runner/nested.js +134 -0
  274. package/esm/src/kernel/engine/runner/schema-validation.d.ts +35 -0
  275. package/esm/src/kernel/engine/runner/schema-validation.js +179 -0
  276. package/esm/src/kernel/engine/runner/stages.d.ts +28 -0
  277. package/esm/src/kernel/engine/runner/stages.js +41 -0
  278. package/esm/src/kernel/engine/runner/state.d.ts +97 -0
  279. package/esm/src/kernel/engine/runner/state.js +50 -0
  280. package/esm/src/kernel/engine/runner/step-order.d.ts +27 -0
  281. package/esm/src/kernel/engine/runner/step-order.js +165 -0
  282. package/esm/src/kernel/engine/runner/steps.d.ts +14 -0
  283. package/esm/src/kernel/engine/runner/steps.js +519 -0
  284. package/esm/src/kernel/engine/runner/stream.d.ts +71 -0
  285. package/esm/src/kernel/engine/runner/stream.js +376 -0
  286. package/esm/src/kernel/engine/runner/usage.d.ts +45 -0
  287. package/esm/src/kernel/engine/runner/usage.js +148 -0
  288. package/esm/src/kernel/engine/session/mod.d.ts +33 -0
  289. package/esm/src/kernel/engine/session/mod.js +1182 -0
  290. package/esm/src/kernel/engine/session/session-trace.d.ts +115 -0
  291. package/esm/src/kernel/engine/session/session-trace.js +500 -0
  292. package/esm/src/kernel/engine/token-estimate.d.ts +23 -0
  293. package/esm/src/kernel/engine/token-estimate.js +38 -0
  294. package/esm/src/kernel/engine/tool-trace.d.ts +58 -0
  295. package/esm/src/kernel/engine/tool-trace.js +132 -0
  296. package/esm/src/kernel/engine/tree.d.ts +2 -0
  297. package/esm/src/kernel/engine/tree.js +17 -0
  298. package/esm/src/kernel/engine/turn-trace.d.ts +119 -0
  299. package/esm/src/kernel/engine/turn-trace.js +855 -0
  300. package/esm/src/kernel/engine/usage.d.ts +36 -0
  301. package/esm/src/kernel/engine/usage.js +151 -0
  302. package/esm/src/kernel/interaction-parts.d.ts +13 -0
  303. package/esm/src/kernel/interaction-parts.js +40 -0
  304. package/esm/src/kernel/json.d.ts +10 -0
  305. package/esm/src/kernel/json.js +3 -0
  306. package/esm/src/kernel/mod.d.ts +74 -0
  307. package/esm/src/kernel/mod.js +45 -0
  308. package/esm/src/kernel/profile-graph.d.ts +145 -0
  309. package/esm/src/kernel/profile-graph.js +158 -0
  310. package/esm/src/kernel/profile-presence.d.ts +18 -0
  311. package/esm/src/kernel/profile-presence.js +158 -0
  312. package/esm/src/kernel/profile-scope.d.ts +40 -0
  313. package/esm/src/kernel/profile-scope.js +274 -0
  314. package/esm/src/kernel/protocols/binding.d.ts +65 -0
  315. package/esm/src/kernel/protocols/binding.js +125 -0
  316. package/esm/src/kernel/protocols/limits.d.ts +15 -0
  317. package/esm/src/kernel/protocols/limits.js +28 -0
  318. package/esm/src/kernel/protocols/mod.d.ts +5 -0
  319. package/esm/src/kernel/protocols/mod.js +5 -0
  320. package/esm/src/kernel/protocols/prices.d.ts +36 -0
  321. package/esm/src/kernel/protocols/prices.js +37 -0
  322. package/esm/src/kernel/protocols/protocol.d.ts +253 -0
  323. package/esm/src/kernel/protocols/protocol.js +253 -0
  324. package/esm/src/kernel/protocols/provider.d.ts +108 -0
  325. package/esm/src/kernel/protocols/provider.js +143 -0
  326. package/esm/src/kernel/protocols/runtime.d.ts +55 -0
  327. package/esm/src/kernel/protocols/runtime.js +534 -0
  328. package/esm/src/kernel/provider-budget.d.ts +32 -0
  329. package/esm/src/kernel/provider-budget.js +262 -0
  330. package/esm/src/kernel/provider-dispatch.d.ts +13 -0
  331. package/esm/src/kernel/provider-dispatch.js +36 -0
  332. package/esm/src/kernel/provider-live.d.ts +7 -0
  333. package/esm/src/kernel/provider-live.js +189 -0
  334. package/esm/src/kernel/provider-runtime.d.ts +57 -0
  335. package/esm/src/kernel/provider-runtime.js +524 -0
  336. package/esm/src/kernel/registry/attachments.d.ts +46 -0
  337. package/esm/src/kernel/registry/attachments.js +220 -0
  338. package/esm/src/kernel/registry/catalog.d.ts +25 -0
  339. package/esm/src/kernel/registry/catalog.js +85 -0
  340. package/esm/src/kernel/registry/embedding-rules.d.ts +28 -0
  341. package/esm/src/kernel/registry/embedding-rules.js +66 -0
  342. package/esm/src/kernel/registry/ingress.d.ts +12 -0
  343. package/esm/src/kernel/registry/ingress.js +179 -0
  344. package/esm/src/kernel/registry/kernel-registry.d.ts +15 -0
  345. package/esm/src/kernel/registry/kernel-registry.js +15 -0
  346. package/esm/src/kernel/registry/profile-outputs.d.ts +3 -0
  347. package/esm/src/kernel/registry/profile-outputs.js +10 -0
  348. package/esm/src/kernel/registry/profiles.d.ts +116 -0
  349. package/esm/src/kernel/registry/profiles.js +773 -0
  350. package/esm/src/kernel/registry/provider-request.d.ts +6 -0
  351. package/esm/src/kernel/registry/provider-request.js +34 -0
  352. package/esm/src/kernel/registry/resolve.d.ts +17 -0
  353. package/esm/src/kernel/registry/resolve.js +238 -0
  354. package/esm/src/kernel/registry/schemas.d.ts +12 -0
  355. package/esm/src/kernel/registry/schemas.js +27 -0
  356. package/esm/src/kernel/registry/slot-fill.d.ts +7 -0
  357. package/esm/src/kernel/registry/slot-fill.js +22 -0
  358. package/esm/src/kernel/registry/sole-model.d.ts +2 -0
  359. package/esm/src/kernel/registry/sole-model.js +4 -0
  360. package/esm/src/kernel/registry/system-prompt.d.ts +8 -0
  361. package/esm/src/kernel/registry/system-prompt.js +32 -0
  362. package/esm/src/kernel/registry/system-role.d.ts +3 -0
  363. package/esm/src/kernel/registry/system-role.js +9 -0
  364. package/esm/src/kernel/registry/vault.d.ts +14 -0
  365. package/esm/src/kernel/registry/vault.js +1 -0
  366. package/esm/src/kernel/schema.d.ts +226 -0
  367. package/esm/src/kernel/schema.js +895 -0
  368. package/esm/src/kernel/scope.d.ts +29 -0
  369. package/esm/src/kernel/scope.js +45 -0
  370. package/esm/src/kernel/stages.d.ts +176 -0
  371. package/esm/src/kernel/stages.js +431 -0
  372. package/esm/src/kernel/stop.d.ts +116 -0
  373. package/esm/src/kernel/stop.js +137 -0
  374. package/esm/src/kernel/system-parts.d.ts +26 -0
  375. package/esm/src/kernel/system-parts.js +98 -0
  376. package/esm/src/kernel/tools/activity-label.d.ts +22 -0
  377. package/esm/src/kernel/tools/activity-label.js +435 -0
  378. package/esm/src/kernel/tools/agent.d.ts +66 -0
  379. package/esm/src/kernel/tools/agent.js +212 -0
  380. package/esm/src/kernel/tools/coordinate.d.ts +4 -0
  381. package/esm/src/kernel/tools/coordinate.js +165 -0
  382. package/esm/src/kernel/tools/events.d.ts +66 -0
  383. package/esm/src/kernel/tools/events.js +184 -0
  384. package/esm/src/kernel/tools/execute.d.ts +100 -0
  385. package/esm/src/kernel/tools/execute.js +1173 -0
  386. package/esm/src/kernel/tools/gate-answer.d.ts +60 -0
  387. package/esm/src/kernel/tools/gate-answer.js +65 -0
  388. package/esm/src/kernel/tools/handler-events.d.ts +45 -0
  389. package/esm/src/kernel/tools/handler-events.js +106 -0
  390. package/esm/src/kernel/tools/harness.d.ts +17 -0
  391. package/esm/src/kernel/tools/harness.js +43 -0
  392. package/esm/src/kernel/tools/http-limit.d.ts +27 -0
  393. package/esm/src/kernel/tools/http-limit.js +85 -0
  394. package/esm/src/kernel/tools/invoke.d.ts +32 -0
  395. package/esm/src/kernel/tools/invoke.js +282 -0
  396. package/esm/src/kernel/tools/mcp-sessions.d.ts +23 -0
  397. package/esm/src/kernel/tools/mcp-sessions.js +69 -0
  398. package/esm/src/kernel/tools/mod.d.ts +10 -0
  399. package/esm/src/kernel/tools/mod.js +7 -0
  400. package/esm/src/kernel/tools/model-text.d.ts +16 -0
  401. package/esm/src/kernel/tools/model-text.js +31 -0
  402. package/esm/src/kernel/tools/operation.d.ts +76 -0
  403. package/esm/src/kernel/tools/operation.js +100 -0
  404. package/esm/src/kernel/tools/page-answer.d.ts +8 -0
  405. package/esm/src/kernel/tools/page-answer.js +19 -0
  406. package/esm/src/kernel/tools/permission.d.ts +15 -0
  407. package/esm/src/kernel/tools/permission.js +38 -0
  408. package/esm/src/kernel/tools/project.d.ts +11 -0
  409. package/esm/src/kernel/tools/project.js +55 -0
  410. package/esm/src/kernel/tools/registry.d.ts +27 -0
  411. package/esm/src/kernel/tools/registry.js +143 -0
  412. package/esm/src/kernel/tools/remote.d.ts +144 -0
  413. package/esm/src/kernel/tools/remote.js +1125 -0
  414. package/esm/src/kernel/tools/resolve.d.ts +31 -0
  415. package/esm/src/kernel/tools/resolve.js +267 -0
  416. package/esm/src/kernel/tools/run.d.ts +28 -0
  417. package/esm/src/kernel/tools/run.js +86 -0
  418. package/esm/src/kernel/tools/schema.d.ts +10 -0
  419. package/esm/src/kernel/tools/schema.js +95 -0
  420. package/esm/src/kernel/tools/signed-in-fetch.d.ts +19 -0
  421. package/esm/src/kernel/tools/signed-in-fetch.js +45 -0
  422. package/esm/src/kernel/tools/stage-run.d.ts +116 -0
  423. package/esm/src/kernel/tools/stage-run.js +198 -0
  424. package/esm/src/kernel/tools/types.d.ts +497 -0
  425. package/esm/src/kernel/tools/types.js +1 -0
  426. package/esm/src/kernel/tools/unchecked-output.d.ts +14 -0
  427. package/esm/src/kernel/tools/unchecked-output.js +18 -0
  428. package/esm/src/kernel/turn-events.d.ts +776 -0
  429. package/esm/src/kernel/turn-events.js +543 -0
  430. package/esm/src/kernel/types.d.ts +1025 -0
  431. package/esm/src/kernel/types.js +1 -0
  432. package/esm/src/kernel/util/base64.d.ts +4 -0
  433. package/esm/src/kernel/util/base64.js +15 -0
  434. package/esm/src/kernel/util/exact-type.d.ts +31 -0
  435. package/esm/src/kernel/util/exact-type.js +1 -0
  436. package/esm/src/kernel/util/find-last.d.ts +3 -0
  437. package/esm/src/kernel/util/find-last.js +9 -0
  438. package/esm/src/kernel/util/mime.d.ts +2 -0
  439. package/esm/src/kernel/util/mime.js +4 -0
  440. package/esm/src/kernel/util/partial-json.d.ts +23 -0
  441. package/esm/src/kernel/util/partial-json.js +128 -0
  442. package/esm/src/kernel/util/record.d.ts +2 -0
  443. package/esm/src/kernel/util/record.js +4 -0
  444. package/esm/src/observability/destinations.d.ts +14 -0
  445. package/esm/src/observability/destinations.js +43 -0
  446. package/esm/src/observability/jsonl.d.ts +18 -0
  447. package/esm/src/observability/jsonl.js +110 -0
  448. package/esm/src/observability/mod.d.ts +22 -0
  449. package/esm/src/observability/mod.js +16 -0
  450. package/esm/src/observability/openinference.d.ts +11 -0
  451. package/esm/src/observability/openinference.js +205 -0
  452. package/esm/src/observability/otlp.d.ts +71 -0
  453. package/esm/src/observability/otlp.js +98 -0
  454. package/esm/src/observability/phoenix.d.ts +30 -0
  455. package/esm/src/observability/phoenix.js +71 -0
  456. package/esm/src/observability/policy.d.ts +17 -0
  457. package/esm/src/observability/policy.js +73 -0
  458. package/esm/src/observability/resolve-policy.d.ts +8 -0
  459. package/esm/src/observability/resolve-policy.js +64 -0
  460. package/esm/src/observability/spans.d.ts +22 -0
  461. package/esm/src/observability/spans.js +72 -0
  462. package/esm/src/observability/trace-catalog.d.ts +128 -0
  463. package/esm/src/observability/trace-catalog.js +906 -0
  464. package/esm/src/observability/trace-record.d.ts +23 -0
  465. package/esm/src/observability/trace-record.js +228 -0
  466. package/esm/src/observability/trace-schema.d.ts +57 -0
  467. package/esm/src/observability/trace-schema.js +59 -0
  468. package/esm/src/observability/trace-sink.d.ts +14 -0
  469. package/esm/src/observability/trace-sink.js +3 -0
  470. package/esm/src/observability/trace-span.d.ts +98 -0
  471. package/esm/src/observability/trace-span.js +201 -0
  472. package/esm/src/observability/trace.d.ts +13 -0
  473. package/esm/src/observability/trace.js +37 -0
  474. package/esm/src/observability/types.d.ts +109 -0
  475. package/esm/src/observability/types.js +3 -0
  476. package/esm/src/presets/google/speech-voices.d.ts +9 -0
  477. package/esm/src/presets/google/speech-voices.js +38 -0
  478. package/esm/src/presets/google-limits.d.ts +13 -0
  479. package/esm/src/presets/google-limits.js +18 -0
  480. package/esm/src/presets/google.d.ts +119 -0
  481. package/esm/src/presets/google.js +197 -0
  482. package/esm/src/presets/local.d.ts +26 -0
  483. package/esm/src/presets/local.js +30 -0
  484. package/esm/src/presets/mod.d.ts +11 -0
  485. package/esm/src/presets/mod.js +9 -0
  486. package/esm/src/presets/openrouter.d.ts +26 -0
  487. package/esm/src/presets/openrouter.js +31 -0
  488. package/esm/src/providers/embedding-limits.d.ts +7 -0
  489. package/esm/src/providers/embedding-limits.js +12 -0
  490. package/esm/src/providers/gemini/embedding-protocol.d.ts +8 -0
  491. package/esm/src/providers/gemini/embedding-protocol.js +125 -0
  492. package/esm/src/providers/gemini/interactions-protocol.d.ts +8 -0
  493. package/esm/src/providers/gemini/interactions-protocol.js +105 -0
  494. package/esm/src/providers/gemini/live-protocol.d.ts +3 -0
  495. package/esm/src/providers/gemini/live-protocol.js +191 -0
  496. package/esm/src/providers/gemini/prices.d.ts +3 -0
  497. package/esm/src/providers/gemini/prices.js +63 -0
  498. package/esm/src/providers/gemini/provider.d.ts +7 -0
  499. package/esm/src/providers/gemini/provider.js +39 -0
  500. package/esm/src/providers/google/api-error.d.ts +8 -0
  501. package/esm/src/providers/google/api-error.js +123 -0
  502. package/esm/src/providers/google/builtins.d.ts +14 -0
  503. package/esm/src/providers/google/builtins.js +57 -0
  504. package/esm/src/providers/google/grounding.d.ts +5 -0
  505. package/esm/src/providers/google/grounding.js +226 -0
  506. package/esm/src/providers/google/interactions/framing.d.ts +27 -0
  507. package/esm/src/providers/google/interactions/framing.js +304 -0
  508. package/esm/src/providers/google/interactions/steps.d.ts +12 -0
  509. package/esm/src/providers/google/interactions/steps.js +200 -0
  510. package/esm/src/providers/google/interactions/stream.d.ts +23 -0
  511. package/esm/src/providers/google/interactions/stream.js +230 -0
  512. package/esm/src/providers/google/live/framing.d.ts +61 -0
  513. package/esm/src/providers/google/live/framing.js +597 -0
  514. package/esm/src/providers/google/live/stream.d.ts +13 -0
  515. package/esm/src/providers/google/live/stream.js +57 -0
  516. package/esm/src/providers/google/thinking.d.ts +3 -0
  517. package/esm/src/providers/google/thinking.js +8 -0
  518. package/esm/src/providers/google/urls.d.ts +4 -0
  519. package/esm/src/providers/google/urls.js +4 -0
  520. package/esm/src/providers/google/usage.d.ts +7 -0
  521. package/esm/src/providers/google/usage.js +49 -0
  522. package/esm/src/providers/live.d.ts +6 -0
  523. package/esm/src/providers/live.js +6 -0
  524. package/esm/src/providers/local/embedding-protocol.d.ts +7 -0
  525. package/esm/src/providers/local/embedding-protocol.js +60 -0
  526. package/esm/src/providers/local/provider.d.ts +7 -0
  527. package/esm/src/providers/local/provider.js +28 -0
  528. package/esm/src/providers/mod.d.ts +32 -0
  529. package/esm/src/providers/mod.js +23 -0
  530. package/esm/src/providers/open-ai/protocol.d.ts +3 -0
  531. package/esm/src/providers/open-ai/protocol.js +189 -0
  532. package/esm/src/providers/openrouter/embedding-protocol.d.ts +6 -0
  533. package/esm/src/providers/openrouter/embedding-protocol.js +86 -0
  534. package/esm/src/providers/openrouter/image.d.ts +15 -0
  535. package/esm/src/providers/openrouter/image.js +34 -0
  536. package/esm/src/providers/openrouter/images-protocol.d.ts +3 -0
  537. package/esm/src/providers/openrouter/images-protocol.js +82 -0
  538. package/esm/src/providers/openrouter/openai/compat.d.ts +19 -0
  539. package/esm/src/providers/openrouter/openai/compat.js +162 -0
  540. package/esm/src/providers/openrouter/openai/image-payload.d.ts +9 -0
  541. package/esm/src/providers/openrouter/openai/image-payload.js +115 -0
  542. package/esm/src/providers/openrouter/openai/reasoning-state.d.ts +2 -0
  543. package/esm/src/providers/openrouter/openai/reasoning-state.js +31 -0
  544. package/esm/src/providers/openrouter/openai/usage.d.ts +8 -0
  545. package/esm/src/providers/openrouter/openai/usage.js +56 -0
  546. package/esm/src/providers/openrouter/protocol.d.ts +8 -0
  547. package/esm/src/providers/openrouter/protocol.js +171 -0
  548. package/esm/src/providers/openrouter/provider.d.ts +10 -0
  549. package/esm/src/providers/openrouter/provider.js +50 -0
  550. package/esm/src/providers/shared/carried-tool-files.d.ts +7 -0
  551. package/esm/src/providers/shared/carried-tool-files.js +43 -0
  552. package/esm/src/providers/shared/pcm.d.ts +14 -0
  553. package/esm/src/providers/shared/pcm.js +78 -0
  554. package/esm/src/providers/shared/protocol-events.d.ts +8 -0
  555. package/esm/src/providers/shared/protocol-events.js +20 -0
  556. package/esm/src/providers/shared/response-identity.d.ts +11 -0
  557. package/esm/src/providers/shared/response-identity.js +12 -0
  558. package/esm/src/providers/shared/retry.d.ts +17 -0
  559. package/esm/src/providers/shared/retry.js +90 -0
  560. package/esm/src/providers/shared/sse.d.ts +6 -0
  561. package/esm/src/providers/shared/sse.js +93 -0
  562. package/esm/src/providers/shared/structured-output.d.ts +4 -0
  563. package/esm/src/providers/shared/structured-output.js +11 -0
  564. package/esm/src/providers/shared/tool-args.d.ts +24 -0
  565. package/esm/src/providers/shared/tool-args.js +88 -0
  566. package/esm/src/providers/shared/tool-draft.d.ts +16 -0
  567. package/esm/src/providers/shared/tool-draft.js +14 -0
  568. package/esm/src/providers/shared/upstream-tap.d.ts +8 -0
  569. package/esm/src/providers/shared/upstream-tap.js +85 -0
  570. package/esm/src/providers/shared/upstream-tape.d.ts +6 -0
  571. package/esm/src/providers/shared/upstream-tape.js +88 -0
  572. package/esm/src/providers/system-one/protocol.d.ts +8 -0
  573. package/esm/src/providers/system-one/protocol.js +93 -0
  574. package/esm/src/providers/types.d.ts +51 -0
  575. package/esm/src/providers/types.js +2 -0
  576. package/esm/src/providers/typesafe/provider.d.ts +7 -0
  577. package/esm/src/providers/typesafe/provider.js +24 -0
  578. package/esm/src/surface/formats.d.ts +46 -0
  579. package/esm/src/surface/formats.js +178 -0
  580. package/esm/src/surface/mod.d.ts +16 -0
  581. package/esm/src/surface/mod.js +12 -0
  582. package/esm/src/surface/runtime.d.ts +44 -0
  583. package/esm/src/surface/runtime.js +441 -0
  584. package/esm/src/surface/tools.d.ts +9 -0
  585. package/esm/src/surface/tools.js +62 -0
  586. package/esm/src/surface/types.d.ts +110 -0
  587. package/esm/src/surface/types.js +4 -0
  588. package/package.json +100 -4
@@ -0,0 +1,226 @@
1
+ import { asRecord, nonEmptyString } from '../../kernel/engine/record.js';
2
+ function groundedEvents(grounded) {
3
+ if (!grounded)
4
+ return [];
5
+ const { grounding, sources } = grounded;
6
+ return [
7
+ { type: 'grounding', grounding },
8
+ ...(sources.length > 0 ? [{ type: 'citation', sources }] : []),
9
+ ];
10
+ }
11
+ function sourceFromPlace(place) {
12
+ const uri = nonEmptyString(place.url);
13
+ if (!uri) {
14
+ return undefined;
15
+ }
16
+ const placeId = nonEmptyString(place.place_id);
17
+ return {
18
+ type: 'maps',
19
+ uri,
20
+ title: nonEmptyString(place.name) ?? uri,
21
+ ...(placeId ? { placeId } : {}),
22
+ };
23
+ }
24
+ function chunkFromMapsSource(source) {
25
+ return {
26
+ maps: {
27
+ title: source.title,
28
+ uri: source.uri,
29
+ ...(source.placeId ? { placeId: source.placeId } : {}),
30
+ },
31
+ };
32
+ }
33
+ function sourceFromWeb(web) {
34
+ const uri = nonEmptyString(web.uri);
35
+ if (!uri) {
36
+ return undefined;
37
+ }
38
+ return { type: 'web', uri, title: nonEmptyString(web.title) ?? uri };
39
+ }
40
+ function pushUniqueSource(sources, source) {
41
+ if (!source) {
42
+ return;
43
+ }
44
+ if (sources.some((item) => {
45
+ if (item.type !== source.type) {
46
+ return false;
47
+ }
48
+ if (source.placeId && item.placeId && source.placeId === item.placeId) {
49
+ return true;
50
+ }
51
+ return item.uri === source.uri;
52
+ })) {
53
+ return;
54
+ }
55
+ sources.push(source);
56
+ }
57
+ function pushUniqueChunk(chunks, chunk) {
58
+ const maps = asRecord(asRecord(chunk)?.maps);
59
+ if (!maps) {
60
+ chunks.push(chunk);
61
+ return;
62
+ }
63
+ const placeId = nonEmptyString(maps.placeId);
64
+ const uri = nonEmptyString(maps.uri);
65
+ if (chunks.some((existing) => {
66
+ const existingMaps = asRecord(asRecord(existing)?.maps);
67
+ if (!existingMaps) {
68
+ return false;
69
+ }
70
+ const existingId = nonEmptyString(existingMaps.placeId);
71
+ if (placeId && existingId && placeId === existingId) {
72
+ return true;
73
+ }
74
+ return Boolean(uri && nonEmptyString(existingMaps.uri) === uri);
75
+ })) {
76
+ return;
77
+ }
78
+ chunks.push(chunk);
79
+ }
80
+ function searchSuggestionsHtml(result) {
81
+ if (!Array.isArray(result)) {
82
+ return undefined;
83
+ }
84
+ for (const entry of result) {
85
+ const html = nonEmptyString(asRecord(entry)?.search_suggestions);
86
+ if (html) {
87
+ return html;
88
+ }
89
+ }
90
+ return undefined;
91
+ }
92
+ function sourceFromAnnotation(ann) {
93
+ const record = asRecord(ann);
94
+ const uri = nonEmptyString(record?.url);
95
+ if (!record || !uri) {
96
+ return undefined;
97
+ }
98
+ if (record.type === 'place_citation') {
99
+ const title = nonEmptyString(record.name) ?? uri;
100
+ const placeId = nonEmptyString(record.place_id);
101
+ return { type: 'maps', uri, title, ...(placeId ? { placeId } : {}) };
102
+ }
103
+ if (record.type === 'url_citation') {
104
+ return { type: 'web', uri, title: nonEmptyString(record.title) ?? uri };
105
+ }
106
+ return undefined;
107
+ }
108
+ function appendAnnotationSources(into, annotations) {
109
+ if (!Array.isArray(annotations)) {
110
+ return;
111
+ }
112
+ for (const ann of annotations) {
113
+ pushUniqueSource(into, sourceFromAnnotation(ann));
114
+ }
115
+ }
116
+ function appendPlaceSources(into, result) {
117
+ if (!Array.isArray(result)) {
118
+ return;
119
+ }
120
+ for (const entry of result) {
121
+ const places = asRecord(entry)?.places;
122
+ if (!Array.isArray(places)) {
123
+ continue;
124
+ }
125
+ for (const placeValue of places) {
126
+ const place = asRecord(placeValue);
127
+ const source = place ? sourceFromPlace(place) : undefined;
128
+ if (source) {
129
+ pushUniqueSource(into, source);
130
+ }
131
+ }
132
+ }
133
+ }
134
+ /** Maps sources also emit normalized `chunks[].maps` so hosts share one parse shape with Live. */
135
+ function groundingFromInteractionsStep(step) {
136
+ const sources = [];
137
+ appendAnnotationSources(sources, step.annotations);
138
+ if (Array.isArray(step.content)) {
139
+ for (const block of step.content) {
140
+ appendAnnotationSources(sources, asRecord(block)?.annotations);
141
+ }
142
+ }
143
+ appendPlaceSources(sources, step.result);
144
+ const chunks = [];
145
+ for (const source of sources) {
146
+ if (source.type === 'maps') {
147
+ pushUniqueChunk(chunks, chunkFromMapsSource(source));
148
+ }
149
+ }
150
+ const html = searchSuggestionsHtml(step.result);
151
+ if (!html && sources.length === 0) {
152
+ return undefined;
153
+ }
154
+ return {
155
+ grounding: {
156
+ metadata: step,
157
+ ...(chunks.length > 0 ? { chunks } : {}),
158
+ ...(html ? { searchHtml: html } : {}),
159
+ },
160
+ sources,
161
+ };
162
+ }
163
+ function mergeGrounding(a, b) {
164
+ if (!a) {
165
+ return b;
166
+ }
167
+ if (!b) {
168
+ return a;
169
+ }
170
+ const chunks = [];
171
+ for (const chunk of [...(a.grounding.chunks ?? []), ...(b.grounding.chunks ?? [])]) {
172
+ pushUniqueChunk(chunks, chunk);
173
+ }
174
+ const sources = [...a.sources];
175
+ for (const source of b.sources) {
176
+ pushUniqueSource(sources, source);
177
+ }
178
+ const searchHtml = b.grounding.searchHtml ?? a.grounding.searchHtml;
179
+ const metadata = b.grounding.metadata ?? a.grounding.metadata;
180
+ return {
181
+ grounding: {
182
+ ...(metadata ? { metadata } : {}),
183
+ ...(chunks.length > 0 ? { chunks } : {}),
184
+ ...(searchHtml ? { searchHtml } : {}),
185
+ },
186
+ sources,
187
+ };
188
+ }
189
+ function groundingFromDelta(event) {
190
+ const delta = asRecord(event.delta);
191
+ return groundedEvents(delta ? groundingFromInteractionsStep(delta) : undefined);
192
+ }
193
+ function groundingFromSteps(steps) {
194
+ let grounded;
195
+ for (const stepValue of steps) {
196
+ const step = asRecord(stepValue);
197
+ if (step) {
198
+ grounded = mergeGrounding(grounded, groundingFromInteractionsStep(step));
199
+ }
200
+ }
201
+ return groundedEvents(grounded);
202
+ }
203
+ function groundingFromLiveMetadata(value) {
204
+ const metadata = asRecord(value);
205
+ if (!metadata) {
206
+ return [];
207
+ }
208
+ const chunks = Array.isArray(metadata.groundingChunks) ? metadata.groundingChunks : [];
209
+ const sources = [];
210
+ for (const chunk of chunks) {
211
+ const web = asRecord(asRecord(chunk)?.web);
212
+ if (web) {
213
+ pushUniqueSource(sources, sourceFromWeb(web));
214
+ }
215
+ }
216
+ const html = nonEmptyString(asRecord(metadata.searchEntryPoint)?.renderedContent);
217
+ return groundedEvents({
218
+ grounding: {
219
+ metadata,
220
+ ...(chunks.length > 0 ? { chunks } : {}),
221
+ ...(html ? { searchHtml: html } : {}),
222
+ },
223
+ sources,
224
+ });
225
+ }
226
+ export { groundingFromDelta, groundingFromLiveMetadata, groundingFromSteps };
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import type { InteractionPart, ModelRequest, TurnHistoryMessage } from '../../../kernel/types.js';
3
+ /** A turn as Interactions frames it: the request, plus whether Google keeps it and what it continues. */
4
+ export type InteractionsRequest = ModelRequest & {
5
+ store?: boolean;
6
+ previousInteractionId?: string;
7
+ /** What came after the stored interaction, sent in place of the whole history. */
8
+ continuation?: TurnHistoryMessage[];
9
+ };
10
+ export declare function camelToSnake(key: string): string;
11
+ export declare function toGoogleValue(value: unknown): unknown;
12
+ export declare function wirePart(part: InteractionPart): Record<string, string>;
13
+ export declare function userInputStep(parts: InteractionPart[]): Record<string, unknown>;
14
+ /** A thought's signature, for the tool call at `call` in the same assistant message. */
15
+ export declare const thoughtSignature: z.ZodType<{
16
+ call: number;
17
+ signature: string;
18
+ }>;
19
+ export declare function historySteps(msg: TurnHistoryMessage): Record<string, unknown>[];
20
+ export declare function historyStep(msg: TurnHistoryMessage): Record<string, unknown>;
21
+ export declare function jsonResponseFormat(schema: Record<string, unknown>): unknown[];
22
+ export declare function attachResponseFormat(req: InteractionsRequest, camel: Record<string, unknown>): void;
23
+ export declare function attachSpeechConfig(req: InteractionsRequest, generationConfig: Record<string, unknown>): void;
24
+ export declare function inputStepsFromRequest(req: InteractionsRequest): Record<string, unknown>[];
25
+ export declare function applyOptionalRequestFields(req: InteractionsRequest, camel: Record<string, unknown>): void;
26
+ export declare function baseInteractionsBody(req: InteractionsRequest): Record<string, unknown>;
27
+ export declare function toInteractionsBody(req: InteractionsRequest): Record<string, unknown>;
@@ -0,0 +1,304 @@
1
+ import { z } from 'zod';
2
+ import { TheoremError } from '../../../guardrails/error.js';
3
+ import { historyMessageParts, wireInteractionPart } from '../../../kernel/interaction-parts.js';
4
+ import { GOOGLE_SPEECH_FORMATS } from '../../../presets/google-limits.js';
5
+ import { withCarriedToolFiles } from '../../shared/carried-tool-files.js';
6
+ import { historyToolArguments, historyToolIdentity } from '../../shared/tool-args.js';
7
+ import { interactionsBuiltinTool } from '../builtins.js';
8
+ import { assertGoogleThinkingLevel } from '../thinking.js';
9
+ export function camelToSnake(key) {
10
+ return key.replaceAll(/[A-Z]/g, (ch) => `_${ch.toLowerCase()}`);
11
+ }
12
+ export function toGoogleValue(value) {
13
+ if (Array.isArray(value)) {
14
+ return value.map(toGoogleValue);
15
+ }
16
+ if (value && typeof value === 'object') {
17
+ const out = {};
18
+ for (const [key, nested] of Object.entries(value)) {
19
+ // why: A schema's property names and a call's argument names are the builder's own; snake-casing them breaks Gemini validation and shows the model a call it did not make.
20
+ if (key === 'schema' || key === 'parameters' || key === 'arguments') {
21
+ out[camelToSnake(key)] = nested;
22
+ continue;
23
+ }
24
+ out[camelToSnake(key)] = toGoogleValue(nested);
25
+ }
26
+ return out;
27
+ }
28
+ return value;
29
+ }
30
+ export function wirePart(part) {
31
+ return wireInteractionPart(part);
32
+ }
33
+ const USER_INPUT = 'user_input';
34
+ export function userInputStep(parts) {
35
+ return { type: USER_INPUT, content: parts.map(wirePart) };
36
+ }
37
+ function historyContent(msg) {
38
+ const parts = historyMessageParts(msg);
39
+ return parts.length > 0 ? parts.map(wirePart) : [{ type: 'text', text: '' }];
40
+ }
41
+ // why: Google refuses any other part inside a `function_result`: "The value 'document' is not supported for 'type' at 'input[8].result[2]'. Supported values: 'function', 'image', 'text', 'video'." (live, 13/10/2026, gemini-3.5-flash-lite).
42
+ const FUNCTION_RESULT_PART_TYPES = new Set([
43
+ 'text',
44
+ 'image',
45
+ 'video',
46
+ ]);
47
+ function functionResultStep(msg) {
48
+ const parts = historyMessageParts(msg);
49
+ return {
50
+ type: 'function_result',
51
+ ...historyToolIdentity({ name: msg.name, call_id: msg.tool_call_id }),
52
+ result: parts.length > 0 ? parts.map(wirePart) : [{ type: 'text', text: '' }],
53
+ };
54
+ }
55
+ /**
56
+ * A history call as input steps: the thought that led to it when it carries
57
+ * that thought's signature, then the call. Google rejects a current-turn call
58
+ * replayed without its signature, and rejects a `thought_signature` field on
59
+ * the call; a `thought` step with the signature ahead of it is accepted (probe
60
+ * 25/09/2026, gemini-3.1-flash-lite, `store: false`).
61
+ */
62
+ function functionCallSteps(call, signature) {
63
+ const step = {
64
+ type: 'function_call',
65
+ id: call.id,
66
+ name: call.function.name,
67
+ arguments: historyToolArguments(call.function.arguments),
68
+ };
69
+ return signature ? [{ type: 'thought', signature }, step] : [step];
70
+ }
71
+ /** A thought's signature, for the tool call at `call` in the same assistant message. */
72
+ export const thoughtSignature = z.strictObject({
73
+ call: z.number().int().min(0),
74
+ signature: z.string().min(1),
75
+ });
76
+ /** The signature written with the message's call at `index`, if its reasoning holds one. */
77
+ function signatureAt(msg, index) {
78
+ for (const part of msg.reasoning ?? []) {
79
+ const parsed = thoughtSignature.safeParse(part.data);
80
+ if (parsed.success && parsed.data.call === index)
81
+ return parsed.data.signature;
82
+ }
83
+ return undefined;
84
+ }
85
+ function textOrPartsStep(role, msg) {
86
+ // why: Assistant history is `model_output`, not `model_turn`.
87
+ const type = role === 'assistant' ? 'model_output' : 'user_input';
88
+ return { type, content: historyContent(msg) };
89
+ }
90
+ /** Assistant `tool_calls` (often with no `content`) become `function_call` steps, never empty `model_output`. */
91
+ function nonToolSteps(msg) {
92
+ if (msg.role === 'assistant' && msg.tool_calls && msg.tool_calls.length > 0) {
93
+ const steps = [];
94
+ if (historyMessageParts(msg).length > 0) {
95
+ steps.push(textOrPartsStep('assistant', msg));
96
+ }
97
+ for (const [index, call] of msg.tool_calls.entries()) {
98
+ steps.push(...functionCallSteps(call, signatureAt(msg, index)));
99
+ }
100
+ return steps;
101
+ }
102
+ if (msg.role === 'assistant') {
103
+ return [textOrPartsStep('assistant', msg)];
104
+ }
105
+ return [textOrPartsStep('user', msg)];
106
+ }
107
+ /**
108
+ * History as input steps. A file a `function_result` cannot hold follows its run
109
+ * of tool results in a `user_input` step (`withCarriedToolFiles`).
110
+ */
111
+ function historyStepsOf(messages) {
112
+ return withCarriedToolFiles(messages, FUNCTION_RESULT_PART_TYPES).flatMap((msg) => msg.role === 'tool' ? [functionResultStep(msg)] : nonToolSteps(msg));
113
+ }
114
+ export function historySteps(msg) {
115
+ return historyStepsOf([msg]);
116
+ }
117
+ export function historyStep(msg) {
118
+ const steps = historySteps(msg);
119
+ return steps[0] ?? { type: 'user_input', content: [{ type: 'text', text: '' }] };
120
+ }
121
+ export function jsonResponseFormat(schema) {
122
+ return [{ type: 'text', mimeType: 'application/json', schema }];
123
+ }
124
+ export function attachResponseFormat(req, camel) {
125
+ if (req.speech) {
126
+ if (req.image) {
127
+ throw new TheoremError('config', 'cannot mix speech and image response formats');
128
+ }
129
+ if (req.structured) {
130
+ throw new TheoremError('config', 'cannot mix speech and structured response formats');
131
+ }
132
+ const format = req.speech.format;
133
+ if (format && !GOOGLE_SPEECH_FORMATS.includes(format)) {
134
+ throw new TheoremError('unsupported', `Gemini speech returns ${GOOGLE_SPEECH_FORMATS.join(', ')}, not '${format}'`);
135
+ }
136
+ camel.responseFormat = { type: 'audio' };
137
+ return;
138
+ }
139
+ if (req.image) {
140
+ const imageEntry = {
141
+ type: 'image',
142
+ mimeType: req.image.mimeType,
143
+ };
144
+ if (req.image.aspectRatio) {
145
+ imageEntry.aspectRatio = req.image.aspectRatio;
146
+ }
147
+ if (req.image.resolution) {
148
+ imageEntry.imageSize = req.image.resolution;
149
+ }
150
+ for (const [name, value] of [
151
+ ['quality', req.image.quality],
152
+ ['background', req.image.background],
153
+ ['n', req.image.n],
154
+ ['outputCompression', req.image.outputCompression],
155
+ ]) {
156
+ if (value !== undefined) {
157
+ throw new TheoremError('unsupported', `image.${name} is not supported on Google image models`);
158
+ }
159
+ }
160
+ camel.responseFormat = req.image.includeText ? [{ type: 'text' }, imageEntry] : imageEntry;
161
+ return;
162
+ }
163
+ if (!req.structured) {
164
+ return;
165
+ }
166
+ camel.responseFormat = jsonResponseFormat(req.structured.jsonSchema);
167
+ }
168
+ export function attachSpeechConfig(req, generationConfig) {
169
+ if (!req.speech) {
170
+ return;
171
+ }
172
+ const { voice, speed } = req.speech;
173
+ if (speed !== undefined) {
174
+ // why: Interactions has no rate field, and a speed dropped here would be a setting the host believes it made.
175
+ throw new TheoremError('config', 'Gemini Interactions speech has no speed field: set the pace in speech.style');
176
+ }
177
+ if (!voice) {
178
+ // why: Interactions has no default voice and refuses the request without one (live, 17/10/2026).
179
+ throw new TheoremError('config', 'Gemini speech needs a voice: set speech.voice');
180
+ }
181
+ generationConfig.speechConfig = [{ voice }];
182
+ }
183
+ /**
184
+ * The speech models that read a delivery note as a `speech_metadata` annotation. The others refuse
185
+ * it ("Speech metadata is not supported for this model", gemini-3.1-flash-tts-preview, live
186
+ * 17/10/2026) and take the note as a direction ahead of the script, as Google's guide shows.
187
+ */
188
+ const SPEECH_METADATA_MODELS = new Set([
189
+ 'gemini-3.8-flash-tts',
190
+ 'gemini-3.8-flash-lite-tts',
191
+ ]);
192
+ /** The script with its delivery note, in the form the model reads it. */
193
+ function speechInputStep(parts, style, apiId) {
194
+ if (!SPEECH_METADATA_MODELS.has(apiId)) {
195
+ return {
196
+ type: USER_INPUT,
197
+ content: [
198
+ { type: 'text', text: `Read the following aloud. ${style.trim()}\n` },
199
+ ...parts.map(wirePart),
200
+ ],
201
+ };
202
+ }
203
+ // why: Gemini reads `text` aloud and `speech_metadata` as direction.
204
+ const annotations = [{ type: 'speech_metadata', style }];
205
+ return {
206
+ type: USER_INPUT,
207
+ content: parts
208
+ .map(wirePart)
209
+ .map((part) => (part.type === 'text' ? { ...part, annotations } : part)),
210
+ };
211
+ }
212
+ function wireInteractionsFunctionTool(decl) {
213
+ return {
214
+ type: 'function',
215
+ name: decl.name,
216
+ description: decl.description,
217
+ parameters: decl.parameters,
218
+ };
219
+ }
220
+ function wireInteractionsTools(req) {
221
+ const tools = [];
222
+ for (const builtin of req.builtins) {
223
+ tools.push(interactionsBuiltinTool(builtin));
224
+ }
225
+ for (const decl of req.wireTools ?? []) {
226
+ tools.push(wireInteractionsFunctionTool(decl));
227
+ }
228
+ return tools;
229
+ }
230
+ /**
231
+ * A `tool` message without `name` takes its call's name: Google rejects a
232
+ * `function_result` without one as "Invalid input received" (live, 29/09/2026).
233
+ */
234
+ function withToolNames(messages) {
235
+ const names = new Map();
236
+ return messages.map((msg) => {
237
+ for (const call of msg.tool_calls ?? [])
238
+ names.set(call.id, call.function.name);
239
+ if (msg.role !== 'tool' || msg.name || !msg.tool_call_id)
240
+ return msg;
241
+ const name = names.get(msg.tool_call_id);
242
+ return name ? { ...msg, name } : msg;
243
+ });
244
+ }
245
+ export function inputStepsFromRequest(req) {
246
+ if (req.continuation && req.continuation.length > 0) {
247
+ return historyStepsOf(withToolNames(req.continuation));
248
+ }
249
+ const inputSteps = historyStepsOf(withToolNames(req.history ?? []));
250
+ if (req.input.length > 0 || inputSteps.length === 0) {
251
+ const style = req.speech?.style;
252
+ inputSteps.push(style ? speechInputStep(req.input, style, req.apiId) : userInputStep(req.input));
253
+ }
254
+ return inputSteps;
255
+ }
256
+ export function applyOptionalRequestFields(req, camel) {
257
+ if (req.store !== undefined) {
258
+ camel.store = req.store;
259
+ }
260
+ if (req.previousInteractionId) {
261
+ camel.previousInteractionId = req.previousInteractionId;
262
+ }
263
+ if (req.system) {
264
+ camel.systemInstruction = req.system;
265
+ }
266
+ const tools = wireInteractionsTools(req);
267
+ if (tools.length > 0) {
268
+ camel.tools = tools;
269
+ }
270
+ }
271
+ export function baseInteractionsBody(req) {
272
+ const generationConfig = {
273
+ temperature: req.temperature,
274
+ maxOutputTokens: req.maxOutputTokens,
275
+ };
276
+ if (req.speech) {
277
+ // why: TTS models reject chat thinking knobs; voice lives under speech_config.
278
+ attachSpeechConfig(req, generationConfig);
279
+ }
280
+ else {
281
+ assertGoogleThinkingLevel(req.thinking);
282
+ if (req.thinking) {
283
+ generationConfig.thinkingLevel = req.thinking;
284
+ }
285
+ if (req.summaries) {
286
+ generationConfig.thinkingSummaries = req.summaries;
287
+ }
288
+ if (req.image?.seed !== undefined) {
289
+ generationConfig.seed = req.image.seed;
290
+ }
291
+ }
292
+ return {
293
+ model: req.apiId,
294
+ stream: req.stream ?? true,
295
+ input: inputStepsFromRequest(req),
296
+ generationConfig,
297
+ };
298
+ }
299
+ export function toInteractionsBody(req) {
300
+ const body = baseInteractionsBody(req);
301
+ attachResponseFormat(req, body);
302
+ applyOptionalRequestFields(req, body);
303
+ return toGoogleValue(body);
304
+ }
@@ -0,0 +1,12 @@
1
+ import type { ModelEvent, TurnEventOf, TurnResponse } from '../../../kernel/types.js';
2
+ declare function isCodeExecutionType(type: string): boolean;
3
+ declare function isGoogleBuiltinStepType(type: string): boolean;
4
+ declare function rawStepEvidence(raw: Record<string, unknown>): TurnEventOf<'evidence'>;
5
+ declare function codeExecutionEvidence(raw: Record<string, unknown>): TurnEventOf<'evidence'>;
6
+ declare function eventsFromDelta(deltaValue: unknown): ModelEvent[];
7
+ declare function eventsFromThoughtStep(step: Record<string, unknown>): ModelEvent[];
8
+ declare function eventsFromModelOutputStep(step: Record<string, unknown>): ModelEvent[];
9
+ declare function extractTokenEvent(interaction: Record<string, unknown>): TurnEventOf<'tokens'> | undefined;
10
+ declare function eventsFromInteractionEnd(interaction: Record<string, unknown>): ModelEvent[];
11
+ declare function interactionResponse(interaction: Record<string, unknown>): TurnResponse | undefined;
12
+ export { codeExecutionEvidence, eventsFromDelta, eventsFromInteractionEnd, eventsFromModelOutputStep, eventsFromThoughtStep, extractTokenEvent, interactionResponse, isCodeExecutionType, isGoogleBuiltinStepType, rawStepEvidence, };