@theoremjs/agents 0.0.0-stage → 0.3.0

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 (514) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1264 -2
  3. package/esm/_dnt.polyfills.d.ts +66 -0
  4. package/esm/_dnt.polyfills.js +51 -0
  5. package/esm/mod.d.ts +65 -0
  6. package/esm/mod.js +42 -0
  7. package/esm/package.json +3 -0
  8. package/esm/src/cli/bin.d.ts +7 -0
  9. package/esm/src/cli/bin.js +9 -0
  10. package/esm/src/cli/commands/bench.d.ts +6 -0
  11. package/esm/src/cli/commands/bench.js +458 -0
  12. package/esm/src/cli/commands/egress-compile.d.ts +17 -0
  13. package/esm/src/cli/commands/egress-compile.js +25 -0
  14. package/esm/src/cli/commands/eval.d.ts +37 -0
  15. package/esm/src/cli/commands/eval.js +190 -0
  16. package/esm/src/cli/commands/fuzz-canary.d.ts +15 -0
  17. package/esm/src/cli/commands/fuzz-canary.js +202 -0
  18. package/esm/src/cli/commands/fuzz-guardrails.d.ts +2 -0
  19. package/esm/src/cli/commands/fuzz-guardrails.js +5 -0
  20. package/esm/src/cli/commands/profile.d.ts +2 -0
  21. package/esm/src/cli/commands/profile.js +80 -0
  22. package/esm/src/cli/commands/run.d.ts +13 -0
  23. package/esm/src/cli/commands/run.js +45 -0
  24. package/esm/src/cli/commands/test.d.ts +25 -0
  25. package/esm/src/cli/commands/test.js +143 -0
  26. package/esm/src/cli/event-log.d.ts +15 -0
  27. package/esm/src/cli/event-log.js +136 -0
  28. package/esm/src/cli/index.d.ts +10 -0
  29. package/esm/src/cli/index.js +267 -0
  30. package/esm/src/cli/matrix/fixtures.d.ts +10 -0
  31. package/esm/src/cli/matrix/fixtures.js +72 -0
  32. package/esm/src/cli/matrix/synthesizer.d.ts +18 -0
  33. package/esm/src/cli/matrix/synthesizer.js +103 -0
  34. package/esm/src/evals/attachments.d.ts +4 -0
  35. package/esm/src/evals/attachments.js +53 -0
  36. package/esm/src/evals/breakdown.d.ts +28 -0
  37. package/esm/src/evals/breakdown.js +68 -0
  38. package/esm/src/evals/graders/answer.d.ts +13 -0
  39. package/esm/src/evals/graders/answer.js +133 -0
  40. package/esm/src/evals/graders/code.d.ts +64 -0
  41. package/esm/src/evals/graders/code.js +205 -0
  42. package/esm/src/evals/graders/judge.d.ts +20 -0
  43. package/esm/src/evals/graders/judge.js +365 -0
  44. package/esm/src/evals/graders/latency.d.ts +5 -0
  45. package/esm/src/evals/graders/latency.js +81 -0
  46. package/esm/src/evals/graders/live.d.ts +11 -0
  47. package/esm/src/evals/graders/live.js +40 -0
  48. package/esm/src/evals/graders/media.d.ts +18 -0
  49. package/esm/src/evals/graders/media.js +92 -0
  50. package/esm/src/evals/graders/shared.d.ts +11 -0
  51. package/esm/src/evals/graders/shared.js +62 -0
  52. package/esm/src/evals/graders/transcript.d.ts +17 -0
  53. package/esm/src/evals/graders/transcript.js +200 -0
  54. package/esm/src/evals/mod.d.ts +42 -0
  55. package/esm/src/evals/mod.js +30 -0
  56. package/esm/src/evals/record.d.ts +35 -0
  57. package/esm/src/evals/record.js +105 -0
  58. package/esm/src/evals/rubrics/catalog.d.ts +148 -0
  59. package/esm/src/evals/rubrics/catalog.js +846 -0
  60. package/esm/src/evals/rubrics/mod.d.ts +24 -0
  61. package/esm/src/evals/rubrics/mod.js +55 -0
  62. package/esm/src/evals/rubrics/mustache.d.ts +23 -0
  63. package/esm/src/evals/rubrics/mustache.js +154 -0
  64. package/esm/src/evals/rubrics/types.d.ts +54 -0
  65. package/esm/src/evals/rubrics/types.js +74 -0
  66. package/esm/src/evals/run.d.ts +118 -0
  67. package/esm/src/evals/run.js +452 -0
  68. package/esm/src/evals/suite.d.ts +19 -0
  69. package/esm/src/evals/suite.js +92 -0
  70. package/esm/src/evals/summary.d.ts +32 -0
  71. package/esm/src/evals/summary.js +30 -0
  72. package/esm/src/evals/trial.d.ts +27 -0
  73. package/esm/src/evals/trial.js +158 -0
  74. package/esm/src/evals/types.d.ts +260 -0
  75. package/esm/src/evals/types.js +126 -0
  76. package/esm/src/evals/verdict.d.ts +18 -0
  77. package/esm/src/evals/verdict.js +45 -0
  78. package/esm/src/guardrails/canary-gate.d.ts +21 -0
  79. package/esm/src/guardrails/canary-gate.js +40 -0
  80. package/esm/src/guardrails/canary.d.ts +112 -0
  81. package/esm/src/guardrails/canary.js +901 -0
  82. package/esm/src/guardrails/compile-egress.d.ts +11 -0
  83. package/esm/src/guardrails/compile-egress.js +11 -0
  84. package/esm/src/guardrails/corpus/canary-egress-attacks.d.ts +22 -0
  85. package/esm/src/guardrails/corpus/canary-egress-attacks.js +303 -0
  86. package/esm/src/guardrails/corpus/fuzz-inbound.d.ts +5 -0
  87. package/esm/src/guardrails/corpus/fuzz-inbound.js +202 -0
  88. package/esm/src/guardrails/corpus/inbound-payloads.d.ts +3 -0
  89. package/esm/src/guardrails/corpus/inbound-payloads.js +118 -0
  90. package/esm/src/guardrails/corpus/live-attacks.d.ts +13 -0
  91. package/esm/src/guardrails/corpus/live-attacks.js +224 -0
  92. package/esm/src/guardrails/corpus/mod.d.ts +7 -0
  93. package/esm/src/guardrails/corpus/mod.js +4 -0
  94. package/esm/src/guardrails/corpus/secrets.d.ts +12 -0
  95. package/esm/src/guardrails/corpus/secrets.js +16 -0
  96. package/esm/src/guardrails/corpus/strings.d.ts +23 -0
  97. package/esm/src/guardrails/corpus/strings.js +29 -0
  98. package/esm/src/guardrails/corpus/types.d.ts +32 -0
  99. package/esm/src/guardrails/corpus/types.js +1 -0
  100. package/esm/src/guardrails/egress-automata.d.ts +14 -0
  101. package/esm/src/guardrails/egress-automata.js +6059 -0
  102. package/esm/src/guardrails/egress-compiler.d.ts +33 -0
  103. package/esm/src/guardrails/egress-compiler.js +237 -0
  104. package/esm/src/guardrails/egress-patterns.d.ts +24 -0
  105. package/esm/src/guardrails/egress-patterns.js +32 -0
  106. package/esm/src/guardrails/egress-policy.d.ts +27 -0
  107. package/esm/src/guardrails/egress-policy.js +76 -0
  108. package/esm/src/guardrails/egress-rules.d.ts +54 -0
  109. package/esm/src/guardrails/egress-rules.js +49 -0
  110. package/esm/src/guardrails/egress-stream.d.ts +105 -0
  111. package/esm/src/guardrails/egress-stream.js +645 -0
  112. package/esm/src/guardrails/egress-urls.d.ts +83 -0
  113. package/esm/src/guardrails/egress-urls.js +917 -0
  114. package/esm/src/guardrails/egress.d.ts +106 -0
  115. package/esm/src/guardrails/egress.js +374 -0
  116. package/esm/src/guardrails/error.d.ts +26 -0
  117. package/esm/src/guardrails/error.js +91 -0
  118. package/esm/src/guardrails/event-schemas.d.ts +57 -0
  119. package/esm/src/guardrails/event-schemas.js +41 -0
  120. package/esm/src/guardrails/events.d.ts +9 -0
  121. package/esm/src/guardrails/events.js +42 -0
  122. package/esm/src/guardrails/hits.d.ts +8 -0
  123. package/esm/src/guardrails/hits.js +19 -0
  124. package/esm/src/guardrails/injection-patterns.d.ts +15 -0
  125. package/esm/src/guardrails/injection-patterns.js +94 -0
  126. package/esm/src/guardrails/injection.d.ts +14 -0
  127. package/esm/src/guardrails/injection.js +237 -0
  128. package/esm/src/guardrails/lexicon.d.ts +30 -0
  129. package/esm/src/guardrails/lexicon.js +478 -0
  130. package/esm/src/guardrails/live-outbound-gate.d.ts +54 -0
  131. package/esm/src/guardrails/live-outbound-gate.js +305 -0
  132. package/esm/src/guardrails/mod.d.ts +46 -0
  133. package/esm/src/guardrails/mod.js +29 -0
  134. package/esm/src/guardrails/network.d.ts +42 -0
  135. package/esm/src/guardrails/network.js +328 -0
  136. package/esm/src/guardrails/normalize.d.ts +6 -0
  137. package/esm/src/guardrails/normalize.js +132 -0
  138. package/esm/src/guardrails/policy.d.ts +19 -0
  139. package/esm/src/guardrails/policy.js +50 -0
  140. package/esm/src/guardrails/progressive-yield.d.ts +69 -0
  141. package/esm/src/guardrails/progressive-yield.js +237 -0
  142. package/esm/src/guardrails/prompt-echo.d.ts +38 -0
  143. package/esm/src/guardrails/prompt-echo.js +225 -0
  144. package/esm/src/guardrails/quota.d.ts +20 -0
  145. package/esm/src/guardrails/quota.js +80 -0
  146. package/esm/src/guardrails/rules.d.ts +56 -0
  147. package/esm/src/guardrails/rules.js +54 -0
  148. package/esm/src/guardrails/sanitize.d.ts +23 -0
  149. package/esm/src/guardrails/sanitize.js +184 -0
  150. package/esm/src/guardrails/sensitive.d.ts +29 -0
  151. package/esm/src/guardrails/sensitive.js +113 -0
  152. package/esm/src/guardrails/serialize.d.ts +14 -0
  153. package/esm/src/guardrails/serialize.js +37 -0
  154. package/esm/src/guardrails/testing.d.ts +9 -0
  155. package/esm/src/guardrails/testing.js +8 -0
  156. package/esm/src/guardrails/theorem-error.d.ts +18 -0
  157. package/esm/src/guardrails/theorem-error.js +53 -0
  158. package/esm/src/guardrails/thought-guard.d.ts +55 -0
  159. package/esm/src/guardrails/thought-guard.js +464 -0
  160. package/esm/src/guardrails/tool-directives.d.ts +19 -0
  161. package/esm/src/guardrails/tool-directives.js +109 -0
  162. package/esm/src/guardrails/tool-result.d.ts +61 -0
  163. package/esm/src/guardrails/tool-result.js +248 -0
  164. package/esm/src/guardrails/types.d.ts +242 -0
  165. package/esm/src/guardrails/types.js +54 -0
  166. package/esm/src/host/client-turn.d.ts +9 -0
  167. package/esm/src/host/client-turn.js +38 -0
  168. package/esm/src/host/mint-trace.d.ts +28 -0
  169. package/esm/src/host/mint-trace.js +59 -0
  170. package/esm/src/host/mod.d.ts +13 -0
  171. package/esm/src/host/mod.js +11 -0
  172. package/esm/src/host/readStreamingJsonStringField.d.ts +2 -0
  173. package/esm/src/host/readStreamingJsonStringField.js +68 -0
  174. package/esm/src/host/reply.d.ts +7 -0
  175. package/esm/src/host/reply.js +35 -0
  176. package/esm/src/interface/blocks.d.ts +8 -0
  177. package/esm/src/interface/blocks.js +213 -0
  178. package/esm/src/interface/composer-actions.d.ts +20 -0
  179. package/esm/src/interface/composer-actions.js +31 -0
  180. package/esm/src/interface/draft.d.ts +14 -0
  181. package/esm/src/interface/draft.js +28 -0
  182. package/esm/src/interface/from-profile.d.ts +12 -0
  183. package/esm/src/interface/from-profile.js +144 -0
  184. package/esm/src/interface/history.d.ts +40 -0
  185. package/esm/src/interface/history.js +269 -0
  186. package/esm/src/interface/inputs.d.ts +10 -0
  187. package/esm/src/interface/inputs.js +64 -0
  188. package/esm/src/interface/mod.d.ts +31 -0
  189. package/esm/src/interface/mod.js +21 -0
  190. package/esm/src/interface/models.d.ts +19 -0
  191. package/esm/src/interface/models.js +45 -0
  192. package/esm/src/interface/pending.d.ts +48 -0
  193. package/esm/src/interface/pending.js +146 -0
  194. package/esm/src/interface/profile-interface.d.ts +4 -0
  195. package/esm/src/interface/profile-interface.js +223 -0
  196. package/esm/src/interface/session.d.ts +64 -0
  197. package/esm/src/interface/session.js +121 -0
  198. package/esm/src/interface/tool-calls.d.ts +20 -0
  199. package/esm/src/interface/tool-calls.js +73 -0
  200. package/esm/src/interface/tool-invoke.d.ts +4 -0
  201. package/esm/src/interface/tool-invoke.js +20 -0
  202. package/esm/src/interface/tool-media.d.ts +9 -0
  203. package/esm/src/interface/tool-media.js +112 -0
  204. package/esm/src/interface/types.d.ts +213 -0
  205. package/esm/src/interface/types.js +4 -0
  206. package/esm/src/kernel/auth/credential-source.d.ts +23 -0
  207. package/esm/src/kernel/auth/credential-source.js +11 -0
  208. package/esm/src/kernel/auth/crypto.d.ts +51 -0
  209. package/esm/src/kernel/auth/crypto.js +161 -0
  210. package/esm/src/kernel/auth/mod.d.ts +5 -0
  211. package/esm/src/kernel/auth/mod.js +5 -0
  212. package/esm/src/kernel/auth/oauth.d.ts +17 -0
  213. package/esm/src/kernel/auth/oauth.js +438 -0
  214. package/esm/src/kernel/auth/scope-refusal.d.ts +9 -0
  215. package/esm/src/kernel/auth/scope-refusal.js +8 -0
  216. package/esm/src/kernel/auth/typed-secret.d.ts +13 -0
  217. package/esm/src/kernel/auth/typed-secret.js +23 -0
  218. package/esm/src/kernel/auth/types.d.ts +139 -0
  219. package/esm/src/kernel/auth/types.js +1 -0
  220. package/esm/src/kernel/default-scope.d.ts +34 -0
  221. package/esm/src/kernel/default-scope.js +72 -0
  222. package/esm/src/kernel/engine/compaction.d.ts +70 -0
  223. package/esm/src/kernel/engine/compaction.js +202 -0
  224. package/esm/src/kernel/engine/decision.d.ts +41 -0
  225. package/esm/src/kernel/engine/decision.js +412 -0
  226. package/esm/src/kernel/engine/hash.d.ts +6 -0
  227. package/esm/src/kernel/engine/hash.js +22 -0
  228. package/esm/src/kernel/engine/live-inbound.d.ts +9 -0
  229. package/esm/src/kernel/engine/live-inbound.js +19 -0
  230. package/esm/src/kernel/engine/live-ingress.d.ts +9 -0
  231. package/esm/src/kernel/engine/live-ingress.js +37 -0
  232. package/esm/src/kernel/engine/media-probe/audio.d.ts +7 -0
  233. package/esm/src/kernel/engine/media-probe/audio.js +342 -0
  234. package/esm/src/kernel/engine/media-probe/bytes.d.ts +6 -0
  235. package/esm/src/kernel/engine/media-probe/bytes.js +26 -0
  236. package/esm/src/kernel/engine/media-probe/image.d.ts +5 -0
  237. package/esm/src/kernel/engine/media-probe/image.js +171 -0
  238. package/esm/src/kernel/engine/media-probe/iso-bmff.d.ts +19 -0
  239. package/esm/src/kernel/engine/media-probe/iso-bmff.js +48 -0
  240. package/esm/src/kernel/engine/media-probe/matroska.d.ts +35 -0
  241. package/esm/src/kernel/engine/media-probe/matroska.js +226 -0
  242. package/esm/src/kernel/engine/media-probe/mp4.d.ts +22 -0
  243. package/esm/src/kernel/engine/media-probe/mp4.js +279 -0
  244. package/esm/src/kernel/engine/media-probe/opus.d.ts +4 -0
  245. package/esm/src/kernel/engine/media-probe/opus.js +23 -0
  246. package/esm/src/kernel/engine/media-probe/pdf.d.ts +5 -0
  247. package/esm/src/kernel/engine/media-probe/pdf.js +117 -0
  248. package/esm/src/kernel/engine/media-probe/video.d.ts +15 -0
  249. package/esm/src/kernel/engine/media-probe/video.js +49 -0
  250. package/esm/src/kernel/engine/record.d.ts +3 -0
  251. package/esm/src/kernel/engine/record.js +11 -0
  252. package/esm/src/kernel/engine/repair.d.ts +7 -0
  253. package/esm/src/kernel/engine/repair.js +36 -0
  254. package/esm/src/kernel/engine/runner/gates.d.ts +5 -0
  255. package/esm/src/kernel/engine/runner/gates.js +322 -0
  256. package/esm/src/kernel/engine/runner/mod.d.ts +15 -0
  257. package/esm/src/kernel/engine/runner/mod.js +574 -0
  258. package/esm/src/kernel/engine/runner/schema-validation.d.ts +14 -0
  259. package/esm/src/kernel/engine/runner/schema-validation.js +105 -0
  260. package/esm/src/kernel/engine/runner/stages.d.ts +28 -0
  261. package/esm/src/kernel/engine/runner/stages.js +48 -0
  262. package/esm/src/kernel/engine/runner/state.d.ts +76 -0
  263. package/esm/src/kernel/engine/runner/state.js +40 -0
  264. package/esm/src/kernel/engine/runner/steps.d.ts +14 -0
  265. package/esm/src/kernel/engine/runner/steps.js +360 -0
  266. package/esm/src/kernel/engine/runner/stream.d.ts +40 -0
  267. package/esm/src/kernel/engine/runner/stream.js +225 -0
  268. package/esm/src/kernel/engine/runner/usage.d.ts +45 -0
  269. package/esm/src/kernel/engine/runner/usage.js +150 -0
  270. package/esm/src/kernel/engine/session/mod.d.ts +31 -0
  271. package/esm/src/kernel/engine/session/mod.js +951 -0
  272. package/esm/src/kernel/engine/session/session-trace.d.ts +115 -0
  273. package/esm/src/kernel/engine/session/session-trace.js +489 -0
  274. package/esm/src/kernel/engine/token-estimate.d.ts +77 -0
  275. package/esm/src/kernel/engine/token-estimate.js +218 -0
  276. package/esm/src/kernel/engine/tool-trace.d.ts +58 -0
  277. package/esm/src/kernel/engine/tool-trace.js +131 -0
  278. package/esm/src/kernel/engine/tree.d.ts +2 -0
  279. package/esm/src/kernel/engine/tree.js +17 -0
  280. package/esm/src/kernel/engine/turn-trace.d.ts +118 -0
  281. package/esm/src/kernel/engine/turn-trace.js +863 -0
  282. package/esm/src/kernel/engine/usage.d.ts +30 -0
  283. package/esm/src/kernel/engine/usage.js +134 -0
  284. package/esm/src/kernel/interaction-parts.d.ts +10 -0
  285. package/esm/src/kernel/interaction-parts.js +22 -0
  286. package/esm/src/kernel/mod.d.ts +47 -0
  287. package/esm/src/kernel/mod.js +30 -0
  288. package/esm/src/kernel/profile-graph.d.ts +140 -0
  289. package/esm/src/kernel/profile-graph.js +151 -0
  290. package/esm/src/kernel/profile-presence.d.ts +9 -0
  291. package/esm/src/kernel/profile-presence.js +143 -0
  292. package/esm/src/kernel/profile-scope.d.ts +36 -0
  293. package/esm/src/kernel/profile-scope.js +262 -0
  294. package/esm/src/kernel/registry/attachments.d.ts +35 -0
  295. package/esm/src/kernel/registry/attachments.js +211 -0
  296. package/esm/src/kernel/registry/catalog.d.ts +19 -0
  297. package/esm/src/kernel/registry/catalog.js +78 -0
  298. package/esm/src/kernel/registry/ingress.d.ts +8 -0
  299. package/esm/src/kernel/registry/ingress.js +134 -0
  300. package/esm/src/kernel/registry/kernel-registry.d.ts +12 -0
  301. package/esm/src/kernel/registry/kernel-registry.js +8 -0
  302. package/esm/src/kernel/registry/profile-outputs.d.ts +3 -0
  303. package/esm/src/kernel/registry/profile-outputs.js +7 -0
  304. package/esm/src/kernel/registry/profiles.d.ts +92 -0
  305. package/esm/src/kernel/registry/profiles.js +698 -0
  306. package/esm/src/kernel/registry/provider-request.d.ts +6 -0
  307. package/esm/src/kernel/registry/provider-request.js +42 -0
  308. package/esm/src/kernel/registry/resolve.d.ts +14 -0
  309. package/esm/src/kernel/registry/resolve.js +237 -0
  310. package/esm/src/kernel/registry/schemas.d.ts +9 -0
  311. package/esm/src/kernel/registry/schemas.js +25 -0
  312. package/esm/src/kernel/registry/sole-model.d.ts +2 -0
  313. package/esm/src/kernel/registry/sole-model.js +4 -0
  314. package/esm/src/kernel/registry/system-prompt.d.ts +8 -0
  315. package/esm/src/kernel/registry/system-prompt.js +33 -0
  316. package/esm/src/kernel/registry/system-role.d.ts +3 -0
  317. package/esm/src/kernel/registry/system-role.js +9 -0
  318. package/esm/src/kernel/registry/vault.d.ts +13 -0
  319. package/esm/src/kernel/registry/vault.js +14 -0
  320. package/esm/src/kernel/schema.d.ts +172 -0
  321. package/esm/src/kernel/schema.js +653 -0
  322. package/esm/src/kernel/scope.d.ts +22 -0
  323. package/esm/src/kernel/scope.js +25 -0
  324. package/esm/src/kernel/stages.d.ts +141 -0
  325. package/esm/src/kernel/stages.js +388 -0
  326. package/esm/src/kernel/stop.d.ts +93 -0
  327. package/esm/src/kernel/stop.js +125 -0
  328. package/esm/src/kernel/system-parts.d.ts +26 -0
  329. package/esm/src/kernel/system-parts.js +98 -0
  330. package/esm/src/kernel/tools/activity-label.d.ts +16 -0
  331. package/esm/src/kernel/tools/activity-label.js +209 -0
  332. package/esm/src/kernel/tools/events.d.ts +51 -0
  333. package/esm/src/kernel/tools/events.js +149 -0
  334. package/esm/src/kernel/tools/execute.d.ts +64 -0
  335. package/esm/src/kernel/tools/execute.js +801 -0
  336. package/esm/src/kernel/tools/gate-answer.d.ts +50 -0
  337. package/esm/src/kernel/tools/gate-answer.js +54 -0
  338. package/esm/src/kernel/tools/harness.d.ts +16 -0
  339. package/esm/src/kernel/tools/harness.js +42 -0
  340. package/esm/src/kernel/tools/invoke.d.ts +10 -0
  341. package/esm/src/kernel/tools/invoke.js +129 -0
  342. package/esm/src/kernel/tools/mcp-sessions.d.ts +20 -0
  343. package/esm/src/kernel/tools/mcp-sessions.js +64 -0
  344. package/esm/src/kernel/tools/mod.d.ts +9 -0
  345. package/esm/src/kernel/tools/mod.js +6 -0
  346. package/esm/src/kernel/tools/model-text.d.ts +11 -0
  347. package/esm/src/kernel/tools/model-text.js +25 -0
  348. package/esm/src/kernel/tools/permission.d.ts +6 -0
  349. package/esm/src/kernel/tools/permission.js +38 -0
  350. package/esm/src/kernel/tools/project.d.ts +8 -0
  351. package/esm/src/kernel/tools/project.js +25 -0
  352. package/esm/src/kernel/tools/registry.d.ts +20 -0
  353. package/esm/src/kernel/tools/registry.js +84 -0
  354. package/esm/src/kernel/tools/remote.d.ts +110 -0
  355. package/esm/src/kernel/tools/remote.js +998 -0
  356. package/esm/src/kernel/tools/resolve.d.ts +28 -0
  357. package/esm/src/kernel/tools/resolve.js +259 -0
  358. package/esm/src/kernel/tools/schema.d.ts +10 -0
  359. package/esm/src/kernel/tools/schema.js +174 -0
  360. package/esm/src/kernel/tools/signed-in-fetch.d.ts +18 -0
  361. package/esm/src/kernel/tools/signed-in-fetch.js +45 -0
  362. package/esm/src/kernel/tools/stage-run.d.ts +93 -0
  363. package/esm/src/kernel/tools/stage-run.js +140 -0
  364. package/esm/src/kernel/tools/types.d.ts +287 -0
  365. package/esm/src/kernel/tools/types.js +1 -0
  366. package/esm/src/kernel/turn-events.d.ts +599 -0
  367. package/esm/src/kernel/turn-events.js +425 -0
  368. package/esm/src/kernel/types.d.ts +884 -0
  369. package/esm/src/kernel/types.js +1 -0
  370. package/esm/src/kernel/util/base64.d.ts +2 -0
  371. package/esm/src/kernel/util/base64.js +13 -0
  372. package/esm/src/kernel/util/exact-type.d.ts +31 -0
  373. package/esm/src/kernel/util/exact-type.js +1 -0
  374. package/esm/src/kernel/util/find-last.d.ts +3 -0
  375. package/esm/src/kernel/util/find-last.js +9 -0
  376. package/esm/src/kernel/util/mime.d.ts +2 -0
  377. package/esm/src/kernel/util/mime.js +4 -0
  378. package/esm/src/kernel/util/record.d.ts +1 -0
  379. package/esm/src/kernel/util/record.js +3 -0
  380. package/esm/src/observability/destinations.d.ts +9 -0
  381. package/esm/src/observability/destinations.js +38 -0
  382. package/esm/src/observability/jsonl.d.ts +18 -0
  383. package/esm/src/observability/jsonl.js +117 -0
  384. package/esm/src/observability/mod.d.ts +22 -0
  385. package/esm/src/observability/mod.js +16 -0
  386. package/esm/src/observability/openinference.d.ts +11 -0
  387. package/esm/src/observability/openinference.js +205 -0
  388. package/esm/src/observability/otlp.d.ts +68 -0
  389. package/esm/src/observability/otlp.js +98 -0
  390. package/esm/src/observability/phoenix.d.ts +29 -0
  391. package/esm/src/observability/phoenix.js +71 -0
  392. package/esm/src/observability/policy.d.ts +14 -0
  393. package/esm/src/observability/policy.js +69 -0
  394. package/esm/src/observability/resolve-policy.d.ts +8 -0
  395. package/esm/src/observability/resolve-policy.js +58 -0
  396. package/esm/src/observability/spans.d.ts +16 -0
  397. package/esm/src/observability/spans.js +56 -0
  398. package/esm/src/observability/trace-catalog.d.ts +111 -0
  399. package/esm/src/observability/trace-catalog.js +865 -0
  400. package/esm/src/observability/trace-record.d.ts +23 -0
  401. package/esm/src/observability/trace-record.js +223 -0
  402. package/esm/src/observability/trace-schema.d.ts +54 -0
  403. package/esm/src/observability/trace-schema.js +59 -0
  404. package/esm/src/observability/trace-sink.d.ts +13 -0
  405. package/esm/src/observability/trace-sink.js +3 -0
  406. package/esm/src/observability/trace-span.d.ts +92 -0
  407. package/esm/src/observability/trace-span.js +199 -0
  408. package/esm/src/observability/trace.d.ts +11 -0
  409. package/esm/src/observability/trace.js +35 -0
  410. package/esm/src/observability/types.d.ts +85 -0
  411. package/esm/src/observability/types.js +3 -0
  412. package/esm/src/presets/google/speech-voices.d.ts +8 -0
  413. package/esm/src/presets/google/speech-voices.js +38 -0
  414. package/esm/src/presets/google-limits.d.ts +12 -0
  415. package/esm/src/presets/google-limits.js +18 -0
  416. package/esm/src/presets/google.d.ts +104 -0
  417. package/esm/src/presets/google.js +188 -0
  418. package/esm/src/presets/mod.d.ts +10 -0
  419. package/esm/src/presets/mod.js +9 -0
  420. package/esm/src/presets/openrouter.d.ts +13 -0
  421. package/esm/src/presets/openrouter.js +13 -0
  422. package/esm/src/presets/typesafe.d.ts +2 -0
  423. package/esm/src/presets/typesafe.js +2 -0
  424. package/esm/src/providers/create-provider.d.ts +21 -0
  425. package/esm/src/providers/create-provider.js +90 -0
  426. package/esm/src/providers/decision/usage.d.ts +3 -0
  427. package/esm/src/providers/decision/usage.js +25 -0
  428. package/esm/src/providers/google/api-error.d.ts +8 -0
  429. package/esm/src/providers/google/api-error.js +123 -0
  430. package/esm/src/providers/google/grounding.d.ts +5 -0
  431. package/esm/src/providers/google/grounding.js +226 -0
  432. package/esm/src/providers/google/interactions/framing.d.ts +15 -0
  433. package/esm/src/providers/google/interactions/framing.js +263 -0
  434. package/esm/src/providers/google/interactions/mod.d.ts +2 -0
  435. package/esm/src/providers/google/interactions/mod.js +2 -0
  436. package/esm/src/providers/google/interactions/steps.d.ts +12 -0
  437. package/esm/src/providers/google/interactions/steps.js +200 -0
  438. package/esm/src/providers/google/interactions/stream.d.ts +24 -0
  439. package/esm/src/providers/google/interactions/stream.js +297 -0
  440. package/esm/src/providers/google/keys.d.ts +20 -0
  441. package/esm/src/providers/google/keys.js +87 -0
  442. package/esm/src/providers/google/live/framing.d.ts +51 -0
  443. package/esm/src/providers/google/live/framing.js +597 -0
  444. package/esm/src/providers/google/live/mod.d.ts +7 -0
  445. package/esm/src/providers/google/live/mod.js +7 -0
  446. package/esm/src/providers/google/live/openapi-schema.d.ts +1 -0
  447. package/esm/src/providers/google/live/openapi-schema.js +42 -0
  448. package/esm/src/providers/google/live/session.d.ts +14 -0
  449. package/esm/src/providers/google/live/session.js +150 -0
  450. package/esm/src/providers/google/live/stream.d.ts +51 -0
  451. package/esm/src/providers/google/live/stream.js +263 -0
  452. package/esm/src/providers/google/thinking.d.ts +3 -0
  453. package/esm/src/providers/google/thinking.js +8 -0
  454. package/esm/src/providers/google/urls.d.ts +6 -0
  455. package/esm/src/providers/google/urls.js +6 -0
  456. package/esm/src/providers/google/usage.d.ts +7 -0
  457. package/esm/src/providers/google/usage.js +49 -0
  458. package/esm/src/providers/local/local.d.ts +12 -0
  459. package/esm/src/providers/local/local.js +186 -0
  460. package/esm/src/providers/local/mod.d.ts +8 -0
  461. package/esm/src/providers/local/mod.js +8 -0
  462. package/esm/src/providers/mod.d.ts +11 -0
  463. package/esm/src/providers/mod.js +7 -0
  464. package/esm/src/providers/openrouter/cache-control.d.ts +5 -0
  465. package/esm/src/providers/openrouter/cache-control.js +4 -0
  466. package/esm/src/providers/openrouter/chat.d.ts +64 -0
  467. package/esm/src/providers/openrouter/chat.js +490 -0
  468. package/esm/src/providers/openrouter/image.d.ts +24 -0
  469. package/esm/src/providers/openrouter/image.js +187 -0
  470. package/esm/src/providers/openrouter/openai/compat.d.ts +19 -0
  471. package/esm/src/providers/openrouter/openai/compat.js +162 -0
  472. package/esm/src/providers/openrouter/openai/image-payload.d.ts +9 -0
  473. package/esm/src/providers/openrouter/openai/image-payload.js +115 -0
  474. package/esm/src/providers/openrouter/openai/sdk-messages.d.ts +10 -0
  475. package/esm/src/providers/openrouter/openai/sdk-messages.js +99 -0
  476. package/esm/src/providers/openrouter/openai/usage.d.ts +8 -0
  477. package/esm/src/providers/openrouter/openai/usage.js +56 -0
  478. package/esm/src/providers/openrouter/resolve-api-key.d.ts +3 -0
  479. package/esm/src/providers/openrouter/resolve-api-key.js +8 -0
  480. package/esm/src/providers/openrouter/speech.d.ts +18 -0
  481. package/esm/src/providers/openrouter/speech.js +109 -0
  482. package/esm/src/providers/probe.d.ts +5 -0
  483. package/esm/src/providers/probe.js +15 -0
  484. package/esm/src/providers/shared/builtin-wire.d.ts +4 -0
  485. package/esm/src/providers/shared/builtin-wire.js +9 -0
  486. package/esm/src/providers/shared/pcm.d.ts +14 -0
  487. package/esm/src/providers/shared/pcm.js +78 -0
  488. package/esm/src/providers/shared/response-identity.d.ts +11 -0
  489. package/esm/src/providers/shared/response-identity.js +12 -0
  490. package/esm/src/providers/shared/sse.d.ts +10 -0
  491. package/esm/src/providers/shared/sse.js +79 -0
  492. package/esm/src/providers/shared/structured-output.d.ts +4 -0
  493. package/esm/src/providers/shared/structured-output.js +11 -0
  494. package/esm/src/providers/shared/tool-args.d.ts +25 -0
  495. package/esm/src/providers/shared/tool-args.js +84 -0
  496. package/esm/src/providers/shared/upstream-tap.d.ts +8 -0
  497. package/esm/src/providers/shared/upstream-tap.js +85 -0
  498. package/esm/src/providers/shared/upstream-tape.d.ts +6 -0
  499. package/esm/src/providers/shared/upstream-tape.js +88 -0
  500. package/esm/src/providers/shared/vault.d.ts +13 -0
  501. package/esm/src/providers/shared/vault.js +41 -0
  502. package/esm/src/providers/types.d.ts +19 -0
  503. package/esm/src/providers/types.js +1 -0
  504. package/esm/src/surface/formats.d.ts +28 -0
  505. package/esm/src/surface/formats.js +139 -0
  506. package/esm/src/surface/mod.d.ts +14 -0
  507. package/esm/src/surface/mod.js +10 -0
  508. package/esm/src/surface/runtime.d.ts +40 -0
  509. package/esm/src/surface/runtime.js +439 -0
  510. package/esm/src/surface/tools.d.ts +15 -0
  511. package/esm/src/surface/tools.js +80 -0
  512. package/esm/src/surface/types.d.ts +104 -0
  513. package/esm/src/surface/types.js +4 -0
  514. package/package.json +108 -4
@@ -0,0 +1,6 @@
1
+ import type { ToolRegistry } from '../tools/registry.js';
2
+ import type { BuiltinToolId, ProviderBuiltin, ProviderCompleteRequest, ResolvedGeneration } from '../types.js';
3
+ declare function providerBuiltins(tools: ToolRegistry, ids: readonly BuiltinToolId[]): ProviderBuiltin[];
4
+ /** Shared by execution and tracing. */
5
+ declare function providerCompleteRequest(tools: ToolRegistry, generation: ResolvedGeneration, system: string): ProviderCompleteRequest;
6
+ export { providerBuiltins, providerCompleteRequest };
@@ -0,0 +1,42 @@
1
+ import { TheoremError } from '../../guardrails/error.js';
2
+ function providerBuiltins(tools, ids) {
3
+ return ids.map((id) => {
4
+ const tool = tools.get(id);
5
+ if (tool?.type !== 'builtin') {
6
+ throw new TheoremError('config', `Builtin '${id}' is not registered`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
7
+ }
8
+ return { id, wire: tool.wire };
9
+ });
10
+ }
11
+ /** Shared by execution and tracing. */
12
+ function providerCompleteRequest(tools, generation, system) {
13
+ const isInteractions = generation.transport === 'interactions';
14
+ return {
15
+ model: generation.model,
16
+ apiId: generation.apiId,
17
+ previousInteractionId: isInteractions ? generation.previousInteractionId : undefined,
18
+ store: isInteractions ? generation.store : undefined,
19
+ stream: generation.stream,
20
+ thinking: generation.thinking,
21
+ summaries: generation.summaries,
22
+ maxOutputTokens: generation.maxOutputTokens,
23
+ temperature: generation.temperature,
24
+ builtins: providerBuiltins(tools, generation.builtins),
25
+ googleMapsLocation: isInteractions ? generation.googleMapsLocation : undefined,
26
+ cache: generation.cache,
27
+ sessionId: generation.sessionId,
28
+ system,
29
+ input: generation.input,
30
+ history: generation.history,
31
+ continuation: isInteractions ? generation.continuation : undefined,
32
+ wireTools: generation.tools.wire,
33
+ structured: generation.structured,
34
+ image: generation.image,
35
+ speech: generation.speech,
36
+ live: generation.live,
37
+ sessionResumptionHandle: generation.sessionResumptionHandle,
38
+ keySlot: generation.keySlot,
39
+ fallbackKeySlot: generation.fallbackKeySlot,
40
+ };
41
+ }
42
+ export { providerBuiltins, providerCompleteRequest };
@@ -0,0 +1,14 @@
1
+ import type { ToolRegistry } from '../tools/registry.js';
2
+ import type { ModelId, ModelProfile, Profile, ProjectedProfile, ResolvedGeneration, TurnRequest } from '../types.js';
3
+ import type { KernelRegistry } from './kernel-registry.js';
4
+ declare function isModelProfile(profile: Profile): profile is ModelProfile;
5
+ declare function requireModelProfile(profile: Profile, door: string): ModelProfile;
6
+ /** A request is honored only when selection is allowed; registration guarantees the default. */
7
+ declare function pickModel(profile: ModelProfile, requested?: string): ModelId;
8
+ declare function resolveTurnInRegistry(registry: KernelRegistry, req: TurnRequest): {
9
+ profile: ModelProfile;
10
+ generation: ResolvedGeneration;
11
+ };
12
+ declare function projectProfileObject(tools: ToolRegistry, input: Profile): ProjectedProfile;
13
+ declare function projectProfileInRegistry(registry: KernelRegistry, id: Profile['id']): ProjectedProfile;
14
+ export { isModelProfile, pickModel, projectProfileInRegistry, projectProfileObject, requireModelProfile, resolveTurnInRegistry, };
@@ -0,0 +1,237 @@
1
+ import { mintCanary } from '../../guardrails/canary.js';
2
+ import { TheoremError } from '../../guardrails/error.js';
3
+ import { resolveGuardrailPolicy } from '../../guardrails/policy.js';
4
+ import { sanitizeTurnRequest } from '../../guardrails/sanitize.js';
5
+ import { profileTurnResumption } from '../stop.js';
6
+ import { projectTools } from '../tools/project.js';
7
+ import { resolveTurnTools } from '../tools/resolve.js';
8
+ import { profileInputs, requireModelBinding } from './catalog.js';
9
+ import { assertOutputMode, assertSpeechRole, assertTurnSlots, resolveImageFormat, resolveInputParts, } from './ingress.js';
10
+ import { resolveTurnSystemPrompt } from './system-prompt.js';
11
+ import { resolveKeySlot } from './vault.js';
12
+ function isModelProfile(profile) {
13
+ return profile.type !== 'host' && profile.type !== 'decision';
14
+ }
15
+ function requireModelProfile(profile, door) {
16
+ if (isModelProfile(profile))
17
+ return profile;
18
+ if (profile.type === 'host') {
19
+ throw new TheoremError('request', `Profile ${profile.id}: type 'host' never runs a model — ${door} is not supported; execute tools with invokeTool`);
20
+ }
21
+ throw new TheoremError('request', `Profile ${profile.id}: type 'decision' runs through runDecision — ${door} is not supported`);
22
+ }
23
+ /** A request is honored only when selection is allowed; registration guarantees the default. */
24
+ function pickModel(profile, requested) {
25
+ if (requested) {
26
+ if (!profile.allowModelSelect) {
27
+ throw new TheoremError('request', `Profile ${profile.id} does not allow model selection`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
28
+ }
29
+ if (!profile.models[requested]) {
30
+ throw new TheoremError('request', `Unknown model '${requested}' for ${profile.id}`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
31
+ }
32
+ return requested;
33
+ }
34
+ return profile.defaultModel;
35
+ }
36
+ function resolveEffort(profile, binding, modelId, requested) {
37
+ const efforts = binding.efforts;
38
+ if (!efforts || Object.keys(efforts).length === 0) {
39
+ if (requested) {
40
+ throw new TheoremError('request', `Profile ${profile.id} model '${modelId}' has no selectable efforts`);
41
+ }
42
+ return undefined;
43
+ }
44
+ const keys = Object.keys(efforts);
45
+ if (requested) {
46
+ if (!binding.allowEffortSelect) {
47
+ throw new TheoremError('request', `Profile ${profile.id} model '${modelId}' does not allow effort selection`);
48
+ }
49
+ const level = efforts[requested];
50
+ if (!level) {
51
+ throw new TheoremError('request', `Unknown effort '${requested}' for ${profile.id} model '${modelId}'`);
52
+ }
53
+ return level;
54
+ }
55
+ // Registration requires a default whenever more than one effort is declared.
56
+ return efforts[binding.defaultEffort ?? keys[0]];
57
+ }
58
+ function resolveSummaries(binding) {
59
+ if (binding.summaries === true) {
60
+ return 'auto';
61
+ }
62
+ if (binding.summaries === false) {
63
+ return 'none';
64
+ }
65
+ return undefined;
66
+ }
67
+ function resolveStructured(profile, slots) {
68
+ if (profile.type === 'live') {
69
+ return null;
70
+ }
71
+ const structured = profile.outputs?.structured;
72
+ if (!structured) {
73
+ return null;
74
+ }
75
+ if (typeof structured === 'string') {
76
+ return structured;
77
+ }
78
+ const value = slots?.[structured.by];
79
+ if (value) {
80
+ const mapped = structured.map[value];
81
+ if (mapped) {
82
+ return mapped;
83
+ }
84
+ }
85
+ return structured.fallback;
86
+ }
87
+ function resolveStreamFlag(profile) {
88
+ if (profile.type === 'live') {
89
+ return true;
90
+ }
91
+ return profile.outputs?.streaming?.mode !== 'buffered';
92
+ }
93
+ function resolveStore(binding, reqStore) {
94
+ if (reqStore !== undefined) {
95
+ return reqStore;
96
+ }
97
+ return binding.store;
98
+ }
99
+ /**
100
+ * A turn chains only on a binding that says so: an interaction id sent to one
101
+ * that does not, or a chaining turn that switches storage off, is a request error.
102
+ */
103
+ function assertTurnChaining(profile, model, chains, req, store) {
104
+ if (req.previousInteractionId && !chains) {
105
+ throw new TheoremError('request', `Profile ${profile.id} model '${model}': previousInteractionId needs a binding with persistViaInteractionId: true`);
106
+ }
107
+ if (chains && store === false) {
108
+ throw new TheoremError('request', `Profile ${profile.id} model '${model}': store: false cannot apply to a binding with persistViaInteractionId: true — Google chains only from a stored interaction`);
109
+ }
110
+ }
111
+ function resolveTransport(profile, binding) {
112
+ if (profile.type === 'live') {
113
+ return 'geminiLive';
114
+ }
115
+ if (binding.protocol === 'geminiInteractions' && binding.provider === 'google') {
116
+ return 'interactions';
117
+ }
118
+ return 'openAiCompat';
119
+ }
120
+ function assertTurnResumption(profile, req) {
121
+ if (!req.continueFrom) {
122
+ return;
123
+ }
124
+ if (profile.type === 'live') {
125
+ throw new TheoremError('request', `Profile ${profile.id}: type 'live' uses live.sessionResumption, not turnBehaviour.resumption/continueFrom`);
126
+ }
127
+ const policy = profileTurnResumption(profile);
128
+ const max = policy?.maxContinues;
129
+ if (max === undefined) {
130
+ return;
131
+ }
132
+ const attempt = req.continuation;
133
+ if (attempt === undefined) {
134
+ throw new TheoremError('request', `Profile ${profile.id}: continueFrom requires TurnRequest.continuation when turnBehaviour.resumption.maxContinues is set`);
135
+ }
136
+ if (attempt < 1) {
137
+ throw new TheoremError('request', `Profile ${profile.id}: continuation must be >= 1`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
138
+ }
139
+ if (attempt > max) {
140
+ throw new TheoremError('request', `Profile ${profile.id}: continuation ${attempt} exceeds turnBehaviour.resumption.maxContinues (${max})`);
141
+ }
142
+ }
143
+ /**
144
+ * A guarded Live profile (canary or `egress.enforce`) always transcribes its
145
+ * own speech: the outbound gate can only check audio through its transcript.
146
+ */
147
+ function resolveLiveSpec(live, guardrails) {
148
+ const policy = resolveGuardrailPolicy(guardrails);
149
+ if (!policy.canary && !policy.egress?.enforce) {
150
+ return live;
151
+ }
152
+ return { ...live, transcription: { ...live?.transcription, output: true } };
153
+ }
154
+ function resolveTurnInRegistry(registry, req) {
155
+ const profile = requireModelProfile(registry.profiles.get(req.profile), 'resolveTurn');
156
+ assertTurnSlots(profile, req);
157
+ const safe = sanitizeTurnRequest(req, profile);
158
+ const input = safe.input ?? {};
159
+ assertTurnResumption(profile, safe);
160
+ const model = pickModel(profile, safe.model);
161
+ const binding = requireModelBinding(profile, model);
162
+ const toolSnapshot = resolveTurnTools(registry.tools, profile, safe, model);
163
+ const builtins = toolSnapshot.builtins;
164
+ const structuredId = resolveStructured(profile, input.slots);
165
+ assertOutputMode(profile, structuredId);
166
+ assertSpeechRole(profile, safe);
167
+ const keys = resolveKeySlot(profile, binding);
168
+ const transport = resolveTransport(profile, binding);
169
+ const chains = binding.persistViaInteractionId === true;
170
+ const store = resolveStore(binding, safe.store);
171
+ assertTurnChaining(profile, model, chains, safe, store);
172
+ return {
173
+ profile,
174
+ generation: {
175
+ model,
176
+ apiId: binding.apiId,
177
+ transport,
178
+ chains,
179
+ previousInteractionId: safe.previousInteractionId,
180
+ store,
181
+ stream: resolveStreamFlag(profile),
182
+ thinking: resolveEffort(profile, binding, model, safe.effort),
183
+ summaries: resolveSummaries(binding),
184
+ maxOutputTokens: binding.maxOutputTokens,
185
+ temperature: binding.temperature,
186
+ builtins,
187
+ googleMapsLocation: safe.googleMapsLocation,
188
+ cache: binding.cache,
189
+ sessionId: safe.sessionId,
190
+ tools: toolSnapshot,
191
+ sessionPermissions: safe.sessionPermissions,
192
+ history: input.history,
193
+ maxSteps: profile.maxSteps,
194
+ structured: structuredId
195
+ ? { id: structuredId, jsonSchema: registry.schemas.get(structuredId).jsonSchema }
196
+ : null,
197
+ image: resolveImageFormat(profile),
198
+ speech: profile.type === 'speech' ? profile.speech : undefined,
199
+ live: profile.type === 'live' ? resolveLiveSpec(profile.live, profile.guardrails) : undefined,
200
+ input: resolveInputParts(profile, safe),
201
+ ...keys,
202
+ canary: resolveGuardrailPolicy(profile.guardrails).canary ? mintCanary() : '',
203
+ sessionResumptionHandle: safe.sessionResumptionHandle ?? input.sessionResumptionHandle,
204
+ resolvedSystem: resolveTurnSystemPrompt(profile, safe),
205
+ host: safe.host,
206
+ },
207
+ };
208
+ }
209
+ function primaryImageSpec(profile) {
210
+ return profile.type === 'image' ? profile.image : null;
211
+ }
212
+ function projectProfileObject(tools, input) {
213
+ const profile = requireModelProfile(input, 'projectProfile');
214
+ const { identity } = profile;
215
+ const inputs = profileInputs(profile) ?? null;
216
+ const outputs = profile.type === 'live' ? null : (profile.outputs ?? null);
217
+ return {
218
+ id: profile.id,
219
+ type: profile.type,
220
+ handle: identity.handle,
221
+ models: profile.models,
222
+ defaultModel: profile.defaultModel,
223
+ allowModelSelect: profile.allowModelSelect,
224
+ maxSteps: profile.maxSteps,
225
+ key: profile.key,
226
+ tools: projectTools(tools, profile),
227
+ inputs,
228
+ outputs,
229
+ image: primaryImageSpec(profile),
230
+ speech: profile.type === 'speech' ? profile.speech : null,
231
+ live: profile.type === 'live' ? profile.live : null,
232
+ };
233
+ }
234
+ function projectProfileInRegistry(registry, id) {
235
+ return projectProfileObject(registry.tools, registry.profiles.get(id));
236
+ }
237
+ export { isModelProfile, pickModel, projectProfileInRegistry, projectProfileObject, requireModelProfile, resolveTurnInRegistry, };
@@ -0,0 +1,9 @@
1
+ import type { StructuredSpec } from '../types.js';
2
+ interface SchemaRegistry {
3
+ register(id: string, spec: StructuredSpec): void;
4
+ /** Throws when there is none. */
5
+ get(id: string): StructuredSpec;
6
+ }
7
+ declare function createSchemaRegistry(): SchemaRegistry;
8
+ export type { SchemaRegistry };
9
+ export { createSchemaRegistry };
@@ -0,0 +1,25 @@
1
+ import { TheoremError } from '../../guardrails/error.js';
2
+ function createSchemaRegistry() {
3
+ const schemas = new Map();
4
+ return {
5
+ register(id, spec) {
6
+ if ('enforced' in spec) {
7
+ throw new TheoremError('config', `registerStructured '${id}': enforced was removed; every structured schema is sent to the model as its response format`);
8
+ }
9
+ if (!spec.jsonSchema ||
10
+ typeof spec.jsonSchema !== 'object' ||
11
+ Array.isArray(spec.jsonSchema)) {
12
+ throw new TheoremError('config', `registerStructured '${id}': jsonSchema must be a JSON Schema object`);
13
+ }
14
+ schemas.set(id, spec);
15
+ },
16
+ get(id) {
17
+ const spec = schemas.get(id);
18
+ if (!spec) {
19
+ throw new TheoremError('config', `Unknown structured schema '${id}'`); // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
20
+ }
21
+ return spec;
22
+ },
23
+ };
24
+ }
25
+ export { createSchemaRegistry };
@@ -0,0 +1,2 @@
1
+ import type { ModelId } from '../types.js';
2
+ export declare function soleModelId(models: Record<ModelId, unknown>): ModelId | undefined;
@@ -0,0 +1,4 @@
1
+ export function soleModelId(models) {
2
+ const ids = Object.keys(models);
3
+ return ids.length === 1 ? ids[0] : undefined;
4
+ }
@@ -0,0 +1,8 @@
1
+ import type { ModelProfile, SystemPiece, TurnRequest } from '../types.js';
2
+ /**
3
+ * Synchronous: snapshotted in `resolveTurn` before any async work. Each source
4
+ * keeps its own marks: a `{ private }` part in `req.system` leaves the
5
+ * profile's prompt as private as it was written.
6
+ */
7
+ declare function resolveTurnSystemPrompt(profile: ModelProfile, req: TurnRequest): SystemPiece[];
8
+ export { resolveTurnSystemPrompt };
@@ -0,0 +1,33 @@
1
+ import { detectionForTrust, resolveGuardrailPolicy } from '../../guardrails/policy.js';
2
+ import { sanitizeText } from '../../guardrails/sanitize.js';
3
+ import { joinSystemPieces, mapSystemPrompt, systemPieces } from '../system-parts.js';
4
+ import { pickSystemRole } from './system-role.js';
5
+ /**
6
+ * Routed through the policy at `trust: 'trusted'` so the exemption is declared where it applies,
7
+ * not implied by skipping the sanitizer. `req.system` is `assembled` per turn and not exempt.
8
+ */
9
+ function systemFromProfile(profile, role) {
10
+ if (profile.type === 'speech') {
11
+ return [];
12
+ }
13
+ const { systemByRole, system } = profile.identity;
14
+ const prompt = systemByRole?.[role] || system || '';
15
+ if (!prompt) {
16
+ return [];
17
+ }
18
+ const detection = detectionForTrust(resolveGuardrailPolicy(profile.guardrails), 'trusted');
19
+ return systemPieces(mapSystemPrompt(prompt, `Profile ${profile.id} identity.system`, (text) => sanitizeText(text, detection)));
20
+ }
21
+ /**
22
+ * Synchronous: snapshotted in `resolveTurn` before any async work. Each source
23
+ * keeps its own marks: a `{ private }` part in `req.system` leaves the
24
+ * profile's prompt as private as it was written.
25
+ */
26
+ function resolveTurnSystemPrompt(profile, req) {
27
+ const role = pickSystemRole(profile, req.input?.role);
28
+ return joinSystemPieces([
29
+ systemFromProfile(profile, role),
30
+ req.system === undefined ? [] : systemPieces(req.system),
31
+ ]);
32
+ }
33
+ export { resolveTurnSystemPrompt };
@@ -0,0 +1,3 @@
1
+ import type { ModelProfile } from '../types.js';
2
+ declare function pickSystemRole(profile: ModelProfile, requested?: string): string;
3
+ export { pickSystemRole };
@@ -0,0 +1,9 @@
1
+ function pickSystemRole(profile, requested) {
2
+ const { handle } = profile.identity;
3
+ const systemByRole = profile.type === 'speech' ? undefined : profile.identity.systemByRole;
4
+ if (requested && systemByRole && Object.hasOwn(systemByRole, requested)) {
5
+ return requested;
6
+ }
7
+ return handle;
8
+ }
9
+ export { pickSystemRole };
@@ -0,0 +1,13 @@
1
+ import type { KeySlot, ModelBinding } from '../types.js';
2
+ /**
3
+ * The slots a model's calls use: its own, else the profile's. A local model uses only its own, so
4
+ * the profile's hosted key never reaches a local server; naming none, it sends no key.
5
+ */
6
+ declare function resolveKeySlot(profile: {
7
+ key?: KeySlot;
8
+ fallbackKey?: KeySlot;
9
+ }, binding: ModelBinding): {
10
+ keySlot?: KeySlot;
11
+ fallbackKeySlot?: KeySlot;
12
+ };
13
+ export { resolveKeySlot };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The slots a model's calls use: its own, else the profile's. A local model uses only its own, so
3
+ * the profile's hosted key never reaches a local server; naming none, it sends no key.
4
+ */
5
+ function resolveKeySlot(profile, binding) {
6
+ const inherited = binding.provider === 'local' ? {} : profile;
7
+ const keySlot = binding.key ?? inherited.key;
8
+ const fallbackKeySlot = binding.fallbackKey ?? inherited.fallbackKey;
9
+ return {
10
+ ...(keySlot ? { keySlot } : {}),
11
+ ...(fallbackKeySlot ? { fallbackKeySlot } : {}),
12
+ };
13
+ }
14
+ export { resolveKeySlot };
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Closed unions and the profile field catalog. No Deno APIs, so host UIs and docs can import it.
3
+ *
4
+ * @module
5
+ */
6
+ /** lexicon-exempt-file: authoring field-meta / closed unions — not runtime user or model copy (P2) */
7
+ import "../../_dnt.polyfills.js";
8
+ import { EGRESS_ON_BLOCK, type EgressOnBlock } from '../guardrails/types.js';
9
+ export { EGRESS_ON_BLOCK, type EgressOnBlock };
10
+ export declare const PROFILE_TYPES: readonly ["text", "image", "speech", "live", "decision", "host"];
11
+ export type ProfileType = (typeof PROFILE_TYPES)[number];
12
+ export declare const THINKING_LEVELS: readonly ["none", "minimal", "low", "medium", "high", "xhigh", "max"];
13
+ export type ThinkingLevel = (typeof THINKING_LEVELS)[number];
14
+ export declare const PROTOCOLS: readonly ["geminiInteractions", "geminiLive", "openAi", "decision"];
15
+ export type Protocol = (typeof PROTOCOLS)[number];
16
+ export declare const PROVIDERS: readonly ["google", "openrouter", "local", "typesafe"];
17
+ export type Provider = (typeof PROVIDERS)[number];
18
+ /** Turn pairs are handled by `createProvider`; decision pairs by `runDecision`. */
19
+ export declare const PROTOCOL_PROVIDERS: {
20
+ readonly geminiInteractions: readonly ["google"];
21
+ readonly geminiLive: readonly ["google"];
22
+ readonly openAi: readonly ["openrouter", "local"];
23
+ readonly decision: readonly ["typesafe", "openrouter"];
24
+ };
25
+ export declare const PROFILE_TYPE_PROTOCOLS: {
26
+ readonly text: readonly ["geminiInteractions", "openAi"];
27
+ readonly image: readonly ["geminiInteractions", "openAi"];
28
+ readonly speech: readonly ["geminiInteractions", "openAi"];
29
+ readonly live: readonly ["geminiLive"];
30
+ readonly decision: readonly ["decision"];
31
+ readonly host: readonly [];
32
+ };
33
+ export type ProfileTypeProtocol<T extends ProfileType> = (typeof PROFILE_TYPE_PROTOCOLS)[T][number];
34
+ export declare function protocolsForProfileType(type: ProfileType): readonly Protocol[];
35
+ export declare function isValidProfileProtocol(type: ProfileType, protocol: Protocol): boolean;
36
+ /** A vault slot's name, chosen by the host. The profile names slots; the host fills them with keys. */
37
+ export type KeySlot = string;
38
+ /** Letters, digits, `-` and `_`, up to 32 characters, starting with a letter or digit. */
39
+ export declare const KEY_SLOT_NAME: RegExp;
40
+ export declare function isKeySlotName(value: unknown): value is KeySlot;
41
+ export type KeyVault = Readonly<Record<KeySlot, string | undefined>>;
42
+ export declare const MEDIA_INPUT_KIND_VALUES: readonly ["image", "audio", "video", "document"];
43
+ export type MediaInputKind = (typeof MEDIA_INPUT_KIND_VALUES)[number];
44
+ export declare const SUMMARY_MODES: readonly ["auto", "none"];
45
+ export type SummaryMode = (typeof SUMMARY_MODES)[number];
46
+ export declare const STREAM_MODES: readonly ["sse", "buffered"];
47
+ export type StreamMode = (typeof STREAM_MODES)[number];
48
+ export declare const SPEECH_AUDIO_FORMATS: readonly ["pcm", "mp3"];
49
+ export type SpeechAudioFormat = (typeof SPEECH_AUDIO_FORMATS)[number];
50
+ export declare const LIVE_ACTIVITY_HANDLINGS: readonly ["START_OF_ACTIVITY_INTERRUPTS", "NO_INTERRUPTION"];
51
+ export type LiveActivityHandling = (typeof LIVE_ACTIVITY_HANDLINGS)[number];
52
+ export declare const LIVE_START_SENSITIVITIES: readonly ["START_SENSITIVITY_LOW", "START_SENSITIVITY_HIGH"];
53
+ export type LiveStartSensitivity = (typeof LIVE_START_SENSITIVITIES)[number];
54
+ export declare const LIVE_END_SENSITIVITIES: readonly ["END_SENSITIVITY_LOW", "END_SENSITIVITY_HIGH"];
55
+ export type LiveEndSensitivity = (typeof LIVE_END_SENSITIVITIES)[number];
56
+ export declare const COMPACTION_METERS: readonly ["history", "input"];
57
+ export type CompactionMeter = (typeof COMPACTION_METERS)[number];
58
+ export declare const COMPACTION_TIMINGS: readonly ["before", "after"];
59
+ export type CompactionTiming = (typeof COMPACTION_TIMINGS)[number];
60
+ /**
61
+ * - `compacted`: a summary replaced the compacted messages.
62
+ * - `deferred`: the compactor failed and the history still fits `maxTokens`, so it is kept whole.
63
+ * - `dropped`: the compactor failed over `maxTokens`, so the compacted messages were dropped.
64
+ */
65
+ export declare const COMPACTION_OUTCOMES: readonly ["compacted", "deferred", "dropped"];
66
+ export type CompactionOutcome = (typeof COMPACTION_OUTCOMES)[number];
67
+ export declare const CACHE_MODES: readonly ["automatic", "system"];
68
+ export type CacheMode = (typeof CACHE_MODES)[number];
69
+ export declare const CACHE_TTLS: readonly ["5m", "1h"];
70
+ export type CacheTtl = (typeof CACHE_TTLS)[number];
71
+ export declare const TURN_STOP_KINDS: readonly ["completed", "length", "tool", "gate", "filtered", "provider_error", "cancelled", "stream_incomplete", "interrupted", "generation_complete"];
72
+ export type TurnStopKind = (typeof TURN_STOP_KINDS)[number];
73
+ /** Every other stop resumes by another host path, or not at all. */
74
+ export declare const CONTINUE_STOP_KINDS: readonly ["length", "stream_incomplete", "provider_error"];
75
+ export type ContinueStopKind = (typeof CONTINUE_STOP_KINDS)[number];
76
+ export declare const TURN_STAGES: readonly ["pre_turn", "pre_tool", "post_tool", "before_end", "post_turn"];
77
+ export type TurnStage = (typeof TURN_STAGES)[number];
78
+ export declare function isTurnStage(value: unknown): value is TurnStage;
79
+ /** Stages where an inject can land; the inject gate still applies. */
80
+ export declare const TURN_INJECT_STAGES: readonly ["pre_turn", "post_tool", "before_end"];
81
+ export type TurnInjectStage = (typeof TURN_INJECT_STAGES)[number];
82
+ export declare function isTurnInjectStage(value: unknown): value is TurnInjectStage;
83
+ /** `pre_tool` gates; not `awaiting_user_input`. */
84
+ export declare const TOOL_GATE_KINDS: readonly ["confirmation", "permission", "auth"];
85
+ export type ToolGateKind = (typeof TOOL_GATE_KINDS)[number];
86
+ /** Why a refused gate settles: the user said no, walked away, or let it run out. */
87
+ export declare const TOOL_RESUME_CAUSES: readonly ["declined", "abandoned", "expired"];
88
+ export type ToolResumeCause = (typeof TOOL_RESUME_CAUSES)[number];
89
+ export declare function isToolGateKind(value: unknown): value is ToolGateKind;
90
+ export declare const AWAITING_USER_INPUT_KINDS: readonly ["confirm", "choice", "text"];
91
+ export type AwaitingUserInputKind = (typeof AWAITING_USER_INPUT_KINDS)[number];
92
+ export declare const STAGE_APPLY_WARNING_CODES: readonly ["affordance_not_allowed", "inject_not_allowed", "inject_rejected_max_steps", "inject_invalid_messages", "inject_id_invalid", "deny_invalid", "confirm_invalid", "mutate_invalid", "abort_invalid", "unknown_field", "result_invalid"];
93
+ export type StageApplyWarningCode = (typeof STAGE_APPLY_WARNING_CODES)[number];
94
+ export declare const AWAITING_USER_INPUT_STATUS: "awaiting_user_input";
95
+ /** Enforced by the kernel at resolve time. */
96
+ export declare const TOOL_LOAD_TIERS: readonly ["T0", "T1", "T2"];
97
+ export type ToolLoadTier = (typeof TOOL_LOAD_TIERS)[number];
98
+ export declare const HTTP_METHODS: readonly ["GET", "POST", "PUT", "PATCH", "DELETE"];
99
+ export type HttpMethod = (typeof HTTP_METHODS)[number];
100
+ /** When remote tool auth is missing or expired. */
101
+ export declare const AUTH_UNAUTHENTICATED_POLICIES: readonly ["gate", "report_to_model"];
102
+ export type AuthUnauthenticatedPolicy = (typeof AUTH_UNAUTHENTICATED_POLICIES)[number];
103
+ export declare const TOOL_TYPES: readonly ["builtin", "function", "http", "mcp"];
104
+ export declare const TOOL_ACCESS: readonly ["read-only", "read-write", "destructive"];
105
+ export type ToolAccess = (typeof TOOL_ACCESS)[number];
106
+ export declare const TOOL_PERMISSION: readonly ["auto", "session_consent", "always_confirm"];
107
+ export type ToolPermission = (typeof TOOL_PERMISSION)[number];
108
+ export declare const TOOL_AUTH_TYPES: readonly ["bearer", "api_key", "oauth2"];
109
+ export type ToolAuthType = (typeof TOOL_AUTH_TYPES)[number];
110
+ /** Adds UI-only `none`, which omits auth at compile time. */
111
+ export declare const PLAYGROUND_AUTH_TYPES: readonly ["none", "bearer", "api_key", "oauth2"];
112
+ export type PlaygroundAuthType = (typeof PLAYGROUND_AUTH_TYPES)[number];
113
+ export type ToolType = (typeof TOOL_TYPES)[number];
114
+ export type CustomToolType = Exclude<ToolType, 'builtin'>;
115
+ /**
116
+ * The package's complete media-input vocabulary: `assertMediaMime` refuses any MIME not
117
+ * here, so hosts keep no second table. Rows follow Google Interactions / Live's documented
118
+ * lists (verified 2026-09-12), the widest provider; TypeScript, `application/xml` and
119
+ * `application/rtf` are not on Google's list. OpenAI-compat adapters forward the MIME
120
+ * verbatim and add no rows. Provider alias essences (`image/jpg`, `video/mov`, …) are rows;
121
+ * `resolveInputParts` canonicalizes `image/jpg` to `image/jpeg` on the wire.
122
+ */
123
+ export declare const MEDIA_INPUT_KINDS: Record<string, MediaInputKind>;
124
+ /** Type-prefix wildcards accepted by `mimeAllowed`. */
125
+ export declare const MEDIA_WILDCARDS: readonly ["image/*", "audio/*", "video/*"];
126
+ export declare const ATTACHMENT_ACCEPT_MIMES: readonly string[];
127
+ /**
128
+ * The attachment `accept` values an image profile may list: images, video and
129
+ * PDF, the inputs image models document reading. Also the allowlist each of its
130
+ * `accept` entries must fall within.
131
+ */
132
+ export declare const IMAGE_ATTACHMENT_ACCEPT_MIMES: readonly string[];
133
+ export declare const VOICE_ACCEPT_MIMES: readonly string[];
134
+ export declare function providersFor(protocol: Protocol): readonly Provider[];
135
+ export declare function protocolsFor(provider: Provider): readonly Protocol[];
136
+ /** True when `createProvider` will accept this pair. */
137
+ export declare function isValidPair(protocol: Protocol, provider: Provider): boolean;
138
+ /** When protocol changes, snap provider to a valid partner. */
139
+ export declare function coerceProvider(protocol: Protocol, provider: Provider): Provider;
140
+ /** When provider changes, snap protocol to a valid partner. */
141
+ export declare function coerceProtocol(protocol: Protocol, provider: Provider): Protocol;
142
+ export type FieldMeta = {
143
+ type: string;
144
+ doc: string;
145
+ options?: readonly string[];
146
+ optionDescriptions?: Record<string, string>;
147
+ optionNote?: string;
148
+ /** Types the field may be set on, when not every type; `defineProfile` rejects it elsewhere. */
149
+ profileTypes?: readonly ProfileType[];
150
+ /** Why the other types can't take it. */
151
+ profileTypesReason?: string;
152
+ /** The profile must set the field: always (`true`), or only in the case named. */
153
+ required?: true | string;
154
+ /** What leaving the field out does, as a short phrase a blank control can show. */
155
+ unset?: string;
156
+ };
157
+ /**
158
+ * Parents whose next key is a host-owned map key (model id, slot name, …).
159
+ * The annotator substitutes `*` so `models.flash.apiId` → `models.*.apiId`.
160
+ */
161
+ export declare const DYNAMIC_FIELD_PARENTS: ReadonlySet<string>;
162
+ export declare function catalogPathFor(keys: readonly string[]): string;
163
+ /**
164
+ * Adding a profile field? Add it here; scope it in `PROFILE_FIELD_SCOPE` if only some types
165
+ * take it, and record it in `PROFILE_FIELD_PRESENCE` if it is required or its absence matters.
166
+ */
167
+ export declare const PROFILE_FIELDS: Record<string, FieldMeta>;
168
+ export declare const EXTRA_FIELDS: Record<string, FieldMeta>;
169
+ /** `lexicon.<key>` resolves to `lexicon.*` with that key's own note. */
170
+ export declare function fieldMeta(path: string): FieldMeta | undefined;
171
+ export type { ProfileGraphEditor, ProfileGraphFacet, ProfileGraphFacetId, ProfileGraphRole, } from './profile-graph.js';
172
+ export { PROFILE_GRAPH, profileGraphFacet, spineFacetsForProfileType } from './profile-graph.js';