@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
@@ -3,6 +3,7 @@ import { base64ToBytes, bytesToBase64 } from '../util/base64.js';
3
3
  export function toBase64Url(bytes) {
4
4
  return bytesToBase64(bytes).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
5
5
  }
6
+ /** Decodes base64url text into bytes. */
6
7
  export function fromBase64Url(base64url) {
7
8
  let base64 = base64url.replace(/-/g, '+').replace(/_/g, '/');
8
9
  while (base64.length % 4 !== 0) {
@@ -21,7 +22,7 @@ export function generateCodeVerifier(length = 64) {
21
22
  throw new RangeError(`Invalid PKCE code_verifier length: ${length}. RFC 7636 Section 4.1 requires length between 43 and 128 characters.`);
22
23
  }
23
24
  const validChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';
24
- const maxValid = 256 - (256 % validChars.length); // 198 (66 * 3): rejecting above it removes modulo bias
25
+ const maxValid = 256 - (256 % validChars.length); // why: 198 (66 * 3): rejecting above it removes modulo bias
25
26
  let verifier = '';
26
27
  const buffer = new Uint8Array(length * 2);
27
28
  while (verifier.length < length) {
@@ -93,7 +94,7 @@ async function openBytes(parts, secret, scheme) {
93
94
  }
94
95
  const STATE_SCHEME = {
95
96
  info: STATE_CONTEXT,
96
- label: 'OAuth state secret', // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
97
+ label: 'OAuth state secret', // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
97
98
  associatedData: ENVELOPE_VERSION,
98
99
  };
99
100
  /** Encrypted, not only signed: the state crosses the browser and the server, and the PKCE verifier must stay secret. */
@@ -101,10 +102,11 @@ export async function sealStatePayload(payload, secret) {
101
102
  const envelope = await sealBytes(JSON.stringify(payload), secret, STATE_SCHEME);
102
103
  return [ENVELOPE_VERSION, envelope].join('.');
103
104
  }
105
+ /** Opens a sealed PKCE state; throws when the secret or the seal is wrong. */
104
106
  export async function unsealStatePayload(sealed, secret) {
105
107
  const [version, ...parts] = sealed.split('.');
106
108
  if (version !== ENVELOPE_VERSION || parts.length !== 3) {
107
- throw new Error('Invalid sealed state format'); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
109
+ throw new Error('Invalid sealed state format'); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
108
110
  }
109
111
  const plaintext = await openBytes(parts, secret, STATE_SCHEME);
110
112
  if (plaintext === null) {
@@ -112,23 +114,23 @@ export async function unsealStatePayload(sealed, secret) {
112
114
  }
113
115
  const payload = JSON.parse(plaintext);
114
116
  if (!Array.isArray(payload.scopes)) {
115
- throw new Error('Invalid sealed state format'); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
117
+ throw new Error('Invalid sealed state format'); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
116
118
  }
117
119
  if (Date.now() > payload.expiresAt) {
118
- throw new Error('OAuth state has expired'); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
120
+ throw new Error('OAuth state has expired'); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
119
121
  }
120
122
  return payload;
121
123
  }
122
124
  function secretScheme(keyVersion, binding) {
123
125
  return {
124
126
  info: SEAL_CONTEXT,
125
- label: 'Secret sealing key', // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
127
+ label: 'Secret sealing key', // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
126
128
  associatedData: JSON.stringify([ENVELOPE_VERSION, keyVersion, binding]),
127
129
  };
128
130
  }
129
131
  function assertKeyVersion(keyVersion) {
130
132
  if (!Number.isSafeInteger(keyVersion) || keyVersion < 0) {
131
- throw new RangeError(`Key version must be a non-negative integer; got ${keyVersion}`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
133
+ throw new RangeError(`Key version must be a non-negative integer; got ${keyVersion}`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
132
134
  }
133
135
  }
134
136
  /**
@@ -142,16 +144,16 @@ export async function sealSecret(input) {
142
144
  const envelope = await sealBytes(input.plaintext, input.key, scheme);
143
145
  return [ENVELOPE_VERSION, String(input.keyVersion), envelope].join('.');
144
146
  }
145
- /** Opens what `sealSecret` sealed; throws when the envelope, key version or binding does not match. */
147
+ /** Opens what `sealSecret` sealed; throws when the envelope, key version, or binding does not match. */
146
148
  export async function openSecret(input) {
147
149
  const [version, keyVersionText, ...parts] = input.sealed.split('.');
148
150
  const keyVersion = Number(keyVersionText);
149
151
  if (version !== ENVELOPE_VERSION || parts.length !== 3 || !/^\d+$/.test(keyVersionText ?? '')) {
150
- throw new Error('Invalid sealed secret format'); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
152
+ throw new Error('Invalid sealed secret format'); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
151
153
  }
152
154
  const key = input.keys[keyVersion];
153
155
  if (key === undefined) {
154
- throw new Error(`No key for sealed secret key version ${keyVersion}`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
156
+ throw new Error(`No key for sealed secret key version ${keyVersion}`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
155
157
  }
156
158
  const plaintext = await openBytes(parts, key, secretScheme(keyVersion, input.binding));
157
159
  if (plaintext === null) {
@@ -3,7 +3,7 @@ import type { AuthorizationServerMetadata, CreatePkceFlowOptions, ExchangePkceCo
3
3
  export declare function discoverResourceMetadata(resourceUrl: string, transport?: OAuthTransportOptions): Promise<ProtectedResourceMetadata | undefined>;
4
4
  /** A non-OK URL moves on to the next; metadata that answers but fails validation is refused outright. */
5
5
  export declare function discoverAuthServerMetadata(issuer: string, transport?: OAuthTransportOptions): Promise<AuthorizationServerMetadata>;
6
- /** Stateless: the verifier, expected issuer, token endpoint and resource are sealed into `state`. */
6
+ /** Stateless: the verifier, expected issuer, token endpoint, and resource are sealed into `state`. */
7
7
  export declare function createOAuthPkceFlow(options: CreatePkceFlowOptions): Promise<PkceFlowResult>;
8
8
  /** RFC 9207 §2.4: `iss` is required when the server advertises it, and byte-exact (no URL normalization). */
9
9
  export declare function validateIssuer(expectedIssuer: string, receivedIss: string | undefined, issRequired: boolean): void;
@@ -12,6 +12,7 @@ export declare function validateIssuer(expectedIssuer: string, receivedIss: stri
12
12
  * and a valid `iss` (RFC 9207); posts to the token endpoint sealed in `state`, never a caller's.
13
13
  */
14
14
  export declare function exchangeOAuthPkce(options: ExchangePkceCodeOptions): Promise<ExchangePkceCodeResult>;
15
+ /** Exchanges a refresh token for new tokens at the token endpoint; both the endpoint and the resource must be https URLs. */
15
16
  export declare function refreshOAuthToken(options: RefreshOAuthTokenOptions): Promise<ExchangePkceCodeResult>;
16
17
  /** RFC 8707: the same origin, and the resource's path or below it. */
17
18
  export declare function tokenAudienceCovers(resource: string, url: URL): boolean;
@@ -14,17 +14,17 @@ function oauthFetch(url, init, transport) {
14
14
  /** RFC 8414 §2, RFC 9728 §1.2, OAuth 2.1 §1.5: an absolute `https` URL without a fragment. */
15
15
  function httpsUrl(value, what) {
16
16
  if (typeof value !== 'string') {
17
- throw new Error(`OAuth ${what} is missing`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
17
+ throw new Error(`OAuth ${what} is missing`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
18
18
  }
19
19
  let url;
20
20
  try {
21
21
  url = new URL(value);
22
22
  }
23
23
  catch {
24
- throw new Error(`OAuth ${what} "${value}" is not a URL`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
24
+ throw new Error(`OAuth ${what} "${value}" is not a URL`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
25
25
  }
26
26
  if (url.protocol !== 'https:' || url.hash) {
27
- throw new Error(`OAuth ${what} "${value}" must be an https URL without a fragment`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
27
+ throw new Error(`OAuth ${what} "${value}" must be an https URL without a fragment`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
28
28
  }
29
29
  return url;
30
30
  }
@@ -40,7 +40,7 @@ function assertRedirectUri(value) {
40
40
  url = new URL(value);
41
41
  }
42
42
  catch {
43
- throw new Error(`OAuth redirect_uri "${value}" is not an absolute URI`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
43
+ throw new Error(`OAuth redirect_uri "${value}" is not an absolute URI`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
44
44
  }
45
45
  const scheme = url.protocol.slice(0, -1);
46
46
  const allowed = scheme === 'https' ||
@@ -50,12 +50,12 @@ function assertRedirectUri(value) {
50
50
  throw new Error(`OAuth redirect_uri "${value}" must be https, http on loopback, or a reverse-domain app scheme, without a fragment`);
51
51
  }
52
52
  }
53
- /** RFC 6749 §3.3: a scope token is one or more printable ASCII characters other than space, `"` and `\`. */
53
+ /** RFC 6749 §3.3: a scope token is one or more printable ASCII characters other than space, `"`, and `\`. */
54
54
  const SCOPE_TOKEN = /^[\x21\x23-\x5B\x5D-\x7E]+$/;
55
55
  function assertScopeTokens(scopes) {
56
56
  for (const scope of scopes) {
57
57
  if (!SCOPE_TOKEN.test(scope)) {
58
- throw new Error(`OAuth scope "${scope}" is not a single RFC 6749 scope token`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
58
+ throw new Error(`OAuth scope "${scope}" is not a single RFC 6749 scope token`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
59
59
  }
60
60
  }
61
61
  }
@@ -80,7 +80,7 @@ function assertAuthorizationParams(params) {
80
80
  /** A client id that is a URL is a Client ID Metadata Document, which is served over https. */
81
81
  function assertClientId(clientId) {
82
82
  if (clientId.length === 0) {
83
- throw new Error('OAuth client_id is missing'); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
83
+ throw new Error('OAuth client_id is missing'); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
84
84
  }
85
85
  if (/^https?:/i.test(clientId))
86
86
  httpsUrl(clientId, 'client_id');
@@ -95,14 +95,14 @@ function stringList(data, field) {
95
95
  if (value === undefined)
96
96
  return undefined;
97
97
  if (!Array.isArray(value) || !value.every((entry) => typeof entry === 'string')) {
98
- throw new Error(`OAuth metadata "${field}" must be a list of strings`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
98
+ throw new Error(`OAuth metadata "${field}" must be a list of strings`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
99
99
  }
100
100
  return value;
101
101
  }
102
102
  async function metadataObject(response, url) {
103
103
  const data = await response.json();
104
104
  if (!isRecord(data)) {
105
- throw new Error(`OAuth metadata at ${url} is not a JSON object`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
105
+ throw new Error(`OAuth metadata at ${url} is not a JSON object`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
106
106
  }
107
107
  return data;
108
108
  }
@@ -173,7 +173,7 @@ function authServerMetadataUrls(issuer) {
173
173
  export async function discoverAuthServerMetadata(issuer, transport = {}) {
174
174
  const issuerUrl = httpsUrl(issuer, 'issuer');
175
175
  if (issuerUrl.search) {
176
- throw new Error(`OAuth issuer "${issuer}" must not have a query`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
176
+ throw new Error(`OAuth issuer "${issuer}" must not have a query`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
177
177
  }
178
178
  for (const url of authServerMetadataUrls(issuerUrl)) {
179
179
  const response = await oauthFetch(url, { headers: { Accept: 'application/json' } }, transport);
@@ -183,7 +183,7 @@ export async function discoverAuthServerMetadata(issuer, transport = {}) {
183
183
  }
184
184
  return parseAuthServerMetadata(await metadataObject(response, url), issuer, url);
185
185
  }
186
- throw new Error(`Failed to discover authorization server metadata for "${issuer}"`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
186
+ throw new Error(`Failed to discover authorization server metadata for "${issuer}"`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
187
187
  }
188
188
  /** A resource that publishes no metadata is its own authorization server. */
189
189
  async function discoverEndpoints(resourceServerUrl, transport) {
@@ -200,14 +200,14 @@ async function discoverEndpoints(resourceServerUrl, transport) {
200
200
  issParameterSupported: asMeta.authorization_response_iss_parameter_supported === true,
201
201
  };
202
202
  }
203
- /** Stateless: the verifier, expected issuer, token endpoint and resource are sealed into `state`. */
203
+ /** Stateless: the verifier, expected issuer, token endpoint, and resource are sealed into `state`. */
204
204
  export async function createOAuthPkceFlow(options) {
205
205
  const endpoints = options.preResolved ?? (await discoverEndpoints(options.resourceServerUrl, options));
206
206
  httpsUrl(endpoints.issuer, 'issuer');
207
207
  const authUrl = httpsUrl(endpoints.authorizationEndpoint, 'authorization_endpoint');
208
208
  const tokenEndpoint = httpsUrl(endpoints.tokenEndpoint, 'token_endpoint').href;
209
209
  const { issuer } = endpoints;
210
- // RFC 8707 audience: always the resource the flow is for; discovery required its metadata to match.
210
+ // why: RFC 8707 audience: always the resource the flow is for; discovery required its metadata to match.
211
211
  httpsUrl(options.resourceServerUrl, 'resource');
212
212
  const resource = options.resourceServerUrl;
213
213
  assertClientId(options.clientId);
@@ -218,7 +218,7 @@ export async function createOAuthPkceFlow(options) {
218
218
  assertAuthorizationParams(options.authorizationParams);
219
219
  const ttl = options.stateTtlMs ?? 10 * 60 * 1000;
220
220
  if (!Number.isFinite(ttl) || ttl <= 0) {
221
- throw new RangeError(`OAuth stateTtlMs must be a positive number of milliseconds; got ${ttl}`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
221
+ throw new RangeError(`OAuth stateTtlMs must be a positive number of milliseconds; got ${ttl}`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
222
222
  }
223
223
  const sessionBinding = await sessionBindingDigest(options.sessionBinding);
224
224
  const codeVerifier = generateCodeVerifier();
@@ -259,7 +259,7 @@ export async function createOAuthPkceFlow(options) {
259
259
  /** SHA-256 of the host's session binding, so the raw value never enters the state. */
260
260
  async function sessionBindingDigest(binding) {
261
261
  if (binding.length === 0) {
262
- throw new Error('OAuth sessionBinding must be a non-empty value tied to the user session'); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
262
+ throw new Error('OAuth sessionBinding must be a non-empty value tied to the user session'); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
263
263
  }
264
264
  const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(binding));
265
265
  return toBase64Url(new Uint8Array(digest));
@@ -306,26 +306,26 @@ async function tokenErrorText(response) {
306
306
  }
307
307
  function parseTokenResponse(data, tokenEndpoint) {
308
308
  const fail = (why) => {
309
- throw new Error(`Token response from ${tokenEndpoint} ${why}`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
309
+ throw new Error(`Token response from ${tokenEndpoint} ${why}`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
310
310
  };
311
311
  if (!isRecord(data)) {
312
- return fail('is not a JSON object'); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
312
+ return fail('is not a JSON object'); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
313
313
  }
314
314
  const tokens = data;
315
315
  if (typeof tokens.access_token !== 'string' || tokens.access_token.length === 0) {
316
- fail('has no access_token'); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
316
+ fail('has no access_token'); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
317
317
  }
318
318
  if (typeof tokens.token_type !== 'string' || tokens.token_type.toLowerCase() !== 'bearer') {
319
- fail(`has token_type "${String(tokens.token_type)}", not Bearer`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
319
+ fail(`has token_type "${String(tokens.token_type)}", not Bearer`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
320
320
  }
321
321
  const expiresIn = tokens.expires_in;
322
322
  if (expiresIn !== undefined &&
323
323
  (typeof expiresIn !== 'number' || !Number.isFinite(expiresIn) || expiresIn < 0)) {
324
- fail('has an expires_in that is not a number of seconds'); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
324
+ fail('has an expires_in that is not a number of seconds'); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
325
325
  }
326
326
  for (const field of ['refresh_token', 'scope']) {
327
327
  if (tokens[field] !== undefined && typeof tokens[field] !== 'string') {
328
- fail(`has a ${field} that is not a string`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
328
+ fail(`has a ${field} that is not a string`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
329
329
  }
330
330
  }
331
331
  return tokens;
@@ -365,7 +365,7 @@ async function requestToken(transport, grant, params, requested, previous) {
365
365
  body: body.toString(),
366
366
  }, transport);
367
367
  if (!response.ok) {
368
- const failed = previous ? 'Token refresh failed' : 'Token exchange failed'; // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
368
+ const failed = previous ? 'Token refresh failed' : 'Token exchange failed'; // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
369
369
  throw new Error(`${failed} at ${grant.tokenEndpoint} (HTTP ${response.status})${await tokenErrorText(response)}`);
370
370
  }
371
371
  const tokens = parseTokenResponse(await response.json(), grant.tokenEndpoint);
@@ -407,6 +407,7 @@ export async function exchangeOAuthPkce(options) {
407
407
  code_verifier: state.codeVerifier,
408
408
  }, state.scopes);
409
409
  }
410
+ /** Exchanges a refresh token for new tokens at the token endpoint; both the endpoint and the resource must be https URLs. */
410
411
  export function refreshOAuthToken(options) {
411
412
  httpsUrl(options.tokenEndpoint, 'token_endpoint');
412
413
  httpsUrl(options.resource, 'resource');
@@ -6,7 +6,7 @@ import { TheoremError } from '../../guardrails/error.js';
6
6
  export function credentialFromTypedSecret(authType, secret) {
7
7
  const value = typeof secret === 'string' ? secret.trim() : '';
8
8
  if (!value) {
9
- throw new TheoremError('request', 'A typed credential must be a non-empty string'); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
9
+ throw new TheoremError('request', 'A typed credential must be a non-empty string'); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
10
10
  }
11
11
  if (authType === 'bearer')
12
12
  return { type: 'bearer', token: value };
@@ -17,7 +17,7 @@ export function credentialFromTypedSecret(authType, secret) {
17
17
  /** `auth` is absent on any gate other than sign-in, which takes no key. */
18
18
  export function credentialForSignInGate(auth, secret) {
19
19
  if (!auth) {
20
- throw new TheoremError('request', 'a typed credential answers only a sign-in gate'); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
20
+ throw new TheoremError('request', 'a typed credential answers only a sign-in gate'); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
21
21
  }
22
22
  return { slot: auth.slot, credential: credentialFromTypedSecret(auth.authType, secret) };
23
23
  }
@@ -23,6 +23,7 @@ export interface AuthorizationServerMetadata {
23
23
  client_id_metadata_document_supported?: boolean;
24
24
  [key: string]: unknown;
25
25
  }
26
+ /** The tokens an OAuth server returns. */
26
27
  export interface OAuthTokens {
27
28
  access_token: string;
28
29
  token_type?: string;
@@ -31,6 +32,7 @@ export interface OAuthTokens {
31
32
  scope?: string;
32
33
  [key: string]: unknown;
33
34
  }
35
+ /** An OAuth sign-in a tool authenticates with. */
34
36
  export interface OAuth2Credential {
35
37
  type: 'oauth2';
36
38
  issuer: string;
@@ -44,16 +46,21 @@ export interface OAuth2Credential {
44
46
  clientId: string;
45
47
  scope?: string;
46
48
  }
49
+ /** A bearer token a tool authenticates with. */
47
50
  export interface BearerCredential {
48
51
  type: 'bearer';
49
52
  token: string;
50
53
  }
54
+ /** An API key a tool authenticates with. */
51
55
  export interface ApiKeyCredential {
52
56
  type: 'api_key';
53
57
  key: string;
58
+ /** The header the key goes in; a tool whose `auth.queryParam` puts it in the URL ignores it. */
54
59
  headerName?: string;
60
+ /** Text put before the key in the header; ignored as `headerName` is. */
55
61
  headerPrefix?: string;
56
62
  }
63
+ /** Any credential a tool can authenticate with. */
57
64
  export type ToolCredential = OAuth2Credential | BearerCredential | ApiKeyCredential;
58
65
  /** Every discovery and token request clears the network policy and never follows a redirect. */
59
66
  export interface OAuthTransportOptions {
@@ -63,6 +70,7 @@ export interface OAuthTransportOptions {
63
70
  resolveHost?: ResolveHost;
64
71
  fetchFn?: typeof fetch;
65
72
  }
73
+ /** The endpoints of an OAuth authorization server. */
66
74
  export interface OAuthEndpoints {
67
75
  issuer: string;
68
76
  authorizationEndpoint: string;
@@ -70,6 +78,7 @@ export interface OAuthEndpoints {
70
78
  /** RFC 9207: authorization responses without `iss` are then refused. */
71
79
  issParameterSupported?: boolean;
72
80
  }
81
+ /** Options for starting a PKCE authorization. */
73
82
  export interface CreatePkceFlowOptions extends OAuthTransportOptions {
74
83
  /**
75
84
  * An https URL (e.g. the MCP server) and the token's audience (RFC 8707). Without
@@ -103,6 +112,7 @@ export interface CreatePkceFlowOptions extends OAuthTransportOptions {
103
112
  */
104
113
  authorizationParams?: Readonly<Record<string, string>>;
105
114
  }
115
+ /** A started PKCE authorization: the URL to send the user to and the values to keep. */
106
116
  export interface PkceFlowResult {
107
117
  authorizationUrl: string;
108
118
  state: string;
@@ -110,6 +120,7 @@ export interface PkceFlowResult {
110
120
  issuer: string;
111
121
  resource: string;
112
122
  }
123
+ /** Options for trading an authorization code for tokens. */
113
124
  export interface ExchangePkceCodeOptions extends OAuthTransportOptions {
114
125
  code: string;
115
126
  state: string;
@@ -123,10 +134,12 @@ export interface ExchangePkceCodeOptions extends OAuthTransportOptions {
123
134
  /** A confidential client's secret, sent in the token request body (RFC 6749 §2.3.1); never stored. */
124
135
  clientSecret?: string;
125
136
  }
137
+ /** The tokens and credential a PKCE exchange yields. */
126
138
  export interface ExchangePkceCodeResult {
127
139
  tokens: OAuthTokens;
128
140
  credential: OAuth2Credential;
129
141
  }
142
+ /** Options for refreshing an OAuth access token. */
130
143
  export interface RefreshOAuthTokenOptions extends OAuthTransportOptions {
131
144
  refreshToken: string;
132
145
  tokenEndpoint: string;
@@ -0,0 +1,43 @@
1
+ import { z } from 'zod';
2
+ import { type JsonValue } from './json.js';
3
+ import type { TurnHistoryMessage } from './turn-events.js';
4
+ /**
5
+ * A protocol's saved continuation, and what it was saved for. It is used only when the next call
6
+ * goes to the same protocol, provider registration, connection, model, key slot, and keyed options.
7
+ */
8
+ export interface ProviderCheckpoint {
9
+ protocol: string;
10
+ provider: string;
11
+ /** The protocol's `continuation.version` the data was written under. */
12
+ version: number;
13
+ apiId: string;
14
+ /** The slot whose key the saved state belongs to. */
15
+ keySlot?: string;
16
+ /** Hash of the provider's connection and the options the protocol keys its state on. */
17
+ compatibilityKey: string;
18
+ coveredHistoryLength: number;
19
+ coveredHistoryHash: string;
20
+ data: JsonValue;
21
+ /** The wire's own id for each Theorem call id the saved state holds, sent back in its place. */
22
+ wireCallIds?: Record<string, string>;
23
+ }
24
+ export declare const providerCheckpointSchema: z.ZodType<ProviderCheckpoint>;
25
+ /** Why a saved continuation was dropped and the conversation sent from the transcript. */
26
+ export type ProviderStateRebuilt = 'provider_changed' | 'model_changed' | 'connection_changed' | 'key_changed' | 'history_changed' | 'version_changed';
27
+ export interface ProviderWarning {
28
+ code: 'provider_state_rebuilt';
29
+ reason: ProviderStateRebuilt;
30
+ }
31
+ export declare const providerWarningSchema: z.ZodType<ProviderWarning>;
32
+ export interface ProviderContinuationPolicy {
33
+ /**
34
+ * Who holds the conversation a checkpoint continues. `'host'` (unset) passes the covered
35
+ * history back with the checkpoint. `'provider'` passes the checkpoint alone: the provider's
36
+ * stored conversation is the history, and a turn that goes elsewhere needs the host's history.
37
+ * `'stateless'` keeps no conversation: a request that carries history or a checkpoint is refused,
38
+ * and completion carries no checkpoint.
39
+ */
40
+ history?: 'host' | 'stateless' | 'provider';
41
+ }
42
+ export declare const providerContinuationSchema: z.ZodType<ProviderContinuationPolicy>;
43
+ export declare function historyHash(history: readonly TurnHistoryMessage[]): Promise<string>;
@@ -0,0 +1,58 @@
1
+ import { z } from 'zod';
2
+ import { jsonValueSchema } from './json.js';
3
+ export const providerCheckpointSchema = z.strictObject({
4
+ protocol: z.string().min(1),
5
+ provider: z.string().min(1),
6
+ version: z.number().int().positive(),
7
+ apiId: z.string().min(1),
8
+ keySlot: z.string().min(1).optional(),
9
+ compatibilityKey: z.string(),
10
+ coveredHistoryLength: z.number().int().nonnegative(),
11
+ coveredHistoryHash: z.string(),
12
+ data: jsonValueSchema,
13
+ wireCallIds: z.record(z.string().min(1), z.string().min(1)).optional(),
14
+ });
15
+ export const providerWarningSchema = z.strictObject({
16
+ code: z.literal('provider_state_rebuilt'),
17
+ reason: z.enum([
18
+ 'provider_changed',
19
+ 'model_changed',
20
+ 'connection_changed',
21
+ 'key_changed',
22
+ 'history_changed',
23
+ 'version_changed',
24
+ ]),
25
+ });
26
+ export const providerContinuationSchema = z.strictObject({
27
+ history: z.enum(['host', 'stateless', 'provider']).optional(),
28
+ });
29
+ export async function historyHash(history) {
30
+ const stable = (value) => {
31
+ if (Array.isArray(value))
32
+ return value.map(stable);
33
+ if (value && typeof value === 'object') {
34
+ const ordered = {};
35
+ for (const key of Object.keys(value).sort())
36
+ ordered[key] = stable(value[key]);
37
+ return ordered;
38
+ }
39
+ return value;
40
+ };
41
+ const hash = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(JSON.stringify(stable(history.map((message) => {
42
+ const canonicalText = (text) => message.role === 'user'
43
+ ? (text.match(/^<user_data>\n([\s\S]*)\n<\/user_data>$/)?.[1] ?? text)
44
+ : text;
45
+ const parts = [
46
+ ...(message.content === undefined
47
+ ? []
48
+ : [{ type: 'text', text: canonicalText(message.content) }]),
49
+ ...(message.parts ?? []).map((part) => part.type === 'text' ? { ...part, text: canonicalText(part.text) } : part),
50
+ ];
51
+ const { content: _content, parts: _parts, ...rest } = message;
52
+ return { ...rest, ...(parts.length ? { parts } : {}) };
53
+ })))));
54
+ let hex = '';
55
+ for (const byte of new Uint8Array(hash))
56
+ hex += byte.toString(16).padStart(2, '0');
57
+ return hex;
58
+ }
@@ -1,34 +1,72 @@
1
1
  import type { TraceSink } from '../observability/trace-sink.js';
2
2
  import type { RunDecisionOptions } from './engine/decision.js';
3
+ import type { RunEmbeddingOptions } from './engine/embedding.js';
3
4
  import type { RunSessionOptions } from './engine/session/mod.js';
5
+ import type { Protocol } from './protocols/protocol.js';
6
+ import type { Provider, RegisteredProvider, Registration } from './protocols/provider.js';
7
+ import type { ProviderHostOptions } from './protocols/runtime.js';
4
8
  import type { ProfileDefinition } from './registry/profiles.js';
5
9
  import { defaultKernelScope as scope } from './scope.js';
6
- import type { InvokeToolRequest, RegisteredTool, ToolDefinitionInput } from './tools/types.js';
7
- import type { CompactHistoryRequest, CompactionResult, DecisionRequest, DecisionResult, LiveSession, ModelProvider, Profile, ProjectedProfile, SessionRequest, StructuredSpec, TurnEvent, TurnRequest } from './types.js';
10
+ import type { ToolCallResult, ToolStepCallResult } from './tools/run.js';
11
+ import type { InvokeToolRequest, InvokeToolStepRequest, RegisteredTool, ToolDefinitionInput } from './tools/types.js';
12
+ import type { CompactHistoryRequest, CompactionResult, DecisionRequest, DecisionResult, EmbeddingRequest, EmbeddingResult, LiveSession, Profile, ProjectedProfile, SessionRequest, StructuredSpec, TurnEvent, TurnRequest } from './types.js';
8
13
  /** Register or replace a tool in the default scope. */
9
14
  declare function registerTool<TIn, TOut>(def: ToolDefinitionInput<TIn, TOut>): RegisteredTool<TIn, TOut>;
15
+ /** Register or replace several tools in the default scope. */
10
16
  declare function registerTools(defs: ToolDefinitionInput[]): RegisteredTool[];
17
+ /** The default scope's tool `name`, or `undefined`. */
11
18
  declare function getTool(name: string): RegisteredTool | undefined;
19
+ /** The default scope's tool `name`; throws when there is none. */
12
20
  declare function requireTool(name: string): RegisteredTool;
21
+ /** True when the default scope has a tool `name`. */
13
22
  declare function hasTool(name: string): boolean;
23
+ /** Every tool in the default scope. */
14
24
  declare function listTools(): RegisteredTool[];
25
+ /** Remove every tool from the default scope. */
15
26
  declare function resetTools(): void;
16
27
  /** Define, validate, and register a profile in the default scope. */
17
28
  declare function registerProfile(profile: Profile | ProfileDefinition): void;
29
+ /** Define, validate, and register several profiles in the default scope. */
18
30
  declare function registerProfiles(profiles: Array<Profile | ProfileDefinition>): void;
19
31
  /** The default scope's profile `id`; throws when there is none. */
20
32
  declare function getProfile(id: string): Profile;
33
+ /** True when the default scope has a profile `id`. */
21
34
  declare function hasProfile(id: string): boolean;
35
+ /** Every profile in the default scope. */
22
36
  declare function listProfiles(): Profile[];
37
+ /** Remove every profile from the default scope. */
23
38
  declare function clearProfiles(): void;
39
+ /** Register a structured-output schema in the default scope under `id`. */
24
40
  declare function registerStructured(id: string, spec: StructuredSpec): void;
25
41
  /** The default scope's schema `id`; throws when there is none. */
26
42
  declare function getStructured(id: string): StructuredSpec;
27
- declare function runTurn(req: TurnRequest, provider: ModelProvider, sinkOverride?: TraceSink): AsyncGenerator<TurnEvent>;
43
+ /** Run one turn of a profile in the default scope, streaming its events. */
44
+ declare function runTurn(req: TurnRequest, options?: ProviderHostOptions, sinkOverride?: TraceSink): AsyncGenerator<TurnEvent>;
45
+ /** Open a live session for a live profile in the default scope. */
28
46
  declare function runSession(req: SessionRequest, options: RunSessionOptions, sinkOverride?: TraceSink): Promise<LiveSession>;
29
- declare function compactHistory(req: CompactHistoryRequest, provider: ModelProvider, sinkOverride?: TraceSink): Promise<CompactionResult | undefined>;
47
+ /** Compact a conversation history with the model, or `undefined` when there is nothing to compact. */
48
+ declare function compactHistory(req: CompactHistoryRequest, options?: ProviderHostOptions, sinkOverride?: TraceSink): Promise<CompactionResult | undefined>;
49
+ /** Run a held tool call in the default scope, streaming the events of the turn it resumes. */
30
50
  declare function invokeTool(request: InvokeToolRequest, sinkOverride?: TraceSink): AsyncGenerator<TurnEvent>;
51
+ /** Run the host's calls as one step in the default scope, streaming each call's events as they come. */
52
+ declare function invokeToolStep(request: InvokeToolStepRequest, sinkOverride?: TraceSink): AsyncGenerator<TurnEvent>;
53
+ /** Run one tool call in the default scope to its end: how it settled, with every event it emitted. */
54
+ declare function runTool(request: InvokeToolRequest, sinkOverride?: TraceSink): Promise<ToolCallResult>;
55
+ /** Run the host's calls as one step in the default scope, giving each call's end as it settles. */
56
+ declare function runToolStep(request: InvokeToolStepRequest, sinkOverride?: TraceSink): AsyncGenerator<ToolStepCallResult>;
57
+ /** Resolve a turn request in the default scope: its profile, model, and generation settings. */
31
58
  declare function resolveTurn(req: TurnRequest): ReturnType<typeof scope.resolveTurn>;
59
+ /** Each model of profile `id` in the default scope that cannot run a plain turn on its provider, and why. */
60
+ /** The profile `id` projected for a client, with server-only fields removed. */
32
61
  declare function projectProfile(id: string): ProjectedProfile;
62
+ /** Answer a decision request with the profile's model in the default scope. */
33
63
  declare function runDecision(request: DecisionRequest, options: RunDecisionOptions): Promise<DecisionResult>;
34
- export { clearProfiles, compactHistory, getProfile, getStructured, getTool, hasProfile, hasTool, invokeTool, listProfiles, listTools, projectProfile, registerProfile, registerProfiles, registerStructured, registerTool, registerTools, requireTool, resetTools, resolveTurn, runDecision, runSession, runTurn, };
64
+ /** Create vectors for one or more inputs in the default scope. */
65
+ declare function runEmbedding(request: EmbeddingRequest, options?: RunEmbeddingOptions): Promise<EmbeddingResult>;
66
+ export { clearProfiles, compactHistory, getProfile, getStructured, getTool, hasProfile, hasTool, invokeTool, invokeToolStep, listProfiles, listTools, projectProfile, registerProfile, registerProfiles, registerStructured, registerTool, registerTools, requireTool, resetTools, resolveTurn, runDecision, runEmbedding, runSession, runTool, runToolStep, runTurn, };
67
+ /** Registers a provider in the default scope, with this project's connection and key slots. */
68
+ export declare function registerProvider<C, K>(provider: Provider<C, K>, registration?: Registration<C>): RegisteredProvider;
69
+ export declare function getProvider(id: string): RegisteredProvider | undefined;
70
+ export declare function listProviders(): RegisteredProvider[];
71
+ /** Every protocol the default scope's providers serve. */
72
+ export declare function listProtocols(): Protocol[];