@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,200 @@
1
+ import { asRecord, nonEmptyString } from '../../../kernel/engine/record.js';
2
+ import { reportedTokens, usageCount } from '../../../kernel/engine/usage.js';
3
+ import { turnStopFromInteractionStatus } from '../../../kernel/stop.js';
4
+ import { groundingFromSteps } from '../grounding.js';
5
+ import { byModality, groundingCounts, modalityCounts } from '../usage.js';
6
+ /* probed 2026-09-23:
7
+ * Interactions steps and deltas read only the shapes recorded from the wire
8
+ * (probes 23/09/2026, gemini-3.8-flash, gemini-3.1-pro-preview, image, and TTS
9
+ * models, streamed and buffered):
10
+ *
11
+ * - `text` deltas carry `text`; `thought_summary` deltas carry
12
+ * `content: { type: 'text', text }`; buffered `thought` steps carry
13
+ * `summary[]` of the same text blocks.
14
+ * - `image` / `audio` deltas and `model_output` content blocks carry
15
+ * `mime_type` + `data`. Audio also reports `sample_rate` / `channels`; the
16
+ * buffered mime already states them (`audio/l16; rate=24000; channels=1`),
17
+ * the streamed one does not (`audio/l16`), so they are folded into the mime.
18
+ * - `code_execution_call` carries `id` and `arguments: { language, code }`;
19
+ * `code_execution_result` carries `call_id`, `result`, and `is_error`. Each
20
+ * arrives whole, in one delta (5 577 characters of code in one probe).
21
+ */
22
+ function thoughtText(content) {
23
+ const block = asRecord(content);
24
+ return block?.type === 'text' && typeof block.text === 'string' ? block.text : '';
25
+ }
26
+ function interactionsMime(rec) {
27
+ const mime = rec.mime_type;
28
+ if (typeof mime !== 'string' || !mime) {
29
+ return undefined;
30
+ }
31
+ const params = mime.toLowerCase();
32
+ const extra = [];
33
+ if (typeof rec.sample_rate === 'number' && !/;\s*rate=/.test(params)) {
34
+ extra.push(`rate=${String(rec.sample_rate)}`);
35
+ }
36
+ if (typeof rec.channels === 'number' && !/;\s*channels=/.test(params)) {
37
+ extra.push(`channels=${String(rec.channels)}`);
38
+ }
39
+ return extra.length > 0 ? `${mime}; ${extra.join('; ')}` : mime;
40
+ }
41
+ function interactionsMedia(rec) {
42
+ const mimeType = interactionsMime(rec);
43
+ const { data } = rec;
44
+ if (!mimeType || typeof data !== 'string' || !data) {
45
+ return [];
46
+ }
47
+ return [{ type: 'media', media: { mimeType, data } }];
48
+ }
49
+ function textEvent(type, text) {
50
+ return text ? [{ type, text }] : [];
51
+ }
52
+ function isCodeExecutionType(type) {
53
+ return type === 'code_execution_call' || type === 'code_execution_result';
54
+ }
55
+ function isGoogleBuiltinStepType(type) {
56
+ return type.startsWith('google_') || type === 'url_context_call' || type === 'url_context_result';
57
+ }
58
+ function rawStepEvidence(raw) {
59
+ return {
60
+ type: 'evidence',
61
+ evidence: { provider: 'google', kind: 'provider_step', step: String(raw.type ?? ''), raw },
62
+ };
63
+ }
64
+ function codeExecutionEvidence(raw) {
65
+ if (raw.type === 'code_execution_result') {
66
+ const callId = nonEmptyString(raw.call_id);
67
+ return {
68
+ type: 'evidence',
69
+ evidence: {
70
+ provider: 'google',
71
+ kind: 'code_execution_result',
72
+ raw,
73
+ ...(typeof raw.result === 'string' ? { result: raw.result } : {}),
74
+ ...(typeof raw.is_error === 'boolean' ? { isError: raw.is_error } : {}),
75
+ ...(callId ? { callId } : {}),
76
+ },
77
+ };
78
+ }
79
+ const args = asRecord(raw.arguments);
80
+ const id = nonEmptyString(raw.id);
81
+ if (raw.type !== 'code_execution_call' || !id || typeof args?.code !== 'string') {
82
+ return rawStepEvidence(raw);
83
+ }
84
+ return {
85
+ type: 'evidence',
86
+ evidence: {
87
+ provider: 'google',
88
+ kind: 'code_execution_call',
89
+ raw,
90
+ code: args.code,
91
+ ...(typeof args.language === 'string' ? { language: args.language } : {}),
92
+ id,
93
+ },
94
+ };
95
+ }
96
+ function eventsFromDelta(deltaValue) {
97
+ const delta = asRecord(deltaValue);
98
+ if (!delta) {
99
+ return [];
100
+ }
101
+ switch (delta.type) {
102
+ case 'thought_summary':
103
+ return textEvent('thought', thoughtText(delta.content));
104
+ case 'text':
105
+ return textEvent('text', typeof delta.text === 'string' ? delta.text : '');
106
+ case 'image':
107
+ case 'audio':
108
+ return interactionsMedia(delta);
109
+ default:
110
+ return [];
111
+ }
112
+ }
113
+ function eventsFromThoughtStep(step) {
114
+ const summary = Array.isArray(step.summary) ? step.summary : [];
115
+ return summary.flatMap((block) => textEvent('thought', thoughtText(block)));
116
+ }
117
+ function eventsFromModelOutputStep(step) {
118
+ const content = Array.isArray(step.content) ? step.content : [];
119
+ return content.flatMap((block) => {
120
+ const rec = asRecord(block);
121
+ if (rec?.type === 'text') {
122
+ return textEvent('text', typeof rec.text === 'string' ? rec.text : '');
123
+ }
124
+ if (rec?.type === 'image' || rec?.type === 'audio') {
125
+ return interactionsMedia(rec);
126
+ }
127
+ return [];
128
+ });
129
+ }
130
+ /**
131
+ * Google reports thought and tool-use tokens beside input and output; the
132
+ * OpenTelemetry meanings fold them in. Probes (gemini-3.8-flash, 22/09/2026):
133
+ * `total_tokens` = input + output + thought + tool use, and cached sits inside input.
134
+ * For inputs Google converts first (Markdown, Python, mono `audio/L16`, …) input
135
+ * comes back 0 while `total_tokens` holds the full sum, so input is derived from it.
136
+ */
137
+ function interactionsUsageTokens(raw) {
138
+ const usage = asRecord(raw);
139
+ if (!usage)
140
+ return undefined;
141
+ const output = usageCount(usage.total_output_tokens);
142
+ const thought = usageCount(usage.total_thought_tokens) ?? 0;
143
+ const toolUse = usageCount(usage.total_tool_use_tokens) ?? 0;
144
+ const total = usageCount(usage.total_tokens);
145
+ const derived = total === undefined ? undefined : total - (output ?? 0) - thought - toolUse;
146
+ const read = usageCount(usage.total_input_tokens) || (derived && derived > 0 ? derived : 0);
147
+ return reportedTokens({
148
+ input: read ? read + toolUse : undefined,
149
+ output: output === undefined ? undefined : output + thought,
150
+ thinking: thought,
151
+ toolUse,
152
+ cached: usageCount(usage.total_cached_tokens),
153
+ byModality: byModality(modalityCounts(usage.input_tokens_by_modality, 'tokens'), modalityCounts(usage.output_tokens_by_modality, 'tokens')),
154
+ grounding: groundingCounts(usage.grounding_tool_count),
155
+ });
156
+ }
157
+ function extractTokenEvent(interaction) {
158
+ const usage = interactionsUsageTokens(interaction.usage);
159
+ if (!usage) {
160
+ return undefined;
161
+ }
162
+ const interactionId = typeof interaction.id === 'string' ? interaction.id : undefined;
163
+ return {
164
+ type: 'tokens',
165
+ tokens: usage,
166
+ ...(interactionId ? { interactionId } : {}),
167
+ };
168
+ }
169
+ function eventsFromInteractionEnd(interaction) {
170
+ const events = [];
171
+ const tokenEvent = extractTokenEvent(interaction);
172
+ if (tokenEvent)
173
+ events.push(tokenEvent);
174
+ // why: Only a buffered body carries `steps[]`; streamed grounding arrives on deltas.
175
+ const { steps } = interaction;
176
+ if (Array.isArray(steps))
177
+ events.push(...groundingFromSteps(steps));
178
+ const done = doneFromInteractionStatus(interaction);
179
+ if (done)
180
+ events.push(done);
181
+ return events;
182
+ }
183
+ function interactionResponse(interaction) {
184
+ const id = nonEmptyString(interaction.id);
185
+ const model = nonEmptyString(interaction.model);
186
+ if (!id && !model)
187
+ return undefined;
188
+ return { ...(id ? { id } : {}), ...(model ? { model } : {}) };
189
+ }
190
+ function doneFromInteractionStatus(interaction) {
191
+ const { status } = interaction;
192
+ if (typeof status !== 'string')
193
+ return undefined;
194
+ return {
195
+ type: 'done',
196
+ stop: turnStopFromInteractionStatus(status),
197
+ ...(typeof interaction.id === 'string' ? { interactionId: interaction.id } : {}),
198
+ };
199
+ }
200
+ export { codeExecutionEvidence, eventsFromDelta, eventsFromInteractionEnd, eventsFromModelOutputStep, eventsFromThoughtStep, extractTokenEvent, interactionResponse, isCodeExecutionType, isGoogleBuiltinStepType, rawStepEvidence, };
@@ -0,0 +1,23 @@
1
+ import type { ModelEvent, ModelRequest, TurnResponse } from '../../../kernel/types.js';
2
+ export interface StreamFold {
3
+ text: string;
4
+ /** Open `function_call`, `code_execution_*`, and builtin steps by `index`. */
5
+ steps: Map<number, Record<string, unknown>>;
6
+ sawMedia: boolean;
7
+ /** A `done` came out: the interaction reported a status. */
8
+ sawDone: boolean;
9
+ /** Identity named so far: `interaction.created` names it before any output, so a cut call still has it. */
10
+ response?: TurnResponse;
11
+ /** The signature of the last thought, until the `function_call` that follows it takes it. */
12
+ thoughtSignature?: string;
13
+ /** Function calls read so far: a signature names its call by this position. */
14
+ calls: number;
15
+ }
16
+ export declare function newStreamFold(): StreamFold;
17
+ export declare function eventsFromStep(step: Record<string, unknown>, fold: StreamFold): ModelEvent[];
18
+ export declare function openStepEvents(fold: StreamFold): ModelEvent[];
19
+ export declare function foldPayload(payload: Record<string, unknown>, fold: StreamFold): ModelEvent[];
20
+ export declare function foldBody(body: Record<string, unknown>, fold: StreamFold): ModelEvent[];
21
+ export declare function finalizeStructured(req: ModelRequest, fold: StreamFold): Generator<ModelEvent>;
22
+ /** What the profile asked for and the model did not return; even an empty turn fails. */
23
+ export declare function missingMediaError(req: ModelRequest, fold: StreamFold): ModelEvent | undefined;
@@ -0,0 +1,230 @@
1
+ import { TheoremError, toErrorEvent } from '../../../guardrails/error.js';
2
+ import { asRecord } from '../../../kernel/engine/record.js';
3
+ import { pcmMediaAsWav } from '../../shared/pcm.js';
4
+ import { foldResponse } from '../../shared/response-identity.js';
5
+ import { structuredEvent } from '../../shared/structured-output.js';
6
+ import { toolCallEvents } from '../../shared/tool-args.js';
7
+ import { toolDraftEvents } from '../../shared/tool-draft.js';
8
+ import { readGeminiApiError } from '../api-error.js';
9
+ import { groundingFromDelta } from '../grounding.js';
10
+ import { codeExecutionEvidence, eventsFromDelta, eventsFromInteractionEnd, eventsFromModelOutputStep, eventsFromThoughtStep, interactionResponse, isCodeExecutionType, isGoogleBuiltinStepType, rawStepEvidence, } from './steps.js';
11
+ export function newStreamFold() {
12
+ return { text: '', steps: new Map(), sawMedia: false, sawDone: false, calls: 0 };
13
+ }
14
+ function isMergedStepType(type) {
15
+ return type === 'function_call' || isCodeExecutionType(type) || isGoogleBuiltinStepType(type);
16
+ }
17
+ function nonEmptyString(value) {
18
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
19
+ }
20
+ /**
21
+ * Hold a thought's signature for the call that follows it. The model thinks
22
+ * once before a step's calls, so the signature arrives on a `thought` step:
23
+ * whole when buffered, as a `thought_signature` delta when streamed (probe
24
+ * 25/09/2026, gemini-3.1-flash-lite). Calls carried an empty `signature`.
25
+ */
26
+ function holdThoughtSignature(signature, fold) {
27
+ const held = nonEmptyString(signature);
28
+ if (held)
29
+ fold.thoughtSignature = held;
30
+ }
31
+ /**
32
+ * The signature a `function_call` replays with: its own when it carries a
33
+ * non-empty one, else the held thought's. The first call takes the held one;
34
+ * its siblings share that thought and carry none.
35
+ */
36
+ function takeThoughtSignature(step, fold) {
37
+ const signature = nonEmptyString(step.signature) ?? fold.thoughtSignature;
38
+ fold.thoughtSignature = undefined;
39
+ return signature;
40
+ }
41
+ export function eventsFromStep(step, fold) {
42
+ const type = String(step.type ?? '');
43
+ if (type === 'function_call') {
44
+ const id = typeof step.id === 'string' ? step.id : undefined;
45
+ const name = typeof step.name === 'string' ? step.name : '';
46
+ const signature = takeThoughtSignature(step, fold);
47
+ const call = fold.calls++;
48
+ return [
49
+ ...(signature
50
+ ? [
51
+ {
52
+ type: 'reasoning',
53
+ data: { call, signature },
54
+ origin: { protocol: 'geminiInteractions' },
55
+ },
56
+ ]
57
+ : []),
58
+ ...toolCallEvents({ id, name }, step.arguments),
59
+ ];
60
+ }
61
+ if (isCodeExecutionType(type)) {
62
+ return [codeExecutionEvidence(step)];
63
+ }
64
+ if (isGoogleBuiltinStepType(type)) {
65
+ return [rawStepEvidence(step)];
66
+ }
67
+ if (type === 'thought') {
68
+ holdThoughtSignature(step.signature, fold);
69
+ return eventsFromThoughtStep(step);
70
+ }
71
+ if (type === 'model_output') {
72
+ return eventsFromModelOutputStep(step);
73
+ }
74
+ return [];
75
+ }
76
+ function stepIndex(payload) {
77
+ return typeof payload.index === 'number' ? payload.index : 0;
78
+ }
79
+ function foldStepStart(payload, fold) {
80
+ const step = asRecord(payload.step);
81
+ if (!step)
82
+ return;
83
+ const type = String(step.type ?? '');
84
+ if (type === 'thought') {
85
+ holdThoughtSignature(step.signature, fold);
86
+ }
87
+ if (isMergedStepType(type)) {
88
+ fold.steps.set(stepIndex(payload), { ...step });
89
+ }
90
+ }
91
+ function foldStepDelta(payload, fold) {
92
+ const delta = asRecord(payload.delta);
93
+ if (!delta) {
94
+ return [];
95
+ }
96
+ const open = fold.steps.get(stepIndex(payload));
97
+ if (!open) {
98
+ if (delta.type === 'thought_signature') {
99
+ holdThoughtSignature(delta.signature, fold);
100
+ }
101
+ return eventsFromDelta(delta);
102
+ }
103
+ if (delta.type === 'arguments_delta') {
104
+ // why: Replaces the `arguments: {}` placeholder from `step.start` with the streamed JSON string.
105
+ const sofar = typeof open.arguments === 'string' ? open.arguments : '';
106
+ const args = sofar + (typeof delta.arguments === 'string' ? delta.arguments : '');
107
+ open.arguments = args;
108
+ if (open.type !== 'function_call')
109
+ return [];
110
+ // why: The call at `step.stop` goes out under the `id` and `name` that `step.start` gave.
111
+ return toolDraftEvents({
112
+ id: nonEmptyString(open.id),
113
+ name: typeof open.name === 'string' ? open.name : '',
114
+ args,
115
+ drafted: sofar.length,
116
+ });
117
+ }
118
+ Object.assign(open, delta);
119
+ return [];
120
+ }
121
+ function foldStepStop(payload, fold) {
122
+ const index = stepIndex(payload);
123
+ const step = fold.steps.get(index);
124
+ if (!step) {
125
+ return [];
126
+ }
127
+ fold.steps.delete(index);
128
+ return eventsFromStep(step, fold);
129
+ }
130
+ function partialStepEvidence(step) {
131
+ const event = isCodeExecutionType(String(step.type ?? ''))
132
+ ? codeExecutionEvidence(step)
133
+ : rawStepEvidence(step);
134
+ return { ...event, evidence: { ...event.evidence, partial: true } };
135
+ }
136
+ export function openStepEvents(fold) {
137
+ const events = [...fold.steps.values()].map(partialStepEvidence);
138
+ fold.steps.clear();
139
+ return events;
140
+ }
141
+ function delivered(events, fold) {
142
+ return events.map((ev) => {
143
+ if (ev.type === 'done') {
144
+ fold.sawDone = true;
145
+ }
146
+ if (ev.type === 'text' && ev.text) {
147
+ fold.text += ev.text;
148
+ }
149
+ if (ev.type !== 'media' || !ev.media) {
150
+ return ev;
151
+ }
152
+ fold.sawMedia = true;
153
+ return { ...ev, media: pcmMediaAsWav(ev.media) };
154
+ });
155
+ }
156
+ function eventsFromStreamRow(payload, fold) {
157
+ if (payload.eventType === 'sse_unparsed') {
158
+ // why: Every observed Interactions row is a JSON object; anything else is a wire change.
159
+ return [
160
+ toErrorEvent(new TheoremError('bad_response', 'Interactions stream row was not a JSON object')),
161
+ ];
162
+ }
163
+ const apiError = readGeminiApiError(payload);
164
+ if (apiError) {
165
+ return [toErrorEvent(apiError)];
166
+ }
167
+ const events = groundingFromDelta(payload);
168
+ switch (payload.event_type) {
169
+ case 'step.start':
170
+ foldStepStart(payload, fold);
171
+ break;
172
+ case 'step.delta':
173
+ events.push(...foldStepDelta(payload, fold));
174
+ break;
175
+ case 'step.stop':
176
+ events.push(...foldStepStop(payload, fold));
177
+ break;
178
+ case 'interaction.created': {
179
+ const interaction = asRecord(payload.interaction);
180
+ if (interaction)
181
+ events.push(...identityEvents(interaction, fold));
182
+ break;
183
+ }
184
+ case 'interaction.completed': {
185
+ const interaction = asRecord(payload.interaction);
186
+ if (interaction) {
187
+ events.push(...identityEvents(interaction, fold), ...eventsFromInteractionEnd(interaction));
188
+ }
189
+ break;
190
+ }
191
+ }
192
+ return events;
193
+ }
194
+ function identityEvents(interaction, fold) {
195
+ const identity = foldResponse(fold.response, interactionResponse(interaction));
196
+ fold.response = identity.known;
197
+ return identity.event ? [identity.event] : [];
198
+ }
199
+ export function foldPayload(payload, fold) {
200
+ return delivered(eventsFromStreamRow(payload, fold), fold);
201
+ }
202
+ export function foldBody(body, fold) {
203
+ const steps = Array.isArray(body.steps) ? body.steps : [];
204
+ const fromSteps = steps.flatMap((value) => {
205
+ const step = asRecord(value);
206
+ return step ? eventsFromStep(step, fold) : [];
207
+ });
208
+ return delivered([...identityEvents(body, fold), ...fromSteps, ...eventsFromInteractionEnd(body)], fold);
209
+ }
210
+ export function* finalizeStructured(req, fold) {
211
+ if (!req.structured || !fold.text) {
212
+ return;
213
+ }
214
+ yield structuredEvent(fold.text);
215
+ }
216
+ function isVoiceProfile(req) {
217
+ return Boolean(req.speech);
218
+ }
219
+ /** What the profile asked for and the model did not return; even an empty turn fails. */
220
+ export function missingMediaError(req, fold) {
221
+ if (fold.sawMedia)
222
+ return undefined;
223
+ if (isVoiceProfile(req)) {
224
+ return toErrorEvent(new TheoremError('bad_response', 'speech audio was not returned by the model'));
225
+ }
226
+ if (req.image) {
227
+ return toErrorEvent(new TheoremError('bad_response', 'no image returned from image generation'));
228
+ }
229
+ return undefined;
230
+ }
@@ -0,0 +1,61 @@
1
+ import type { InteractionPart, ModelEvent, ModelRequest, TurnHistoryMessage, TurnTokens, WireFunctionTool } from '../../../kernel/types.js';
2
+ export declare function buildGeminiLiveWebSocketUrl(apiKey: string): string;
3
+ /** `parametersJsonSchema` takes the JSON Schema as it is; `parameters` takes only Google's OpenAPI subset. */
4
+ export declare function wireFunctionDeclaration(decl: WireFunctionTool): Record<string, unknown>;
5
+ /**
6
+ * Builtins are their own tool entries (`{ googleSearch: {} }`), functions share
7
+ * one `functionDeclarations` entry. Which builtins a model takes is the API's
8
+ * answer (probe 23/09/2026: a model without one closes the socket with 1007).
9
+ */
10
+ /** A live session's setup as Gemini frames it: the request, plus the handle it resumes from. */
11
+ export type LiveSetupRequest = ModelRequest & {
12
+ sessionResumptionHandle?: string;
13
+ };
14
+ export declare function buildGeminiLiveSetupMessage(req: LiveSetupRequest): Record<string, unknown>;
15
+ export declare function buildGeminiLiveClientContent(history: TurnHistoryMessage[]): Record<string, unknown> | null;
16
+ export declare function buildGeminiLiveContext(text: string): Record<string, unknown>;
17
+ export declare function buildGeminiLiveRealtimeInput(input: InteractionPart): Record<string, unknown>;
18
+ export declare function buildGeminiLiveToolResponse(id: string, name: string, output: unknown, parts?: InteractionPart[]): Record<string, unknown>;
19
+ export declare function buildGeminiLiveToolResponses(responses: Array<{
20
+ id: string;
21
+ name: string;
22
+ output: unknown;
23
+ parts?: InteractionPart[];
24
+ }>): Record<string, unknown>;
25
+ /** What one outbound frame gives the model to read; setup and control frames give none. */
26
+ export declare function liveFrameInput(frame: Record<string, unknown>): TurnHistoryMessage[];
27
+ export type ParsedLiveMessage = {
28
+ ok: true;
29
+ value: Record<string, unknown>;
30
+ } | {
31
+ ok: false;
32
+ reason: 'empty' | 'malformed';
33
+ };
34
+ export declare function parseGeminiLiveMessage(raw: unknown): ParsedLiveMessage;
35
+ /**
36
+ * Live sends one usage row per model response, at its `turnComplete`, covering that
37
+ * response alone; the prompt count grows because each response re-reads the session.
38
+ * Probe (gemini-3.1-flash-live-preview, 22/09/2026): `thoughtsTokenCount` sits outside
39
+ * `responseTokenCount` and `totalTokenCount`, so it is added to output.
40
+ * `toolUsePromptTokenCount` (not seen in that probe) is added to input, as on Interactions.
41
+ */
42
+ export declare function extractLiveUsageTokens(metadata: Record<string, unknown>): TurnTokens | undefined;
43
+ export interface LiveFold {
44
+ /** Tool call names by id, for the cancel that names only ids. */
45
+ calls: Map<string, string>;
46
+ }
47
+ export declare function newLiveFold(): LiveFold;
48
+ /**
49
+ * `goAway.timeLeft` → milliseconds. It is a protobuf Duration, which JSON
50
+ * encodes as seconds with an `s` suffix (`"10s"`, `"1.5s"`).
51
+ */
52
+ export declare function parseGoAwayTimeLeftMs(timeLeft: unknown): number | undefined;
53
+ export type LiveInteractionStatus = 'IN_PROGRESS' | 'IDLE';
54
+ /**
55
+ * `serverContent.interactionStatus`, sent beside `turnComplete` by models that
56
+ * keep working after a turn (gemini-3.8-live-extended-thinking, probe
57
+ * 23/09/2026: `IN_PROGRESS` on each intermediate `turnComplete` of a tool
58
+ * flow, `IDLE` on the last).
59
+ */
60
+ export declare function readLiveInteractionStatus(message: Record<string, unknown>): LiveInteractionStatus | undefined;
61
+ export declare function foldGeminiLiveServerMessage(message: Record<string, unknown> | null | undefined, fold: LiveFold): ModelEvent[];