@theoremjs/agents 0.0.0-stage → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (588) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +545 -2
  3. package/esm/_dnt.polyfills.d.ts +66 -0
  4. package/esm/_dnt.polyfills.js +51 -0
  5. package/esm/mod.d.ts +79 -0
  6. package/esm/mod.js +49 -0
  7. package/esm/package.json +3 -0
  8. package/esm/src/cli/bin.d.ts +7 -0
  9. package/esm/src/cli/bin.js +9 -0
  10. package/esm/src/cli/commands/bench.d.ts +6 -0
  11. package/esm/src/cli/commands/bench.js +480 -0
  12. package/esm/src/cli/commands/detect-compile.d.ts +17 -0
  13. package/esm/src/cli/commands/detect-compile.js +22 -0
  14. package/esm/src/cli/commands/eval.d.ts +37 -0
  15. package/esm/src/cli/commands/eval.js +190 -0
  16. package/esm/src/cli/commands/fuzz-canary.d.ts +15 -0
  17. package/esm/src/cli/commands/fuzz-canary.js +241 -0
  18. package/esm/src/cli/commands/fuzz-guardrails.d.ts +2 -0
  19. package/esm/src/cli/commands/fuzz-guardrails.js +5 -0
  20. package/esm/src/cli/commands/profile.d.ts +2 -0
  21. package/esm/src/cli/commands/profile.js +80 -0
  22. package/esm/src/cli/commands/run.d.ts +13 -0
  23. package/esm/src/cli/commands/run.js +45 -0
  24. package/esm/src/cli/commands/test.d.ts +26 -0
  25. package/esm/src/cli/commands/test.js +143 -0
  26. package/esm/src/cli/event-log.d.ts +15 -0
  27. package/esm/src/cli/event-log.js +136 -0
  28. package/esm/src/cli/index.d.ts +10 -0
  29. package/esm/src/cli/index.js +267 -0
  30. package/esm/src/cli/matrix/fixtures.d.ts +10 -0
  31. package/esm/src/cli/matrix/fixtures.js +67 -0
  32. package/esm/src/cli/matrix/synthesizer.d.ts +18 -0
  33. package/esm/src/cli/matrix/synthesizer.js +103 -0
  34. package/esm/src/evals/attachments.d.ts +5 -0
  35. package/esm/src/evals/attachments.js +55 -0
  36. package/esm/src/evals/breakdown.d.ts +30 -0
  37. package/esm/src/evals/breakdown.js +69 -0
  38. package/esm/src/evals/graders/answer.d.ts +16 -0
  39. package/esm/src/evals/graders/answer.js +134 -0
  40. package/esm/src/evals/graders/code.d.ts +40 -0
  41. package/esm/src/evals/graders/code.js +184 -0
  42. package/esm/src/evals/graders/judge.d.ts +24 -0
  43. package/esm/src/evals/graders/judge.js +367 -0
  44. package/esm/src/evals/graders/latency.d.ts +6 -0
  45. package/esm/src/evals/graders/latency.js +82 -0
  46. package/esm/src/evals/graders/live.d.ts +14 -0
  47. package/esm/src/evals/graders/live.js +42 -0
  48. package/esm/src/evals/graders/media.d.ts +18 -0
  49. package/esm/src/evals/graders/media.js +91 -0
  50. package/esm/src/evals/graders/shared.d.ts +11 -0
  51. package/esm/src/evals/graders/shared.js +62 -0
  52. package/esm/src/evals/graders/transcript.d.ts +19 -0
  53. package/esm/src/evals/graders/transcript.js +202 -0
  54. package/esm/src/evals/mod.d.ts +34 -0
  55. package/esm/src/evals/mod.js +22 -0
  56. package/esm/src/evals/record.d.ts +41 -0
  57. package/esm/src/evals/record.js +107 -0
  58. package/esm/src/evals/rubrics/catalog.d.ts +148 -0
  59. package/esm/src/evals/rubrics/catalog.js +846 -0
  60. package/esm/src/evals/rubrics/mod.d.ts +24 -0
  61. package/esm/src/evals/rubrics/mod.js +55 -0
  62. package/esm/src/evals/rubrics/mustache.d.ts +23 -0
  63. package/esm/src/evals/rubrics/mustache.js +154 -0
  64. package/esm/src/evals/rubrics/types.d.ts +54 -0
  65. package/esm/src/evals/rubrics/types.js +74 -0
  66. package/esm/src/evals/run.d.ts +75 -0
  67. package/esm/src/evals/run.js +418 -0
  68. package/esm/src/evals/suite.d.ts +28 -0
  69. package/esm/src/evals/suite.js +97 -0
  70. package/esm/src/evals/summary.d.ts +35 -0
  71. package/esm/src/evals/summary.js +31 -0
  72. package/esm/src/evals/trial.d.ts +14 -0
  73. package/esm/src/evals/trial.js +135 -0
  74. package/esm/src/evals/types.d.ts +169 -0
  75. package/esm/src/evals/types.js +113 -0
  76. package/esm/src/evals/verdict.d.ts +23 -0
  77. package/esm/src/evals/verdict.js +48 -0
  78. package/esm/src/guardrails/boundaries.d.ts +41 -0
  79. package/esm/src/guardrails/boundaries.js +103 -0
  80. package/esm/src/guardrails/canary-gate.d.ts +22 -0
  81. package/esm/src/guardrails/canary-gate.js +40 -0
  82. package/esm/src/guardrails/canary.d.ts +146 -0
  83. package/esm/src/guardrails/canary.js +974 -0
  84. package/esm/src/guardrails/compile-egress.d.ts +12 -0
  85. package/esm/src/guardrails/compile-egress.js +12 -0
  86. package/esm/src/guardrails/corpus/canary-egress-attacks.d.ts +24 -0
  87. package/esm/src/guardrails/corpus/canary-egress-attacks.js +305 -0
  88. package/esm/src/guardrails/corpus/fuzz-inbound.d.ts +5 -0
  89. package/esm/src/guardrails/corpus/fuzz-inbound.js +199 -0
  90. package/esm/src/guardrails/corpus/inbound-payloads.d.ts +5 -0
  91. package/esm/src/guardrails/corpus/inbound-payloads.js +120 -0
  92. package/esm/src/guardrails/corpus/live-attacks.d.ts +15 -0
  93. package/esm/src/guardrails/corpus/live-attacks.js +229 -0
  94. package/esm/src/guardrails/corpus/mod.d.ts +7 -0
  95. package/esm/src/guardrails/corpus/mod.js +4 -0
  96. package/esm/src/guardrails/corpus/secrets.d.ts +12 -0
  97. package/esm/src/guardrails/corpus/secrets.js +16 -0
  98. package/esm/src/guardrails/corpus/strings.d.ts +23 -0
  99. package/esm/src/guardrails/corpus/strings.js +29 -0
  100. package/esm/src/guardrails/corpus/types.d.ts +36 -0
  101. package/esm/src/guardrails/corpus/types.js +1 -0
  102. package/esm/src/guardrails/credential-rules.d.ts +36 -0
  103. package/esm/src/guardrails/credential-rules.js +3001 -0
  104. package/esm/src/guardrails/credential-scan.d.ts +45 -0
  105. package/esm/src/guardrails/credential-scan.js +172 -0
  106. package/esm/src/guardrails/destinations.d.ts +45 -0
  107. package/esm/src/guardrails/destinations.js +234 -0
  108. package/esm/src/guardrails/detect-at.d.ts +107 -0
  109. package/esm/src/guardrails/detect-at.js +434 -0
  110. package/esm/src/guardrails/detect-reply.d.ts +61 -0
  111. package/esm/src/guardrails/detect-reply.js +95 -0
  112. package/esm/src/guardrails/detect-stream.d.ts +33 -0
  113. package/esm/src/guardrails/detect-stream.js +77 -0
  114. package/esm/src/guardrails/detectors.d.ts +216 -0
  115. package/esm/src/guardrails/detectors.js +503 -0
  116. package/esm/src/guardrails/egress-automata.d.ts +12 -0
  117. package/esm/src/guardrails/egress-automata.js +25582 -0
  118. package/esm/src/guardrails/egress-compiler.d.ts +55 -0
  119. package/esm/src/guardrails/egress-compiler.js +431 -0
  120. package/esm/src/guardrails/egress-patterns.d.ts +26 -0
  121. package/esm/src/guardrails/egress-patterns.js +36 -0
  122. package/esm/src/guardrails/egress-stream.d.ts +123 -0
  123. package/esm/src/guardrails/egress-stream.js +774 -0
  124. package/esm/src/guardrails/egress-urls.d.ts +86 -0
  125. package/esm/src/guardrails/egress-urls.js +909 -0
  126. package/esm/src/guardrails/egress.d.ts +46 -0
  127. package/esm/src/guardrails/egress.js +124 -0
  128. package/esm/src/guardrails/error.d.ts +31 -0
  129. package/esm/src/guardrails/error.js +96 -0
  130. package/esm/src/guardrails/event-schemas.d.ts +100 -0
  131. package/esm/src/guardrails/event-schemas.js +48 -0
  132. package/esm/src/guardrails/events.d.ts +13 -0
  133. package/esm/src/guardrails/events.js +45 -0
  134. package/esm/src/guardrails/hints.d.ts +14 -0
  135. package/esm/src/guardrails/hints.js +57 -0
  136. package/esm/src/guardrails/hits.d.ts +14 -0
  137. package/esm/src/guardrails/hits.js +30 -0
  138. package/esm/src/guardrails/host-patterns.d.ts +85 -0
  139. package/esm/src/guardrails/host-patterns.js +173 -0
  140. package/esm/src/guardrails/injection-patterns.d.ts +20 -0
  141. package/esm/src/guardrails/injection-patterns.js +126 -0
  142. package/esm/src/guardrails/injection-reversed.d.ts +9 -0
  143. package/esm/src/guardrails/injection-reversed.js +49 -0
  144. package/esm/src/guardrails/injection.d.ts +30 -0
  145. package/esm/src/guardrails/injection.js +460 -0
  146. package/esm/src/guardrails/labels.d.ts +40 -0
  147. package/esm/src/guardrails/labels.js +874 -0
  148. package/esm/src/guardrails/live-outbound-gate.d.ts +55 -0
  149. package/esm/src/guardrails/live-outbound-gate.js +298 -0
  150. package/esm/src/guardrails/mod.d.ts +54 -0
  151. package/esm/src/guardrails/mod.js +34 -0
  152. package/esm/src/guardrails/network.d.ts +46 -0
  153. package/esm/src/guardrails/network.js +330 -0
  154. package/esm/src/guardrails/normalize.d.ts +20 -0
  155. package/esm/src/guardrails/normalize.js +165 -0
  156. package/esm/src/guardrails/policy.d.ts +4 -0
  157. package/esm/src/guardrails/policy.js +21 -0
  158. package/esm/src/guardrails/progressive-yield.d.ts +110 -0
  159. package/esm/src/guardrails/progressive-yield.js +281 -0
  160. package/esm/src/guardrails/prompt-echo.d.ts +40 -0
  161. package/esm/src/guardrails/prompt-echo.js +306 -0
  162. package/esm/src/guardrails/quota.d.ts +21 -0
  163. package/esm/src/guardrails/quota.js +80 -0
  164. package/esm/src/guardrails/rules.d.ts +47 -0
  165. package/esm/src/guardrails/rules.js +47 -0
  166. package/esm/src/guardrails/sanitize.d.ts +40 -0
  167. package/esm/src/guardrails/sanitize.js +160 -0
  168. package/esm/src/guardrails/sensitive-groups.d.ts +21 -0
  169. package/esm/src/guardrails/sensitive-groups.js +12 -0
  170. package/esm/src/guardrails/sensitive.d.ts +22 -0
  171. package/esm/src/guardrails/sensitive.js +234 -0
  172. package/esm/src/guardrails/serialize.d.ts +15 -0
  173. package/esm/src/guardrails/serialize.js +37 -0
  174. package/esm/src/guardrails/testing.d.ts +11 -0
  175. package/esm/src/guardrails/testing.js +10 -0
  176. package/esm/src/guardrails/theorem-error.d.ts +21 -0
  177. package/esm/src/guardrails/theorem-error.js +54 -0
  178. package/esm/src/guardrails/thought-guard.d.ts +76 -0
  179. package/esm/src/guardrails/thought-guard.js +664 -0
  180. package/esm/src/guardrails/tool-directives.d.ts +38 -0
  181. package/esm/src/guardrails/tool-directives.js +195 -0
  182. package/esm/src/guardrails/tool-leak.d.ts +26 -0
  183. package/esm/src/guardrails/tool-leak.js +45 -0
  184. package/esm/src/guardrails/tool-result.d.ts +92 -0
  185. package/esm/src/guardrails/tool-result.js +272 -0
  186. package/esm/src/guardrails/types.d.ts +250 -0
  187. package/esm/src/guardrails/types.js +58 -0
  188. package/esm/src/host/client-turn.d.ts +36 -0
  189. package/esm/src/host/client-turn.js +80 -0
  190. package/esm/src/host/mint-trace.d.ts +29 -0
  191. package/esm/src/host/mint-trace.js +60 -0
  192. package/esm/src/host/mod.d.ts +13 -0
  193. package/esm/src/host/mod.js +11 -0
  194. package/esm/src/host/readStreamingJsonStringField.d.ts +2 -0
  195. package/esm/src/host/readStreamingJsonStringField.js +27 -0
  196. package/esm/src/host/reply.d.ts +13 -0
  197. package/esm/src/host/reply.js +41 -0
  198. package/esm/src/interface/blocks.d.ts +11 -0
  199. package/esm/src/interface/blocks.js +283 -0
  200. package/esm/src/interface/composer-actions.d.ts +24 -0
  201. package/esm/src/interface/composer-actions.js +33 -0
  202. package/esm/src/interface/draft.d.ts +20 -0
  203. package/esm/src/interface/draft.js +39 -0
  204. package/esm/src/interface/from-profile.d.ts +24 -0
  205. package/esm/src/interface/from-profile.js +179 -0
  206. package/esm/src/interface/history.d.ts +46 -0
  207. package/esm/src/interface/history.js +278 -0
  208. package/esm/src/interface/inputs.d.ts +11 -0
  209. package/esm/src/interface/inputs.js +67 -0
  210. package/esm/src/interface/mod.d.ts +33 -0
  211. package/esm/src/interface/mod.js +22 -0
  212. package/esm/src/interface/models.d.ts +26 -0
  213. package/esm/src/interface/models.js +50 -0
  214. package/esm/src/interface/pending.d.ts +57 -0
  215. package/esm/src/interface/pending.js +152 -0
  216. package/esm/src/interface/profile-interface.d.ts +4 -0
  217. package/esm/src/interface/profile-interface.js +237 -0
  218. package/esm/src/interface/session.d.ts +71 -0
  219. package/esm/src/interface/session.js +128 -0
  220. package/esm/src/interface/stop.d.ts +13 -0
  221. package/esm/src/interface/stop.js +28 -0
  222. package/esm/src/interface/tool-calls.d.ts +32 -0
  223. package/esm/src/interface/tool-calls.js +127 -0
  224. package/esm/src/interface/tool-invoke.d.ts +6 -0
  225. package/esm/src/interface/tool-invoke.js +22 -0
  226. package/esm/src/interface/tool-media.d.ts +11 -0
  227. package/esm/src/interface/tool-media.js +113 -0
  228. package/esm/src/interface/types.d.ts +278 -0
  229. package/esm/src/interface/types.js +5 -0
  230. package/esm/src/kernel/api-catalog.d.ts +85 -0
  231. package/esm/src/kernel/api-catalog.js +229 -0
  232. package/esm/src/kernel/auth/credential-source.d.ts +23 -0
  233. package/esm/src/kernel/auth/credential-source.js +11 -0
  234. package/esm/src/kernel/auth/crypto.d.ts +56 -0
  235. package/esm/src/kernel/auth/crypto.js +163 -0
  236. package/esm/src/kernel/auth/mod.d.ts +5 -0
  237. package/esm/src/kernel/auth/mod.js +5 -0
  238. package/esm/src/kernel/auth/oauth.d.ts +18 -0
  239. package/esm/src/kernel/auth/oauth.js +439 -0
  240. package/esm/src/kernel/auth/scope-refusal.d.ts +9 -0
  241. package/esm/src/kernel/auth/scope-refusal.js +8 -0
  242. package/esm/src/kernel/auth/typed-secret.d.ts +13 -0
  243. package/esm/src/kernel/auth/typed-secret.js +23 -0
  244. package/esm/src/kernel/auth/types.d.ts +152 -0
  245. package/esm/src/kernel/auth/types.js +1 -0
  246. package/esm/src/kernel/checkpoint.d.ts +43 -0
  247. package/esm/src/kernel/checkpoint.js +58 -0
  248. package/esm/src/kernel/default-scope.d.ts +72 -0
  249. package/esm/src/kernel/default-scope.js +121 -0
  250. package/esm/src/kernel/engine/call-trace.d.ts +19 -0
  251. package/esm/src/kernel/engine/call-trace.js +29 -0
  252. package/esm/src/kernel/engine/compaction.d.ts +71 -0
  253. package/esm/src/kernel/engine/compaction.js +203 -0
  254. package/esm/src/kernel/engine/decision.d.ts +43 -0
  255. package/esm/src/kernel/engine/decision.js +439 -0
  256. package/esm/src/kernel/engine/embedding.d.ts +8 -0
  257. package/esm/src/kernel/engine/embedding.js +118 -0
  258. package/esm/src/kernel/engine/hash.d.ts +6 -0
  259. package/esm/src/kernel/engine/hash.js +22 -0
  260. package/esm/src/kernel/engine/live-inbound.d.ts +19 -0
  261. package/esm/src/kernel/engine/live-inbound.js +44 -0
  262. package/esm/src/kernel/engine/live-ingress.d.ts +15 -0
  263. package/esm/src/kernel/engine/live-ingress.js +42 -0
  264. package/esm/src/kernel/engine/record.d.ts +3 -0
  265. package/esm/src/kernel/engine/record.js +11 -0
  266. package/esm/src/kernel/engine/repair.d.ts +7 -0
  267. package/esm/src/kernel/engine/repair.js +36 -0
  268. package/esm/src/kernel/engine/runner/gates.d.ts +5 -0
  269. package/esm/src/kernel/engine/runner/gates.js +508 -0
  270. package/esm/src/kernel/engine/runner/mod.d.ts +29 -0
  271. package/esm/src/kernel/engine/runner/mod.js +625 -0
  272. package/esm/src/kernel/engine/runner/nested.d.ts +32 -0
  273. package/esm/src/kernel/engine/runner/nested.js +134 -0
  274. package/esm/src/kernel/engine/runner/schema-validation.d.ts +35 -0
  275. package/esm/src/kernel/engine/runner/schema-validation.js +179 -0
  276. package/esm/src/kernel/engine/runner/stages.d.ts +28 -0
  277. package/esm/src/kernel/engine/runner/stages.js +41 -0
  278. package/esm/src/kernel/engine/runner/state.d.ts +97 -0
  279. package/esm/src/kernel/engine/runner/state.js +50 -0
  280. package/esm/src/kernel/engine/runner/step-order.d.ts +27 -0
  281. package/esm/src/kernel/engine/runner/step-order.js +165 -0
  282. package/esm/src/kernel/engine/runner/steps.d.ts +14 -0
  283. package/esm/src/kernel/engine/runner/steps.js +519 -0
  284. package/esm/src/kernel/engine/runner/stream.d.ts +71 -0
  285. package/esm/src/kernel/engine/runner/stream.js +376 -0
  286. package/esm/src/kernel/engine/runner/usage.d.ts +45 -0
  287. package/esm/src/kernel/engine/runner/usage.js +148 -0
  288. package/esm/src/kernel/engine/session/mod.d.ts +33 -0
  289. package/esm/src/kernel/engine/session/mod.js +1182 -0
  290. package/esm/src/kernel/engine/session/session-trace.d.ts +115 -0
  291. package/esm/src/kernel/engine/session/session-trace.js +500 -0
  292. package/esm/src/kernel/engine/token-estimate.d.ts +23 -0
  293. package/esm/src/kernel/engine/token-estimate.js +38 -0
  294. package/esm/src/kernel/engine/tool-trace.d.ts +58 -0
  295. package/esm/src/kernel/engine/tool-trace.js +132 -0
  296. package/esm/src/kernel/engine/tree.d.ts +2 -0
  297. package/esm/src/kernel/engine/tree.js +17 -0
  298. package/esm/src/kernel/engine/turn-trace.d.ts +119 -0
  299. package/esm/src/kernel/engine/turn-trace.js +855 -0
  300. package/esm/src/kernel/engine/usage.d.ts +36 -0
  301. package/esm/src/kernel/engine/usage.js +151 -0
  302. package/esm/src/kernel/interaction-parts.d.ts +13 -0
  303. package/esm/src/kernel/interaction-parts.js +40 -0
  304. package/esm/src/kernel/json.d.ts +10 -0
  305. package/esm/src/kernel/json.js +3 -0
  306. package/esm/src/kernel/mod.d.ts +74 -0
  307. package/esm/src/kernel/mod.js +45 -0
  308. package/esm/src/kernel/profile-graph.d.ts +145 -0
  309. package/esm/src/kernel/profile-graph.js +158 -0
  310. package/esm/src/kernel/profile-presence.d.ts +18 -0
  311. package/esm/src/kernel/profile-presence.js +158 -0
  312. package/esm/src/kernel/profile-scope.d.ts +40 -0
  313. package/esm/src/kernel/profile-scope.js +274 -0
  314. package/esm/src/kernel/protocols/binding.d.ts +65 -0
  315. package/esm/src/kernel/protocols/binding.js +125 -0
  316. package/esm/src/kernel/protocols/limits.d.ts +15 -0
  317. package/esm/src/kernel/protocols/limits.js +28 -0
  318. package/esm/src/kernel/protocols/mod.d.ts +5 -0
  319. package/esm/src/kernel/protocols/mod.js +5 -0
  320. package/esm/src/kernel/protocols/prices.d.ts +36 -0
  321. package/esm/src/kernel/protocols/prices.js +37 -0
  322. package/esm/src/kernel/protocols/protocol.d.ts +253 -0
  323. package/esm/src/kernel/protocols/protocol.js +253 -0
  324. package/esm/src/kernel/protocols/provider.d.ts +108 -0
  325. package/esm/src/kernel/protocols/provider.js +143 -0
  326. package/esm/src/kernel/protocols/runtime.d.ts +55 -0
  327. package/esm/src/kernel/protocols/runtime.js +534 -0
  328. package/esm/src/kernel/provider-budget.d.ts +32 -0
  329. package/esm/src/kernel/provider-budget.js +262 -0
  330. package/esm/src/kernel/provider-dispatch.d.ts +13 -0
  331. package/esm/src/kernel/provider-dispatch.js +36 -0
  332. package/esm/src/kernel/provider-live.d.ts +7 -0
  333. package/esm/src/kernel/provider-live.js +189 -0
  334. package/esm/src/kernel/provider-runtime.d.ts +57 -0
  335. package/esm/src/kernel/provider-runtime.js +524 -0
  336. package/esm/src/kernel/registry/attachments.d.ts +46 -0
  337. package/esm/src/kernel/registry/attachments.js +220 -0
  338. package/esm/src/kernel/registry/catalog.d.ts +25 -0
  339. package/esm/src/kernel/registry/catalog.js +85 -0
  340. package/esm/src/kernel/registry/embedding-rules.d.ts +28 -0
  341. package/esm/src/kernel/registry/embedding-rules.js +66 -0
  342. package/esm/src/kernel/registry/ingress.d.ts +12 -0
  343. package/esm/src/kernel/registry/ingress.js +179 -0
  344. package/esm/src/kernel/registry/kernel-registry.d.ts +15 -0
  345. package/esm/src/kernel/registry/kernel-registry.js +15 -0
  346. package/esm/src/kernel/registry/profile-outputs.d.ts +3 -0
  347. package/esm/src/kernel/registry/profile-outputs.js +10 -0
  348. package/esm/src/kernel/registry/profiles.d.ts +116 -0
  349. package/esm/src/kernel/registry/profiles.js +773 -0
  350. package/esm/src/kernel/registry/provider-request.d.ts +6 -0
  351. package/esm/src/kernel/registry/provider-request.js +34 -0
  352. package/esm/src/kernel/registry/resolve.d.ts +17 -0
  353. package/esm/src/kernel/registry/resolve.js +238 -0
  354. package/esm/src/kernel/registry/schemas.d.ts +12 -0
  355. package/esm/src/kernel/registry/schemas.js +27 -0
  356. package/esm/src/kernel/registry/slot-fill.d.ts +7 -0
  357. package/esm/src/kernel/registry/slot-fill.js +22 -0
  358. package/esm/src/kernel/registry/sole-model.d.ts +2 -0
  359. package/esm/src/kernel/registry/sole-model.js +4 -0
  360. package/esm/src/kernel/registry/system-prompt.d.ts +8 -0
  361. package/esm/src/kernel/registry/system-prompt.js +32 -0
  362. package/esm/src/kernel/registry/system-role.d.ts +3 -0
  363. package/esm/src/kernel/registry/system-role.js +9 -0
  364. package/esm/src/kernel/registry/vault.d.ts +14 -0
  365. package/esm/src/kernel/registry/vault.js +1 -0
  366. package/esm/src/kernel/schema.d.ts +226 -0
  367. package/esm/src/kernel/schema.js +895 -0
  368. package/esm/src/kernel/scope.d.ts +29 -0
  369. package/esm/src/kernel/scope.js +45 -0
  370. package/esm/src/kernel/stages.d.ts +176 -0
  371. package/esm/src/kernel/stages.js +431 -0
  372. package/esm/src/kernel/stop.d.ts +116 -0
  373. package/esm/src/kernel/stop.js +137 -0
  374. package/esm/src/kernel/system-parts.d.ts +26 -0
  375. package/esm/src/kernel/system-parts.js +98 -0
  376. package/esm/src/kernel/tools/activity-label.d.ts +22 -0
  377. package/esm/src/kernel/tools/activity-label.js +435 -0
  378. package/esm/src/kernel/tools/agent.d.ts +66 -0
  379. package/esm/src/kernel/tools/agent.js +212 -0
  380. package/esm/src/kernel/tools/coordinate.d.ts +4 -0
  381. package/esm/src/kernel/tools/coordinate.js +165 -0
  382. package/esm/src/kernel/tools/events.d.ts +66 -0
  383. package/esm/src/kernel/tools/events.js +184 -0
  384. package/esm/src/kernel/tools/execute.d.ts +100 -0
  385. package/esm/src/kernel/tools/execute.js +1173 -0
  386. package/esm/src/kernel/tools/gate-answer.d.ts +60 -0
  387. package/esm/src/kernel/tools/gate-answer.js +65 -0
  388. package/esm/src/kernel/tools/handler-events.d.ts +45 -0
  389. package/esm/src/kernel/tools/handler-events.js +106 -0
  390. package/esm/src/kernel/tools/harness.d.ts +17 -0
  391. package/esm/src/kernel/tools/harness.js +43 -0
  392. package/esm/src/kernel/tools/http-limit.d.ts +27 -0
  393. package/esm/src/kernel/tools/http-limit.js +85 -0
  394. package/esm/src/kernel/tools/invoke.d.ts +32 -0
  395. package/esm/src/kernel/tools/invoke.js +282 -0
  396. package/esm/src/kernel/tools/mcp-sessions.d.ts +23 -0
  397. package/esm/src/kernel/tools/mcp-sessions.js +69 -0
  398. package/esm/src/kernel/tools/mod.d.ts +10 -0
  399. package/esm/src/kernel/tools/mod.js +7 -0
  400. package/esm/src/kernel/tools/model-text.d.ts +16 -0
  401. package/esm/src/kernel/tools/model-text.js +31 -0
  402. package/esm/src/kernel/tools/operation.d.ts +76 -0
  403. package/esm/src/kernel/tools/operation.js +100 -0
  404. package/esm/src/kernel/tools/page-answer.d.ts +8 -0
  405. package/esm/src/kernel/tools/page-answer.js +19 -0
  406. package/esm/src/kernel/tools/permission.d.ts +15 -0
  407. package/esm/src/kernel/tools/permission.js +38 -0
  408. package/esm/src/kernel/tools/project.d.ts +11 -0
  409. package/esm/src/kernel/tools/project.js +55 -0
  410. package/esm/src/kernel/tools/registry.d.ts +27 -0
  411. package/esm/src/kernel/tools/registry.js +143 -0
  412. package/esm/src/kernel/tools/remote.d.ts +144 -0
  413. package/esm/src/kernel/tools/remote.js +1125 -0
  414. package/esm/src/kernel/tools/resolve.d.ts +31 -0
  415. package/esm/src/kernel/tools/resolve.js +267 -0
  416. package/esm/src/kernel/tools/run.d.ts +28 -0
  417. package/esm/src/kernel/tools/run.js +86 -0
  418. package/esm/src/kernel/tools/schema.d.ts +10 -0
  419. package/esm/src/kernel/tools/schema.js +95 -0
  420. package/esm/src/kernel/tools/signed-in-fetch.d.ts +19 -0
  421. package/esm/src/kernel/tools/signed-in-fetch.js +45 -0
  422. package/esm/src/kernel/tools/stage-run.d.ts +116 -0
  423. package/esm/src/kernel/tools/stage-run.js +198 -0
  424. package/esm/src/kernel/tools/types.d.ts +497 -0
  425. package/esm/src/kernel/tools/types.js +1 -0
  426. package/esm/src/kernel/tools/unchecked-output.d.ts +14 -0
  427. package/esm/src/kernel/tools/unchecked-output.js +18 -0
  428. package/esm/src/kernel/turn-events.d.ts +776 -0
  429. package/esm/src/kernel/turn-events.js +543 -0
  430. package/esm/src/kernel/types.d.ts +1025 -0
  431. package/esm/src/kernel/types.js +1 -0
  432. package/esm/src/kernel/util/base64.d.ts +4 -0
  433. package/esm/src/kernel/util/base64.js +15 -0
  434. package/esm/src/kernel/util/exact-type.d.ts +31 -0
  435. package/esm/src/kernel/util/exact-type.js +1 -0
  436. package/esm/src/kernel/util/find-last.d.ts +3 -0
  437. package/esm/src/kernel/util/find-last.js +9 -0
  438. package/esm/src/kernel/util/mime.d.ts +2 -0
  439. package/esm/src/kernel/util/mime.js +4 -0
  440. package/esm/src/kernel/util/partial-json.d.ts +23 -0
  441. package/esm/src/kernel/util/partial-json.js +128 -0
  442. package/esm/src/kernel/util/record.d.ts +2 -0
  443. package/esm/src/kernel/util/record.js +4 -0
  444. package/esm/src/observability/destinations.d.ts +14 -0
  445. package/esm/src/observability/destinations.js +43 -0
  446. package/esm/src/observability/jsonl.d.ts +18 -0
  447. package/esm/src/observability/jsonl.js +110 -0
  448. package/esm/src/observability/mod.d.ts +22 -0
  449. package/esm/src/observability/mod.js +16 -0
  450. package/esm/src/observability/openinference.d.ts +11 -0
  451. package/esm/src/observability/openinference.js +205 -0
  452. package/esm/src/observability/otlp.d.ts +71 -0
  453. package/esm/src/observability/otlp.js +98 -0
  454. package/esm/src/observability/phoenix.d.ts +30 -0
  455. package/esm/src/observability/phoenix.js +71 -0
  456. package/esm/src/observability/policy.d.ts +17 -0
  457. package/esm/src/observability/policy.js +73 -0
  458. package/esm/src/observability/resolve-policy.d.ts +8 -0
  459. package/esm/src/observability/resolve-policy.js +64 -0
  460. package/esm/src/observability/spans.d.ts +22 -0
  461. package/esm/src/observability/spans.js +72 -0
  462. package/esm/src/observability/trace-catalog.d.ts +128 -0
  463. package/esm/src/observability/trace-catalog.js +906 -0
  464. package/esm/src/observability/trace-record.d.ts +23 -0
  465. package/esm/src/observability/trace-record.js +228 -0
  466. package/esm/src/observability/trace-schema.d.ts +57 -0
  467. package/esm/src/observability/trace-schema.js +59 -0
  468. package/esm/src/observability/trace-sink.d.ts +14 -0
  469. package/esm/src/observability/trace-sink.js +3 -0
  470. package/esm/src/observability/trace-span.d.ts +98 -0
  471. package/esm/src/observability/trace-span.js +201 -0
  472. package/esm/src/observability/trace.d.ts +13 -0
  473. package/esm/src/observability/trace.js +37 -0
  474. package/esm/src/observability/types.d.ts +109 -0
  475. package/esm/src/observability/types.js +3 -0
  476. package/esm/src/presets/google/speech-voices.d.ts +9 -0
  477. package/esm/src/presets/google/speech-voices.js +38 -0
  478. package/esm/src/presets/google-limits.d.ts +13 -0
  479. package/esm/src/presets/google-limits.js +18 -0
  480. package/esm/src/presets/google.d.ts +119 -0
  481. package/esm/src/presets/google.js +197 -0
  482. package/esm/src/presets/local.d.ts +26 -0
  483. package/esm/src/presets/local.js +30 -0
  484. package/esm/src/presets/mod.d.ts +11 -0
  485. package/esm/src/presets/mod.js +9 -0
  486. package/esm/src/presets/openrouter.d.ts +26 -0
  487. package/esm/src/presets/openrouter.js +31 -0
  488. package/esm/src/providers/embedding-limits.d.ts +7 -0
  489. package/esm/src/providers/embedding-limits.js +12 -0
  490. package/esm/src/providers/gemini/embedding-protocol.d.ts +8 -0
  491. package/esm/src/providers/gemini/embedding-protocol.js +125 -0
  492. package/esm/src/providers/gemini/interactions-protocol.d.ts +8 -0
  493. package/esm/src/providers/gemini/interactions-protocol.js +105 -0
  494. package/esm/src/providers/gemini/live-protocol.d.ts +3 -0
  495. package/esm/src/providers/gemini/live-protocol.js +191 -0
  496. package/esm/src/providers/gemini/prices.d.ts +3 -0
  497. package/esm/src/providers/gemini/prices.js +63 -0
  498. package/esm/src/providers/gemini/provider.d.ts +7 -0
  499. package/esm/src/providers/gemini/provider.js +39 -0
  500. package/esm/src/providers/google/api-error.d.ts +8 -0
  501. package/esm/src/providers/google/api-error.js +123 -0
  502. package/esm/src/providers/google/builtins.d.ts +14 -0
  503. package/esm/src/providers/google/builtins.js +57 -0
  504. package/esm/src/providers/google/grounding.d.ts +5 -0
  505. package/esm/src/providers/google/grounding.js +226 -0
  506. package/esm/src/providers/google/interactions/framing.d.ts +27 -0
  507. package/esm/src/providers/google/interactions/framing.js +304 -0
  508. package/esm/src/providers/google/interactions/steps.d.ts +12 -0
  509. package/esm/src/providers/google/interactions/steps.js +200 -0
  510. package/esm/src/providers/google/interactions/stream.d.ts +23 -0
  511. package/esm/src/providers/google/interactions/stream.js +230 -0
  512. package/esm/src/providers/google/live/framing.d.ts +61 -0
  513. package/esm/src/providers/google/live/framing.js +597 -0
  514. package/esm/src/providers/google/live/stream.d.ts +13 -0
  515. package/esm/src/providers/google/live/stream.js +57 -0
  516. package/esm/src/providers/google/thinking.d.ts +3 -0
  517. package/esm/src/providers/google/thinking.js +8 -0
  518. package/esm/src/providers/google/urls.d.ts +4 -0
  519. package/esm/src/providers/google/urls.js +4 -0
  520. package/esm/src/providers/google/usage.d.ts +7 -0
  521. package/esm/src/providers/google/usage.js +49 -0
  522. package/esm/src/providers/live.d.ts +6 -0
  523. package/esm/src/providers/live.js +6 -0
  524. package/esm/src/providers/local/embedding-protocol.d.ts +7 -0
  525. package/esm/src/providers/local/embedding-protocol.js +60 -0
  526. package/esm/src/providers/local/provider.d.ts +7 -0
  527. package/esm/src/providers/local/provider.js +28 -0
  528. package/esm/src/providers/mod.d.ts +32 -0
  529. package/esm/src/providers/mod.js +23 -0
  530. package/esm/src/providers/open-ai/protocol.d.ts +3 -0
  531. package/esm/src/providers/open-ai/protocol.js +189 -0
  532. package/esm/src/providers/openrouter/embedding-protocol.d.ts +6 -0
  533. package/esm/src/providers/openrouter/embedding-protocol.js +86 -0
  534. package/esm/src/providers/openrouter/image.d.ts +15 -0
  535. package/esm/src/providers/openrouter/image.js +34 -0
  536. package/esm/src/providers/openrouter/images-protocol.d.ts +3 -0
  537. package/esm/src/providers/openrouter/images-protocol.js +82 -0
  538. package/esm/src/providers/openrouter/openai/compat.d.ts +19 -0
  539. package/esm/src/providers/openrouter/openai/compat.js +162 -0
  540. package/esm/src/providers/openrouter/openai/image-payload.d.ts +9 -0
  541. package/esm/src/providers/openrouter/openai/image-payload.js +115 -0
  542. package/esm/src/providers/openrouter/openai/reasoning-state.d.ts +2 -0
  543. package/esm/src/providers/openrouter/openai/reasoning-state.js +31 -0
  544. package/esm/src/providers/openrouter/openai/usage.d.ts +8 -0
  545. package/esm/src/providers/openrouter/openai/usage.js +56 -0
  546. package/esm/src/providers/openrouter/protocol.d.ts +8 -0
  547. package/esm/src/providers/openrouter/protocol.js +171 -0
  548. package/esm/src/providers/openrouter/provider.d.ts +10 -0
  549. package/esm/src/providers/openrouter/provider.js +50 -0
  550. package/esm/src/providers/shared/carried-tool-files.d.ts +7 -0
  551. package/esm/src/providers/shared/carried-tool-files.js +43 -0
  552. package/esm/src/providers/shared/pcm.d.ts +14 -0
  553. package/esm/src/providers/shared/pcm.js +78 -0
  554. package/esm/src/providers/shared/protocol-events.d.ts +8 -0
  555. package/esm/src/providers/shared/protocol-events.js +20 -0
  556. package/esm/src/providers/shared/response-identity.d.ts +11 -0
  557. package/esm/src/providers/shared/response-identity.js +12 -0
  558. package/esm/src/providers/shared/retry.d.ts +17 -0
  559. package/esm/src/providers/shared/retry.js +90 -0
  560. package/esm/src/providers/shared/sse.d.ts +6 -0
  561. package/esm/src/providers/shared/sse.js +93 -0
  562. package/esm/src/providers/shared/structured-output.d.ts +4 -0
  563. package/esm/src/providers/shared/structured-output.js +11 -0
  564. package/esm/src/providers/shared/tool-args.d.ts +24 -0
  565. package/esm/src/providers/shared/tool-args.js +88 -0
  566. package/esm/src/providers/shared/tool-draft.d.ts +16 -0
  567. package/esm/src/providers/shared/tool-draft.js +14 -0
  568. package/esm/src/providers/shared/upstream-tap.d.ts +8 -0
  569. package/esm/src/providers/shared/upstream-tap.js +85 -0
  570. package/esm/src/providers/shared/upstream-tape.d.ts +6 -0
  571. package/esm/src/providers/shared/upstream-tape.js +88 -0
  572. package/esm/src/providers/system-one/protocol.d.ts +8 -0
  573. package/esm/src/providers/system-one/protocol.js +93 -0
  574. package/esm/src/providers/types.d.ts +51 -0
  575. package/esm/src/providers/types.js +2 -0
  576. package/esm/src/providers/typesafe/provider.d.ts +7 -0
  577. package/esm/src/providers/typesafe/provider.js +24 -0
  578. package/esm/src/surface/formats.d.ts +46 -0
  579. package/esm/src/surface/formats.js +178 -0
  580. package/esm/src/surface/mod.d.ts +16 -0
  581. package/esm/src/surface/mod.js +12 -0
  582. package/esm/src/surface/runtime.d.ts +44 -0
  583. package/esm/src/surface/runtime.js +441 -0
  584. package/esm/src/surface/tools.d.ts +9 -0
  585. package/esm/src/surface/tools.js +62 -0
  586. package/esm/src/surface/types.d.ts +110 -0
  587. package/esm/src/surface/types.js +4 -0
  588. package/package.json +100 -4
@@ -0,0 +1,55 @@
1
+ import type { TurnEventOf } from '../kernel/turn-events.js';
2
+ import type { Profile, TurnEvent } from '../kernel/types.js';
3
+ import { type StreamedReplyEvent } from './canary.js';
4
+ import type { GivenUrls } from './egress-urls.js';
5
+ import { TheoremError } from './error.js';
6
+ import { type ProgressiveYieldGate } from './progressive-yield.js';
7
+ import { type ThoughtGuard } from './thought-guard.js';
8
+ import type { OwnTools } from './tool-leak.js';
9
+ import type { GuardrailContext, GuardrailHit, ResolvedGuardrailPolicy } from './types.js';
10
+ /**
11
+ * One piece of output not yet released: a reply-stream chunk covering
12
+ * `[start, end)` of the gate's window, or media arriving at `start`, whose
13
+ * `end` is where its covering transcript ends (`Infinity` until one arrives).
14
+ */
15
+ export interface LiveHeldOutput {
16
+ event: StreamedReplyEvent | TurnEventOf<'media'>;
17
+ start: number;
18
+ end: number;
19
+ }
20
+ /** The gate's state for one live session: its policy and context, the progressive gate, the output held, and how far reply text has been released. */
21
+ export interface LiveOutboundGateSession {
22
+ policy: ResolvedGuardrailPolicy;
23
+ context: GuardrailContext;
24
+ gate: ProgressiveYieldGate | null;
25
+ /** Reply chunks and media not yet released, in arrival order. */
26
+ held: LiveHeldOutput[];
27
+ /** Window offset the host has received reply text up to. */
28
+ releasedTo: number;
29
+ /** Stop releasing held output after a progressive egress hit. */
30
+ withholdVisible: boolean;
31
+ /** System-prompt leaks this cycle withheld. They pin the cycle's final verdict to block. */
32
+ promptLeaks?: GuardrailHit[];
33
+ /** Omits what in the session's thoughts leaks; carries from one cycle to the next. */
34
+ thoughts?: ThoughtGuard;
35
+ }
36
+ /** What the gate does with a batch of a live model's events: `emit` what is released, `withhold` with an error, or stay `idle` when nothing is released yet. */
37
+ export type LiveOutboundBatchResult = {
38
+ action: 'emit';
39
+ events: TurnEvent[];
40
+ } | {
41
+ action: 'withhold';
42
+ error: TheoremError;
43
+ events?: TurnEvent[];
44
+ } | {
45
+ action: 'idle';
46
+ };
47
+ /** The canary and the system instruction are read for only while their detectors read somewhere (`scopeOf`). */
48
+ declare function createLiveOutboundGateSession(profile: Profile, canary?: string, privateSystem?: readonly string[], givenUrls?: GivenUrls, ownTools?: OwnTools): Promise<LiveOutboundGateSession>;
49
+ /** Passes one provider message's events through the outbound gate: reply text and audio are held until the egress checks clear them, a prompt leak, or egress hit withholds, and thoughts go through the thought guard. */
50
+ declare function processLiveOutboundBatch(session: LiveOutboundGateSession, events: TurnEvent[]): LiveOutboundBatchResult;
51
+ /** Call once after the provider has finished the cycle; it also starts the next one. */
52
+ declare function finalizeLiveOutboundTurn(session: LiveOutboundGateSession): LiveOutboundBatchResult;
53
+ /** Drop the cycle's held output when the user interrupts mid-turn. */
54
+ declare function abortLiveOutboundTurn(session: LiveOutboundGateSession): void;
55
+ export { abortLiveOutboundTurn, createLiveOutboundGateSession, finalizeLiveOutboundTurn, processLiveOutboundBatch, };
@@ -0,0 +1,298 @@
1
+ import { isStreamedCanaryEvent } from './canary.js';
2
+ import { detectEvent, leakScopeOf, scopeOf } from './detect-at.js';
3
+ import { readReply, refusalAfter, replyAfter, standingBlock } from './detect-reply.js';
4
+ import { eventLeak, isPromptLeakHit, promptLeakReason, WITHHELD_REASON } from './egress.js';
5
+ import { TheoremError } from './error.js';
6
+ import { guardrailFromHits, guardrailTurnEvent } from './events.js';
7
+ import { resolveGuardrailPolicy } from './policy.js';
8
+ import { createOutboundProgressiveGate, outboundProgressiveGate, } from './progressive-yield.js';
9
+ import { thoughtGuardFor } from './thought-guard.js';
10
+ const UNTRANSCRIBED_HIT = { rule: 'live.untranscribed-audio', severity: 'high' };
11
+ /** The canary and the system instruction are read for only while their detectors read somewhere (`scopeOf`). */
12
+ async function createLiveOutboundGateSession(profile, canary, privateSystem, givenUrls, ownTools) {
13
+ const policy = resolveGuardrailPolicy(profile.guardrails);
14
+ const context = {
15
+ stage: 'live_outbound',
16
+ trust: 'untrusted',
17
+ profileId: profile.id,
18
+ ...leakScopeOf(policy.detect, { canary, privateSystem }),
19
+ ...(profile.labels ? { labels: profile.labels } : {}),
20
+ ...(givenUrls ? { givenUrls } : {}),
21
+ ...(ownTools ? { ownTools } : {}),
22
+ };
23
+ const thoughts = await thoughtGuardFor(policy, context);
24
+ return {
25
+ policy,
26
+ context,
27
+ gate: await createOutboundProgressiveGate(policy, context, 'live_reply'),
28
+ held: [],
29
+ releasedTo: 0,
30
+ withholdVisible: false,
31
+ ...(thoughts ? { thoughts } : {}),
32
+ };
33
+ }
34
+ function resetCycle(session) {
35
+ const carry = session.gate?.carryOut();
36
+ session.gate = outboundProgressiveGate(session.policy, session.context, 'live_reply', carry);
37
+ session.held = [];
38
+ session.releasedTo = 0;
39
+ session.withholdVisible = false;
40
+ session.promptLeaks = undefined;
41
+ }
42
+ function withholdResult(reason, hits, prior = []) {
43
+ const guardrail = guardrailFromHits('live_outbound', 'untrusted', hits, 'block');
44
+ return {
45
+ action: 'withhold',
46
+ error: new TheoremError('safety', reason),
47
+ events: [...prior, ...(guardrail ? [guardrail] : [])],
48
+ };
49
+ }
50
+ /** Window offset the gate has cleared for release. */
51
+ function clearedTo(gate) {
52
+ return gate.accumulated().length - gate.unreleased().length;
53
+ }
54
+ /**
55
+ * Release held output up to window offset `to`: reply chunks as far as they
56
+ * reach, media once the transcript covering it is cleared — or all of it when
57
+ * the transcript is whole. Stops at the first item that cannot go yet, so the
58
+ * host sees output in arrival order.
59
+ */
60
+ function releaseHeld(session, gate, to, into, transcriptWhole = false) {
61
+ const window = gate.accumulated();
62
+ for (let item = session.held[0]; item !== undefined; item = session.held[0]) {
63
+ const { event } = item;
64
+ if (event.type !== 'media') {
65
+ const from = Math.max(item.start, session.releasedTo);
66
+ const upTo = Math.min(item.end, to);
67
+ if (upTo > from) {
68
+ into.push({ ...event, text: window.slice(from, upTo) });
69
+ session.releasedTo = upTo;
70
+ }
71
+ }
72
+ if (item.end > to && !(transcriptWhole && event.type === 'media')) {
73
+ return;
74
+ }
75
+ if (event.type === 'media') {
76
+ into.push(event);
77
+ }
78
+ session.held.shift();
79
+ }
80
+ }
81
+ /**
82
+ * Apply a progressive scan result. Clean: release what the gate cleared.
83
+ * Blocked: the rest of the cycle is withheld for its verdict.
84
+ */
85
+ function applyScan(session, gate, result, into) {
86
+ if (!result.blocked) {
87
+ const found = result.found && detectEvent('live_reply', result.found);
88
+ if (found)
89
+ into.push(guardrailTurnEvent(found));
90
+ releaseHeld(session, gate, clearedTo(gate), into);
91
+ return;
92
+ }
93
+ const leaks = result.hits.filter(isPromptLeakHit);
94
+ if (leaks.length > 0) {
95
+ session.promptLeaks = leaks;
96
+ }
97
+ session.withholdVisible = true;
98
+ // why: A detector's stop is reported once, by the verdict on the whole reply.
99
+ const guardrail = result.boundary
100
+ ? undefined
101
+ : guardrailFromHits('live_outbound', 'untrusted', result.hits, 'block');
102
+ if (guardrail) {
103
+ into.push(guardrail);
104
+ }
105
+ }
106
+ /** Scan and release everything held (a non-reply event, or the end of the cycle). */
107
+ function flushHeld(session, gate, into) {
108
+ if (session.withholdVisible || session.held.length === 0) {
109
+ return;
110
+ }
111
+ applyScan(session, gate, gate.flush(), into);
112
+ }
113
+ /** Media waits behind the reply before it, so speech is heard only after its transcript clears the scan. */
114
+ function holdMedia(session, gate, event, transcribed) {
115
+ const at = gate.accumulated().length;
116
+ session.held.push({ event, start: at, end: transcribed ? at : Number.POSITIVE_INFINITY });
117
+ }
118
+ /** The media still waiting for a transcript chunk is covered by this one. */
119
+ function coverMedia(session, end) {
120
+ for (let i = session.held.length - 1; i >= 0; i -= 1) {
121
+ const item = session.held[i];
122
+ if (item === undefined || item.end !== Number.POSITIVE_INFINITY) {
123
+ return;
124
+ }
125
+ item.end = end;
126
+ }
127
+ }
128
+ function holdStreamChunk(session, gate, event, into) {
129
+ const text = event.text ?? '';
130
+ if (!text) {
131
+ return;
132
+ }
133
+ const start = gate.accumulated().length;
134
+ coverMedia(session, start + text.length);
135
+ session.held.push({ event, start, end: start + text.length });
136
+ const result = gate.process(text);
137
+ // why: A withheld cycle keeps feeding the window so finalize judges the whole of it.
138
+ if (!session.withholdVisible)
139
+ applyScan(session, gate, result, into);
140
+ }
141
+ /** Passes one provider message's events through the outbound gate: reply text and audio are held until the egress checks clear them, a prompt leak, or egress hit withholds, and thoughts go through the thought guard. */
142
+ function processLiveOutboundBatch(session, events) {
143
+ const toEmit = [];
144
+ const { gate } = session;
145
+ if (!gate) {
146
+ // why: Nothing reads the reply, but a thought is read at its own boundary.
147
+ const { thoughts } = session;
148
+ if (!thoughts)
149
+ return emitOrIdle(events);
150
+ return emitOrIdle(events.flatMap((event) => event.type === 'thought' ? thoughtEvents(thoughts.push(event.text), event) : [event]));
151
+ }
152
+ // why: One batch is one provider message: its transcript is its audio's.
153
+ let transcribed = false;
154
+ for (const event of events) {
155
+ if (isStreamedCanaryEvent(event)) {
156
+ transcribed ||= Boolean(event.text);
157
+ holdStreamChunk(session, gate, event, toEmit);
158
+ continue;
159
+ }
160
+ if (event.type === 'media') {
161
+ holdMedia(session, gate, event, transcribed);
162
+ // why: Media not yet held until the next event can release it now.
163
+ if (!session.withholdVisible)
164
+ releaseHeld(session, gate, clearedTo(gate), toEmit);
165
+ continue;
166
+ }
167
+ flushHeld(session, gate, toEmit);
168
+ if (isGenerationComplete(event)) {
169
+ releaseSpoken(session, gate, toEmit);
170
+ }
171
+ // why: The model's tool call is read at its `tool_arguments` boundary.
172
+ const leak = event.type === 'tool'
173
+ ? undefined
174
+ : eventLeak(event, session.context, session.policy.detect, 'live_reply');
175
+ if (leak?.stop) {
176
+ return withholdResult(promptLeakReason(leak.hits), leak.hits, toEmit);
177
+ }
178
+ if (leak) {
179
+ const flagged = detectEvent('live_reply', { action: 'flag', hits: leak.hits });
180
+ if (flagged)
181
+ toEmit.push(guardrailTurnEvent(flagged));
182
+ }
183
+ if (event.type === 'thought' && session.thoughts) {
184
+ toEmit.push(...thoughtEvents(session.thoughts.push(event.text), event));
185
+ continue;
186
+ }
187
+ toEmit.push(event);
188
+ }
189
+ return emitOrIdle(toEmit);
190
+ }
191
+ /** What a thought guard released, after the event saying what it omitted from it. */
192
+ function thoughtEvents({ text, hits, found }, event) {
193
+ const detected = found && detectEvent('thought', found);
194
+ const guardrail = guardrailFromHits('thought', 'untrusted', hits, 'redact');
195
+ return [
196
+ ...(detected ? [guardrailTurnEvent(detected)] : []),
197
+ ...(guardrail ? [guardrail] : []),
198
+ ...(text ? [{ ...event, text }] : []),
199
+ ];
200
+ }
201
+ function isGenerationComplete(event) {
202
+ return event.type === 'done' && event.stop?.kind === 'generation_complete';
203
+ }
204
+ /**
205
+ * The model finished speaking: its transcript is whole and cleared, so the
206
+ * audio after its last chunk goes too. A cycle with no transcript keeps its
207
+ * audio for `dropUntranscribed`; a withheld cycle keeps it for the verdict.
208
+ */
209
+ function releaseSpoken(session, gate, into) {
210
+ const whole = gate.accumulated().length;
211
+ if (session.withholdVisible || whole === 0 || clearedTo(gate) < whole) {
212
+ return;
213
+ }
214
+ releaseHeld(session, gate, whole, into, true);
215
+ }
216
+ function emitOrIdle(events) {
217
+ return events.length === 0 ? { action: 'idle' } : { action: 'emit', events };
218
+ }
219
+ /**
220
+ * Live has no repair loop. `guardrails.detect` reads the cycle's whole
221
+ * transcript. Allow releases what is still held; redact and refuse replace it
222
+ * with text (held audio is dropped); block withholds it as a `safety` error.
223
+ */
224
+ function finalEgressVerdict(session, gate, prior) {
225
+ const { detect, blockedReply } = session.policy;
226
+ const read = readReply({ text: gate.accumulated() }, detect, {
227
+ boundary: 'live_reply',
228
+ ...(session.withholdVisible ? { reportedTo: clearedTo(gate) } : {}),
229
+ scope: scopeOf(session.policy, session.context),
230
+ });
231
+ /** The part of the cycle's reply the host already has. */
232
+ const shown = gate.accumulated().slice(0, session.releasedTo);
233
+ const stopped = standingBlock(read, session.promptLeaks);
234
+ // why: A detector's block is reported by its own event, which names the boundary.
235
+ const judged = stopped && stopped !== read.blocked
236
+ ? guardrailFromHits('live_outbound', 'untrusted', stopped, 'block')
237
+ : undefined;
238
+ const events = [...prior, ...read.events.map(guardrailTurnEvent), ...(judged ? [judged] : [])];
239
+ if (stopped) {
240
+ // why: Live never rewrites: audio already spoken cannot be taken back for another try.
241
+ if (blockedReply.onBlock === 'refuse') {
242
+ const text = refusalAfter(shown, session.context.labels);
243
+ return { action: 'emit', events: [...events, { type: 'text', text }] };
244
+ }
245
+ return {
246
+ action: 'withhold',
247
+ error: new TheoremError('safety', WITHHELD_REASON.egress),
248
+ events,
249
+ };
250
+ }
251
+ if (read.rewritten) {
252
+ // why: The audio says what the transcript did: only the replaced text goes out.
253
+ const text = replyAfter(shown, read.payload.text);
254
+ return { action: 'emit', events: [...events, { type: 'text', text }] };
255
+ }
256
+ releaseHeld(session, gate, gate.accumulated().length, events, true);
257
+ return emitOrIdle(events);
258
+ }
259
+ /**
260
+ * A cycle that held audio but produced no transcript: nothing checked the
261
+ * audio, so it is dropped and reported, never released.
262
+ */
263
+ function dropUntranscribed(session, events) {
264
+ if (session.held.length === 0) {
265
+ return events;
266
+ }
267
+ const guardrail = guardrailFromHits('live_outbound', 'untrusted', [UNTRANSCRIBED_HIT], 'block');
268
+ return guardrail ? [...events, guardrail] : events;
269
+ }
270
+ function finalizeCycle(session, gate) {
271
+ const events = [];
272
+ flushHeld(session, gate, events);
273
+ if (!gate.accumulated()) {
274
+ return emitOrIdle(dropUntranscribed(session, events));
275
+ }
276
+ return finalEgressVerdict(session, gate, events);
277
+ }
278
+ /** Call once after the provider has finished the cycle; it also starts the next one. */
279
+ function finalizeLiveOutboundTurn(session) {
280
+ const thought = session.thoughts
281
+ ? thoughtEvents(session.thoughts.flush(), { type: 'thought', text: '' })
282
+ : [];
283
+ if (!session.gate)
284
+ return emitOrIdle(thought);
285
+ const result = finalizeCycle(session, session.gate);
286
+ resetCycle(session);
287
+ if (thought.length === 0)
288
+ return result;
289
+ if (result.action === 'idle')
290
+ return { action: 'emit', events: thought };
291
+ return { ...result, events: [...thought, ...(result.events ?? [])] };
292
+ }
293
+ /** Drop the cycle's held output when the user interrupts mid-turn. */
294
+ function abortLiveOutboundTurn(session) {
295
+ session.thoughts?.flush();
296
+ resetCycle(session);
297
+ }
298
+ export { abortLiveOutboundTurn, createLiveOutboundGateSession, finalizeLiveOutboundTurn, processLiveOutboundBatch, };
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Inbound and outbound guardrail primitives: sanitization, injection, and sensitive detection,
3
+ * canary egress gates, the detectors, and public error mapping. App-specific policy copy stays host-owned.
4
+ *
5
+ * @module
6
+ */
7
+ import "../../_dnt.polyfills.js";
8
+ export type { Boundary, BoundaryMeta, ToolBoundary, ToolCrossing, ToolKind, } from './boundaries.js';
9
+ export { BOUNDARIES, BOUNDARY_META, recordOf, TOOL_BOUNDARIES, TOOL_KINDS, toolBoundary, } from './boundaries.js';
10
+ export type { CanaryGateResult, CanaryStreamGate } from './canary.js';
11
+ export { bindCanary, createCanaryStreamGate, eventHasCanary, isStreamedCanaryEvent, mintCanary, OMIT_CANARY, redactCanary, scanTextForCanaryLeak, USER_CLOSE, USER_OPEN, wrapUserData, } from './canary.js';
12
+ export type { CanaryGateSession } from './canary-gate.js';
13
+ export { createCanaryGateSession, filterCanaryGatedEvents } from './canary-gate.js';
14
+ export type { DestinationVerdict, TurnDestinations } from './destinations.js';
15
+ export { addGivenDestinations, addHistoryDestinations, addRequestDestinations, addResultDestinations, checkDestinationGate, turnDestinations, } from './destinations.js';
16
+ export type { Detection, DetectOutcome } from './detect-at.js';
17
+ export { detectAt } from './detect-at.js';
18
+ export type { DetectAction, DetectMatrix, DetectMeta, Detector, DetectorConfig, DetectorDeclaration, DetectorGroup, DetectorRule, DetectorSource, DetectSources, DetectSpec, HostDetector, HostDetectorConfig, HostDetectorId, HostFind, HostSpan, NameAllow, ResolvedAllow, ResolvedDetect, UrlAllow, UrlDetector, } from './detectors.js';
19
+ export { actionAt, DETECT_ACTION_META, DETECT_ACTIONS, DETECT_DEFAULTS, DETECTOR_BOUNDARIES, DETECTOR_GROUP_META, DETECTOR_GROUPS, DETECTOR_META, DETECTORS, detectProblem, detects, HOST_FIND_HOLD, HOST_FIND_HOLD_LIVE, hintProblem, PATTERN_DETECTORS, resolveAllow, resolveDetect, } from './detectors.js';
20
+ export { hitRules } from './egress.js';
21
+ export type { GivenUrls } from './egress-urls.js';
22
+ export type { ErrorCopies, ErrorCopy, ErrorKind, TheoremErrorOptions } from './error.js';
23
+ export { describeError, ERROR_KINDS, errorKind, isAbortError, isTimeoutError, kindOfHttpStatus, publicError, TheoremError, throwIfAborted, toErrorEvent, withPublicLabels, } from './error.js';
24
+ export { errorCopiesSchema, errorKindSchema, guardrailEventSchema } from './event-schemas.js';
25
+ export { guardrailFromHits, guardrailFromVerdict, guardrailTurnEvent, projectGuardrailTurnEvent, } from './events.js';
26
+ export { hitFromSpan, projectGuardrailEvent, } from './hits.js';
27
+ export type { CompiledPatterns, HostPattern } from './host-patterns.js';
28
+ export { listsPatterns, MAX_PATTERN_LENGTH, MAX_PATTERNS, patternListProblem, } from './host-patterns.js';
29
+ export { injectionSpans } from './injection.js';
30
+ export type { ClientLabelKey, LabelKey, LabelOverrides, LabelParams } from './labels.js';
31
+ export { CLIENT_LABEL_KEYS, LABEL_KEYS, labelCatalogRows, labelDefault, labelText, overrideLabels, resetLabels, validateLabelOverrides, } from './labels.js';
32
+ export type { LiveHeldOutput, LiveOutboundBatchResult, LiveOutboundGateSession, } from './live-outbound-gate.js';
33
+ export { abortLiveOutboundTurn, createLiveOutboundGateSession, finalizeLiveOutboundTurn, processLiveOutboundBatch, } from './live-outbound-gate.js';
34
+ export { resolveGuardrailPolicy } from './policy.js';
35
+ export type { ProgressiveYieldGate, ProgressiveYieldGateOptions, ProgressiveYieldResult, } from './progressive-yield.js';
36
+ export { createOutboundProgressiveGate, createProgressiveYieldGate } from './progressive-yield.js';
37
+ export { PROMPT_ECHO_WORDS, scanTextForPromptEcho } from './prompt-echo.js';
38
+ export type { QuotaSlotStatus } from './quota.js';
39
+ export { clientIp, quotaExhausted, releaseSlot, resetSlots, skipQuota, takeSlot, } from './quota.js';
40
+ export type { GuardrailRule } from './rules.js';
41
+ export { DETECT_RULES, detectRule, EGRESS_RULES, NETWORK_RULES, TOOL_RULES, } from './rules.js';
42
+ export type { SanitizedTurnRequest } from './sanitize.js';
43
+ export { sanitizeHistory, sanitizeProjectId, sanitizeTurnRequest, sanitizeTurnRequestWithEvents, } from './sanitize.js';
44
+ export { sensitiveSpans } from './sensitive.js';
45
+ export type { SensitiveGroup, SensitiveGroups, SensitiveSelection, SensitiveSwitches, } from './sensitive-groups.js';
46
+ export { SENSITIVE_GROUPS } from './sensitive-groups.js';
47
+ export type { ScanText } from './serialize.js';
48
+ export { scanTextOf, textForScan } from './serialize.js';
49
+ export type { Directive, DirectiveSignal } from './tool-directives.js';
50
+ export { advisoryLevel, DIRECTIVE_SIGNALS, directives } from './tool-directives.js';
51
+ export type { GuardedToolText, InspectedToolArguments } from './tool-result.js';
52
+ export { checkTaintGate, composeToolText, guardToolFailureText, guardToolResult, inspectToolArguments, isRemoteOrigin, isSuspicious, isTainted, recordTaint, TOOL_CLOSE, toolCallEvent, wrapToolData, } from './tool-result.js';
53
+ export type { AdvisoryLevel, BlockedReplyOnBlock, BlockedReplySpec, DestinationGate, GuardrailAction, GuardrailContext, GuardrailEvent, GuardrailHit, GuardrailStage, HostGuardrailsSpec, NetworkGuardrailSpec, OutboundPayload, ProfileGuardrailsSpec, Provenance, QuotaGuardrailSpec, ResolvedBlockedReply, ResolvedGuardrailPolicy, Severity, TaintGate, TaintGuardrailSpec, ToolOrigin, TrustLevel, TurnTaint, Verdict, } from './types.js';
54
+ export { ADVISORY_LEVELS, BLOCKED_REPLY_ON_BLOCK, DESTINATION_GATES, GUARDRAIL_STAGES, SEVERITIES, TAINT_GATES, TOOL_ORIGINS, TRUST_LEVELS, } from './types.js';
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Inbound and outbound guardrail primitives: sanitization, injection, and sensitive detection,
3
+ * canary egress gates, the detectors, and public error mapping. App-specific policy copy stays host-owned.
4
+ *
5
+ * @module
6
+ */
7
+ import "../../_dnt.polyfills.js";
8
+ export { BOUNDARIES, BOUNDARY_META, recordOf, TOOL_BOUNDARIES, TOOL_KINDS, toolBoundary, } from './boundaries.js';
9
+ export { bindCanary, createCanaryStreamGate, eventHasCanary, isStreamedCanaryEvent, mintCanary, OMIT_CANARY, redactCanary, scanTextForCanaryLeak, USER_CLOSE, USER_OPEN, wrapUserData, } from './canary.js';
10
+ export { createCanaryGateSession, filterCanaryGatedEvents } from './canary-gate.js';
11
+ export { addGivenDestinations, addHistoryDestinations, addRequestDestinations, addResultDestinations, checkDestinationGate, turnDestinations, } from './destinations.js';
12
+ export { detectAt } from './detect-at.js';
13
+ export { actionAt, DETECT_ACTION_META, DETECT_ACTIONS, DETECT_DEFAULTS, DETECTOR_BOUNDARIES, DETECTOR_GROUP_META, DETECTOR_GROUPS, DETECTOR_META, DETECTORS, detectProblem, detects, HOST_FIND_HOLD, HOST_FIND_HOLD_LIVE, hintProblem, PATTERN_DETECTORS, resolveAllow, resolveDetect, } from './detectors.js';
14
+ export { hitRules } from './egress.js';
15
+ export { describeError, ERROR_KINDS, errorKind, isAbortError, isTimeoutError, kindOfHttpStatus, publicError, TheoremError, throwIfAborted, toErrorEvent, withPublicLabels, } from './error.js';
16
+ export { errorCopiesSchema, errorKindSchema, guardrailEventSchema } from './event-schemas.js';
17
+ export { guardrailFromHits, guardrailFromVerdict, guardrailTurnEvent, projectGuardrailTurnEvent, } from './events.js';
18
+ export { hitFromSpan, projectGuardrailEvent, } from './hits.js';
19
+ export { listsPatterns, MAX_PATTERN_LENGTH, MAX_PATTERNS, patternListProblem, } from './host-patterns.js';
20
+ export { injectionSpans } from './injection.js';
21
+ export { CLIENT_LABEL_KEYS, LABEL_KEYS, labelCatalogRows, labelDefault, labelText, overrideLabels, resetLabels, validateLabelOverrides, } from './labels.js';
22
+ export { abortLiveOutboundTurn, createLiveOutboundGateSession, finalizeLiveOutboundTurn, processLiveOutboundBatch, } from './live-outbound-gate.js';
23
+ export { resolveGuardrailPolicy } from './policy.js';
24
+ export { createOutboundProgressiveGate, createProgressiveYieldGate } from './progressive-yield.js';
25
+ export { PROMPT_ECHO_WORDS, scanTextForPromptEcho } from './prompt-echo.js';
26
+ export { clientIp, quotaExhausted, releaseSlot, resetSlots, skipQuota, takeSlot, } from './quota.js';
27
+ export { DETECT_RULES, detectRule, EGRESS_RULES, NETWORK_RULES, TOOL_RULES, } from './rules.js';
28
+ export { sanitizeHistory, sanitizeProjectId, sanitizeTurnRequest, sanitizeTurnRequestWithEvents, } from './sanitize.js';
29
+ export { sensitiveSpans } from './sensitive.js';
30
+ export { SENSITIVE_GROUPS } from './sensitive-groups.js';
31
+ export { scanTextOf, textForScan } from './serialize.js';
32
+ export { advisoryLevel, DIRECTIVE_SIGNALS, directives } from './tool-directives.js';
33
+ export { checkTaintGate, composeToolText, guardToolFailureText, guardToolResult, inspectToolArguments, isRemoteOrigin, isSuspicious, isTainted, recordTaint, TOOL_CLOSE, toolCallEvent, wrapToolData, } from './tool-result.js';
34
+ export { ADVISORY_LEVELS, BLOCKED_REPLY_ON_BLOCK, DESTINATION_GATES, GUARDRAIL_STAGES, SEVERITIES, TAINT_GATES, TOOL_ORIGINS, TRUST_LEVELS, } from './types.js';
@@ -0,0 +1,46 @@
1
+ import type { NetworkGuardrailSpec } from './types.js';
2
+ /** True for loopback addresses and names reserved for local use: `localhost`, `.local`, `.internal`, `.lan`, `.home.arpa`, and `.localdomain`. */
3
+ export declare function isLocalhostName(hostname: string): boolean;
4
+ /** True when the IP address, or bracketed IPv6 host, is a private or local IPv4 or IPv6 address. */
5
+ export declare function isPrivateOrLocalAddress(ipOrHost: string): boolean;
6
+ /** Throws a `TheoremError` when the URL is blocked. */
7
+ export declare function assertSafeUrl(urlStr: string, policy?: NetworkGuardrailSpec): URL;
8
+ /** Options for a fetch that checks the network policy on every hop. */
9
+ export interface GuardedFetchOptions {
10
+ policy?: NetworkGuardrailSpec;
11
+ /** Follow redirects, clearing each hop; when false a redirect comes back as the response. */
12
+ followRedirects: boolean;
13
+ /**
14
+ * Headers for the first request's origin only: credentials and host-configured
15
+ * headers. Once a redirect leaves that origin they are never sent again.
16
+ */
17
+ originBoundHeaders?: Record<string, string>;
18
+ /**
19
+ * Resolves each hop's host name before it is fetched; the hop is refused when
20
+ * any address is private or the name does not resolve. Skipped for literal
21
+ * addresses and wherever `policy` already permits private targets.
22
+ */
23
+ resolveHost?: ResolveHost;
24
+ fetchFn?: typeof fetch;
25
+ /** Told how long each hop's checks took: its address, and its lookup when `resolveHost` is set. */
26
+ onCheck?: (ms: number) => void;
27
+ }
28
+ /** A host name's IPv4 and IPv6 addresses; empty when the name does not exist. */
29
+ export type ResolveHost = (hostname: string, signal?: AbortSignal) => Promise<readonly string[]>;
30
+ /** Every redirect hop must clear `policy`; throws a `TheoremError` (`blocked`) when one is refused. */
31
+ export declare function fetchGuarded(url: string, init: Omit<RequestInit, 'redirect' | 'body'> & {
32
+ body?: string;
33
+ }, options: GuardedFetchOptions): Promise<Response>;
34
+ /** Options for `dnsOverHttpsResolver`: the DNS JSON endpoint and an optional `fetch`. */
35
+ export interface DnsOverHttpsOptions {
36
+ /** A DNS JSON API endpoint, e.g. `https://cloudflare-dns.com/dns-query`. */
37
+ endpoint: string;
38
+ fetchFn?: typeof fetch;
39
+ }
40
+ /**
41
+ * A {@link ResolveHost} over DNS-over-HTTPS (the DNS JSON API), for runtimes
42
+ * with `fetch` but no DNS lookup, such as Cloudflare Workers. It asks the
43
+ * endpoint, not the machine's resolver, so names only an internal resolver
44
+ * knows are not seen; a server host should resolve through its own DNS.
45
+ */
46
+ export declare function dnsOverHttpsResolver(options: DnsOverHttpsOptions): ResolveHost;