@theoremjs/agents 0.3.0 → 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 (568) hide show
  1. package/README.md +276 -995
  2. package/esm/mod.d.ts +33 -19
  3. package/esm/mod.js +18 -11
  4. package/esm/src/cli/commands/bench.js +36 -14
  5. package/esm/src/cli/commands/detect-compile.d.ts +17 -0
  6. package/esm/src/cli/commands/detect-compile.js +22 -0
  7. package/esm/src/cli/commands/eval.d.ts +3 -3
  8. package/esm/src/cli/commands/fuzz-canary.js +55 -16
  9. package/esm/src/cli/commands/profile.js +4 -4
  10. package/esm/src/cli/commands/run.d.ts +2 -2
  11. package/esm/src/cli/commands/run.js +1 -1
  12. package/esm/src/cli/commands/test.d.ts +4 -3
  13. package/esm/src/cli/commands/test.js +2 -2
  14. package/esm/src/cli/index.js +9 -9
  15. package/esm/src/cli/matrix/fixtures.js +25 -30
  16. package/esm/src/evals/attachments.d.ts +1 -0
  17. package/esm/src/evals/attachments.js +4 -2
  18. package/esm/src/evals/breakdown.d.ts +2 -0
  19. package/esm/src/evals/breakdown.js +1 -0
  20. package/esm/src/evals/graders/answer.d.ts +3 -0
  21. package/esm/src/evals/graders/answer.js +1 -0
  22. package/esm/src/evals/graders/code.d.ts +7 -31
  23. package/esm/src/evals/graders/code.js +4 -25
  24. package/esm/src/evals/graders/judge.d.ts +4 -0
  25. package/esm/src/evals/graders/judge.js +7 -5
  26. package/esm/src/evals/graders/latency.d.ts +1 -0
  27. package/esm/src/evals/graders/latency.js +3 -2
  28. package/esm/src/evals/graders/live.d.ts +3 -0
  29. package/esm/src/evals/graders/live.js +2 -0
  30. package/esm/src/evals/graders/media.js +1 -2
  31. package/esm/src/evals/graders/shared.js +1 -1
  32. package/esm/src/evals/graders/transcript.d.ts +2 -0
  33. package/esm/src/evals/graders/transcript.js +5 -3
  34. package/esm/src/evals/mod.d.ts +1 -9
  35. package/esm/src/evals/mod.js +1 -9
  36. package/esm/src/evals/record.d.ts +6 -0
  37. package/esm/src/evals/record.js +4 -2
  38. package/esm/src/evals/rubrics/mod.d.ts +1 -1
  39. package/esm/src/evals/rubrics/mod.js +1 -1
  40. package/esm/src/evals/rubrics/mustache.js +1 -1
  41. package/esm/src/evals/rubrics/types.js +1 -1
  42. package/esm/src/evals/run.d.ts +9 -52
  43. package/esm/src/evals/run.js +12 -46
  44. package/esm/src/evals/suite.d.ts +12 -3
  45. package/esm/src/evals/suite.js +9 -4
  46. package/esm/src/evals/summary.d.ts +3 -0
  47. package/esm/src/evals/summary.js +1 -0
  48. package/esm/src/evals/trial.d.ts +3 -16
  49. package/esm/src/evals/trial.js +7 -30
  50. package/esm/src/evals/types.d.ts +30 -121
  51. package/esm/src/evals/types.js +3 -16
  52. package/esm/src/evals/verdict.d.ts +5 -0
  53. package/esm/src/evals/verdict.js +4 -1
  54. package/esm/src/guardrails/boundaries.d.ts +41 -0
  55. package/esm/src/guardrails/boundaries.js +103 -0
  56. package/esm/src/guardrails/canary-gate.d.ts +1 -0
  57. package/esm/src/guardrails/canary.d.ts +49 -15
  58. package/esm/src/guardrails/canary.js +103 -30
  59. package/esm/src/guardrails/compile-egress.d.ts +6 -5
  60. package/esm/src/guardrails/compile-egress.js +6 -5
  61. package/esm/src/guardrails/corpus/canary-egress-attacks.d.ts +3 -1
  62. package/esm/src/guardrails/corpus/canary-egress-attacks.js +4 -2
  63. package/esm/src/guardrails/corpus/fuzz-inbound.js +14 -17
  64. package/esm/src/guardrails/corpus/inbound-payloads.d.ts +2 -0
  65. package/esm/src/guardrails/corpus/inbound-payloads.js +4 -2
  66. package/esm/src/guardrails/corpus/live-attacks.d.ts +2 -0
  67. package/esm/src/guardrails/corpus/live-attacks.js +6 -1
  68. package/esm/src/guardrails/corpus/mod.d.ts +1 -1
  69. package/esm/src/guardrails/corpus/secrets.d.ts +3 -3
  70. package/esm/src/guardrails/corpus/secrets.js +2 -2
  71. package/esm/src/guardrails/corpus/strings.d.ts +1 -1
  72. package/esm/src/guardrails/corpus/strings.js +1 -1
  73. package/esm/src/guardrails/corpus/types.d.ts +5 -1
  74. package/esm/src/guardrails/credential-rules.d.ts +36 -0
  75. package/esm/src/guardrails/credential-rules.js +3001 -0
  76. package/esm/src/guardrails/credential-scan.d.ts +45 -0
  77. package/esm/src/guardrails/credential-scan.js +172 -0
  78. package/esm/src/guardrails/destinations.d.ts +45 -0
  79. package/esm/src/guardrails/destinations.js +234 -0
  80. package/esm/src/guardrails/detect-at.d.ts +107 -0
  81. package/esm/src/guardrails/detect-at.js +434 -0
  82. package/esm/src/guardrails/detect-reply.d.ts +61 -0
  83. package/esm/src/guardrails/detect-reply.js +95 -0
  84. package/esm/src/guardrails/detect-stream.d.ts +33 -0
  85. package/esm/src/guardrails/detect-stream.js +77 -0
  86. package/esm/src/guardrails/detectors.d.ts +216 -0
  87. package/esm/src/guardrails/detectors.js +503 -0
  88. package/esm/src/guardrails/egress-automata.d.ts +4 -6
  89. package/esm/src/guardrails/egress-automata.js +24095 -4572
  90. package/esm/src/guardrails/egress-compiler.d.ts +38 -16
  91. package/esm/src/guardrails/egress-compiler.js +254 -60
  92. package/esm/src/guardrails/egress-patterns.d.ts +4 -2
  93. package/esm/src/guardrails/egress-patterns.js +6 -2
  94. package/esm/src/guardrails/egress-stream.d.ts +54 -36
  95. package/esm/src/guardrails/egress-stream.js +253 -124
  96. package/esm/src/guardrails/egress-urls.d.ts +6 -3
  97. package/esm/src/guardrails/egress-urls.js +14 -22
  98. package/esm/src/guardrails/egress.d.ts +26 -86
  99. package/esm/src/guardrails/egress.js +59 -309
  100. package/esm/src/guardrails/error.d.ts +13 -8
  101. package/esm/src/guardrails/error.js +23 -18
  102. package/esm/src/guardrails/event-schemas.d.ts +46 -3
  103. package/esm/src/guardrails/event-schemas.js +12 -5
  104. package/esm/src/guardrails/events.d.ts +5 -1
  105. package/esm/src/guardrails/events.js +4 -1
  106. package/esm/src/guardrails/hints.d.ts +14 -0
  107. package/esm/src/guardrails/hints.js +57 -0
  108. package/esm/src/guardrails/hits.d.ts +7 -1
  109. package/esm/src/guardrails/hits.js +12 -1
  110. package/esm/src/guardrails/host-patterns.d.ts +85 -0
  111. package/esm/src/guardrails/host-patterns.js +173 -0
  112. package/esm/src/guardrails/injection-patterns.d.ts +6 -1
  113. package/esm/src/guardrails/injection-patterns.js +33 -1
  114. package/esm/src/guardrails/injection-reversed.d.ts +9 -0
  115. package/esm/src/guardrails/injection-reversed.js +49 -0
  116. package/esm/src/guardrails/injection.d.ts +17 -1
  117. package/esm/src/guardrails/injection.js +259 -36
  118. package/esm/src/guardrails/labels.d.ts +40 -0
  119. package/esm/src/guardrails/labels.js +874 -0
  120. package/esm/src/guardrails/live-outbound-gate.d.ts +9 -8
  121. package/esm/src/guardrails/live-outbound-gate.js +100 -107
  122. package/esm/src/guardrails/mod.d.ts +29 -21
  123. package/esm/src/guardrails/mod.js +18 -13
  124. package/esm/src/guardrails/network.d.ts +4 -0
  125. package/esm/src/guardrails/network.js +21 -19
  126. package/esm/src/guardrails/normalize.d.ts +15 -1
  127. package/esm/src/guardrails/normalize.js +34 -1
  128. package/esm/src/guardrails/policy.d.ts +2 -17
  129. package/esm/src/guardrails/policy.js +12 -41
  130. package/esm/src/guardrails/progressive-yield.d.ts +65 -24
  131. package/esm/src/guardrails/progressive-yield.js +191 -147
  132. package/esm/src/guardrails/prompt-echo.d.ts +4 -2
  133. package/esm/src/guardrails/prompt-echo.js +87 -6
  134. package/esm/src/guardrails/quota.d.ts +1 -0
  135. package/esm/src/guardrails/quota.js +1 -1
  136. package/esm/src/guardrails/rules.d.ts +20 -29
  137. package/esm/src/guardrails/rules.js +23 -30
  138. package/esm/src/guardrails/sanitize.d.ts +32 -15
  139. package/esm/src/guardrails/sanitize.js +100 -124
  140. package/esm/src/guardrails/sensitive-groups.d.ts +21 -0
  141. package/esm/src/guardrails/sensitive-groups.js +12 -0
  142. package/esm/src/guardrails/sensitive.d.ts +16 -23
  143. package/esm/src/guardrails/sensitive.js +168 -47
  144. package/esm/src/guardrails/serialize.d.ts +1 -0
  145. package/esm/src/guardrails/testing.d.ts +4 -2
  146. package/esm/src/guardrails/testing.js +4 -2
  147. package/esm/src/guardrails/theorem-error.d.ts +4 -1
  148. package/esm/src/guardrails/theorem-error.js +3 -2
  149. package/esm/src/guardrails/thought-guard.d.ts +34 -13
  150. package/esm/src/guardrails/thought-guard.js +264 -64
  151. package/esm/src/guardrails/tool-directives.d.ts +29 -10
  152. package/esm/src/guardrails/tool-directives.js +133 -47
  153. package/esm/src/guardrails/tool-leak.d.ts +26 -0
  154. package/esm/src/guardrails/tool-leak.js +45 -0
  155. package/esm/src/guardrails/tool-result.d.ts +45 -14
  156. package/esm/src/guardrails/tool-result.js +94 -70
  157. package/esm/src/guardrails/types.d.ts +79 -71
  158. package/esm/src/guardrails/types.js +11 -7
  159. package/esm/src/host/client-turn.d.ts +29 -2
  160. package/esm/src/host/client-turn.js +46 -4
  161. package/esm/src/host/mint-trace.d.ts +1 -0
  162. package/esm/src/host/mint-trace.js +3 -2
  163. package/esm/src/host/mod.d.ts +2 -2
  164. package/esm/src/host/mod.js +1 -1
  165. package/esm/src/host/readStreamingJsonStringField.js +2 -43
  166. package/esm/src/host/reply.d.ts +6 -0
  167. package/esm/src/host/reply.js +7 -1
  168. package/esm/src/interface/blocks.d.ts +3 -0
  169. package/esm/src/interface/blocks.js +84 -14
  170. package/esm/src/interface/composer-actions.d.ts +4 -0
  171. package/esm/src/interface/composer-actions.js +5 -3
  172. package/esm/src/interface/draft.d.ts +6 -0
  173. package/esm/src/interface/draft.js +22 -11
  174. package/esm/src/interface/from-profile.d.ts +13 -1
  175. package/esm/src/interface/from-profile.js +66 -31
  176. package/esm/src/interface/history.d.ts +9 -3
  177. package/esm/src/interface/history.js +33 -24
  178. package/esm/src/interface/inputs.d.ts +1 -0
  179. package/esm/src/interface/inputs.js +3 -0
  180. package/esm/src/interface/mod.d.ts +4 -2
  181. package/esm/src/interface/mod.js +3 -2
  182. package/esm/src/interface/models.d.ts +7 -0
  183. package/esm/src/interface/models.js +5 -0
  184. package/esm/src/interface/pending.d.ts +9 -0
  185. package/esm/src/interface/pending.js +9 -3
  186. package/esm/src/interface/profile-interface.js +54 -40
  187. package/esm/src/interface/session.d.ts +12 -5
  188. package/esm/src/interface/session.js +17 -10
  189. package/esm/src/interface/stop.d.ts +13 -0
  190. package/esm/src/interface/stop.js +28 -0
  191. package/esm/src/interface/tool-calls.d.ts +14 -2
  192. package/esm/src/interface/tool-calls.js +64 -10
  193. package/esm/src/interface/tool-invoke.d.ts +2 -0
  194. package/esm/src/interface/tool-invoke.js +3 -1
  195. package/esm/src/interface/tool-media.d.ts +2 -0
  196. package/esm/src/interface/tool-media.js +2 -1
  197. package/esm/src/interface/types.d.ts +105 -40
  198. package/esm/src/interface/types.js +1 -0
  199. package/esm/src/kernel/api-catalog.d.ts +85 -0
  200. package/esm/src/kernel/api-catalog.js +229 -0
  201. package/esm/src/kernel/auth/crypto.d.ts +7 -2
  202. package/esm/src/kernel/auth/crypto.js +12 -10
  203. package/esm/src/kernel/auth/oauth.d.ts +2 -1
  204. package/esm/src/kernel/auth/oauth.js +23 -22
  205. package/esm/src/kernel/auth/typed-secret.js +2 -2
  206. package/esm/src/kernel/auth/types.d.ts +13 -0
  207. package/esm/src/kernel/checkpoint.d.ts +43 -0
  208. package/esm/src/kernel/checkpoint.js +58 -0
  209. package/esm/src/kernel/default-scope.d.ts +43 -5
  210. package/esm/src/kernel/default-scope.js +54 -5
  211. package/esm/src/kernel/engine/call-trace.d.ts +19 -0
  212. package/esm/src/kernel/engine/call-trace.js +29 -0
  213. package/esm/src/kernel/engine/compaction.d.ts +6 -5
  214. package/esm/src/kernel/engine/compaction.js +12 -11
  215. package/esm/src/kernel/engine/decision.d.ts +10 -8
  216. package/esm/src/kernel/engine/decision.js +173 -146
  217. package/esm/src/kernel/engine/embedding.d.ts +8 -0
  218. package/esm/src/kernel/engine/embedding.js +118 -0
  219. package/esm/src/kernel/engine/live-inbound.d.ts +14 -4
  220. package/esm/src/kernel/engine/live-inbound.js +36 -11
  221. package/esm/src/kernel/engine/live-ingress.d.ts +6 -0
  222. package/esm/src/kernel/engine/live-ingress.js +6 -1
  223. package/esm/src/kernel/engine/repair.js +12 -12
  224. package/esm/src/kernel/engine/runner/gates.d.ts +2 -2
  225. package/esm/src/kernel/engine/runner/gates.js +287 -101
  226. package/esm/src/kernel/engine/runner/mod.d.ts +19 -5
  227. package/esm/src/kernel/engine/runner/mod.js +107 -56
  228. package/esm/src/kernel/engine/runner/nested.d.ts +32 -0
  229. package/esm/src/kernel/engine/runner/nested.js +134 -0
  230. package/esm/src/kernel/engine/runner/schema-validation.d.ts +24 -3
  231. package/esm/src/kernel/engine/runner/schema-validation.js +78 -4
  232. package/esm/src/kernel/engine/runner/stages.d.ts +1 -1
  233. package/esm/src/kernel/engine/runner/stages.js +1 -8
  234. package/esm/src/kernel/engine/runner/state.d.ts +33 -12
  235. package/esm/src/kernel/engine/runner/state.js +11 -1
  236. package/esm/src/kernel/engine/runner/step-order.d.ts +27 -0
  237. package/esm/src/kernel/engine/runner/step-order.js +165 -0
  238. package/esm/src/kernel/engine/runner/steps.d.ts +2 -2
  239. package/esm/src/kernel/engine/runner/steps.js +328 -169
  240. package/esm/src/kernel/engine/runner/stream.d.ts +42 -11
  241. package/esm/src/kernel/engine/runner/stream.js +197 -46
  242. package/esm/src/kernel/engine/runner/usage.d.ts +5 -5
  243. package/esm/src/kernel/engine/runner/usage.js +12 -14
  244. package/esm/src/kernel/engine/session/mod.d.ts +8 -6
  245. package/esm/src/kernel/engine/session/mod.js +360 -129
  246. package/esm/src/kernel/engine/session/session-trace.d.ts +10 -10
  247. package/esm/src/kernel/engine/session/session-trace.js +41 -30
  248. package/esm/src/kernel/engine/token-estimate.d.ts +10 -64
  249. package/esm/src/kernel/engine/token-estimate.js +14 -194
  250. package/esm/src/kernel/engine/tool-trace.d.ts +3 -3
  251. package/esm/src/kernel/engine/tool-trace.js +2 -1
  252. package/esm/src/kernel/engine/turn-trace.d.ts +8 -7
  253. package/esm/src/kernel/engine/turn-trace.js +28 -36
  254. package/esm/src/kernel/engine/usage.d.ts +6 -0
  255. package/esm/src/kernel/engine/usage.js +17 -0
  256. package/esm/src/kernel/interaction-parts.d.ts +3 -0
  257. package/esm/src/kernel/interaction-parts.js +18 -0
  258. package/esm/src/kernel/json.d.ts +10 -0
  259. package/esm/src/kernel/json.js +3 -0
  260. package/esm/src/kernel/mod.d.ts +38 -11
  261. package/esm/src/kernel/mod.js +22 -7
  262. package/esm/src/kernel/profile-graph.d.ts +11 -6
  263. package/esm/src/kernel/profile-graph.js +14 -7
  264. package/esm/src/kernel/profile-presence.d.ts +10 -1
  265. package/esm/src/kernel/profile-presence.js +90 -75
  266. package/esm/src/kernel/profile-scope.d.ts +7 -3
  267. package/esm/src/kernel/profile-scope.js +67 -55
  268. package/esm/src/kernel/protocols/binding.d.ts +65 -0
  269. package/esm/src/kernel/protocols/binding.js +125 -0
  270. package/esm/src/kernel/protocols/limits.d.ts +15 -0
  271. package/esm/src/kernel/protocols/limits.js +28 -0
  272. package/esm/src/kernel/protocols/mod.d.ts +5 -0
  273. package/esm/src/kernel/protocols/mod.js +5 -0
  274. package/esm/src/kernel/protocols/prices.d.ts +36 -0
  275. package/esm/src/kernel/protocols/prices.js +37 -0
  276. package/esm/src/kernel/protocols/protocol.d.ts +253 -0
  277. package/esm/src/kernel/protocols/protocol.js +253 -0
  278. package/esm/src/kernel/protocols/provider.d.ts +108 -0
  279. package/esm/src/kernel/protocols/provider.js +143 -0
  280. package/esm/src/kernel/protocols/runtime.d.ts +55 -0
  281. package/esm/src/kernel/protocols/runtime.js +534 -0
  282. package/esm/src/kernel/provider-budget.d.ts +32 -0
  283. package/esm/src/kernel/provider-budget.js +262 -0
  284. package/esm/src/kernel/provider-dispatch.d.ts +13 -0
  285. package/esm/src/kernel/provider-dispatch.js +36 -0
  286. package/esm/src/kernel/provider-live.d.ts +7 -0
  287. package/esm/src/kernel/provider-live.js +189 -0
  288. package/esm/src/kernel/provider-runtime.d.ts +57 -0
  289. package/esm/src/kernel/provider-runtime.js +524 -0
  290. package/esm/src/kernel/registry/attachments.d.ts +15 -4
  291. package/esm/src/kernel/registry/attachments.js +31 -22
  292. package/esm/src/kernel/registry/catalog.d.ts +6 -0
  293. package/esm/src/kernel/registry/catalog.js +9 -2
  294. package/esm/src/kernel/registry/embedding-rules.d.ts +28 -0
  295. package/esm/src/kernel/registry/embedding-rules.js +66 -0
  296. package/esm/src/kernel/registry/ingress.d.ts +6 -2
  297. package/esm/src/kernel/registry/ingress.js +55 -10
  298. package/esm/src/kernel/registry/kernel-registry.d.ts +3 -0
  299. package/esm/src/kernel/registry/kernel-registry.js +9 -2
  300. package/esm/src/kernel/registry/profile-outputs.js +4 -1
  301. package/esm/src/kernel/registry/profiles.d.ts +38 -14
  302. package/esm/src/kernel/registry/profiles.js +280 -205
  303. package/esm/src/kernel/registry/provider-request.d.ts +3 -3
  304. package/esm/src/kernel/registry/provider-request.js +5 -13
  305. package/esm/src/kernel/registry/resolve.d.ts +4 -1
  306. package/esm/src/kernel/registry/resolve.js +59 -58
  307. package/esm/src/kernel/registry/schemas.d.ts +3 -0
  308. package/esm/src/kernel/registry/schemas.js +3 -1
  309. package/esm/src/kernel/registry/slot-fill.d.ts +7 -0
  310. package/esm/src/kernel/registry/slot-fill.js +22 -0
  311. package/esm/src/kernel/registry/system-prompt.js +7 -8
  312. package/esm/src/kernel/registry/vault.d.ts +14 -13
  313. package/esm/src/kernel/registry/vault.js +1 -14
  314. package/esm/src/kernel/schema.d.ts +100 -46
  315. package/esm/src/kernel/schema.js +499 -257
  316. package/esm/src/kernel/scope.d.ts +12 -5
  317. package/esm/src/kernel/scope.js +23 -3
  318. package/esm/src/kernel/stages.d.ts +38 -3
  319. package/esm/src/kernel/stages.js +82 -39
  320. package/esm/src/kernel/stop.d.ts +29 -6
  321. package/esm/src/kernel/stop.js +16 -4
  322. package/esm/src/kernel/system-parts.js +6 -6
  323. package/esm/src/kernel/tools/activity-label.d.ts +12 -6
  324. package/esm/src/kernel/tools/activity-label.js +258 -32
  325. package/esm/src/kernel/tools/agent.d.ts +66 -0
  326. package/esm/src/kernel/tools/agent.js +212 -0
  327. package/esm/src/kernel/tools/coordinate.d.ts +4 -0
  328. package/esm/src/kernel/tools/coordinate.js +165 -0
  329. package/esm/src/kernel/tools/events.d.ts +21 -6
  330. package/esm/src/kernel/tools/events.js +53 -18
  331. package/esm/src/kernel/tools/execute.d.ts +47 -11
  332. package/esm/src/kernel/tools/execute.js +508 -136
  333. package/esm/src/kernel/tools/gate-answer.d.ts +12 -2
  334. package/esm/src/kernel/tools/gate-answer.js +17 -6
  335. package/esm/src/kernel/tools/handler-events.d.ts +45 -0
  336. package/esm/src/kernel/tools/handler-events.js +106 -0
  337. package/esm/src/kernel/tools/harness.d.ts +1 -0
  338. package/esm/src/kernel/tools/harness.js +2 -1
  339. package/esm/src/kernel/tools/http-limit.d.ts +27 -0
  340. package/esm/src/kernel/tools/http-limit.js +85 -0
  341. package/esm/src/kernel/tools/invoke.d.ts +27 -5
  342. package/esm/src/kernel/tools/invoke.js +223 -70
  343. package/esm/src/kernel/tools/mcp-sessions.d.ts +4 -1
  344. package/esm/src/kernel/tools/mcp-sessions.js +13 -8
  345. package/esm/src/kernel/tools/mod.d.ts +4 -3
  346. package/esm/src/kernel/tools/mod.js +3 -2
  347. package/esm/src/kernel/tools/model-text.d.ts +10 -5
  348. package/esm/src/kernel/tools/model-text.js +18 -12
  349. package/esm/src/kernel/tools/operation.d.ts +76 -0
  350. package/esm/src/kernel/tools/operation.js +100 -0
  351. package/esm/src/kernel/tools/page-answer.d.ts +8 -0
  352. package/esm/src/kernel/tools/page-answer.js +19 -0
  353. package/esm/src/kernel/tools/permission.d.ts +11 -2
  354. package/esm/src/kernel/tools/permission.js +12 -12
  355. package/esm/src/kernel/tools/project.d.ts +4 -1
  356. package/esm/src/kernel/tools/project.js +32 -2
  357. package/esm/src/kernel/tools/registry.d.ts +9 -2
  358. package/esm/src/kernel/tools/registry.js +69 -10
  359. package/esm/src/kernel/tools/remote.d.ts +40 -6
  360. package/esm/src/kernel/tools/remote.js +219 -92
  361. package/esm/src/kernel/tools/resolve.d.ts +3 -0
  362. package/esm/src/kernel/tools/resolve.js +12 -4
  363. package/esm/src/kernel/tools/run.d.ts +28 -0
  364. package/esm/src/kernel/tools/run.js +86 -0
  365. package/esm/src/kernel/tools/schema.d.ts +3 -3
  366. package/esm/src/kernel/tools/schema.js +21 -100
  367. package/esm/src/kernel/tools/signed-in-fetch.d.ts +2 -1
  368. package/esm/src/kernel/tools/signed-in-fetch.js +3 -3
  369. package/esm/src/kernel/tools/stage-run.d.ts +27 -4
  370. package/esm/src/kernel/tools/stage-run.js +75 -17
  371. package/esm/src/kernel/tools/types.d.ts +235 -25
  372. package/esm/src/kernel/tools/unchecked-output.d.ts +14 -0
  373. package/esm/src/kernel/tools/unchecked-output.js +18 -0
  374. package/esm/src/kernel/turn-events.d.ts +208 -31
  375. package/esm/src/kernel/turn-events.js +127 -9
  376. package/esm/src/kernel/types.d.ts +302 -161
  377. package/esm/src/kernel/util/base64.d.ts +2 -0
  378. package/esm/src/kernel/util/base64.js +2 -0
  379. package/esm/src/kernel/util/partial-json.d.ts +23 -0
  380. package/esm/src/kernel/util/partial-json.js +128 -0
  381. package/esm/src/kernel/util/record.d.ts +1 -0
  382. package/esm/src/kernel/util/record.js +1 -0
  383. package/esm/src/observability/destinations.d.ts +5 -0
  384. package/esm/src/observability/destinations.js +7 -2
  385. package/esm/src/observability/jsonl.d.ts +2 -2
  386. package/esm/src/observability/jsonl.js +15 -22
  387. package/esm/src/observability/mod.d.ts +3 -3
  388. package/esm/src/observability/mod.js +2 -2
  389. package/esm/src/observability/openinference.d.ts +1 -1
  390. package/esm/src/observability/openinference.js +3 -3
  391. package/esm/src/observability/otlp.d.ts +3 -0
  392. package/esm/src/observability/otlp.js +3 -3
  393. package/esm/src/observability/phoenix.d.ts +1 -0
  394. package/esm/src/observability/policy.d.ts +3 -0
  395. package/esm/src/observability/policy.js +5 -1
  396. package/esm/src/observability/resolve-policy.js +11 -5
  397. package/esm/src/observability/spans.d.ts +8 -2
  398. package/esm/src/observability/spans.js +21 -5
  399. package/esm/src/observability/trace-catalog.d.ts +19 -2
  400. package/esm/src/observability/trace-catalog.js +128 -87
  401. package/esm/src/observability/trace-record.js +22 -17
  402. package/esm/src/observability/trace-schema.d.ts +3 -0
  403. package/esm/src/observability/trace-schema.js +1 -1
  404. package/esm/src/observability/trace-sink.d.ts +1 -0
  405. package/esm/src/observability/trace-sink.js +1 -1
  406. package/esm/src/observability/trace-span.d.ts +7 -1
  407. package/esm/src/observability/trace-span.js +3 -1
  408. package/esm/src/observability/trace.d.ts +2 -0
  409. package/esm/src/observability/trace.js +4 -2
  410. package/esm/src/observability/types.d.ts +35 -11
  411. package/esm/src/observability/types.js +1 -1
  412. package/esm/src/presets/google/speech-voices.d.ts +1 -0
  413. package/esm/src/presets/google-limits.d.ts +1 -0
  414. package/esm/src/presets/google.d.ts +27 -12
  415. package/esm/src/presets/google.js +34 -25
  416. package/esm/src/presets/local.d.ts +26 -0
  417. package/esm/src/presets/local.js +30 -0
  418. package/esm/src/presets/mod.d.ts +5 -4
  419. package/esm/src/presets/mod.js +4 -4
  420. package/esm/src/presets/openrouter.d.ts +14 -1
  421. package/esm/src/presets/openrouter.js +19 -1
  422. package/esm/src/providers/embedding-limits.d.ts +7 -0
  423. package/esm/src/providers/embedding-limits.js +12 -0
  424. package/esm/src/providers/gemini/embedding-protocol.d.ts +8 -0
  425. package/esm/src/providers/gemini/embedding-protocol.js +125 -0
  426. package/esm/src/providers/gemini/interactions-protocol.d.ts +8 -0
  427. package/esm/src/providers/gemini/interactions-protocol.js +105 -0
  428. package/esm/src/providers/gemini/live-protocol.d.ts +3 -0
  429. package/esm/src/providers/gemini/live-protocol.js +191 -0
  430. package/esm/src/providers/gemini/prices.d.ts +3 -0
  431. package/esm/src/providers/gemini/prices.js +63 -0
  432. package/esm/src/providers/gemini/provider.d.ts +7 -0
  433. package/esm/src/providers/gemini/provider.js +39 -0
  434. package/esm/src/providers/google/builtins.d.ts +14 -0
  435. package/esm/src/providers/google/builtins.js +57 -0
  436. package/esm/src/providers/google/grounding.d.ts +4 -4
  437. package/esm/src/providers/google/interactions/framing.d.ts +20 -8
  438. package/esm/src/providers/google/interactions/framing.js +85 -44
  439. package/esm/src/providers/google/interactions/steps.d.ts +5 -5
  440. package/esm/src/providers/google/interactions/steps.js +4 -4
  441. package/esm/src/providers/google/interactions/stream.d.ts +10 -11
  442. package/esm/src/providers/google/interactions/stream.js +33 -100
  443. package/esm/src/providers/google/live/framing.d.ts +15 -5
  444. package/esm/src/providers/google/live/framing.js +25 -25
  445. package/esm/src/providers/google/live/stream.d.ts +6 -44
  446. package/esm/src/providers/google/live/stream.js +3 -209
  447. package/esm/src/providers/google/urls.d.ts +1 -3
  448. package/esm/src/providers/google/urls.js +1 -3
  449. package/esm/src/providers/google/usage.js +2 -2
  450. package/esm/src/providers/live.d.ts +6 -0
  451. package/esm/src/providers/live.js +6 -0
  452. package/esm/src/providers/local/embedding-protocol.d.ts +7 -0
  453. package/esm/src/providers/local/embedding-protocol.js +60 -0
  454. package/esm/src/providers/local/provider.d.ts +7 -0
  455. package/esm/src/providers/local/provider.js +28 -0
  456. package/esm/src/providers/mod.d.ts +28 -7
  457. package/esm/src/providers/mod.js +19 -3
  458. package/esm/src/providers/open-ai/protocol.d.ts +3 -0
  459. package/esm/src/providers/open-ai/protocol.js +189 -0
  460. package/esm/src/providers/openrouter/embedding-protocol.d.ts +6 -0
  461. package/esm/src/providers/openrouter/embedding-protocol.js +86 -0
  462. package/esm/src/providers/openrouter/image.d.ts +0 -9
  463. package/esm/src/providers/openrouter/image.js +0 -153
  464. package/esm/src/providers/openrouter/images-protocol.d.ts +3 -0
  465. package/esm/src/providers/openrouter/images-protocol.js +82 -0
  466. package/esm/src/providers/openrouter/openai/compat.d.ts +2 -2
  467. package/esm/src/providers/openrouter/openai/compat.js +6 -6
  468. package/esm/src/providers/openrouter/openai/image-payload.d.ts +2 -2
  469. package/esm/src/providers/openrouter/openai/reasoning-state.d.ts +2 -0
  470. package/esm/src/providers/openrouter/openai/reasoning-state.js +31 -0
  471. package/esm/src/providers/openrouter/protocol.d.ts +8 -0
  472. package/esm/src/providers/openrouter/protocol.js +171 -0
  473. package/esm/src/providers/openrouter/provider.d.ts +10 -0
  474. package/esm/src/providers/openrouter/provider.js +50 -0
  475. package/esm/src/providers/shared/carried-tool-files.d.ts +7 -0
  476. package/esm/src/providers/shared/carried-tool-files.js +43 -0
  477. package/esm/src/providers/shared/pcm.js +2 -2
  478. package/esm/src/providers/shared/protocol-events.d.ts +8 -0
  479. package/esm/src/providers/shared/protocol-events.js +20 -0
  480. package/esm/src/providers/shared/response-identity.d.ts +2 -2
  481. package/esm/src/providers/shared/retry.d.ts +17 -0
  482. package/esm/src/providers/shared/retry.js +90 -0
  483. package/esm/src/providers/shared/sse.d.ts +0 -4
  484. package/esm/src/providers/shared/sse.js +50 -36
  485. package/esm/src/providers/shared/tool-args.d.ts +6 -7
  486. package/esm/src/providers/shared/tool-args.js +10 -6
  487. package/esm/src/providers/shared/tool-draft.d.ts +16 -0
  488. package/esm/src/providers/shared/tool-draft.js +14 -0
  489. package/esm/src/providers/shared/upstream-tap.d.ts +2 -2
  490. package/esm/src/providers/shared/upstream-tape.js +1 -1
  491. package/esm/src/providers/system-one/protocol.d.ts +8 -0
  492. package/esm/src/providers/system-one/protocol.js +93 -0
  493. package/esm/src/providers/types.d.ts +48 -16
  494. package/esm/src/providers/types.js +2 -1
  495. package/esm/src/providers/typesafe/provider.d.ts +7 -0
  496. package/esm/src/providers/typesafe/provider.js +24 -0
  497. package/esm/src/surface/formats.d.ts +19 -1
  498. package/esm/src/surface/formats.js +68 -29
  499. package/esm/src/surface/mod.d.ts +4 -2
  500. package/esm/src/surface/mod.js +4 -2
  501. package/esm/src/surface/runtime.d.ts +4 -0
  502. package/esm/src/surface/runtime.js +2 -0
  503. package/esm/src/surface/tools.d.ts +2 -8
  504. package/esm/src/surface/tools.js +4 -22
  505. package/esm/src/surface/types.d.ts +6 -0
  506. package/package.json +5 -13
  507. package/esm/src/cli/commands/egress-compile.d.ts +0 -17
  508. package/esm/src/cli/commands/egress-compile.js +0 -25
  509. package/esm/src/guardrails/egress-policy.d.ts +0 -27
  510. package/esm/src/guardrails/egress-policy.js +0 -76
  511. package/esm/src/guardrails/egress-rules.d.ts +0 -54
  512. package/esm/src/guardrails/egress-rules.js +0 -49
  513. package/esm/src/guardrails/lexicon.d.ts +0 -30
  514. package/esm/src/guardrails/lexicon.js +0 -478
  515. package/esm/src/kernel/engine/media-probe/audio.d.ts +0 -7
  516. package/esm/src/kernel/engine/media-probe/audio.js +0 -342
  517. package/esm/src/kernel/engine/media-probe/bytes.d.ts +0 -6
  518. package/esm/src/kernel/engine/media-probe/bytes.js +0 -26
  519. package/esm/src/kernel/engine/media-probe/image.d.ts +0 -5
  520. package/esm/src/kernel/engine/media-probe/image.js +0 -171
  521. package/esm/src/kernel/engine/media-probe/iso-bmff.d.ts +0 -19
  522. package/esm/src/kernel/engine/media-probe/iso-bmff.js +0 -48
  523. package/esm/src/kernel/engine/media-probe/matroska.d.ts +0 -35
  524. package/esm/src/kernel/engine/media-probe/matroska.js +0 -226
  525. package/esm/src/kernel/engine/media-probe/mp4.d.ts +0 -22
  526. package/esm/src/kernel/engine/media-probe/mp4.js +0 -279
  527. package/esm/src/kernel/engine/media-probe/opus.d.ts +0 -4
  528. package/esm/src/kernel/engine/media-probe/opus.js +0 -23
  529. package/esm/src/kernel/engine/media-probe/pdf.d.ts +0 -5
  530. package/esm/src/kernel/engine/media-probe/pdf.js +0 -117
  531. package/esm/src/kernel/engine/media-probe/video.d.ts +0 -15
  532. package/esm/src/kernel/engine/media-probe/video.js +0 -49
  533. package/esm/src/presets/typesafe.d.ts +0 -2
  534. package/esm/src/presets/typesafe.js +0 -2
  535. package/esm/src/providers/create-provider.d.ts +0 -21
  536. package/esm/src/providers/create-provider.js +0 -90
  537. package/esm/src/providers/decision/usage.d.ts +0 -3
  538. package/esm/src/providers/decision/usage.js +0 -25
  539. package/esm/src/providers/google/interactions/mod.d.ts +0 -2
  540. package/esm/src/providers/google/interactions/mod.js +0 -2
  541. package/esm/src/providers/google/keys.d.ts +0 -20
  542. package/esm/src/providers/google/keys.js +0 -87
  543. package/esm/src/providers/google/live/mod.d.ts +0 -7
  544. package/esm/src/providers/google/live/mod.js +0 -7
  545. package/esm/src/providers/google/live/openapi-schema.d.ts +0 -1
  546. package/esm/src/providers/google/live/openapi-schema.js +0 -42
  547. package/esm/src/providers/google/live/session.d.ts +0 -14
  548. package/esm/src/providers/google/live/session.js +0 -150
  549. package/esm/src/providers/local/local.d.ts +0 -12
  550. package/esm/src/providers/local/local.js +0 -186
  551. package/esm/src/providers/local/mod.d.ts +0 -8
  552. package/esm/src/providers/local/mod.js +0 -8
  553. package/esm/src/providers/openrouter/cache-control.d.ts +0 -5
  554. package/esm/src/providers/openrouter/cache-control.js +0 -4
  555. package/esm/src/providers/openrouter/chat.d.ts +0 -64
  556. package/esm/src/providers/openrouter/chat.js +0 -490
  557. package/esm/src/providers/openrouter/openai/sdk-messages.d.ts +0 -10
  558. package/esm/src/providers/openrouter/openai/sdk-messages.js +0 -99
  559. package/esm/src/providers/openrouter/resolve-api-key.d.ts +0 -3
  560. package/esm/src/providers/openrouter/resolve-api-key.js +0 -8
  561. package/esm/src/providers/openrouter/speech.d.ts +0 -18
  562. package/esm/src/providers/openrouter/speech.js +0 -109
  563. package/esm/src/providers/probe.d.ts +0 -5
  564. package/esm/src/providers/probe.js +0 -15
  565. package/esm/src/providers/shared/builtin-wire.d.ts +0 -4
  566. package/esm/src/providers/shared/builtin-wire.js +0 -9
  567. package/esm/src/providers/shared/vault.d.ts +0 -13
  568. package/esm/src/providers/shared/vault.js +0 -41
@@ -1,490 +0,0 @@
1
- import { createOpenRouter } from '@openrouter/ai-sdk-provider';
2
- import { AISDKError, APICallError, generateText, jsonSchema, RetryError, StreamProviderError, streamText, tool, } from 'ai';
3
- import { isAbortError, kindOfHttpStatus, TheoremError, toErrorEvent, } from '../../guardrails/error.js';
4
- import { asRecord } from '../../kernel/engine/record.js';
5
- import { reportedTokens, usageCount } from '../../kernel/engine/usage.js';
6
- import { turnStopFromOpenAiFinishReason } from '../../kernel/stop.js';
7
- import { builtinWire } from '../shared/builtin-wire.js';
8
- import { foldResponse } from '../shared/response-identity.js';
9
- import { structuredEvent } from '../shared/structured-output.js';
10
- import { malformedToolCall, toolCallEvents } from '../shared/tool-args.js';
11
- import { networkError } from '../shared/upstream-tap.js';
12
- import { bearerFetch } from '../shared/vault.js';
13
- import { cacheControlJson } from './cache-control.js';
14
- import { openAiGatewayHeaders, resolveResponseFormat } from './openai/compat.js';
15
- import { buildAiSdkMessages } from './openai/sdk-messages.js';
16
- import { openAiResponse, openAiUsageTokens } from './openai/usage.js';
17
- import { resolveOpenAiGatewayApiKey } from './resolve-api-key.js';
18
- export function trimApiKey(explicitKey) {
19
- if (explicitKey?.trim()) {
20
- return explicitKey.trim();
21
- }
22
- return undefined;
23
- }
24
- export function createAccumulator() {
25
- return {
26
- text: '',
27
- citedUris: new Set(),
28
- reportedAnnotations: new Set(),
29
- emittedTokens: false,
30
- errored: false,
31
- };
32
- }
33
- function webSource(uri, title) {
34
- return { title: title || uri, uri, type: 'web' };
35
- }
36
- function citationEvent(sources, acc) {
37
- const fresh = [];
38
- for (const source of sources) {
39
- if (acc.citedUris.has(source.uri))
40
- continue;
41
- acc.citedUris.add(source.uri);
42
- fresh.push(source);
43
- }
44
- return fresh.length > 0 ? { type: 'citation', sources: fresh } : undefined;
45
- }
46
- export function sourceEvent(part, acc) {
47
- if (part.sourceType === 'url') {
48
- return citationEvent([webSource(part.url, part.title)], acc);
49
- }
50
- return {
51
- type: 'evidence',
52
- evidence: { provider: 'openrouter', kind: 'provider_step', step: 'source', raw: { ...part } },
53
- };
54
- }
55
- export function schemaForTool(decl) {
56
- return decl.parameters ?? { type: 'object', properties: {}, additionalProperties: true };
57
- }
58
- export function buildTools(wireTools) {
59
- if (!wireTools || wireTools.length === 0) {
60
- return undefined;
61
- }
62
- const tools = {};
63
- for (const decl of wireTools) {
64
- tools[decl.name] = tool({
65
- description: decl.description,
66
- inputSchema: jsonSchema(schemaForTool(decl)),
67
- });
68
- }
69
- return tools;
70
- }
71
- /** `web` wires as `web_search_options`; every other builtin is a plugin. */
72
- function openRouterSettings(req) {
73
- let webSearch = false;
74
- const plugins = [];
75
- for (const builtin of req.builtins) {
76
- const pluginId = builtinWire(builtin, 'openRouter');
77
- if (pluginId === 'web')
78
- webSearch = true;
79
- else
80
- plugins.push({ id: pluginId });
81
- }
82
- if (plugins.length === 0 && !webSearch) {
83
- return undefined;
84
- }
85
- const settings = {};
86
- if (plugins.length > 0) {
87
- settings.plugins = plugins;
88
- }
89
- if (webSearch)
90
- settings.web_search_options = {};
91
- return settings;
92
- }
93
- /** Only when the raw stream carried no `usage` row; `rawEvents` reads that one first, with cost. */
94
- export function tokensFromUsage(usage) {
95
- return reportedTokens({
96
- input: usageCount(usage.inputTokens),
97
- output: usageCount(usage.outputTokens),
98
- thinking: usageCount(usage.outputTokenDetails?.reasoningTokens),
99
- cached: usageCount(usage.inputTokenDetails?.cacheReadTokens),
100
- cacheWrite: usageCount(usage.inputTokenDetails?.cacheWriteTokens),
101
- });
102
- }
103
- export function stringArray(value) {
104
- if (!Array.isArray(value)) {
105
- return undefined;
106
- }
107
- const out = value.filter((item) => typeof item === 'string');
108
- return out.length > 0 ? out : undefined;
109
- }
110
- export function metadataRecord(raw, key) {
111
- return asRecord(raw[key]);
112
- }
113
- export function citationCandidates(raw) {
114
- const openrouter = metadataRecord(raw, 'openrouter') ?? {};
115
- return [
116
- raw.citations,
117
- metadataRecord(raw, 'providerMetadata')?.citations,
118
- metadataRecord(raw, 'provider_metadata')?.citations,
119
- openrouter.citations,
120
- metadataRecord(openrouter, 'providerMetadata')?.citations,
121
- metadataRecord(openrouter, 'provider_metadata')?.citations,
122
- ];
123
- }
124
- export function nestedCitations(raw) {
125
- for (const candidate of citationCandidates(raw)) {
126
- const citations = stringArray(candidate);
127
- if (citations) {
128
- return citations;
129
- }
130
- }
131
- return undefined;
132
- }
133
- export function metadataAnnotations(raw) {
134
- const openrouter = metadataRecord(raw, 'openrouter');
135
- if (Array.isArray(raw.annotations)) {
136
- return raw.annotations;
137
- }
138
- if (Array.isArray(openrouter?.annotations)) {
139
- return openrouter.annotations;
140
- }
141
- return undefined;
142
- }
143
- function annotationSource(annotation) {
144
- const record = asRecord(annotation);
145
- const cited = asRecord(record?.url_citation);
146
- if (record?.type !== 'url_citation' || typeof cited?.url !== 'string') {
147
- return undefined;
148
- }
149
- return webSource(cited.url, typeof cited.title === 'string' ? cited.title : undefined);
150
- }
151
- /** Each citation or annotation reports once per call, however many rows repeat it. */
152
- export function eventsFromMetadata(metadata, acc) {
153
- const raw = asRecord(metadata);
154
- if (!raw) {
155
- return [];
156
- }
157
- const annotations = metadataAnnotations(raw) ?? [];
158
- const sources = (nestedCitations(raw) ?? []).map((uri) => webSource(uri));
159
- const other = [];
160
- for (const annotation of annotations) {
161
- const source = annotationSource(annotation);
162
- if (source) {
163
- sources.push(source);
164
- continue;
165
- }
166
- const key = String(JSON.stringify(annotation));
167
- if (acc.reportedAnnotations.has(key))
168
- continue;
169
- acc.reportedAnnotations.add(key);
170
- other.push(annotation);
171
- }
172
- const events = [];
173
- const citation = citationEvent(sources, acc);
174
- if (citation) {
175
- events.push(citation);
176
- }
177
- if (other.length > 0) {
178
- events.push({
179
- type: 'evidence',
180
- evidence: {
181
- provider: 'openrouter',
182
- kind: 'provider_step',
183
- step: 'annotations',
184
- raw: { annotations: other },
185
- },
186
- });
187
- }
188
- return events;
189
- }
190
- export function rawThoughtEvent(raw) {
191
- const choices = raw.choices;
192
- if (!Array.isArray(choices)) {
193
- return undefined;
194
- }
195
- for (const choice of choices) {
196
- const delta = asRecord(asRecord(choice)?.delta);
197
- if (typeof delta?.thinking === 'string') {
198
- return { type: 'thought', text: delta.thinking };
199
- }
200
- }
201
- return undefined;
202
- }
203
- export function rawChoiceMessageEvents(raw, acc) {
204
- const choices = Array.isArray(raw.choices) ? raw.choices : [];
205
- return choices.flatMap((choice) => eventsFromMetadata(asRecord(choice)?.message, acc));
206
- }
207
- export function rawEvents(raw, acc) {
208
- const record = asRecord(raw);
209
- if (!record) {
210
- return [];
211
- }
212
- const identity = foldResponse(acc.response, openAiResponse(record));
213
- acc.response = identity.known;
214
- const events = identity.event ? [identity.event] : [];
215
- const thought = rawThoughtEvent(record);
216
- if (thought) {
217
- events.push(thought);
218
- }
219
- events.push(...eventsFromMetadata(record, acc), ...rawChoiceMessageEvents(record, acc));
220
- if (!acc.emittedTokens) {
221
- const usage = openAiUsageTokens(record.usage);
222
- if (usage) {
223
- acc.emittedTokens = true;
224
- events.push({ type: 'tokens', tokens: usage });
225
- }
226
- }
227
- const choices = Array.isArray(record.choices) ? record.choices : [];
228
- for (const choice of choices) {
229
- const row = asRecord(choice);
230
- if (!row)
231
- continue;
232
- if (typeof row.finish_reason === 'string' || row.finish_reason === null) {
233
- acc.finishReason = row.finish_reason;
234
- }
235
- if (typeof row.native_finish_reason === 'string' || row.native_finish_reason === null) {
236
- acc.nativeFinishReason = row.native_finish_reason;
237
- }
238
- }
239
- return events;
240
- }
241
- /** A call the SDK could not parse or match is the call with no arguments, then its failure. */
242
- export function toolCallPartEvents(part) {
243
- if (part.invalid) {
244
- const message = part.error instanceof Error ? part.error.message : 'tool call was not valid';
245
- return malformedToolCall({ name: part.toolName, callId: part.toolCallId }, message, part.input);
246
- }
247
- return toolCallEvents({ id: part.toolCallId, name: part.toolName }, part.input);
248
- }
249
- export function tokenEvent(part) {
250
- const tokens = tokensFromUsage(part.totalUsage);
251
- return tokens ? { type: 'tokens', tokens } : undefined;
252
- }
253
- export function providerMetadataEvents(part, acc) {
254
- return 'providerMetadata' in part ? eventsFromMetadata(part.providerMetadata, acc) : [];
255
- }
256
- export function eventFromPart(part, acc) {
257
- return [...primaryEventsFromPart(part, acc), ...providerMetadataEvents(part, acc)];
258
- }
259
- export function primaryEventsFromPart(part, acc) {
260
- switch (part.type) {
261
- case 'text-delta':
262
- acc.text += part.text;
263
- return [{ type: 'text', text: part.text }];
264
- case 'reasoning-delta':
265
- return [{ type: 'thought', text: part.text }];
266
- case 'tool-call':
267
- return toolCallPartEvents(part);
268
- case 'source': {
269
- const event = sourceEvent(part, acc);
270
- return event ? [event] : [];
271
- }
272
- case 'finish': {
273
- const event = finishEvent(part, acc);
274
- return event ? [event] : [];
275
- }
276
- case 'error':
277
- acc.errored = true;
278
- return [toErrorEvent(streamPartError(part.error))];
279
- default:
280
- return [];
281
- }
282
- }
283
- export function finishEvent(part, acc) {
284
- if (part.finishReason != null) {
285
- acc.finishReason = String(part.finishReason);
286
- }
287
- if (acc.emittedTokens) {
288
- return undefined;
289
- }
290
- if (!part.totalUsage) {
291
- return undefined;
292
- }
293
- const event = tokenEvent({ totalUsage: part.totalUsage });
294
- if (event) {
295
- acc.emittedTokens = true;
296
- }
297
- return event;
298
- }
299
- export function* finalEvents(req, acc) {
300
- if (acc.errored) {
301
- return;
302
- }
303
- if (req.structured && acc.text) {
304
- const event = structuredEvent(acc.text);
305
- yield event;
306
- if (event.type === 'error')
307
- return;
308
- }
309
- yield {
310
- type: 'done',
311
- stop: turnStopFromOpenAiFinishReason(acc.finishReason, acc.nativeFinishReason),
312
- };
313
- }
314
- function createStreamContext(req, config, apiKey) {
315
- const openrouter = createOpenRouter({
316
- apiKey,
317
- baseURL: config.baseUrl,
318
- headers: openAiGatewayHeaders(config),
319
- // The AI SDK retries internally; tapping its fetch tapes every try.
320
- fetch: bearerFetch(req, config.fetch ?? fetch, config.vault, apiKey),
321
- compatibility: 'strict',
322
- });
323
- return {
324
- openrouter,
325
- modelName: req.apiId,
326
- };
327
- }
328
- /** System via instructions XOR a cache-marked system message — never both. */
329
- export function systemDelivery(req) {
330
- if (!req.system) {
331
- return {};
332
- }
333
- if (req.cache?.mode === 'system') {
334
- return {
335
- systemMessage: {
336
- role: 'system',
337
- content: req.system,
338
- providerOptions: {
339
- openrouter: { cacheControl: cacheControlJson(req.cache) },
340
- },
341
- },
342
- };
343
- }
344
- return { instructions: req.system };
345
- }
346
- function streamTextOptions(req, context) {
347
- const delivery = systemDelivery(req);
348
- const messages = buildAiSdkMessages(req);
349
- if (delivery.systemMessage) {
350
- messages.unshift(delivery.systemMessage);
351
- }
352
- return {
353
- model: context.openrouter.chat(context.modelName, openRouterSettings(req)),
354
- instructions: delivery.instructions,
355
- messages,
356
- allowSystemInMessages: true,
357
- temperature: req.temperature,
358
- maxOutputTokens: req.maxOutputTokens,
359
- tools: buildTools(req.wireTools),
360
- providerOptions: providerOptionsFor(req),
361
- include: { rawChunks: true },
362
- abortSignal: req.signal,
363
- onError: () => undefined,
364
- };
365
- }
366
- function shouldEmitProviderEvent(req, event) {
367
- return event.type !== 'thought' || req.summaries !== 'none';
368
- }
369
- async function* yieldAiSdkStream(req, acc, context) {
370
- const result = streamText(streamTextOptions(req, context));
371
- for await (const part of result.stream) {
372
- if (part.type === 'raw') {
373
- req.tapUpstream?.(asRecord(part.rawValue) ?? { rawValue: part.rawValue });
374
- for (const event of rawEvents(part.rawValue, acc)) {
375
- if (shouldEmitProviderEvent(req, event)) {
376
- yield event;
377
- }
378
- }
379
- continue;
380
- }
381
- for (const event of eventFromPart(part, acc)) {
382
- if (shouldEmitProviderEvent(req, event)) {
383
- yield event;
384
- }
385
- }
386
- }
387
- }
388
- async function* yieldAiSdkBuffered(req, acc, context) {
389
- const { include: _, onError: __, ...options } = streamTextOptions(req, context);
390
- const result = await generateText({ ...options, include: { responseBody: true } });
391
- const body = asRecord(result.response.body);
392
- if (body) {
393
- req.tapUpstream?.(body);
394
- yield* rawEvents(body, acc).filter((event) => shouldEmitProviderEvent(req, event));
395
- }
396
- for (const part of result.content) {
397
- const events = part.type === 'text'
398
- ? [{ type: 'text', text: part.text }]
399
- : part.type === 'reasoning'
400
- ? [{ type: 'thought', text: part.text }]
401
- : part.type === 'tool-call' || part.type === 'source'
402
- ? primaryEventsFromPart(part, acc)
403
- : [];
404
- if (part.type === 'text')
405
- acc.text += part.text;
406
- yield* events.filter((event) => shouldEmitProviderEvent(req, event));
407
- }
408
- yield* eventsFromMetadata(result.providerMetadata, acc).filter((event) => shouldEmitProviderEvent(req, event));
409
- const tokens = finishEvent(result, acc);
410
- if (tokens)
411
- yield tokens;
412
- }
413
- async function* streamOpenRouter(req, config) {
414
- let apiKey;
415
- try {
416
- apiKey = resolveOpenAiGatewayApiKey(config, req.keySlot);
417
- }
418
- catch (err) {
419
- yield toErrorEvent(err);
420
- return;
421
- }
422
- const acc = createAccumulator();
423
- const context = createStreamContext(req, config, apiKey);
424
- try {
425
- yield* req.stream === false
426
- ? yieldAiSdkBuffered(req, acc, context)
427
- : yieldAiSdkStream(req, acc, context);
428
- yield* finalEvents(req, acc);
429
- }
430
- catch (err) {
431
- if (isAbortError(err)) {
432
- throw err;
433
- }
434
- yield toErrorEvent(sdkError(err));
435
- }
436
- }
437
- /**
438
- * An HTTP status wins; a call with no response could not reach OpenRouter; a
439
- * mid-stream error without a status is OpenRouter's own; any other SDK error is
440
- * a reply the SDK could not read.
441
- */
442
- function sdkError(err) {
443
- if (RetryError.isInstance(err)) {
444
- return sdkError(err.lastError);
445
- }
446
- if (!AISDKError.isInstance(err)) {
447
- return err;
448
- }
449
- const status = asRecord(err)?.statusCode;
450
- const kind = typeof status === 'number'
451
- ? kindOfHttpStatus(status)
452
- : APICallError.isInstance(err)
453
- ? 'network'
454
- : StreamProviderError.isInstance(err)
455
- ? 'unavailable'
456
- : 'bad_response';
457
- return new TheoremError(kind, err.message, { cause: err });
458
- }
459
- /** A body that breaks mid-read arrives as a plain error, not an SDK one. */
460
- function streamPartError(error) {
461
- return AISDKError.isInstance(error) || RetryError.isInstance(error)
462
- ? sdkError(error)
463
- : networkError(error);
464
- }
465
- export function providerOptionsFor(req) {
466
- const openrouter = {};
467
- if (req.thinking) {
468
- openrouter.reasoning = { effort: req.thinking };
469
- }
470
- const responseFormat = resolveResponseFormat(req.structured);
471
- if (responseFormat) {
472
- openrouter.response_format = responseFormat;
473
- // Route only to endpoints that honour the schema; one that ignores it answers in prose.
474
- openrouter.provider = { require_parameters: true };
475
- }
476
- if (req.cache?.mode === 'automatic') {
477
- openrouter.cacheControl = cacheControlJson(req.cache);
478
- }
479
- if (req.sessionId) {
480
- openrouter.session_id = req.sessionId;
481
- }
482
- if (Object.keys(openrouter).length === 0)
483
- return undefined;
484
- return { openrouter };
485
- }
486
- export function createOpenRouterProvider(config = {}) {
487
- return {
488
- complete: (req) => streamOpenRouter(req, config),
489
- };
490
- }
@@ -1,10 +0,0 @@
1
- import type { ModelMessage } from 'ai';
2
- import type { InteractionPart, ProviderCompleteRequest, TurnHistoryMessage } from '../../../kernel/types.js';
3
- export declare function sdkPart(input: InteractionPart): Record<string, unknown>;
4
- export declare function sdkContentFromParts(parts: InteractionPart[]): string | Array<Record<string, unknown>>;
5
- export declare function toolResultMessage(msg: TurnHistoryMessage): ModelMessage;
6
- export declare function assistantToolCallMessage(msg: TurnHistoryMessage): ModelMessage | null;
7
- export declare function contentHistoryMessage(msg: TurnHistoryMessage): ModelMessage;
8
- export declare function historyToSdk(msg: TurnHistoryMessage): ModelMessage | null;
9
- /** Leaves `req.system` to the caller (`systemDelivery` in chat.ts). */
10
- export declare function buildAiSdkMessages(req: ProviderCompleteRequest): ModelMessage[];
@@ -1,99 +0,0 @@
1
- import { TheoremError } from '../../../guardrails/error.js';
2
- import { historyMessageParts, isMediaRefPart } from '../../../kernel/interaction-parts.js';
3
- import { historyToolArguments, historyToolIdentity } from '../../shared/tool-args.js';
4
- function inlineMediaPart(part) {
5
- if (isMediaRefPart(part)) {
6
- throw new TheoremError('unsupported', 'media references are not supported on openAi');
7
- }
8
- return part;
9
- }
10
- export function sdkPart(input) {
11
- if (input.type === 'text') {
12
- return { type: 'text', text: input.text };
13
- }
14
- const part = inlineMediaPart(input);
15
- return { type: 'file', mediaType: part.mimeType, data: part.data };
16
- }
17
- export function sdkContentFromParts(parts) {
18
- if (parts.every((part) => part.type === 'text')) {
19
- return parts
20
- .map((part) => (part.type === 'text' ? part.text : ''))
21
- .filter(Boolean)
22
- .join('\n');
23
- }
24
- return parts.map(sdkPart);
25
- }
26
- export function toolResultMessage(msg) {
27
- const parts = historyMessageParts(msg);
28
- const content = sdkContentFromParts(parts);
29
- const output = typeof content === 'string'
30
- ? { type: 'text', value: content }
31
- : {
32
- type: 'content',
33
- value: parts.map((input) => {
34
- if (input.type === 'text') {
35
- return { type: 'text', text: input.text };
36
- }
37
- const part = inlineMediaPart(input);
38
- return {
39
- type: 'file',
40
- mediaType: part.mimeType,
41
- data: { type: 'data', data: part.data },
42
- };
43
- }),
44
- };
45
- // AI SDK ToolModelMessage is a branded union; structural tool-result is correct at runtime.
46
- return {
47
- role: 'tool',
48
- content: [
49
- {
50
- type: 'tool-result',
51
- // The AI SDK rejects a missing id or name (`AI_InvalidPromptError`).
52
- ...historyToolIdentity({ toolCallId: msg.tool_call_id, toolName: msg.name }),
53
- output,
54
- },
55
- ],
56
- };
57
- }
58
- export function assistantToolCallMessage(msg) {
59
- if (!msg.tool_calls || msg.tool_calls.length === 0) {
60
- return null;
61
- }
62
- const said = sdkContentFromParts(historyMessageParts(msg));
63
- const lead = typeof said === 'string' ? (said ? [{ type: 'text', text: said }] : []) : said;
64
- return {
65
- role: 'assistant',
66
- content: [
67
- ...lead,
68
- ...msg.tool_calls.map((call) => ({
69
- type: 'tool-call',
70
- toolCallId: call.id,
71
- toolName: call.function.name,
72
- input: historyToolArguments(call.function.arguments),
73
- })),
74
- ],
75
- };
76
- }
77
- export function contentHistoryMessage(msg) {
78
- return { role: msg.role, content: sdkContentFromParts(historyMessageParts(msg)) };
79
- }
80
- export function historyToSdk(msg) {
81
- if (msg.role === 'tool') {
82
- return toolResultMessage(msg);
83
- }
84
- return assistantToolCallMessage(msg) || contentHistoryMessage(msg);
85
- }
86
- /** Leaves `req.system` to the caller (`systemDelivery` in chat.ts). */
87
- export function buildAiSdkMessages(req) {
88
- const messages = [];
89
- for (const msg of req.history ?? []) {
90
- const wired = historyToSdk(msg);
91
- if (wired) {
92
- messages.push(wired);
93
- }
94
- }
95
- if (req.input.length > 0) {
96
- messages.push({ role: 'user', content: sdkContentFromParts(req.input) });
97
- }
98
- return messages;
99
- }
@@ -1,3 +0,0 @@
1
- import type { KeySlot } from '../../kernel/types.js';
2
- import type { OpenAiGatewayTransport } from '../types.js';
3
- export declare function resolveOpenAiGatewayApiKey(config: OpenAiGatewayTransport, keySlot: KeySlot | undefined): string;
@@ -1,8 +0,0 @@
1
- import { TheoremError } from '../../guardrails/error.js';
2
- import { requireKey } from '../shared/vault.js';
3
- export function resolveOpenAiGatewayApiKey(config, keySlot) {
4
- if (keySlot === undefined) {
5
- throw new TheoremError('auth', 'an OpenRouter model must name a vault slot');
6
- }
7
- return requireKey(config.vault, keySlot);
8
- }
@@ -1,18 +0,0 @@
1
- import type { InteractionPart, ModelProvider, ProfileSpeechSpec, ProviderCompleteRequest, ProviderEvent } from '../../kernel/types.js';
2
- import type { OpenAiGatewayTransport } from '../types.js';
3
- export type SpeechProviderConfig = OpenAiGatewayTransport & {
4
- /** Fallback when the profile does not pin `speech.voice`. */
5
- voice?: string;
6
- };
7
- export declare function extractInputText(input: InteractionPart[]): string;
8
- export declare function buildSpeechHeaders(apiKey: string, config: SpeechProviderConfig): Record<string, string>;
9
- export declare function buildPayload(req: ProviderCompleteRequest, text: string, speech: ProfileSpeechSpec | undefined, configVoice?: string): Record<string, unknown>;
10
- export declare function requestSpeech(apiKey: string, text: string, req: ProviderCompleteRequest, config: SpeechProviderConfig): Promise<Response>;
11
- /**
12
- * The response's `content-type` states the audio (probe 23/09/2026:
13
- * `audio/pcm;rate=24000;channels=1` for `pcm`). Raw PCM with a stated rate is
14
- * wrapped as WAV; anything else keeps its reported type.
15
- */
16
- export declare function yieldSpeechSuccess(rawBytes: Uint8Array, contentType: string | null): Generator<ProviderEvent>;
17
- export declare function streamSpeech(req: ProviderCompleteRequest, config?: SpeechProviderConfig): AsyncGenerator<ProviderEvent>;
18
- export declare function createSpeechProvider(config?: SpeechProviderConfig): ModelProvider;