@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,4 @@
1
+ /** The models a key's project can call; paged with `pageToken`. */
2
+ const GEMINI_MODELS_URL = 'https://generativelanguage.googleapis.com/v1beta/models';
3
+ const GEMINI_LIVE_WS_URL = 'wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent';
4
+ export { GEMINI_LIVE_WS_URL, GEMINI_MODELS_URL };
@@ -0,0 +1,7 @@
1
+ import type { TurnGroundingCount } from '../../kernel/types.js';
2
+ export declare function modalityCounts(raw: unknown, countKey: 'tokens' | 'tokenCount'): Record<string, number> | undefined;
3
+ export declare function byModality(input: Record<string, number> | undefined, output: Record<string, number> | undefined): {
4
+ input?: Record<string, number>;
5
+ output?: Record<string, number>;
6
+ } | undefined;
7
+ export declare function groundingCounts(raw: unknown): TurnGroundingCount[] | undefined;
@@ -0,0 +1,49 @@
1
+ /* probed 2026-09-23:
2
+ * Google usage lists, in the spellings the wire sends:
3
+ *
4
+ * - Interactions: `input_tokens_by_modality` / `output_tokens_by_modality`,
5
+ * `[{ modality: 'text', tokens }]`; `grounding_tool_count`,
6
+ * `[{ type, count, search_query_count }]`.
7
+ * - Live: `promptTokensDetails` / `responseTokensDetails`,
8
+ * `[{ modality: 'TEXT', tokenCount }]`.
9
+ *
10
+ * Both list only some modalities (Live listed 126 text of 144 prompt tokens;
11
+ * an image reply listed 1,120 image of 1,378 output tokens), so the shares
12
+ * are kept as reported and never filled to the total.
13
+ */
14
+ import { asRecord } from '../../kernel/engine/record.js';
15
+ import { usageCount } from '../../kernel/engine/usage.js';
16
+ export function modalityCounts(raw, countKey) {
17
+ if (!Array.isArray(raw))
18
+ return undefined;
19
+ const counts = {};
20
+ for (const entry of raw) {
21
+ const rec = asRecord(entry);
22
+ const count = usageCount(rec?.[countKey]);
23
+ if (typeof rec?.modality === 'string' && count !== undefined) {
24
+ const modality = rec.modality.toLowerCase();
25
+ counts[modality] = (counts[modality] ?? 0) + count;
26
+ }
27
+ }
28
+ return Object.keys(counts).length > 0 ? counts : undefined;
29
+ }
30
+ export function byModality(input, output) {
31
+ if (!input && !output)
32
+ return undefined;
33
+ return { ...(input ? { input } : {}), ...(output ? { output } : {}) };
34
+ }
35
+ export function groundingCounts(raw) {
36
+ if (!Array.isArray(raw))
37
+ return undefined;
38
+ const counts = raw.flatMap((entry) => {
39
+ const rec = asRecord(entry);
40
+ const count = usageCount(rec?.count);
41
+ if (typeof rec?.type !== 'string' || count === undefined)
42
+ return [];
43
+ const queries = usageCount(rec.search_query_count);
44
+ return [
45
+ { type: rec.type, count, ...(queries === undefined ? {} : { searchQueryCount: queries }) },
46
+ ];
47
+ });
48
+ return counts.length > 0 ? counts : undefined;
49
+ }
@@ -0,0 +1,6 @@
1
+ /** Provider-neutral live tracing and tool read-back helpers.
2
+ * @module
3
+ */
4
+ import type { TurnHistoryMessage } from '../kernel/types.js';
5
+ export declare function liveSentInput(row: Record<string, unknown>): TurnHistoryMessage[];
6
+ export declare function liveToolReadBack(output: unknown): string;
@@ -0,0 +1,6 @@
1
+ export function liveSentInput(row) {
2
+ return Array.isArray(row.input) ? row.input : [];
3
+ }
4
+ export function liveToolReadBack(output) {
5
+ return typeof output === 'string' ? output : JSON.stringify(output);
6
+ }
@@ -0,0 +1,7 @@
1
+ import { type Protocol } from '../../kernel/protocols/mod.js';
2
+ /** What an `ollamaEmbedding` binding sets in `options`. */
3
+ export interface OllamaEmbeddingOptions {
4
+ truncate?: boolean;
5
+ dimensions?: number;
6
+ }
7
+ export declare const ollamaEmbedding: Protocol<OllamaEmbeddingOptions>;
@@ -0,0 +1,60 @@
1
+ import { z } from 'zod';
2
+ import { TheoremError } from '../../guardrails/error.js';
3
+ import { defineProtocol } from '../../kernel/protocols/mod.js';
4
+ const options = z.strictObject({
5
+ truncate: z
6
+ .boolean()
7
+ .optional()
8
+ .describe('What happens to an input longer than the model reads. On, it is cut to fit; off, the call fails. Absent: Ollama cuts it.'),
9
+ dimensions: z
10
+ .number()
11
+ .int()
12
+ .positive()
13
+ .optional()
14
+ .describe('How many numbers each vector holds, for models that can shorten theirs. Absent: the length the model returns.'),
15
+ });
16
+ function strings(input) {
17
+ const values = Array.isArray(input) ? input : [input];
18
+ return values.map((item) => {
19
+ if (typeof item === 'string')
20
+ return item;
21
+ if (item.parts.length !== 1 || item.parts[0]?.type !== 'text')
22
+ throw new TheoremError('unsupported', 'The Ollama embedding protocol accepts text only');
23
+ return item.parts[0].text;
24
+ });
25
+ }
26
+ export const ollamaEmbedding = defineProtocol({
27
+ id: 'ollamaEmbedding',
28
+ name: 'Ollama Embeddings',
29
+ description: 'Ollama’s local embedding endpoint.',
30
+ endpoints: { embedding: '/api/embed' },
31
+ options,
32
+ embeddingLimits: () => ({ media: [] }),
33
+ create(context) {
34
+ return {
35
+ async embed(request) {
36
+ const parsed = options.parse(request.options ?? {});
37
+ const rows = context.send({
38
+ model: context.apiId,
39
+ input: strings(request.input),
40
+ ...(parsed.truncate === undefined ? {} : { truncate: parsed.truncate }),
41
+ ...(parsed.dimensions === undefined ? {} : { dimensions: parsed.dimensions }),
42
+ }, { stream: false });
43
+ let row;
44
+ for await (const current of rows)
45
+ row = current;
46
+ const embeddings = Array.isArray(row?.embeddings) ? row.embeddings : [];
47
+ return {
48
+ model: typeof row?.model === 'string' ? row.model : context.apiId,
49
+ embeddings: embeddings.map((values, index) => ({
50
+ index,
51
+ values: Array.isArray(values)
52
+ ? values.filter((value) => typeof value === 'number')
53
+ : [],
54
+ dimensions: Array.isArray(values) ? values.length : 0,
55
+ })),
56
+ };
57
+ },
58
+ };
59
+ },
60
+ });
@@ -0,0 +1,7 @@
1
+ import { type Provider } from '../../kernel/protocols/provider.js';
2
+ /** What registering `localProvider` takes as `connection`. */
3
+ export interface LocalConnection {
4
+ baseUrl: string;
5
+ }
6
+ /** A server on your machine or network that speaks OpenAI's chat API: Ollama, llama.cpp, vLLM, LM Studio. */
7
+ export declare const localProvider: Provider<LocalConnection, string>;
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ import { bearer, defineProvider, endpointUrlSchema, } from '../../kernel/protocols/provider.js';
3
+ import { openAi } from '../open-ai/protocol.js';
4
+ import { ollamaEmbedding } from './embedding-protocol.js';
5
+ /** A server on your machine or network that speaks OpenAI's chat API: Ollama, llama.cpp, vLLM, LM Studio. */
6
+ export const localProvider = defineProvider({
7
+ id: 'local',
8
+ name: 'Local',
9
+ description: "A server that speaks OpenAI's chat API: Ollama, llama.cpp, vLLM, LM Studio.", // labels-exempt: builder field description, read by the studio and docs
10
+ traceName: 'openai',
11
+ connection: z.strictObject({
12
+ baseUrl: endpointUrlSchema.describe('Where the server listens, up to and including /v1, e.g. http://localhost:11434/v1.'),
13
+ }),
14
+ key: z.string().trim().min(1).optional(),
15
+ authorize: bearer(),
16
+ serves: (at) => [
17
+ { protocol: openAi, baseUrl: at.baseUrl },
18
+ {
19
+ protocol: ollamaEmbedding,
20
+ baseUrl: at.baseUrl,
21
+ url: ({ path }) => {
22
+ const base = new URL(at.baseUrl);
23
+ base.pathname = base.pathname.replace(/\/v1\/?$/, '') || '/';
24
+ return new URL(path.replace(/^\/+/, ''), base).toString();
25
+ },
26
+ },
27
+ ],
28
+ });
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Protocols, providers, and what it takes to define either: a protocol owns the wire, a provider is
3
+ * where a service is and how to sign in to it.
4
+ * @module
5
+ */
6
+ import "../../_dnt.polyfills.js";
7
+ export type { ProviderCheckpoint, ProviderContinuationPolicy, ProviderWarning, } from '../kernel/checkpoint.js';
8
+ export type { JsonObject, JsonValue } from '../kernel/json.js';
9
+ export { jsonObjectSchema, jsonValueSchema } from '../kernel/json.js';
10
+ export type { DecisionModelBinding, ModelBinding } from '../kernel/protocols/binding.js';
11
+ export type { ProviderLimits } from '../kernel/protocols/limits.js';
12
+ export type { ModelPrice, PriceTable, Rates } from '../kernel/protocols/prices.js';
13
+ export type { Continuation, DecisionCall, EmbeddingCall, EmbeddingMediaKind, EmbeddingModelLimits, ExtensionBodyAt, ExtensionReader, LiveToolResult, ModelProfileType, Protocol, ProtocolContentEvent, ProtocolContext, ProtocolDefinition, ProtocolEvent, ProtocolExtension, ProtocolOperations, ProtocolRequest, ProtocolSession, ProtocolSocket, SendInit, UpstreamFailure, } from '../kernel/protocols/protocol.js';
14
+ export { carriesTo, defineProtocol, extendProtocol, modelOptions, } from '../kernel/protocols/protocol.js';
15
+ export type { Authorize, Outgoing, Provider, ProviderDefinition, ProviderRegistry, RegisteredProvider, Registration, Serve, Signer, } from '../kernel/protocols/provider.js';
16
+ export { bearer, createProviderRegistry, defineProvider, endpointUrlSchema, header, query, } from '../kernel/protocols/provider.js';
17
+ export type { OpenWebSocket, ProviderHostOptions } from '../kernel/protocols/runtime.js';
18
+ export type { CredentialContext, CredentialResolver, KeyCredential, KeyVault, } from '../kernel/registry/vault.js';
19
+ export { embeddingModelLimits } from './embedding-limits.js';
20
+ export { geminiEmbedding } from './gemini/embedding-protocol.js';
21
+ export { geminiInteractions } from './gemini/interactions-protocol.js';
22
+ export { geminiLive } from './gemini/live-protocol.js';
23
+ export { geminiProvider } from './gemini/provider.js';
24
+ export { ollamaEmbedding } from './local/embedding-protocol.js';
25
+ export { localProvider } from './local/provider.js';
26
+ export { openAi } from './open-ai/protocol.js';
27
+ export { openRouterEmbedding } from './openrouter/embedding-protocol.js';
28
+ export { openRouterImages } from './openrouter/images-protocol.js';
29
+ export { openRouter } from './openrouter/protocol.js';
30
+ export { openRouterProvider } from './openrouter/provider.js';
31
+ export { systemOne } from './system-one/protocol.js';
32
+ export { typesafeProvider } from './typesafe/provider.js';
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Protocols, providers, and what it takes to define either: a protocol owns the wire, a provider is
3
+ * where a service is and how to sign in to it.
4
+ * @module
5
+ */
6
+ import "../../_dnt.polyfills.js";
7
+ export { jsonObjectSchema, jsonValueSchema } from '../kernel/json.js';
8
+ export { carriesTo, defineProtocol, extendProtocol, modelOptions, } from '../kernel/protocols/protocol.js';
9
+ export { bearer, createProviderRegistry, defineProvider, endpointUrlSchema, header, query, } from '../kernel/protocols/provider.js';
10
+ export { embeddingModelLimits } from './embedding-limits.js';
11
+ export { geminiEmbedding } from './gemini/embedding-protocol.js';
12
+ export { geminiInteractions } from './gemini/interactions-protocol.js';
13
+ export { geminiLive } from './gemini/live-protocol.js';
14
+ export { geminiProvider } from './gemini/provider.js';
15
+ export { ollamaEmbedding } from './local/embedding-protocol.js';
16
+ export { localProvider } from './local/provider.js';
17
+ export { openAi } from './open-ai/protocol.js';
18
+ export { openRouterEmbedding } from './openrouter/embedding-protocol.js';
19
+ export { openRouterImages } from './openrouter/images-protocol.js';
20
+ export { openRouter } from './openrouter/protocol.js';
21
+ export { openRouterProvider } from './openrouter/provider.js';
22
+ export { systemOne } from './system-one/protocol.js';
23
+ export { typesafeProvider } from './typesafe/provider.js';
@@ -0,0 +1,3 @@
1
+ import { type Protocol } from '../../kernel/protocols/mod.js';
2
+ /** OpenAI Chat Completions: the shape most compatible servers speak. */
3
+ export declare const openAi: Protocol<Record<string, never>>;
@@ -0,0 +1,189 @@
1
+ import { z } from 'zod';
2
+ import { kindOfHttpStatus, TheoremError } from '../../guardrails/error.js';
3
+ import { asRecord } from '../../kernel/engine/record.js';
4
+ import { defineProtocol, } from '../../kernel/protocols/mod.js';
5
+ import { turnStopFromOpenAiFinishReason } from '../../kernel/stop.js';
6
+ import { base64ToBytes, bytesToBase64 } from '../../kernel/util/base64.js';
7
+ import { mimeEssence } from '../../kernel/util/mime.js';
8
+ import { buildChatMessages, resolveResponseFormat, wireTools, } from '../openrouter/openai/compat.js';
9
+ import { openAiResponse, openAiUsageTokens } from '../openrouter/openai/usage.js';
10
+ import { pcmFormatFromMime, wrapPcmAsWav } from '../shared/pcm.js';
11
+ import { asProtocolEvent } from '../shared/protocol-events.js';
12
+ import { foldResponse } from '../shared/response-identity.js';
13
+ import { structuredEvent } from '../shared/structured-output.js';
14
+ import { toolCallEvents } from '../shared/tool-args.js';
15
+ import { toolDraftEvents } from '../shared/tool-draft.js';
16
+ /** Old-shape events from the shared helpers, as protocol events. */
17
+ function asProtocolEvents(events) {
18
+ return events.flatMap((event) => asProtocolEvent(event) ?? []);
19
+ }
20
+ function requestBody(context, request) {
21
+ const stream = request.stream !== false;
22
+ const tools = wireTools(request.wireTools);
23
+ const format = resolveResponseFormat(request.structured);
24
+ const body = {
25
+ model: context.apiId,
26
+ // why: replayed reasoning belongs to the protocol that wrote it, never to plain Chat Completions.
27
+ messages: buildChatMessages(request),
28
+ stream,
29
+ ...(stream ? { stream_options: { include_usage: true } } : {}),
30
+ ...(request.temperature === undefined ? {} : { temperature: request.temperature }),
31
+ ...(request.maxOutputTokens === undefined ? {} : { max_tokens: request.maxOutputTokens }),
32
+ ...(request.thinking ? { reasoning_effort: request.thinking } : {}),
33
+ ...(format ? { response_format: format } : {}),
34
+ // probed 2026-10-09: an empty `tools` list counts as a parameter the model must support, so OpenRouter refuses models without tool calling.
35
+ ...(tools ? { tools } : {}),
36
+ };
37
+ return JSON.parse(JSON.stringify(body));
38
+ }
39
+ /** An error row inside a 200 reply: thrown, so a quota refusal before any output can still fall back. */
40
+ function errorRow(row) {
41
+ const error = asRecord(row.error);
42
+ if (!error)
43
+ return;
44
+ const status = typeof error.code === 'number' ? error.code : 502;
45
+ const message = typeof error.message === 'string' ? error.message : JSON.stringify(error);
46
+ throw new TheoremError(kindOfHttpStatus(status), message);
47
+ }
48
+ function citations(part, reply) {
49
+ const sources = (Array.isArray(part.annotations) ? part.annotations : []).flatMap((item) => {
50
+ const cited = asRecord(asRecord(item)?.url_citation);
51
+ if (typeof cited?.url !== 'string' || reply.cited.has(cited.url))
52
+ return [];
53
+ reply.cited.add(cited.url);
54
+ const title = typeof cited.title === 'string' && cited.title ? cited.title : cited.url;
55
+ return [{ title, uri: cited.url, type: 'web' }];
56
+ });
57
+ return sources.length ? [{ type: 'citation', sources }] : [];
58
+ }
59
+ function mergeCalls(part, reply) {
60
+ for (const [position, value] of (Array.isArray(part.tool_calls)
61
+ ? part.tool_calls
62
+ : []).entries()) {
63
+ const call = asRecord(value);
64
+ const fn = asRecord(call?.function);
65
+ const index = typeof call?.index === 'number' ? call.index : position;
66
+ const current = reply.calls.get(index) ?? { name: '', args: '' };
67
+ if (typeof call?.id === 'string' && call.id)
68
+ current.id = call.id;
69
+ if (typeof fn?.name === 'string')
70
+ current.name += fn.name;
71
+ if (typeof fn?.arguments === 'string')
72
+ current.args += fn.arguments;
73
+ reply.calls.set(index, current);
74
+ }
75
+ }
76
+ /** One choice's delta (streamed) or message (whole). */
77
+ function partEvents(part, reply, request) {
78
+ const events = [];
79
+ const thought = part.reasoning ?? part.reasoning_content;
80
+ if (typeof thought === 'string' && thought && request.summaries !== 'none')
81
+ events.push({ type: 'thought', text: thought });
82
+ if (typeof part.content === 'string' && part.content) {
83
+ reply.text += part.content;
84
+ events.push({ type: 'text', text: part.content });
85
+ }
86
+ events.push(...citations(part, reply));
87
+ mergeCalls(part, reply);
88
+ return events;
89
+ }
90
+ function rowEvents(row, reply, request, stream) {
91
+ errorRow(row);
92
+ const events = [];
93
+ const identity = foldResponse(reply.response, openAiResponse(row));
94
+ reply.response = identity.known;
95
+ if (identity.event)
96
+ events.push(identity.event);
97
+ const tokens = reply.tokens ? undefined : openAiUsageTokens(row.usage);
98
+ if (tokens) {
99
+ reply.tokens = true;
100
+ events.push({ type: 'tokens', tokens });
101
+ }
102
+ for (const item of Array.isArray(row.choices) ? row.choices : []) {
103
+ const choice = asRecord(item);
104
+ const part = asRecord(stream ? choice?.delta : choice?.message);
105
+ if (part)
106
+ events.push(...partEvents(part, reply, request));
107
+ if (typeof choice?.finish_reason === 'string')
108
+ reply.finish = choice.finish_reason;
109
+ // why: gateways add the upstream's own reason beside it; it tells a provider failure from a stop.
110
+ if (typeof choice?.native_finish_reason === 'string')
111
+ reply.native = choice.native_finish_reason;
112
+ }
113
+ // why: a whole reply carries each call complete; only a streamed one has a draft to show.
114
+ if (stream)
115
+ for (const call of reply.calls.values())
116
+ events.push(...asProtocolEvents(toolDraftEvents(call)));
117
+ return events;
118
+ }
119
+ /** The calls, the structured reply, and the stop, once the rows are done. */
120
+ function endEvents(reply, request) {
121
+ const events = [];
122
+ // why: some compatible servers end a tool-calling reply with `stop`, so the calls go out whatever the finish.
123
+ for (const [index, call] of reply.calls)
124
+ events.push(...asProtocolEvents(toolCallEvents({ ...call, id: call.id ?? `call_${index}` }, call.args)));
125
+ const stop = turnStopFromOpenAiFinishReason(reply.finish, reply.native);
126
+ if (request.structured && reply.text && stop.kind === 'completed') {
127
+ const structured = asProtocolEvents([structuredEvent(reply.text)]);
128
+ events.push(...structured);
129
+ if (structured[0]?.type === 'error')
130
+ return events;
131
+ }
132
+ events.push({ type: 'done', stop });
133
+ return events;
134
+ }
135
+ /** `/audio/speech`: the input's text read aloud, answered whole. Raw PCM with a stated rate becomes WAV. */
136
+ async function* speech(context, request) {
137
+ const text = request.input
138
+ .flatMap((part) => (part.type === 'text' ? [part.text] : []))
139
+ .join(' ')
140
+ .trim();
141
+ if (!text)
142
+ throw new TheoremError('request', 'empty text for speech');
143
+ const spec = request.speech;
144
+ const body = {
145
+ model: context.apiId,
146
+ input: text,
147
+ ...(spec?.format ? { response_format: spec.format } : {}),
148
+ ...(spec?.voice ? { voice: spec.voice } : {}),
149
+ ...(spec?.speed === undefined ? {} : { speed: spec.speed }),
150
+ // why: `instructions` is the endpoint's own field for delivery, never read aloud (probe 07/10/2026: Gemini 3.8 slowed and sped by it).
151
+ ...(spec?.style ? { instructions: spec.style } : {}),
152
+ };
153
+ for await (const row of context.send(body, { stream: false })) {
154
+ const type = typeof row.mime_type === 'string' ? row.mime_type : '';
155
+ const bytes = typeof row.data === 'string' ? base64ToBytes(row.data) : new Uint8Array();
156
+ if (!bytes.length)
157
+ throw new TheoremError('bad_response', 'no audio returned from speech');
158
+ const pcm = pcmFormatFromMime(type);
159
+ const media = pcm
160
+ ? { mimeType: 'audio/wav', data: bytesToBase64(wrapPcmAsWav(bytes, pcm)) }
161
+ : { mimeType: mimeEssence(type) || 'application/octet-stream', data: row.data };
162
+ yield { type: 'media', media };
163
+ // why: the endpoint answers whole or not at all: a body with audio completed.
164
+ yield { type: 'done', stop: { kind: 'completed' } };
165
+ }
166
+ }
167
+ /** OpenAI Chat Completions: the shape most compatible servers speak. */
168
+ export const openAi = defineProtocol({
169
+ id: 'openAi',
170
+ name: 'OpenAI Chat Completions',
171
+ description: 'The Chat Completions shape that OpenAI and most compatible servers speak.', // labels-exempt: builder field description, read by the studio and docs
172
+ endpoints: { text: '/chat/completions', speech: '/audio/speech' },
173
+ options: z.strictObject({}),
174
+ create(context) {
175
+ return {
176
+ async *complete(request) {
177
+ if (context.profileType === 'speech') {
178
+ yield* speech(context, request);
179
+ return;
180
+ }
181
+ const stream = request.stream !== false;
182
+ const reply = { text: '', tokens: false, cited: new Set(), calls: new Map() };
183
+ for await (const row of context.send(requestBody(context, request), { stream }))
184
+ yield* rowEvents(row, reply, request, stream);
185
+ yield* endEvents(reply, request);
186
+ },
187
+ };
188
+ },
189
+ });
@@ -0,0 +1,6 @@
1
+ import { type Protocol } from '../../kernel/protocols/mod.js';
2
+ /** What an `openRouterEmbedding` binding sets in `options`. */
3
+ export interface OpenRouterEmbeddingOptions {
4
+ encodingFormat?: 'float' | 'base64';
5
+ }
6
+ export declare const openRouterEmbedding: Protocol<OpenRouterEmbeddingOptions>;
@@ -0,0 +1,86 @@
1
+ import { z } from 'zod';
2
+ import { defineProtocol, } from '../../kernel/protocols/mod.js';
3
+ import { base64ToBytes } from '../../kernel/util/base64.js';
4
+ const options = z.strictObject({
5
+ encodingFormat: z
6
+ .enum(['float', 'base64'])
7
+ .optional()
8
+ .describe('How OpenRouter sends each vector back: as a list of numbers (`float`) or packed into a base64 string (`base64`, smaller on the wire). Theorem decodes both to the same numbers. Absent: `float`.'),
9
+ });
10
+ // why: OpenRouter's embeddings reference takes images only and caps neither inputs nor images per input; a text-only model refuses an image itself.
11
+ const LIMITS = { media: [{ accept: ['image/*'] }] };
12
+ /** A string stays a string; a multimodal input is one `{ content }` item, as OpenRouter documents. */
13
+ function inputValue(input) {
14
+ if (typeof input === 'string')
15
+ return input;
16
+ return {
17
+ content: input.parts.map((part) => {
18
+ if (part.type === 'text')
19
+ return { type: 'text', text: part.text };
20
+ const url = part.type === 'media' ? `data:${part.mimeType};base64,${part.data}` : part.uri;
21
+ return { type: 'image_url', image_url: { url } };
22
+ }),
23
+ };
24
+ }
25
+ function embeddingValues(value) {
26
+ if (Array.isArray(value)) {
27
+ if (!value.every((entry) => typeof entry === 'number' && Number.isFinite(entry))) {
28
+ throw new Error('OpenRouter returned an embedding with a non-finite value');
29
+ }
30
+ return value;
31
+ }
32
+ if (typeof value !== 'string') {
33
+ throw new Error('OpenRouter returned an embedding in an unsupported format');
34
+ }
35
+ const bytes = base64ToBytes(value);
36
+ if (bytes.byteLength % Float32Array.BYTES_PER_ELEMENT !== 0) {
37
+ throw new Error('OpenRouter returned an invalid base64 embedding length');
38
+ }
39
+ return Array.from(new Float32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / Float32Array.BYTES_PER_ELEMENT));
40
+ }
41
+ export const openRouterEmbedding = defineProtocol({
42
+ id: 'openRouterEmbedding',
43
+ name: 'OpenRouter Embeddings',
44
+ description: 'OpenRouter embedding models, including supported multimodal models.',
45
+ endpoints: { embedding: '/embeddings' },
46
+ options,
47
+ embeddingLimits: () => LIMITS,
48
+ create(context) {
49
+ return {
50
+ async embed(request) {
51
+ const parsed = options.parse(request.options ?? {});
52
+ const inputs = Array.isArray(request.input) ? request.input : [request.input];
53
+ const body = {
54
+ model: context.apiId,
55
+ input: inputs.length === 1 && typeof inputs[0] === 'string'
56
+ ? inputs[0]
57
+ : inputs.map(inputValue),
58
+ };
59
+ if (parsed.encodingFormat)
60
+ body.encoding_format = parsed.encodingFormat;
61
+ let row;
62
+ for await (const current of context.send(body, { stream: false }))
63
+ row = current;
64
+ const data = Array.isArray(row?.data) ? row.data : [];
65
+ const usage = row?.usage && typeof row.usage === 'object'
66
+ ? row.usage
67
+ : undefined;
68
+ return {
69
+ model: typeof row?.model === 'string' ? row.model : context.apiId,
70
+ embeddings: data.map((item, position) => {
71
+ const record = item && typeof item === 'object' ? item : {};
72
+ const values = embeddingValues(record.embedding);
73
+ return {
74
+ index: typeof record.index === 'number' ? record.index : position,
75
+ values,
76
+ dimensions: values.length,
77
+ };
78
+ }),
79
+ ...(typeof usage?.prompt_tokens === 'number'
80
+ ? { usage: { inputTokens: usage.prompt_tokens } }
81
+ : {}),
82
+ };
83
+ },
84
+ };
85
+ },
86
+ });
@@ -0,0 +1,15 @@
1
+ export declare const OPENROUTER_IMAGE_TOOL = "openrouter:image_generation";
2
+ /** `/images` answers `data[]` of `b64_json` + `media_type` (probe 23/09/2026, bytedance-seed/seedream-4.5). */
3
+ export declare function imagesFromImagesBody(body: Record<string, unknown>): {
4
+ mimeType: string;
5
+ data: string;
6
+ }[];
7
+ /**
8
+ * OpenRouter returns chat images on `message.images[]` as `{ type: 'image_url', image_url: { url } }`
9
+ * with a base64 data url; `message.content` holds only the text (probe 23/09/2026,
10
+ * gemini-3.1-flash-lite with the image generation tool).
11
+ */
12
+ export declare function imagesFromChatMessage(message: Record<string, unknown>): {
13
+ mimeType: string;
14
+ data: string;
15
+ }[];
@@ -0,0 +1,34 @@
1
+ import { asRecord, nonEmptyString } from '../../kernel/engine/record.js';
2
+ export const OPENROUTER_IMAGE_TOOL = 'openrouter:image_generation';
3
+ /** `/images` answers `data[]` of `b64_json` + `media_type` (probe 23/09/2026, bytedance-seed/seedream-4.5). */
4
+ export function imagesFromImagesBody(body) {
5
+ const entries = Array.isArray(body.data) ? body.data : [];
6
+ return entries.flatMap((value) => {
7
+ const entry = asRecord(value);
8
+ const data = nonEmptyString(entry?.b64_json);
9
+ const mimeType = nonEmptyString(entry?.media_type);
10
+ return data && mimeType ? [{ mimeType, data }] : [];
11
+ });
12
+ }
13
+ function mediaFromDataUrl(url) {
14
+ if (typeof url !== 'string') {
15
+ return undefined;
16
+ }
17
+ const match = /^data:([^;,]+);base64,(.+)$/s.exec(url);
18
+ if (!match?.[1] || !match[2]) {
19
+ return undefined;
20
+ }
21
+ return { mimeType: match[1], data: match[2] };
22
+ }
23
+ /**
24
+ * OpenRouter returns chat images on `message.images[]` as `{ type: 'image_url', image_url: { url } }`
25
+ * with a base64 data url; `message.content` holds only the text (probe 23/09/2026,
26
+ * gemini-3.1-flash-lite with the image generation tool).
27
+ */
28
+ export function imagesFromChatMessage(message) {
29
+ const images = Array.isArray(message.images) ? message.images : [];
30
+ return images.flatMap((entry) => {
31
+ const media = mediaFromDataUrl(asRecord(asRecord(entry)?.image_url)?.url);
32
+ return media ? [media] : [];
33
+ });
34
+ }
@@ -0,0 +1,3 @@
1
+ import { type Protocol } from '../../kernel/protocols/mod.js';
2
+ /** OpenRouter's image generation: `/images`, or the chat path with its image tool when text is wanted too. */
3
+ export declare const openRouterImages: Protocol<Record<string, never>>;