@theoremjs/agents 0.3.0 → 0.3.2

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 (570) hide show
  1. package/README.md +277 -995
  2. package/esm/mod.d.ts +34 -20
  3. package/esm/mod.js +19 -12
  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 +25 -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 +881 -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 +30 -22
  123. package/esm/src/guardrails/mod.js +19 -14
  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 +4 -1
  135. package/esm/src/guardrails/quota.js +7 -2
  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 +5 -2
  148. package/esm/src/guardrails/theorem-error.js +6 -3
  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 +8 -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 +174 -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 +329 -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 +130 -88
  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 +102 -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/api-error.d.ts +2 -0
  435. package/esm/src/providers/google/api-error.js +26 -18
  436. package/esm/src/providers/google/builtins.d.ts +14 -0
  437. package/esm/src/providers/google/builtins.js +57 -0
  438. package/esm/src/providers/google/grounding.d.ts +4 -4
  439. package/esm/src/providers/google/interactions/framing.d.ts +20 -8
  440. package/esm/src/providers/google/interactions/framing.js +85 -44
  441. package/esm/src/providers/google/interactions/steps.d.ts +5 -5
  442. package/esm/src/providers/google/interactions/steps.js +4 -4
  443. package/esm/src/providers/google/interactions/stream.d.ts +10 -11
  444. package/esm/src/providers/google/interactions/stream.js +33 -100
  445. package/esm/src/providers/google/live/framing.d.ts +15 -5
  446. package/esm/src/providers/google/live/framing.js +25 -25
  447. package/esm/src/providers/google/live/stream.d.ts +6 -44
  448. package/esm/src/providers/google/live/stream.js +4 -210
  449. package/esm/src/providers/google/urls.d.ts +1 -3
  450. package/esm/src/providers/google/urls.js +1 -3
  451. package/esm/src/providers/google/usage.js +2 -2
  452. package/esm/src/providers/live.d.ts +6 -0
  453. package/esm/src/providers/live.js +6 -0
  454. package/esm/src/providers/local/embedding-protocol.d.ts +7 -0
  455. package/esm/src/providers/local/embedding-protocol.js +60 -0
  456. package/esm/src/providers/local/provider.d.ts +7 -0
  457. package/esm/src/providers/local/provider.js +28 -0
  458. package/esm/src/providers/mod.d.ts +28 -7
  459. package/esm/src/providers/mod.js +19 -3
  460. package/esm/src/providers/open-ai/protocol.d.ts +3 -0
  461. package/esm/src/providers/open-ai/protocol.js +189 -0
  462. package/esm/src/providers/openrouter/embedding-protocol.d.ts +6 -0
  463. package/esm/src/providers/openrouter/embedding-protocol.js +86 -0
  464. package/esm/src/providers/openrouter/image.d.ts +0 -9
  465. package/esm/src/providers/openrouter/image.js +0 -153
  466. package/esm/src/providers/openrouter/images-protocol.d.ts +3 -0
  467. package/esm/src/providers/openrouter/images-protocol.js +82 -0
  468. package/esm/src/providers/openrouter/openai/compat.d.ts +2 -2
  469. package/esm/src/providers/openrouter/openai/compat.js +6 -6
  470. package/esm/src/providers/openrouter/openai/image-payload.d.ts +2 -2
  471. package/esm/src/providers/openrouter/openai/reasoning-state.d.ts +2 -0
  472. package/esm/src/providers/openrouter/openai/reasoning-state.js +31 -0
  473. package/esm/src/providers/openrouter/protocol.d.ts +8 -0
  474. package/esm/src/providers/openrouter/protocol.js +171 -0
  475. package/esm/src/providers/openrouter/provider.d.ts +10 -0
  476. package/esm/src/providers/openrouter/provider.js +50 -0
  477. package/esm/src/providers/shared/carried-tool-files.d.ts +7 -0
  478. package/esm/src/providers/shared/carried-tool-files.js +43 -0
  479. package/esm/src/providers/shared/pcm.js +2 -2
  480. package/esm/src/providers/shared/protocol-events.d.ts +8 -0
  481. package/esm/src/providers/shared/protocol-events.js +20 -0
  482. package/esm/src/providers/shared/response-identity.d.ts +2 -2
  483. package/esm/src/providers/shared/retry.d.ts +18 -0
  484. package/esm/src/providers/shared/retry.js +89 -0
  485. package/esm/src/providers/shared/sse.d.ts +0 -4
  486. package/esm/src/providers/shared/sse.js +50 -36
  487. package/esm/src/providers/shared/tool-args.d.ts +6 -7
  488. package/esm/src/providers/shared/tool-args.js +10 -6
  489. package/esm/src/providers/shared/tool-draft.d.ts +16 -0
  490. package/esm/src/providers/shared/tool-draft.js +14 -0
  491. package/esm/src/providers/shared/upstream-tap.d.ts +2 -2
  492. package/esm/src/providers/shared/upstream-tape.js +1 -1
  493. package/esm/src/providers/system-one/protocol.d.ts +8 -0
  494. package/esm/src/providers/system-one/protocol.js +93 -0
  495. package/esm/src/providers/types.d.ts +48 -16
  496. package/esm/src/providers/types.js +2 -1
  497. package/esm/src/providers/typesafe/provider.d.ts +7 -0
  498. package/esm/src/providers/typesafe/provider.js +24 -0
  499. package/esm/src/surface/formats.d.ts +19 -1
  500. package/esm/src/surface/formats.js +68 -29
  501. package/esm/src/surface/mod.d.ts +4 -2
  502. package/esm/src/surface/mod.js +4 -2
  503. package/esm/src/surface/runtime.d.ts +4 -0
  504. package/esm/src/surface/runtime.js +2 -0
  505. package/esm/src/surface/tools.d.ts +2 -8
  506. package/esm/src/surface/tools.js +4 -22
  507. package/esm/src/surface/types.d.ts +6 -0
  508. package/package.json +5 -13
  509. package/esm/src/cli/commands/egress-compile.d.ts +0 -17
  510. package/esm/src/cli/commands/egress-compile.js +0 -25
  511. package/esm/src/guardrails/egress-policy.d.ts +0 -27
  512. package/esm/src/guardrails/egress-policy.js +0 -76
  513. package/esm/src/guardrails/egress-rules.d.ts +0 -54
  514. package/esm/src/guardrails/egress-rules.js +0 -49
  515. package/esm/src/guardrails/lexicon.d.ts +0 -30
  516. package/esm/src/guardrails/lexicon.js +0 -478
  517. package/esm/src/kernel/engine/media-probe/audio.d.ts +0 -7
  518. package/esm/src/kernel/engine/media-probe/audio.js +0 -342
  519. package/esm/src/kernel/engine/media-probe/bytes.d.ts +0 -6
  520. package/esm/src/kernel/engine/media-probe/bytes.js +0 -26
  521. package/esm/src/kernel/engine/media-probe/image.d.ts +0 -5
  522. package/esm/src/kernel/engine/media-probe/image.js +0 -171
  523. package/esm/src/kernel/engine/media-probe/iso-bmff.d.ts +0 -19
  524. package/esm/src/kernel/engine/media-probe/iso-bmff.js +0 -48
  525. package/esm/src/kernel/engine/media-probe/matroska.d.ts +0 -35
  526. package/esm/src/kernel/engine/media-probe/matroska.js +0 -226
  527. package/esm/src/kernel/engine/media-probe/mp4.d.ts +0 -22
  528. package/esm/src/kernel/engine/media-probe/mp4.js +0 -279
  529. package/esm/src/kernel/engine/media-probe/opus.d.ts +0 -4
  530. package/esm/src/kernel/engine/media-probe/opus.js +0 -23
  531. package/esm/src/kernel/engine/media-probe/pdf.d.ts +0 -5
  532. package/esm/src/kernel/engine/media-probe/pdf.js +0 -117
  533. package/esm/src/kernel/engine/media-probe/video.d.ts +0 -15
  534. package/esm/src/kernel/engine/media-probe/video.js +0 -49
  535. package/esm/src/presets/typesafe.d.ts +0 -2
  536. package/esm/src/presets/typesafe.js +0 -2
  537. package/esm/src/providers/create-provider.d.ts +0 -21
  538. package/esm/src/providers/create-provider.js +0 -90
  539. package/esm/src/providers/decision/usage.d.ts +0 -3
  540. package/esm/src/providers/decision/usage.js +0 -25
  541. package/esm/src/providers/google/interactions/mod.d.ts +0 -2
  542. package/esm/src/providers/google/interactions/mod.js +0 -2
  543. package/esm/src/providers/google/keys.d.ts +0 -20
  544. package/esm/src/providers/google/keys.js +0 -87
  545. package/esm/src/providers/google/live/mod.d.ts +0 -7
  546. package/esm/src/providers/google/live/mod.js +0 -7
  547. package/esm/src/providers/google/live/openapi-schema.d.ts +0 -1
  548. package/esm/src/providers/google/live/openapi-schema.js +0 -42
  549. package/esm/src/providers/google/live/session.d.ts +0 -14
  550. package/esm/src/providers/google/live/session.js +0 -150
  551. package/esm/src/providers/local/local.d.ts +0 -12
  552. package/esm/src/providers/local/local.js +0 -186
  553. package/esm/src/providers/local/mod.d.ts +0 -8
  554. package/esm/src/providers/local/mod.js +0 -8
  555. package/esm/src/providers/openrouter/cache-control.d.ts +0 -5
  556. package/esm/src/providers/openrouter/cache-control.js +0 -4
  557. package/esm/src/providers/openrouter/chat.d.ts +0 -64
  558. package/esm/src/providers/openrouter/chat.js +0 -490
  559. package/esm/src/providers/openrouter/openai/sdk-messages.d.ts +0 -10
  560. package/esm/src/providers/openrouter/openai/sdk-messages.js +0 -99
  561. package/esm/src/providers/openrouter/resolve-api-key.d.ts +0 -3
  562. package/esm/src/providers/openrouter/resolve-api-key.js +0 -8
  563. package/esm/src/providers/openrouter/speech.d.ts +0 -18
  564. package/esm/src/providers/openrouter/speech.js +0 -109
  565. package/esm/src/providers/probe.d.ts +0 -5
  566. package/esm/src/providers/probe.js +0 -15
  567. package/esm/src/providers/shared/builtin-wire.d.ts +0 -4
  568. package/esm/src/providers/shared/builtin-wire.js +0 -9
  569. package/esm/src/providers/shared/vault.d.ts +0 -13
  570. package/esm/src/providers/shared/vault.js +0 -41
@@ -1,6 +1,6 @@
1
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[];
2
+ import type { BuiltInArgs, BuiltinToolId, ModelRequest, ProviderBuiltin, ResolvedGeneration } from '../types.js';
3
+ declare function providerBuiltins(tools: ToolRegistry, ids: readonly BuiltinToolId[], args?: BuiltInArgs): ProviderBuiltin[];
4
4
  /** Shared by execution and tracing. */
5
- declare function providerCompleteRequest(tools: ToolRegistry, generation: ResolvedGeneration, system: string): ProviderCompleteRequest;
5
+ declare function providerCompleteRequest(tools: ToolRegistry, generation: ResolvedGeneration, system: string): ModelRequest;
6
6
  export { providerBuiltins, providerCompleteRequest };
@@ -1,42 +1,34 @@
1
1
  import { TheoremError } from '../../guardrails/error.js';
2
- function providerBuiltins(tools, ids) {
2
+ function providerBuiltins(tools, ids, args = {}) {
3
3
  return ids.map((id) => {
4
4
  const tool = tools.get(id);
5
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)
6
+ throw new TheoremError('config', `Builtin '${id}' is not registered`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
7
7
  }
8
- return { id, wire: tool.wire };
8
+ const given = args[id];
9
+ return given ? { id, args: given } : { id };
9
10
  });
10
11
  }
11
12
  /** Shared by execution and tracing. */
12
13
  function providerCompleteRequest(tools, generation, system) {
13
- const isInteractions = generation.transport === 'interactions';
14
14
  return {
15
15
  model: generation.model,
16
16
  apiId: generation.apiId,
17
- previousInteractionId: isInteractions ? generation.previousInteractionId : undefined,
18
- store: isInteractions ? generation.store : undefined,
19
17
  stream: generation.stream,
20
18
  thinking: generation.thinking,
21
19
  summaries: generation.summaries,
22
20
  maxOutputTokens: generation.maxOutputTokens,
23
21
  temperature: generation.temperature,
24
- builtins: providerBuiltins(tools, generation.builtins),
25
- googleMapsLocation: isInteractions ? generation.googleMapsLocation : undefined,
26
- cache: generation.cache,
22
+ builtins: providerBuiltins(tools, generation.builtins, generation.builtInArgs),
27
23
  sessionId: generation.sessionId,
28
24
  system,
29
25
  input: generation.input,
30
26
  history: generation.history,
31
- continuation: isInteractions ? generation.continuation : undefined,
32
27
  wireTools: generation.tools.wire,
33
28
  structured: generation.structured,
34
29
  image: generation.image,
35
30
  speech: generation.speech,
36
31
  live: generation.live,
37
- sessionResumptionHandle: generation.sessionResumptionHandle,
38
- keySlot: generation.keySlot,
39
- fallbackKeySlot: generation.fallbackKeySlot,
40
32
  };
41
33
  }
42
34
  export { providerBuiltins, providerCompleteRequest };
@@ -2,13 +2,16 @@ import type { ToolRegistry } from '../tools/registry.js';
2
2
  import type { ModelId, ModelProfile, Profile, ProjectedProfile, ResolvedGeneration, TurnRequest } from '../types.js';
3
3
  import type { KernelRegistry } from './kernel-registry.js';
4
4
  declare function isModelProfile(profile: Profile): profile is ModelProfile;
5
+ /** Returns the profile when it runs a model; throws a request error naming `door` for a host or decision profile. */
5
6
  declare function requireModelProfile(profile: Profile, door: string): ModelProfile;
6
7
  /** A request is honored only when selection is allowed; registration guarantees the default. */
7
8
  declare function pickModel(profile: ModelProfile, requested?: string): ModelId;
8
- declare function resolveTurnInRegistry(registry: KernelRegistry, req: TurnRequest): {
9
+ /** `model` names the binding to resolve, past the profile's own selection rule. */
10
+ declare function resolveTurnInRegistry(registry: KernelRegistry, req: TurnRequest, model?: ModelId): {
9
11
  profile: ModelProfile;
10
12
  generation: ResolvedGeneration;
11
13
  };
14
+ /** Projects a profile into the plain object a host reads: its id, type, handle, models, inputs, outputs, and the tools it can use. Throws for a host or decision profile. */
12
15
  declare function projectProfileObject(tools: ToolRegistry, input: Profile): ProjectedProfile;
13
16
  declare function projectProfileInRegistry(registry: KernelRegistry, id: Profile['id']): ProjectedProfile;
14
17
  export { isModelProfile, pickModel, projectProfileInRegistry, projectProfileObject, requireModelProfile, resolveTurnInRegistry, };
@@ -1,33 +1,39 @@
1
1
  import { mintCanary } from '../../guardrails/canary.js';
2
+ import { detects } from '../../guardrails/detectors.js';
2
3
  import { TheoremError } from '../../guardrails/error.js';
3
4
  import { resolveGuardrailPolicy } from '../../guardrails/policy.js';
5
+ import { replyIsJudged } from '../../guardrails/progressive-yield.js';
4
6
  import { sanitizeTurnRequest } from '../../guardrails/sanitize.js';
7
+ import { DEFAULT_MAX_STEPS } from '../profile-presence.js';
5
8
  import { profileTurnResumption } from '../stop.js';
6
9
  import { projectTools } from '../tools/project.js';
7
10
  import { resolveTurnTools } from '../tools/resolve.js';
8
11
  import { profileInputs, requireModelBinding } from './catalog.js';
9
- import { assertOutputMode, assertSpeechRole, assertTurnSlots, resolveImageFormat, resolveInputParts, } from './ingress.js';
12
+ import { assertOutputMode, assertSpeechRole, assertTurnContext, assertTurnSlots, resolveImageFormat, resolveInputParts, resolveSpeech, } from './ingress.js';
10
13
  import { resolveTurnSystemPrompt } from './system-prompt.js';
11
- import { resolveKeySlot } from './vault.js';
12
14
  function isModelProfile(profile) {
13
- return profile.type !== 'host' && profile.type !== 'decision';
15
+ return profile.type !== 'host' && profile.type !== 'decision' && profile.type !== 'embedding';
14
16
  }
17
+ /** Returns the profile when it runs a model; throws a request error naming `door` for a host or decision profile. */
15
18
  function requireModelProfile(profile, door) {
16
19
  if (isModelProfile(profile))
17
20
  return profile;
18
21
  if (profile.type === 'host') {
19
22
  throw new TheoremError('request', `Profile ${profile.id}: type 'host' never runs a model — ${door} is not supported; execute tools with invokeTool`);
20
23
  }
24
+ if (profile.type === 'embedding') {
25
+ throw new TheoremError('request', `Profile ${profile.id}: type 'embedding' runs through runEmbedding — ${door} is not supported`);
26
+ }
21
27
  throw new TheoremError('request', `Profile ${profile.id}: type 'decision' runs through runDecision — ${door} is not supported`);
22
28
  }
23
29
  /** A request is honored only when selection is allowed; registration guarantees the default. */
24
30
  function pickModel(profile, requested) {
25
31
  if (requested) {
26
32
  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)
33
+ throw new TheoremError('request', `Profile ${profile.id} does not allow model selection`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
28
34
  }
29
35
  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)
36
+ throw new TheoremError('request', `Unknown model '${requested}' for ${profile.id}`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
31
37
  }
32
38
  return requested;
33
39
  }
@@ -52,7 +58,7 @@ function resolveEffort(profile, binding, modelId, requested) {
52
58
  }
53
59
  return level;
54
60
  }
55
- // Registration requires a default whenever more than one effort is declared.
61
+ // why: Registration requires a default whenever more than one effort is declared.
56
62
  return efforts[binding.defaultEffort ?? keys[0]];
57
63
  }
58
64
  function resolveSummaries(binding) {
@@ -90,32 +96,8 @@ function resolveStreamFlag(profile) {
90
96
  }
91
97
  return profile.outputs?.streaming?.mode !== 'buffered';
92
98
  }
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';
99
+ function resolveTransport(profile, _binding) {
100
+ return profile.type === 'live' ? 'live' : 'turn';
119
101
  }
120
102
  function assertTurnResumption(profile, req) {
121
103
  if (!req.continueFrom) {
@@ -134,73 +116,92 @@ function assertTurnResumption(profile, req) {
134
116
  throw new TheoremError('request', `Profile ${profile.id}: continueFrom requires TurnRequest.continuation when turnBehaviour.resumption.maxContinues is set`);
135
117
  }
136
118
  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)
119
+ throw new TheoremError('request', `Profile ${profile.id}: continuation must be >= 1`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
138
120
  }
139
121
  if (attempt > max) {
140
122
  throw new TheoremError('request', `Profile ${profile.id}: continuation ${attempt} exceeds turnBehaviour.resumption.maxContinues (${max})`);
141
123
  }
142
124
  }
143
125
  /**
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.
126
+ * A guarded Live profile (a detector reading `live_reply`) always transcribes its own speech: the outbound gate can only check audio
127
+ * through its transcript.
146
128
  */
147
129
  function resolveLiveSpec(live, guardrails) {
148
- const policy = resolveGuardrailPolicy(guardrails);
149
- if (!policy.canary && !policy.egress?.enforce) {
130
+ if (!replyIsJudged(resolveGuardrailPolicy(guardrails), ['live_reply'])) {
150
131
  return live;
151
132
  }
152
133
  return { ...live, transcription: { ...live?.transcription, output: true } };
153
134
  }
154
- function resolveTurnInRegistry(registry, req) {
135
+ /**
136
+ * A canary for the turn while `canary_leak` reads somewhere, else none. Speech
137
+ * has no system prompt to plant one in.
138
+ */
139
+ function plantedCanary(profile) {
140
+ const { detect } = resolveGuardrailPolicy(profile.guardrails);
141
+ return profile.type !== 'speech' && detects(detect, 'canary_leak') ? mintCanary() : '';
142
+ }
143
+ /**
144
+ * The request's `builtInArgs`. Args must name a tool the chosen model lists; the protocol that
145
+ * writes the tool parses them.
146
+ */
147
+ function resolveBuiltInArgs(profile, model, binding, args) {
148
+ if (!args) {
149
+ return undefined;
150
+ }
151
+ const resolved = {};
152
+ for (const [id, value] of Object.entries(args)) {
153
+ if (!binding.builtInTools?.includes(id)) {
154
+ throw new TheoremError('request', `Profile ${profile.id}: builtInArgs names '${id}', which model '${model}' does not list in builtInTools`);
155
+ }
156
+ resolved[id] = value;
157
+ }
158
+ return resolved;
159
+ }
160
+ /** `model` names the binding to resolve, past the profile's own selection rule. */
161
+ function resolveTurnInRegistry(registry, req, model) {
155
162
  const profile = requireModelProfile(registry.profiles.get(req.profile), 'resolveTurn');
156
163
  assertTurnSlots(profile, req);
164
+ assertTurnContext(profile, req);
157
165
  const safe = sanitizeTurnRequest(req, profile);
158
166
  const input = safe.input ?? {};
159
167
  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);
168
+ const picked = model ?? pickModel(profile, safe.model);
169
+ const binding = requireModelBinding(profile, picked);
170
+ const toolSnapshot = resolveTurnTools(registry.tools, profile, safe, picked);
163
171
  const builtins = toolSnapshot.builtins;
164
172
  const structuredId = resolveStructured(profile, input.slots);
165
173
  assertOutputMode(profile, structuredId);
166
174
  assertSpeechRole(profile, safe);
167
- const keys = resolveKeySlot(profile, binding);
175
+ const builtInArgs = resolveBuiltInArgs(profile, picked, binding, safe.builtInArgs);
168
176
  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
177
  return {
173
178
  profile,
174
179
  generation: {
175
- model,
180
+ model: picked,
176
181
  apiId: binding.apiId,
177
182
  transport,
178
- chains,
179
- previousInteractionId: safe.previousInteractionId,
180
- store,
181
183
  stream: resolveStreamFlag(profile),
182
- thinking: resolveEffort(profile, binding, model, safe.effort),
184
+ thinking: resolveEffort(profile, binding, picked, safe.effort),
183
185
  summaries: resolveSummaries(binding),
184
186
  maxOutputTokens: binding.maxOutputTokens,
185
187
  temperature: binding.temperature,
186
188
  builtins,
187
- googleMapsLocation: safe.googleMapsLocation,
188
- cache: binding.cache,
189
+ builtInArgs,
189
190
  sessionId: safe.sessionId,
190
191
  tools: toolSnapshot,
191
192
  sessionPermissions: safe.sessionPermissions,
193
+ execution: safe.execution,
194
+ pageExecution: safe.pageExecution,
192
195
  history: input.history,
193
- maxSteps: profile.maxSteps,
196
+ maxSteps: profile.maxSteps ?? DEFAULT_MAX_STEPS,
194
197
  structured: structuredId
195
198
  ? { id: structuredId, jsonSchema: registry.schemas.get(structuredId).jsonSchema }
196
199
  : null,
197
200
  image: resolveImageFormat(profile),
198
- speech: profile.type === 'speech' ? profile.speech : undefined,
201
+ speech: resolveSpeech(profile, safe),
199
202
  live: profile.type === 'live' ? resolveLiveSpec(profile.live, profile.guardrails) : undefined,
200
203
  input: resolveInputParts(profile, safe),
201
- ...keys,
202
- canary: resolveGuardrailPolicy(profile.guardrails).canary ? mintCanary() : '',
203
- sessionResumptionHandle: safe.sessionResumptionHandle ?? input.sessionResumptionHandle,
204
+ canary: plantedCanary(profile),
204
205
  resolvedSystem: resolveTurnSystemPrompt(profile, safe),
205
206
  host: safe.host,
206
207
  },
@@ -209,6 +210,7 @@ function resolveTurnInRegistry(registry, req) {
209
210
  function primaryImageSpec(profile) {
210
211
  return profile.type === 'image' ? profile.image : null;
211
212
  }
213
+ /** Projects a profile into the plain object a host reads: its id, type, handle, models, inputs, outputs, and the tools it can use. Throws for a host or decision profile. */
212
214
  function projectProfileObject(tools, input) {
213
215
  const profile = requireModelProfile(input, 'projectProfile');
214
216
  const { identity } = profile;
@@ -222,7 +224,6 @@ function projectProfileObject(tools, input) {
222
224
  defaultModel: profile.defaultModel,
223
225
  allowModelSelect: profile.allowModelSelect,
224
226
  maxSteps: profile.maxSteps,
225
- key: profile.key,
226
227
  tools: projectTools(tools, profile),
227
228
  inputs,
228
229
  outputs,
@@ -1,9 +1,12 @@
1
1
  import type { StructuredSpec } from '../types.js';
2
+ /** The structured-output schemas a registry holds, by id: `register`, `get` (throws when there is none) and `find`. */
2
3
  interface SchemaRegistry {
3
4
  register(id: string, spec: StructuredSpec): void;
4
5
  /** Throws when there is none. */
5
6
  get(id: string): StructuredSpec;
7
+ find(id: string): StructuredSpec | undefined;
6
8
  }
9
+ /** Creates an empty schema registry; `register` rejects a spec that still carries the removed `enforced` field. */
7
10
  declare function createSchemaRegistry(): SchemaRegistry;
8
11
  export type { SchemaRegistry };
9
12
  export { createSchemaRegistry };
@@ -1,4 +1,5 @@
1
1
  import { TheoremError } from '../../guardrails/error.js';
2
+ /** Creates an empty schema registry; `register` rejects a spec that still carries the removed `enforced` field. */
2
3
  function createSchemaRegistry() {
3
4
  const schemas = new Map();
4
5
  return {
@@ -16,10 +17,11 @@ function createSchemaRegistry() {
16
17
  get(id) {
17
18
  const spec = schemas.get(id);
18
19
  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
+ throw new TheoremError('config', `Unknown structured schema '${id}'`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
20
21
  }
21
22
  return spec;
22
23
  },
24
+ find: (id) => schemas.get(id),
23
25
  };
24
26
  }
25
27
  export { createSchemaRegistry };
@@ -0,0 +1,7 @@
1
+ import type { Profile } from '../types.js';
2
+ /**
3
+ * Replaces each `{name}` that names one of the profile's slots with the value the request chose.
4
+ * A `{name}` that is no slot stays as written. A prompt that uses a slot the request left
5
+ * unfilled is a request error. Every value is one the profile lists, so no free text is written.
6
+ */
7
+ export declare function fillSlots(profile: Profile, text: string, slots: Record<string, string> | undefined, where: string): string;
@@ -0,0 +1,22 @@
1
+ import { TheoremError } from '../../guardrails/error.js';
2
+ import { profileInputs } from './catalog.js';
3
+ const SLOT_REF = /\{([A-Za-z_][\w-]*)\}/g;
4
+ /**
5
+ * Replaces each `{name}` that names one of the profile's slots with the value the request chose.
6
+ * A `{name}` that is no slot stays as written. A prompt that uses a slot the request left
7
+ * unfilled is a request error. Every value is one the profile lists, so no free text is written.
8
+ */
9
+ export function fillSlots(profile, text, slots, where) {
10
+ const declared = profileInputs(profile)?.slots;
11
+ if (!declared)
12
+ return text;
13
+ return text.replace(SLOT_REF, (whole, name) => {
14
+ if (!Object.hasOwn(declared, name))
15
+ return whole;
16
+ const value = slots && Object.hasOwn(slots, name) ? slots[name] : undefined;
17
+ if (value === undefined) {
18
+ throw new TheoremError('request', `Profile ${profile.id}: ${where} uses slot '${name}', and the request chose no value for it`);
19
+ }
20
+ return value;
21
+ });
22
+ }
@@ -1,12 +1,12 @@
1
- import { detectionForTrust, resolveGuardrailPolicy } from '../../guardrails/policy.js';
2
- import { sanitizeText } from '../../guardrails/sanitize.js';
3
1
  import { joinSystemPieces, mapSystemPrompt, systemPieces } from '../system-parts.js';
2
+ import { fillSlots } from './slot-fill.js';
4
3
  import { pickSystemRole } from './system-role.js';
5
4
  /**
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.
5
+ * `identity.system` is trusted author-time copy and crosses no boundary: no detector reads it.
6
+ * A `{slot}` in it becomes the value the request chose, which is one the profile lists.
7
+ * `req.system` is `assembled` per turn and is read at the `system` boundary.
8
8
  */
9
- function systemFromProfile(profile, role) {
9
+ function systemFromProfile(profile, role, slots) {
10
10
  if (profile.type === 'speech') {
11
11
  return [];
12
12
  }
@@ -15,8 +15,7 @@ function systemFromProfile(profile, role) {
15
15
  if (!prompt) {
16
16
  return [];
17
17
  }
18
- const detection = detectionForTrust(resolveGuardrailPolicy(profile.guardrails), 'trusted');
19
- return systemPieces(mapSystemPrompt(prompt, `Profile ${profile.id} identity.system`, (text) => sanitizeText(text, detection)));
18
+ return systemPieces(mapSystemPrompt(prompt, `Profile ${profile.id} identity.system`, (text) => fillSlots(profile, text, slots, 'identity.system')));
20
19
  }
21
20
  /**
22
21
  * Synchronous: snapshotted in `resolveTurn` before any async work. Each source
@@ -26,7 +25,7 @@ function systemFromProfile(profile, role) {
26
25
  function resolveTurnSystemPrompt(profile, req) {
27
26
  const role = pickSystemRole(profile, req.input?.role);
28
27
  return joinSystemPieces([
29
- systemFromProfile(profile, role),
28
+ systemFromProfile(profile, role, req.input?.slots),
30
29
  req.system === undefined ? [] : systemPieces(req.system),
31
30
  ]);
32
31
  }
@@ -1,13 +1,14 @@
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 };
1
+ import type { JsonObject } from '../json.js';
2
+ import type { KeySlot } from '../types.js';
3
+ /** A key as the vault holds it: a string, or an object for a provider that signs in with several fields. */
4
+ export type KeyCredential = string | JsonObject;
5
+ export interface CredentialContext {
6
+ providerId: string;
7
+ apiId: string;
8
+ keySlot: KeySlot;
9
+ signal?: AbortSignal;
10
+ }
11
+ /** Reads a key when a call needs it, e.g. from a secret manager. */
12
+ export type CredentialResolver = (context: CredentialContext) => KeyCredential | Promise<KeyCredential>;
13
+ /** The host's keys, by slot. The kernel reads a slot only for the call that names it. */
14
+ export type KeyVault = Readonly<Record<KeySlot, KeyCredential | CredentialResolver | undefined>>;
@@ -1,14 +1 @@
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 };
1
+ export {};