@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,191 @@
1
+ import { z } from 'zod';
2
+ import { TheoremError } from '../../guardrails/error.js';
3
+ import { jsonObjectSchema } from '../../kernel/json.js';
4
+ import { defineProtocol, } from '../../kernel/protocols/mod.js';
5
+ import { readGeminiApiError } from '../google/api-error.js';
6
+ import { googleBuiltins } from '../google/builtins.js';
7
+ import { buildGeminiLiveClientContent, buildGeminiLiveContext, buildGeminiLiveRealtimeInput, buildGeminiLiveSetupMessage, buildGeminiLiveToolResponse, foldGeminiLiveServerMessage, liveFrameInput, newLiveFold, } from '../google/live/framing.js';
8
+ import { closeError, goAwayIn, turnPhaseFromMessage } from '../google/live/stream.js';
9
+ import { asProtocolEvent } from '../shared/protocol-events.js';
10
+ const state = z.strictObject({ liveHandle: z.string().min(1) });
11
+ const NORMAL_CLOSE = 1000;
12
+ /** What a frame that is not the model's says: a close, a socket error, or bytes that are not JSON. */
13
+ function socketTrouble(frame, during) {
14
+ if (frame.eventType === 'ws_error')
15
+ return new TheoremError('network', `Gemini Live WebSocket error during ${during}`); // labels-exempt: developer diagnostic
16
+ if (frame.eventType === 'ws_unparsed')
17
+ return new TheoremError('bad_response', 'malformed Gemini Live message'); // labels-exempt: developer diagnostic
18
+ return readGeminiApiError(frame) ?? undefined;
19
+ }
20
+ /** Waits for `setupComplete`; a refusal here comes before any event, so the kernel can try the other key. */
21
+ async function setupComplete(frames, context) {
22
+ let timer;
23
+ const late = new Promise((_, reject) => {
24
+ timer = setTimeout(() => reject(new TheoremError('timeout', `Gemini Live setup timed out after ${context.limits.connectTimeoutMs}ms`)), context.limits.connectTimeoutMs);
25
+ });
26
+ try {
27
+ for (;;) {
28
+ const next = await Promise.race([frames.next(), late]);
29
+ if (next.done)
30
+ throw closeError(1006, '', 'setup');
31
+ const frame = next.value;
32
+ if (frame.eventType === 'ws_close')
33
+ throw closeError(Number(frame.code), String(frame.reason ?? ''), 'setup');
34
+ const trouble = socketTrouble(frame, 'setup');
35
+ if (trouble)
36
+ throw trouble;
37
+ if (frame.setupComplete)
38
+ return;
39
+ }
40
+ }
41
+ finally {
42
+ clearTimeout(timer);
43
+ }
44
+ }
45
+ function wireRequest(context, request) {
46
+ const handle = request.state?.liveHandle;
47
+ const history = request.history ?? [];
48
+ const builtins = googleBuiltins(request.builtins);
49
+ const wire = {
50
+ ...request,
51
+ apiId: context.apiId,
52
+ builtins,
53
+ state: undefined,
54
+ tapUpstream: undefined,
55
+ sessionResumptionHandle: handle,
56
+ // why: a resumed session already holds what came before its handle.
57
+ history: handle ? history.slice(request.stateHistoryLength ?? 0) : history,
58
+ live: {
59
+ ...request.live,
60
+ transcription: { ...request.live?.transcription, input: true, output: true },
61
+ },
62
+ };
63
+ const setup = jsonObjectSchema.parse(JSON.parse(JSON.stringify(buildGeminiLiveSetupMessage(wire))));
64
+ return { wire, setup, wroteTools: builtins.map((builtin) => builtin.id) };
65
+ }
66
+ /** One server message's events, then the stop its turn phase calls for. */
67
+ function* batch(events, phase, handle) {
68
+ // why: usage first, so a turn's tokens are counted before its stop.
69
+ const ordered = [
70
+ ...events.filter((event) => event.type === 'tokens'),
71
+ ...events.filter((event) => event.type !== 'tokens'),
72
+ ];
73
+ for (const event of ordered) {
74
+ const converted = asProtocolEvent(event);
75
+ if (converted)
76
+ yield converted;
77
+ }
78
+ if (phase === 'abort')
79
+ return;
80
+ const saved = handle ? { state: { liveHandle: handle } } : {};
81
+ if (events.some((event) => event.type === 'tool' && event.tool.phase === undefined))
82
+ yield { type: 'done', stop: { kind: 'tool' }, ...saved };
83
+ if (phase === 'complete')
84
+ yield { type: 'done', stop: { kind: 'completed' }, ...saved };
85
+ }
86
+ function session(socket, frames, context, resumedFrom) {
87
+ const send = (frame) => sendFrame(socket, frame);
88
+ const fold = newLiveFold();
89
+ let handle = resumedFrom;
90
+ let goAway;
91
+ let closed;
92
+ return {
93
+ closeInfo: () => closed,
94
+ async *events() {
95
+ for (;;) {
96
+ const next = await frames.next();
97
+ if (next.done)
98
+ return;
99
+ const frame = next.value;
100
+ if (frame.eventType === 'ws_close') {
101
+ context.signal?.throwIfAborted();
102
+ const code = Number(frame.code);
103
+ const reason = String(frame.reason ?? '');
104
+ closed = {
105
+ code,
106
+ reason,
107
+ ...(code === NORMAL_CLOSE ? {} : { error: closeError(code, reason, 'session') }),
108
+ ...(goAway
109
+ ? {
110
+ warning: {
111
+ ...(goAway.timeLeftMs === undefined ? {} : { timeLeftMs: goAway.timeLeftMs }),
112
+ closedAfterMs: Math.round(performance.now() - goAway.atMs),
113
+ },
114
+ }
115
+ : {}),
116
+ };
117
+ return;
118
+ }
119
+ const trouble = socketTrouble(frame, 'session');
120
+ if (trouble)
121
+ throw trouble;
122
+ if (frame.setupComplete)
123
+ continue;
124
+ const events = foldGeminiLiveServerMessage(frame, fold);
125
+ const warning = goAwayIn(events);
126
+ if (warning)
127
+ goAway = { ...warning, atMs: performance.now() };
128
+ for (const event of events)
129
+ if (event.type === 'evidence' && event.sessionResumptionHandle)
130
+ handle = event.sessionResumptionHandle;
131
+ yield* batch(events, turnPhaseFromMessage(frame, events), handle);
132
+ }
133
+ },
134
+ sendText: (text) => settled(() => send(buildGeminiLiveRealtimeInput({ type: 'text', text }))),
135
+ sendAudio: (media) => settled(() => send(buildGeminiLiveRealtimeInput({ type: 'audio', ...media }))),
136
+ sendVideo: (media) => settled(() => send(buildGeminiLiveRealtimeInput({ type: 'video', ...media }))),
137
+ sendContext: (value) => settled(() => send(buildGeminiLiveContext(typeof value.server === 'string' ? value.server : JSON.stringify(value)))),
138
+ sendToolResult: (result) => settled(() => send(buildGeminiLiveToolResponse(result.callId, result.name, result.text, result.parts))),
139
+ close: (reason) => settled(() => socket.close(NORMAL_CLOSE, reason ?? 'session-closed')),
140
+ };
141
+ }
142
+ /** Gemini Live: a spoken session over one WebSocket. */
143
+ export const geminiLive = defineProtocol({
144
+ id: 'geminiLive',
145
+ name: 'Gemini Live',
146
+ description: "Google's Live API for Gemini: a spoken session over one WebSocket.", // labels-exempt: builder field description, read by the studio and docs
147
+ endpoints: { live: '/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent' },
148
+ options: z.strictObject({}),
149
+ continuation: { version: 1, schema: state },
150
+ create(context) {
151
+ return {
152
+ async openSession(request) {
153
+ const { wire, setup, wroteTools } = wireRequest(context, request);
154
+ const socket = await context.connect(setup, { wroteTools });
155
+ const frames = socket.frames()[Symbol.asyncIterator]();
156
+ const abort = () => socket.close(NORMAL_CLOSE, 'aborted');
157
+ context.signal?.addEventListener('abort', abort, { once: true });
158
+ try {
159
+ context.signal?.throwIfAborted();
160
+ await setupComplete(frames, context);
161
+ }
162
+ catch (error) {
163
+ context.signal?.removeEventListener('abort', abort);
164
+ socket.close(NORMAL_CLOSE, 'setup-failed');
165
+ throw error;
166
+ }
167
+ const history = wire.history?.length
168
+ ? buildGeminiLiveClientContent(wire.history)
169
+ : undefined;
170
+ if (history)
171
+ sendFrame(socket, history);
172
+ for (const part of wire.input)
173
+ sendFrame(socket, buildGeminiLiveRealtimeInput(part));
174
+ return session(socket, frames, context, wire.sessionResumptionHandle);
175
+ },
176
+ };
177
+ },
178
+ });
179
+ /** A send that throws becomes a rejected promise, as the session's callers expect. */
180
+ function settled(act) {
181
+ try {
182
+ act();
183
+ return Promise.resolve();
184
+ }
185
+ catch (error) {
186
+ return Promise.reject(error);
187
+ }
188
+ }
189
+ function sendFrame(socket, frame) {
190
+ socket.send(frame, liveFrameInput(frame));
191
+ }
@@ -0,0 +1,3 @@
1
+ import type { PriceTable } from '../../kernel/protocols/prices.js';
2
+ /** What the Gemini API charges per model. */
3
+ export declare const geminiPrices: PriceTable;
@@ -0,0 +1,63 @@
1
+ /* probed 2026-10-15: https://ai.google.dev/gemini-api/docs/pricing, paid tier, US dollars per
2
+ * million tokens. The Gemini API reports no cost. gemini-3.8-flash rises to $1.50 input and $7.50
3
+ * output on 2027-01-01. Cached input is one rate here, so gemini-3.1-flash-lite's cached audio
4
+ * ($0.05) is billed at its cached text rate. Gemma, gemini-3.7-flash and gemini-3.5-flash list no paid price;
5
+ * gemini-2.5-flash-image's output is all image, $30 per million tokens.
6
+ */
7
+ const live = {
8
+ input: 0.75,
9
+ output: 4.5,
10
+ byModality: { input: { audio: 3, image: 1, video: 1 }, output: { audio: 12 } },
11
+ };
12
+ /** What the Gemini API charges per model. */
13
+ export const geminiPrices = {
14
+ checked: '2026-10-15',
15
+ models: {
16
+ 'gemini-3.8-flash': { input: 0.75, output: 3.75, cachedInput: 0.075 },
17
+ 'gemini-3.6-flash': { input: 0.75, output: 3.75, cachedInput: 0.075 },
18
+ 'gemini-3.8-live': live,
19
+ 'gemini-3.8-live-extended-thinking': live,
20
+ 'gemini-3.1-flash-live-preview': live,
21
+ 'gemini-3.5-flash-lite': { input: 0.3, output: 2.5, cachedInput: 0.03 },
22
+ 'gemini-3.1-flash-lite': {
23
+ input: 0.25,
24
+ output: 1.5,
25
+ cachedInput: 0.025,
26
+ byModality: { input: { audio: 0.5 } },
27
+ },
28
+ 'gemini-3.1-pro-preview': {
29
+ input: 2,
30
+ output: 12,
31
+ cachedInput: 0.2,
32
+ longContext: { above: 200_000, input: 4, output: 18, cachedInput: 0.4 },
33
+ },
34
+ 'gemini-3.1-flash-lite-image': {
35
+ input: 0.25,
36
+ output: 1.5,
37
+ byModality: { output: { image: 30 } },
38
+ },
39
+ 'gemini-3.8-flash-tts': { input: 0.5, output: 9 },
40
+ 'gemini-3.8-flash-lite-tts': { input: 0.5, output: 6 },
41
+ 'gemini-3.1-flash-tts-preview': { input: 1, output: 20 },
42
+ 'gemini-3-flash-preview': {
43
+ input: 0.5,
44
+ output: 3,
45
+ cachedInput: 0.05,
46
+ byModality: { input: { audio: 1 } },
47
+ },
48
+ 'gemini-2.5-flash': {
49
+ input: 0.3,
50
+ output: 2.5,
51
+ cachedInput: 0.03,
52
+ byModality: { input: { audio: 1 } },
53
+ },
54
+ 'gemini-2.5-flash-lite': {
55
+ input: 0.1,
56
+ output: 0.4,
57
+ cachedInput: 0.01,
58
+ byModality: { input: { audio: 0.3 } },
59
+ },
60
+ 'gemini-2.5-flash-preview-tts': { input: 0.5, output: 10 },
61
+ 'gemini-2.5-flash-image': { input: 0.3, output: 30 },
62
+ },
63
+ };
@@ -0,0 +1,7 @@
1
+ import { type Provider } from '../../kernel/protocols/provider.js';
2
+ /** What registering `geminiProvider` takes as `connection`. */
3
+ export interface GeminiConnection {
4
+ host?: string;
5
+ }
6
+ /** Gemini: Google's models with an API key. Text, images, and speech, and Live voice. */
7
+ export declare const geminiProvider: Provider<GeminiConnection, string>;
@@ -0,0 +1,39 @@
1
+ import { z } from 'zod';
2
+ import { labelText } from '../../guardrails/labels.js';
3
+ import { defineProvider, endpointUrlSchema, header, query, } from '../../kernel/protocols/provider.js';
4
+ import { geminiEmbedding } from './embedding-protocol.js';
5
+ import { geminiInteractions } from './interactions-protocol.js';
6
+ import { geminiLive } from './live-protocol.js';
7
+ import { geminiPrices } from './prices.js';
8
+ /** Gemini: Google's models with an API key. Text, images, and speech, and Live voice. */
9
+ export const geminiProvider = defineProvider({
10
+ id: 'gemini',
11
+ name: 'Gemini',
12
+ description: "Google's models with an API key, from Google AI Studio.", // labels-exempt: builder field description, read by the studio and docs
13
+ traceName: 'gcp.gemini',
14
+ connection: z
15
+ .strictObject({
16
+ host: endpointUrlSchema
17
+ .refine((value) => {
18
+ const url = new URL(value);
19
+ return url.pathname === '/' && !url.search && !url.hash;
20
+ }, labelText('protocol.endpoint_host'))
21
+ .optional()
22
+ .describe('The API host, by default https://generativelanguage.googleapis.com. Live connects to the same host over wss.'),
23
+ })
24
+ .default({}),
25
+ key: z.string().trim().min(1),
26
+ authorize: header('x-goog-api-key'),
27
+ prices: geminiPrices,
28
+ serves(at) {
29
+ const host = new URL(at.host ?? 'https://generativelanguage.googleapis.com');
30
+ const origin = host.origin;
31
+ const liveOrigin = `${host.protocol === 'http:' ? 'ws:' : 'wss:'}//${host.host}`;
32
+ return [
33
+ { protocol: geminiInteractions, baseUrl: `${origin}/v1beta` },
34
+ { protocol: geminiEmbedding, baseUrl: `${origin}/v1beta` },
35
+ // probed 2026-09-23: Live's WebSocket takes the key only in the URL's query.
36
+ { protocol: geminiLive, baseUrl: `${liveOrigin}/ws`, authorize: query('key') },
37
+ ];
38
+ },
39
+ });
@@ -0,0 +1,8 @@
1
+ import { TheoremError } from '../../guardrails/error.js';
2
+ /**
3
+ * Interactions (SSE `error` rows, non-OK bodies) and Live (error frames) both send
4
+ * `{ error: { code, message, status } }`; `code` is an HTTP status or a named code.
5
+ */
6
+ export declare function readGeminiApiError(record: Record<string, unknown>): TheoremError | null;
7
+ /** The kind is the HTTP status's, unless the body names a refused key. */
8
+ export declare function readNonOkError(response: Response): Promise<TheoremError>;
@@ -0,0 +1,123 @@
1
+ import { kindOfHttpStatus, TheoremError } from '../../guardrails/error.js';
2
+ import { asRecord } from '../../kernel/engine/record.js';
3
+ const HTTP_STATUS_MIN = 100;
4
+ const HTTP_STATUS_MAX = 599;
5
+ /**
6
+ * Google refuses a bad key as a 400 `INVALID_ARGUMENT`, so the status reads as
7
+ * a request THEOREM cannot make; the `ErrorInfo` reason is what says it is the
8
+ * key. An expired key carries the same reason.
9
+ */
10
+ const AUTH_REASONS = new Set(['API_KEY_INVALID']);
11
+ /** Whether an error's `details` name a key Google refused. */
12
+ function refusesKey(details) {
13
+ return (Array.isArray(details) &&
14
+ details.some((detail) => {
15
+ const reason = asRecord(detail)?.reason;
16
+ return typeof reason === 'string' && AUTH_REASONS.has(reason);
17
+ }));
18
+ }
19
+ /**
20
+ * The HTTP status behind each named code Google puts on an Interactions error
21
+ * (https://ai.google.dev/gemini-api/docs/api-errors). A code it does not list
22
+ * is the snake_case name of the HTTP status, so those names are here too.
23
+ */
24
+ const NAMED_CODE_STATUS = {
25
+ invalid_request: 400,
26
+ failed_precondition: 400,
27
+ parameter_unknown: 400,
28
+ authentication: 401,
29
+ payment_required: 402,
30
+ permission_denied: 403,
31
+ not_found: 404,
32
+ model_not_found: 404,
33
+ already_exists: 409,
34
+ aborted: 409,
35
+ out_of_range: 416,
36
+ rate_limit_exceeded: 429,
37
+ quota_exceeded: 429,
38
+ too_many_requests: 429,
39
+ api_error: 500,
40
+ unimplemented: 501,
41
+ service_unavailable: 503,
42
+ deadline_exceeded: 504,
43
+ bad_request: 400,
44
+ unauthorized: 401,
45
+ forbidden: 403,
46
+ method_not_allowed: 405,
47
+ request_timeout: 408,
48
+ conflict: 409,
49
+ payload_too_large: 413,
50
+ unprocessable_entity: 422,
51
+ internal_server_error: 500,
52
+ not_implemented: 501,
53
+ bad_gateway: 502,
54
+ gateway_timeout: 504,
55
+ };
56
+ /** Codes for a generation Google's safety filters held back. */
57
+ const BLOCKED_CODES = new Set([
58
+ 'safety',
59
+ 'recitation',
60
+ 'language',
61
+ 'prohibited_content',
62
+ 'spii',
63
+ 'blocklist',
64
+ 'image_safety',
65
+ 'image_prohibited_content',
66
+ 'image_recitation',
67
+ 'image_other',
68
+ 'content_blocked',
69
+ ]);
70
+ /**
71
+ * `cancelled` (499) is the request stopped on THEOREM's side. Generation error
72
+ * codes (`malformed_function_call`, `no_image`, …) and any code Google adds later
73
+ * are `bad_response`.
74
+ */
75
+ function kindOfNamedCode(code) {
76
+ if (code === 'cancelled')
77
+ return 'cancelled';
78
+ if (BLOCKED_CODES.has(code))
79
+ return 'safety';
80
+ const status = NAMED_CODE_STATUS[code];
81
+ return status === undefined ? 'bad_response' : kindOfHttpStatus(status);
82
+ }
83
+ /**
84
+ * Interactions (SSE `error` rows, non-OK bodies) and Live (error frames) both send
85
+ * `{ error: { code, message, status } }`; `code` is an HTTP status or a named code.
86
+ */
87
+ export function readGeminiApiError(record) {
88
+ const error = asRecord(record.error);
89
+ if (!error) {
90
+ return null;
91
+ }
92
+ const { code, message, status, details } = error;
93
+ const kind = refusesKey(details)
94
+ ? 'auth'
95
+ : typeof code === 'number' && code >= HTTP_STATUS_MIN && code <= HTTP_STATUS_MAX
96
+ ? kindOfHttpStatus(code)
97
+ : typeof code === 'string'
98
+ ? kindOfNamedCode(code)
99
+ : 'bad_response';
100
+ if (typeof message !== 'string' || message.length === 0) {
101
+ return new TheoremError(kind, 'Gemini returned an error.');
102
+ }
103
+ return new TheoremError(kind, typeof status === 'string' ? `${status}: ${message}` : message);
104
+ }
105
+ /** The kind is the HTTP status's, unless the body names a refused key. */
106
+ export async function readNonOkError(response) {
107
+ const kind = kindOfHttpStatus(response.status);
108
+ const text = await response.text().catch(() => '');
109
+ if (!text.trim()) {
110
+ return new TheoremError(kind, `HTTP ${response.status}`);
111
+ }
112
+ const parsed = parseRecord(text);
113
+ const stated = parsed ? readGeminiApiError(parsed) : null;
114
+ return new TheoremError(stated?.kind === 'auth' ? 'auth' : kind, stated?.message ?? `Gemini HTTP ${response.status}: ${text}`);
115
+ }
116
+ function parseRecord(text) {
117
+ try {
118
+ return asRecord(JSON.parse(text));
119
+ }
120
+ catch {
121
+ return undefined;
122
+ }
123
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The tools Gemini runs itself, and how each is sent on Interactions and on Live, with what it
3
+ * takes from a request's `builtInArgs`.
4
+ *
5
+ * @module
6
+ */
7
+ import type { ProviderBuiltin } from '../../kernel/types.js';
8
+ /** The request's builtins that are Google's own tools; the wire takes no others. */
9
+ declare function googleBuiltins<B extends ProviderBuiltin>(builtins: readonly B[]): B[];
10
+ /** One builtin as an Interactions `tools` entry. */
11
+ declare function interactionsBuiltinTool(builtin: ProviderBuiltin): Record<string, unknown>;
12
+ /** One builtin as a Live setup `tools` entry. Live takes no args for any of them. */
13
+ declare function liveBuiltinTool(builtin: ProviderBuiltin): Record<string, unknown>;
14
+ export { googleBuiltins, interactionsBuiltinTool, liveBuiltinTool };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * The tools Gemini runs itself, and how each is sent on Interactions and on Live, with what it
3
+ * takes from a request's `builtInArgs`.
4
+ *
5
+ * @module
6
+ */
7
+ import { z } from 'zod';
8
+ import { TheoremError } from '../../guardrails/error.js';
9
+ const googleMapsArgs = z.strictObject({
10
+ /** Where Maps grounding searches around. */
11
+ location: z.strictObject({
12
+ latitude: z.number().min(-90).max(90),
13
+ longitude: z.number().min(-180).max(180),
14
+ }),
15
+ });
16
+ const GOOGLE_BUILTIN_IDS = [
17
+ 'googleSearch',
18
+ 'googleMaps',
19
+ 'urlContext',
20
+ 'codeExecution',
21
+ ];
22
+ const INTERACTIONS_TYPE = {
23
+ googleSearch: 'google_search',
24
+ googleMaps: 'google_maps',
25
+ urlContext: 'url_context',
26
+ codeExecution: 'code_execution',
27
+ };
28
+ /** The request's builtins that are Google's own tools; the wire takes no others. */
29
+ function googleBuiltins(builtins) {
30
+ return builtins.filter((builtin) => GOOGLE_BUILTIN_IDS.includes(builtin.id));
31
+ }
32
+ function googleBuiltinId(builtin) {
33
+ const id = GOOGLE_BUILTIN_IDS.find((known) => known === builtin.id);
34
+ if (!id) {
35
+ throw new TheoremError('config', `Builtin '${builtin.id}' is not a Google tool`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
36
+ }
37
+ return id;
38
+ }
39
+ /** One builtin as an Interactions `tools` entry. */
40
+ function interactionsBuiltinTool(builtin) {
41
+ const id = googleBuiltinId(builtin);
42
+ const type = INTERACTIONS_TYPE[id];
43
+ if (id === 'googleMaps' && builtin.args) {
44
+ const { location } = googleMapsArgs.parse(builtin.args);
45
+ return { type, latitude: location.latitude, longitude: location.longitude };
46
+ }
47
+ return { type };
48
+ }
49
+ /** One builtin as a Live setup `tools` entry. Live takes no args for any of them. */
50
+ function liveBuiltinTool(builtin) {
51
+ const id = googleBuiltinId(builtin);
52
+ if (builtin.args) {
53
+ throw new TheoremError('unsupported', `Builtin '${id}' takes no args on Google Live`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
54
+ }
55
+ return { [id]: {} };
56
+ }
57
+ export { googleBuiltins, interactionsBuiltinTool, liveBuiltinTool };
@@ -0,0 +1,5 @@
1
+ import type { ModelEvent } from '../../kernel/types.js';
2
+ declare function groundingFromDelta(event: Record<string, unknown>): ModelEvent[];
3
+ declare function groundingFromSteps(steps: unknown[]): ModelEvent[];
4
+ declare function groundingFromLiveMetadata(value: unknown): ModelEvent[];
5
+ export { groundingFromDelta, groundingFromLiveMetadata, groundingFromSteps };