@theoremjs/agents 0.0.0-stage → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1264 -2
  3. package/esm/_dnt.polyfills.d.ts +66 -0
  4. package/esm/_dnt.polyfills.js +51 -0
  5. package/esm/mod.d.ts +65 -0
  6. package/esm/mod.js +42 -0
  7. package/esm/package.json +3 -0
  8. package/esm/src/cli/bin.d.ts +7 -0
  9. package/esm/src/cli/bin.js +9 -0
  10. package/esm/src/cli/commands/bench.d.ts +6 -0
  11. package/esm/src/cli/commands/bench.js +458 -0
  12. package/esm/src/cli/commands/egress-compile.d.ts +17 -0
  13. package/esm/src/cli/commands/egress-compile.js +25 -0
  14. package/esm/src/cli/commands/eval.d.ts +37 -0
  15. package/esm/src/cli/commands/eval.js +190 -0
  16. package/esm/src/cli/commands/fuzz-canary.d.ts +15 -0
  17. package/esm/src/cli/commands/fuzz-canary.js +202 -0
  18. package/esm/src/cli/commands/fuzz-guardrails.d.ts +2 -0
  19. package/esm/src/cli/commands/fuzz-guardrails.js +5 -0
  20. package/esm/src/cli/commands/profile.d.ts +2 -0
  21. package/esm/src/cli/commands/profile.js +80 -0
  22. package/esm/src/cli/commands/run.d.ts +13 -0
  23. package/esm/src/cli/commands/run.js +45 -0
  24. package/esm/src/cli/commands/test.d.ts +25 -0
  25. package/esm/src/cli/commands/test.js +143 -0
  26. package/esm/src/cli/event-log.d.ts +15 -0
  27. package/esm/src/cli/event-log.js +136 -0
  28. package/esm/src/cli/index.d.ts +10 -0
  29. package/esm/src/cli/index.js +267 -0
  30. package/esm/src/cli/matrix/fixtures.d.ts +10 -0
  31. package/esm/src/cli/matrix/fixtures.js +72 -0
  32. package/esm/src/cli/matrix/synthesizer.d.ts +18 -0
  33. package/esm/src/cli/matrix/synthesizer.js +103 -0
  34. package/esm/src/evals/attachments.d.ts +4 -0
  35. package/esm/src/evals/attachments.js +53 -0
  36. package/esm/src/evals/breakdown.d.ts +28 -0
  37. package/esm/src/evals/breakdown.js +68 -0
  38. package/esm/src/evals/graders/answer.d.ts +13 -0
  39. package/esm/src/evals/graders/answer.js +133 -0
  40. package/esm/src/evals/graders/code.d.ts +64 -0
  41. package/esm/src/evals/graders/code.js +205 -0
  42. package/esm/src/evals/graders/judge.d.ts +20 -0
  43. package/esm/src/evals/graders/judge.js +365 -0
  44. package/esm/src/evals/graders/latency.d.ts +5 -0
  45. package/esm/src/evals/graders/latency.js +81 -0
  46. package/esm/src/evals/graders/live.d.ts +11 -0
  47. package/esm/src/evals/graders/live.js +40 -0
  48. package/esm/src/evals/graders/media.d.ts +18 -0
  49. package/esm/src/evals/graders/media.js +92 -0
  50. package/esm/src/evals/graders/shared.d.ts +11 -0
  51. package/esm/src/evals/graders/shared.js +62 -0
  52. package/esm/src/evals/graders/transcript.d.ts +17 -0
  53. package/esm/src/evals/graders/transcript.js +200 -0
  54. package/esm/src/evals/mod.d.ts +42 -0
  55. package/esm/src/evals/mod.js +30 -0
  56. package/esm/src/evals/record.d.ts +35 -0
  57. package/esm/src/evals/record.js +105 -0
  58. package/esm/src/evals/rubrics/catalog.d.ts +148 -0
  59. package/esm/src/evals/rubrics/catalog.js +846 -0
  60. package/esm/src/evals/rubrics/mod.d.ts +24 -0
  61. package/esm/src/evals/rubrics/mod.js +55 -0
  62. package/esm/src/evals/rubrics/mustache.d.ts +23 -0
  63. package/esm/src/evals/rubrics/mustache.js +154 -0
  64. package/esm/src/evals/rubrics/types.d.ts +54 -0
  65. package/esm/src/evals/rubrics/types.js +74 -0
  66. package/esm/src/evals/run.d.ts +118 -0
  67. package/esm/src/evals/run.js +452 -0
  68. package/esm/src/evals/suite.d.ts +19 -0
  69. package/esm/src/evals/suite.js +92 -0
  70. package/esm/src/evals/summary.d.ts +32 -0
  71. package/esm/src/evals/summary.js +30 -0
  72. package/esm/src/evals/trial.d.ts +27 -0
  73. package/esm/src/evals/trial.js +158 -0
  74. package/esm/src/evals/types.d.ts +260 -0
  75. package/esm/src/evals/types.js +126 -0
  76. package/esm/src/evals/verdict.d.ts +18 -0
  77. package/esm/src/evals/verdict.js +45 -0
  78. package/esm/src/guardrails/canary-gate.d.ts +21 -0
  79. package/esm/src/guardrails/canary-gate.js +40 -0
  80. package/esm/src/guardrails/canary.d.ts +112 -0
  81. package/esm/src/guardrails/canary.js +901 -0
  82. package/esm/src/guardrails/compile-egress.d.ts +11 -0
  83. package/esm/src/guardrails/compile-egress.js +11 -0
  84. package/esm/src/guardrails/corpus/canary-egress-attacks.d.ts +22 -0
  85. package/esm/src/guardrails/corpus/canary-egress-attacks.js +303 -0
  86. package/esm/src/guardrails/corpus/fuzz-inbound.d.ts +5 -0
  87. package/esm/src/guardrails/corpus/fuzz-inbound.js +202 -0
  88. package/esm/src/guardrails/corpus/inbound-payloads.d.ts +3 -0
  89. package/esm/src/guardrails/corpus/inbound-payloads.js +118 -0
  90. package/esm/src/guardrails/corpus/live-attacks.d.ts +13 -0
  91. package/esm/src/guardrails/corpus/live-attacks.js +224 -0
  92. package/esm/src/guardrails/corpus/mod.d.ts +7 -0
  93. package/esm/src/guardrails/corpus/mod.js +4 -0
  94. package/esm/src/guardrails/corpus/secrets.d.ts +12 -0
  95. package/esm/src/guardrails/corpus/secrets.js +16 -0
  96. package/esm/src/guardrails/corpus/strings.d.ts +23 -0
  97. package/esm/src/guardrails/corpus/strings.js +29 -0
  98. package/esm/src/guardrails/corpus/types.d.ts +32 -0
  99. package/esm/src/guardrails/corpus/types.js +1 -0
  100. package/esm/src/guardrails/egress-automata.d.ts +14 -0
  101. package/esm/src/guardrails/egress-automata.js +6059 -0
  102. package/esm/src/guardrails/egress-compiler.d.ts +33 -0
  103. package/esm/src/guardrails/egress-compiler.js +237 -0
  104. package/esm/src/guardrails/egress-patterns.d.ts +24 -0
  105. package/esm/src/guardrails/egress-patterns.js +32 -0
  106. package/esm/src/guardrails/egress-policy.d.ts +27 -0
  107. package/esm/src/guardrails/egress-policy.js +76 -0
  108. package/esm/src/guardrails/egress-rules.d.ts +54 -0
  109. package/esm/src/guardrails/egress-rules.js +49 -0
  110. package/esm/src/guardrails/egress-stream.d.ts +105 -0
  111. package/esm/src/guardrails/egress-stream.js +645 -0
  112. package/esm/src/guardrails/egress-urls.d.ts +83 -0
  113. package/esm/src/guardrails/egress-urls.js +917 -0
  114. package/esm/src/guardrails/egress.d.ts +106 -0
  115. package/esm/src/guardrails/egress.js +374 -0
  116. package/esm/src/guardrails/error.d.ts +26 -0
  117. package/esm/src/guardrails/error.js +91 -0
  118. package/esm/src/guardrails/event-schemas.d.ts +57 -0
  119. package/esm/src/guardrails/event-schemas.js +41 -0
  120. package/esm/src/guardrails/events.d.ts +9 -0
  121. package/esm/src/guardrails/events.js +42 -0
  122. package/esm/src/guardrails/hits.d.ts +8 -0
  123. package/esm/src/guardrails/hits.js +19 -0
  124. package/esm/src/guardrails/injection-patterns.d.ts +15 -0
  125. package/esm/src/guardrails/injection-patterns.js +94 -0
  126. package/esm/src/guardrails/injection.d.ts +14 -0
  127. package/esm/src/guardrails/injection.js +237 -0
  128. package/esm/src/guardrails/lexicon.d.ts +30 -0
  129. package/esm/src/guardrails/lexicon.js +478 -0
  130. package/esm/src/guardrails/live-outbound-gate.d.ts +54 -0
  131. package/esm/src/guardrails/live-outbound-gate.js +305 -0
  132. package/esm/src/guardrails/mod.d.ts +46 -0
  133. package/esm/src/guardrails/mod.js +29 -0
  134. package/esm/src/guardrails/network.d.ts +42 -0
  135. package/esm/src/guardrails/network.js +328 -0
  136. package/esm/src/guardrails/normalize.d.ts +6 -0
  137. package/esm/src/guardrails/normalize.js +132 -0
  138. package/esm/src/guardrails/policy.d.ts +19 -0
  139. package/esm/src/guardrails/policy.js +50 -0
  140. package/esm/src/guardrails/progressive-yield.d.ts +69 -0
  141. package/esm/src/guardrails/progressive-yield.js +237 -0
  142. package/esm/src/guardrails/prompt-echo.d.ts +38 -0
  143. package/esm/src/guardrails/prompt-echo.js +225 -0
  144. package/esm/src/guardrails/quota.d.ts +20 -0
  145. package/esm/src/guardrails/quota.js +80 -0
  146. package/esm/src/guardrails/rules.d.ts +56 -0
  147. package/esm/src/guardrails/rules.js +54 -0
  148. package/esm/src/guardrails/sanitize.d.ts +23 -0
  149. package/esm/src/guardrails/sanitize.js +184 -0
  150. package/esm/src/guardrails/sensitive.d.ts +29 -0
  151. package/esm/src/guardrails/sensitive.js +113 -0
  152. package/esm/src/guardrails/serialize.d.ts +14 -0
  153. package/esm/src/guardrails/serialize.js +37 -0
  154. package/esm/src/guardrails/testing.d.ts +9 -0
  155. package/esm/src/guardrails/testing.js +8 -0
  156. package/esm/src/guardrails/theorem-error.d.ts +18 -0
  157. package/esm/src/guardrails/theorem-error.js +53 -0
  158. package/esm/src/guardrails/thought-guard.d.ts +55 -0
  159. package/esm/src/guardrails/thought-guard.js +464 -0
  160. package/esm/src/guardrails/tool-directives.d.ts +19 -0
  161. package/esm/src/guardrails/tool-directives.js +109 -0
  162. package/esm/src/guardrails/tool-result.d.ts +61 -0
  163. package/esm/src/guardrails/tool-result.js +248 -0
  164. package/esm/src/guardrails/types.d.ts +242 -0
  165. package/esm/src/guardrails/types.js +54 -0
  166. package/esm/src/host/client-turn.d.ts +9 -0
  167. package/esm/src/host/client-turn.js +38 -0
  168. package/esm/src/host/mint-trace.d.ts +28 -0
  169. package/esm/src/host/mint-trace.js +59 -0
  170. package/esm/src/host/mod.d.ts +13 -0
  171. package/esm/src/host/mod.js +11 -0
  172. package/esm/src/host/readStreamingJsonStringField.d.ts +2 -0
  173. package/esm/src/host/readStreamingJsonStringField.js +68 -0
  174. package/esm/src/host/reply.d.ts +7 -0
  175. package/esm/src/host/reply.js +35 -0
  176. package/esm/src/interface/blocks.d.ts +8 -0
  177. package/esm/src/interface/blocks.js +213 -0
  178. package/esm/src/interface/composer-actions.d.ts +20 -0
  179. package/esm/src/interface/composer-actions.js +31 -0
  180. package/esm/src/interface/draft.d.ts +14 -0
  181. package/esm/src/interface/draft.js +28 -0
  182. package/esm/src/interface/from-profile.d.ts +12 -0
  183. package/esm/src/interface/from-profile.js +144 -0
  184. package/esm/src/interface/history.d.ts +40 -0
  185. package/esm/src/interface/history.js +269 -0
  186. package/esm/src/interface/inputs.d.ts +10 -0
  187. package/esm/src/interface/inputs.js +64 -0
  188. package/esm/src/interface/mod.d.ts +31 -0
  189. package/esm/src/interface/mod.js +21 -0
  190. package/esm/src/interface/models.d.ts +19 -0
  191. package/esm/src/interface/models.js +45 -0
  192. package/esm/src/interface/pending.d.ts +48 -0
  193. package/esm/src/interface/pending.js +146 -0
  194. package/esm/src/interface/profile-interface.d.ts +4 -0
  195. package/esm/src/interface/profile-interface.js +223 -0
  196. package/esm/src/interface/session.d.ts +64 -0
  197. package/esm/src/interface/session.js +121 -0
  198. package/esm/src/interface/tool-calls.d.ts +20 -0
  199. package/esm/src/interface/tool-calls.js +73 -0
  200. package/esm/src/interface/tool-invoke.d.ts +4 -0
  201. package/esm/src/interface/tool-invoke.js +20 -0
  202. package/esm/src/interface/tool-media.d.ts +9 -0
  203. package/esm/src/interface/tool-media.js +112 -0
  204. package/esm/src/interface/types.d.ts +213 -0
  205. package/esm/src/interface/types.js +4 -0
  206. package/esm/src/kernel/auth/credential-source.d.ts +23 -0
  207. package/esm/src/kernel/auth/credential-source.js +11 -0
  208. package/esm/src/kernel/auth/crypto.d.ts +51 -0
  209. package/esm/src/kernel/auth/crypto.js +161 -0
  210. package/esm/src/kernel/auth/mod.d.ts +5 -0
  211. package/esm/src/kernel/auth/mod.js +5 -0
  212. package/esm/src/kernel/auth/oauth.d.ts +17 -0
  213. package/esm/src/kernel/auth/oauth.js +438 -0
  214. package/esm/src/kernel/auth/scope-refusal.d.ts +9 -0
  215. package/esm/src/kernel/auth/scope-refusal.js +8 -0
  216. package/esm/src/kernel/auth/typed-secret.d.ts +13 -0
  217. package/esm/src/kernel/auth/typed-secret.js +23 -0
  218. package/esm/src/kernel/auth/types.d.ts +139 -0
  219. package/esm/src/kernel/auth/types.js +1 -0
  220. package/esm/src/kernel/default-scope.d.ts +34 -0
  221. package/esm/src/kernel/default-scope.js +72 -0
  222. package/esm/src/kernel/engine/compaction.d.ts +70 -0
  223. package/esm/src/kernel/engine/compaction.js +202 -0
  224. package/esm/src/kernel/engine/decision.d.ts +41 -0
  225. package/esm/src/kernel/engine/decision.js +412 -0
  226. package/esm/src/kernel/engine/hash.d.ts +6 -0
  227. package/esm/src/kernel/engine/hash.js +22 -0
  228. package/esm/src/kernel/engine/live-inbound.d.ts +9 -0
  229. package/esm/src/kernel/engine/live-inbound.js +19 -0
  230. package/esm/src/kernel/engine/live-ingress.d.ts +9 -0
  231. package/esm/src/kernel/engine/live-ingress.js +37 -0
  232. package/esm/src/kernel/engine/media-probe/audio.d.ts +7 -0
  233. package/esm/src/kernel/engine/media-probe/audio.js +342 -0
  234. package/esm/src/kernel/engine/media-probe/bytes.d.ts +6 -0
  235. package/esm/src/kernel/engine/media-probe/bytes.js +26 -0
  236. package/esm/src/kernel/engine/media-probe/image.d.ts +5 -0
  237. package/esm/src/kernel/engine/media-probe/image.js +171 -0
  238. package/esm/src/kernel/engine/media-probe/iso-bmff.d.ts +19 -0
  239. package/esm/src/kernel/engine/media-probe/iso-bmff.js +48 -0
  240. package/esm/src/kernel/engine/media-probe/matroska.d.ts +35 -0
  241. package/esm/src/kernel/engine/media-probe/matroska.js +226 -0
  242. package/esm/src/kernel/engine/media-probe/mp4.d.ts +22 -0
  243. package/esm/src/kernel/engine/media-probe/mp4.js +279 -0
  244. package/esm/src/kernel/engine/media-probe/opus.d.ts +4 -0
  245. package/esm/src/kernel/engine/media-probe/opus.js +23 -0
  246. package/esm/src/kernel/engine/media-probe/pdf.d.ts +5 -0
  247. package/esm/src/kernel/engine/media-probe/pdf.js +117 -0
  248. package/esm/src/kernel/engine/media-probe/video.d.ts +15 -0
  249. package/esm/src/kernel/engine/media-probe/video.js +49 -0
  250. package/esm/src/kernel/engine/record.d.ts +3 -0
  251. package/esm/src/kernel/engine/record.js +11 -0
  252. package/esm/src/kernel/engine/repair.d.ts +7 -0
  253. package/esm/src/kernel/engine/repair.js +36 -0
  254. package/esm/src/kernel/engine/runner/gates.d.ts +5 -0
  255. package/esm/src/kernel/engine/runner/gates.js +322 -0
  256. package/esm/src/kernel/engine/runner/mod.d.ts +15 -0
  257. package/esm/src/kernel/engine/runner/mod.js +574 -0
  258. package/esm/src/kernel/engine/runner/schema-validation.d.ts +14 -0
  259. package/esm/src/kernel/engine/runner/schema-validation.js +105 -0
  260. package/esm/src/kernel/engine/runner/stages.d.ts +28 -0
  261. package/esm/src/kernel/engine/runner/stages.js +48 -0
  262. package/esm/src/kernel/engine/runner/state.d.ts +76 -0
  263. package/esm/src/kernel/engine/runner/state.js +40 -0
  264. package/esm/src/kernel/engine/runner/steps.d.ts +14 -0
  265. package/esm/src/kernel/engine/runner/steps.js +360 -0
  266. package/esm/src/kernel/engine/runner/stream.d.ts +40 -0
  267. package/esm/src/kernel/engine/runner/stream.js +225 -0
  268. package/esm/src/kernel/engine/runner/usage.d.ts +45 -0
  269. package/esm/src/kernel/engine/runner/usage.js +150 -0
  270. package/esm/src/kernel/engine/session/mod.d.ts +31 -0
  271. package/esm/src/kernel/engine/session/mod.js +951 -0
  272. package/esm/src/kernel/engine/session/session-trace.d.ts +115 -0
  273. package/esm/src/kernel/engine/session/session-trace.js +489 -0
  274. package/esm/src/kernel/engine/token-estimate.d.ts +77 -0
  275. package/esm/src/kernel/engine/token-estimate.js +218 -0
  276. package/esm/src/kernel/engine/tool-trace.d.ts +58 -0
  277. package/esm/src/kernel/engine/tool-trace.js +131 -0
  278. package/esm/src/kernel/engine/tree.d.ts +2 -0
  279. package/esm/src/kernel/engine/tree.js +17 -0
  280. package/esm/src/kernel/engine/turn-trace.d.ts +118 -0
  281. package/esm/src/kernel/engine/turn-trace.js +863 -0
  282. package/esm/src/kernel/engine/usage.d.ts +30 -0
  283. package/esm/src/kernel/engine/usage.js +134 -0
  284. package/esm/src/kernel/interaction-parts.d.ts +10 -0
  285. package/esm/src/kernel/interaction-parts.js +22 -0
  286. package/esm/src/kernel/mod.d.ts +47 -0
  287. package/esm/src/kernel/mod.js +30 -0
  288. package/esm/src/kernel/profile-graph.d.ts +140 -0
  289. package/esm/src/kernel/profile-graph.js +151 -0
  290. package/esm/src/kernel/profile-presence.d.ts +9 -0
  291. package/esm/src/kernel/profile-presence.js +143 -0
  292. package/esm/src/kernel/profile-scope.d.ts +36 -0
  293. package/esm/src/kernel/profile-scope.js +262 -0
  294. package/esm/src/kernel/registry/attachments.d.ts +35 -0
  295. package/esm/src/kernel/registry/attachments.js +211 -0
  296. package/esm/src/kernel/registry/catalog.d.ts +19 -0
  297. package/esm/src/kernel/registry/catalog.js +78 -0
  298. package/esm/src/kernel/registry/ingress.d.ts +8 -0
  299. package/esm/src/kernel/registry/ingress.js +134 -0
  300. package/esm/src/kernel/registry/kernel-registry.d.ts +12 -0
  301. package/esm/src/kernel/registry/kernel-registry.js +8 -0
  302. package/esm/src/kernel/registry/profile-outputs.d.ts +3 -0
  303. package/esm/src/kernel/registry/profile-outputs.js +7 -0
  304. package/esm/src/kernel/registry/profiles.d.ts +92 -0
  305. package/esm/src/kernel/registry/profiles.js +698 -0
  306. package/esm/src/kernel/registry/provider-request.d.ts +6 -0
  307. package/esm/src/kernel/registry/provider-request.js +42 -0
  308. package/esm/src/kernel/registry/resolve.d.ts +14 -0
  309. package/esm/src/kernel/registry/resolve.js +237 -0
  310. package/esm/src/kernel/registry/schemas.d.ts +9 -0
  311. package/esm/src/kernel/registry/schemas.js +25 -0
  312. package/esm/src/kernel/registry/sole-model.d.ts +2 -0
  313. package/esm/src/kernel/registry/sole-model.js +4 -0
  314. package/esm/src/kernel/registry/system-prompt.d.ts +8 -0
  315. package/esm/src/kernel/registry/system-prompt.js +33 -0
  316. package/esm/src/kernel/registry/system-role.d.ts +3 -0
  317. package/esm/src/kernel/registry/system-role.js +9 -0
  318. package/esm/src/kernel/registry/vault.d.ts +13 -0
  319. package/esm/src/kernel/registry/vault.js +14 -0
  320. package/esm/src/kernel/schema.d.ts +172 -0
  321. package/esm/src/kernel/schema.js +653 -0
  322. package/esm/src/kernel/scope.d.ts +22 -0
  323. package/esm/src/kernel/scope.js +25 -0
  324. package/esm/src/kernel/stages.d.ts +141 -0
  325. package/esm/src/kernel/stages.js +388 -0
  326. package/esm/src/kernel/stop.d.ts +93 -0
  327. package/esm/src/kernel/stop.js +125 -0
  328. package/esm/src/kernel/system-parts.d.ts +26 -0
  329. package/esm/src/kernel/system-parts.js +98 -0
  330. package/esm/src/kernel/tools/activity-label.d.ts +16 -0
  331. package/esm/src/kernel/tools/activity-label.js +209 -0
  332. package/esm/src/kernel/tools/events.d.ts +51 -0
  333. package/esm/src/kernel/tools/events.js +149 -0
  334. package/esm/src/kernel/tools/execute.d.ts +64 -0
  335. package/esm/src/kernel/tools/execute.js +801 -0
  336. package/esm/src/kernel/tools/gate-answer.d.ts +50 -0
  337. package/esm/src/kernel/tools/gate-answer.js +54 -0
  338. package/esm/src/kernel/tools/harness.d.ts +16 -0
  339. package/esm/src/kernel/tools/harness.js +42 -0
  340. package/esm/src/kernel/tools/invoke.d.ts +10 -0
  341. package/esm/src/kernel/tools/invoke.js +129 -0
  342. package/esm/src/kernel/tools/mcp-sessions.d.ts +20 -0
  343. package/esm/src/kernel/tools/mcp-sessions.js +64 -0
  344. package/esm/src/kernel/tools/mod.d.ts +9 -0
  345. package/esm/src/kernel/tools/mod.js +6 -0
  346. package/esm/src/kernel/tools/model-text.d.ts +11 -0
  347. package/esm/src/kernel/tools/model-text.js +25 -0
  348. package/esm/src/kernel/tools/permission.d.ts +6 -0
  349. package/esm/src/kernel/tools/permission.js +38 -0
  350. package/esm/src/kernel/tools/project.d.ts +8 -0
  351. package/esm/src/kernel/tools/project.js +25 -0
  352. package/esm/src/kernel/tools/registry.d.ts +20 -0
  353. package/esm/src/kernel/tools/registry.js +84 -0
  354. package/esm/src/kernel/tools/remote.d.ts +110 -0
  355. package/esm/src/kernel/tools/remote.js +998 -0
  356. package/esm/src/kernel/tools/resolve.d.ts +28 -0
  357. package/esm/src/kernel/tools/resolve.js +259 -0
  358. package/esm/src/kernel/tools/schema.d.ts +10 -0
  359. package/esm/src/kernel/tools/schema.js +174 -0
  360. package/esm/src/kernel/tools/signed-in-fetch.d.ts +18 -0
  361. package/esm/src/kernel/tools/signed-in-fetch.js +45 -0
  362. package/esm/src/kernel/tools/stage-run.d.ts +93 -0
  363. package/esm/src/kernel/tools/stage-run.js +140 -0
  364. package/esm/src/kernel/tools/types.d.ts +287 -0
  365. package/esm/src/kernel/tools/types.js +1 -0
  366. package/esm/src/kernel/turn-events.d.ts +599 -0
  367. package/esm/src/kernel/turn-events.js +425 -0
  368. package/esm/src/kernel/types.d.ts +884 -0
  369. package/esm/src/kernel/types.js +1 -0
  370. package/esm/src/kernel/util/base64.d.ts +2 -0
  371. package/esm/src/kernel/util/base64.js +13 -0
  372. package/esm/src/kernel/util/exact-type.d.ts +31 -0
  373. package/esm/src/kernel/util/exact-type.js +1 -0
  374. package/esm/src/kernel/util/find-last.d.ts +3 -0
  375. package/esm/src/kernel/util/find-last.js +9 -0
  376. package/esm/src/kernel/util/mime.d.ts +2 -0
  377. package/esm/src/kernel/util/mime.js +4 -0
  378. package/esm/src/kernel/util/record.d.ts +1 -0
  379. package/esm/src/kernel/util/record.js +3 -0
  380. package/esm/src/observability/destinations.d.ts +9 -0
  381. package/esm/src/observability/destinations.js +38 -0
  382. package/esm/src/observability/jsonl.d.ts +18 -0
  383. package/esm/src/observability/jsonl.js +117 -0
  384. package/esm/src/observability/mod.d.ts +22 -0
  385. package/esm/src/observability/mod.js +16 -0
  386. package/esm/src/observability/openinference.d.ts +11 -0
  387. package/esm/src/observability/openinference.js +205 -0
  388. package/esm/src/observability/otlp.d.ts +68 -0
  389. package/esm/src/observability/otlp.js +98 -0
  390. package/esm/src/observability/phoenix.d.ts +29 -0
  391. package/esm/src/observability/phoenix.js +71 -0
  392. package/esm/src/observability/policy.d.ts +14 -0
  393. package/esm/src/observability/policy.js +69 -0
  394. package/esm/src/observability/resolve-policy.d.ts +8 -0
  395. package/esm/src/observability/resolve-policy.js +58 -0
  396. package/esm/src/observability/spans.d.ts +16 -0
  397. package/esm/src/observability/spans.js +56 -0
  398. package/esm/src/observability/trace-catalog.d.ts +111 -0
  399. package/esm/src/observability/trace-catalog.js +865 -0
  400. package/esm/src/observability/trace-record.d.ts +23 -0
  401. package/esm/src/observability/trace-record.js +223 -0
  402. package/esm/src/observability/trace-schema.d.ts +54 -0
  403. package/esm/src/observability/trace-schema.js +59 -0
  404. package/esm/src/observability/trace-sink.d.ts +13 -0
  405. package/esm/src/observability/trace-sink.js +3 -0
  406. package/esm/src/observability/trace-span.d.ts +92 -0
  407. package/esm/src/observability/trace-span.js +199 -0
  408. package/esm/src/observability/trace.d.ts +11 -0
  409. package/esm/src/observability/trace.js +35 -0
  410. package/esm/src/observability/types.d.ts +85 -0
  411. package/esm/src/observability/types.js +3 -0
  412. package/esm/src/presets/google/speech-voices.d.ts +8 -0
  413. package/esm/src/presets/google/speech-voices.js +38 -0
  414. package/esm/src/presets/google-limits.d.ts +12 -0
  415. package/esm/src/presets/google-limits.js +18 -0
  416. package/esm/src/presets/google.d.ts +104 -0
  417. package/esm/src/presets/google.js +188 -0
  418. package/esm/src/presets/mod.d.ts +10 -0
  419. package/esm/src/presets/mod.js +9 -0
  420. package/esm/src/presets/openrouter.d.ts +13 -0
  421. package/esm/src/presets/openrouter.js +13 -0
  422. package/esm/src/presets/typesafe.d.ts +2 -0
  423. package/esm/src/presets/typesafe.js +2 -0
  424. package/esm/src/providers/create-provider.d.ts +21 -0
  425. package/esm/src/providers/create-provider.js +90 -0
  426. package/esm/src/providers/decision/usage.d.ts +3 -0
  427. package/esm/src/providers/decision/usage.js +25 -0
  428. package/esm/src/providers/google/api-error.d.ts +8 -0
  429. package/esm/src/providers/google/api-error.js +123 -0
  430. package/esm/src/providers/google/grounding.d.ts +5 -0
  431. package/esm/src/providers/google/grounding.js +226 -0
  432. package/esm/src/providers/google/interactions/framing.d.ts +15 -0
  433. package/esm/src/providers/google/interactions/framing.js +263 -0
  434. package/esm/src/providers/google/interactions/mod.d.ts +2 -0
  435. package/esm/src/providers/google/interactions/mod.js +2 -0
  436. package/esm/src/providers/google/interactions/steps.d.ts +12 -0
  437. package/esm/src/providers/google/interactions/steps.js +200 -0
  438. package/esm/src/providers/google/interactions/stream.d.ts +24 -0
  439. package/esm/src/providers/google/interactions/stream.js +297 -0
  440. package/esm/src/providers/google/keys.d.ts +20 -0
  441. package/esm/src/providers/google/keys.js +87 -0
  442. package/esm/src/providers/google/live/framing.d.ts +51 -0
  443. package/esm/src/providers/google/live/framing.js +597 -0
  444. package/esm/src/providers/google/live/mod.d.ts +7 -0
  445. package/esm/src/providers/google/live/mod.js +7 -0
  446. package/esm/src/providers/google/live/openapi-schema.d.ts +1 -0
  447. package/esm/src/providers/google/live/openapi-schema.js +42 -0
  448. package/esm/src/providers/google/live/session.d.ts +14 -0
  449. package/esm/src/providers/google/live/session.js +150 -0
  450. package/esm/src/providers/google/live/stream.d.ts +51 -0
  451. package/esm/src/providers/google/live/stream.js +263 -0
  452. package/esm/src/providers/google/thinking.d.ts +3 -0
  453. package/esm/src/providers/google/thinking.js +8 -0
  454. package/esm/src/providers/google/urls.d.ts +6 -0
  455. package/esm/src/providers/google/urls.js +6 -0
  456. package/esm/src/providers/google/usage.d.ts +7 -0
  457. package/esm/src/providers/google/usage.js +49 -0
  458. package/esm/src/providers/local/local.d.ts +12 -0
  459. package/esm/src/providers/local/local.js +186 -0
  460. package/esm/src/providers/local/mod.d.ts +8 -0
  461. package/esm/src/providers/local/mod.js +8 -0
  462. package/esm/src/providers/mod.d.ts +11 -0
  463. package/esm/src/providers/mod.js +7 -0
  464. package/esm/src/providers/openrouter/cache-control.d.ts +5 -0
  465. package/esm/src/providers/openrouter/cache-control.js +4 -0
  466. package/esm/src/providers/openrouter/chat.d.ts +64 -0
  467. package/esm/src/providers/openrouter/chat.js +490 -0
  468. package/esm/src/providers/openrouter/image.d.ts +24 -0
  469. package/esm/src/providers/openrouter/image.js +187 -0
  470. package/esm/src/providers/openrouter/openai/compat.d.ts +19 -0
  471. package/esm/src/providers/openrouter/openai/compat.js +162 -0
  472. package/esm/src/providers/openrouter/openai/image-payload.d.ts +9 -0
  473. package/esm/src/providers/openrouter/openai/image-payload.js +115 -0
  474. package/esm/src/providers/openrouter/openai/sdk-messages.d.ts +10 -0
  475. package/esm/src/providers/openrouter/openai/sdk-messages.js +99 -0
  476. package/esm/src/providers/openrouter/openai/usage.d.ts +8 -0
  477. package/esm/src/providers/openrouter/openai/usage.js +56 -0
  478. package/esm/src/providers/openrouter/resolve-api-key.d.ts +3 -0
  479. package/esm/src/providers/openrouter/resolve-api-key.js +8 -0
  480. package/esm/src/providers/openrouter/speech.d.ts +18 -0
  481. package/esm/src/providers/openrouter/speech.js +109 -0
  482. package/esm/src/providers/probe.d.ts +5 -0
  483. package/esm/src/providers/probe.js +15 -0
  484. package/esm/src/providers/shared/builtin-wire.d.ts +4 -0
  485. package/esm/src/providers/shared/builtin-wire.js +9 -0
  486. package/esm/src/providers/shared/pcm.d.ts +14 -0
  487. package/esm/src/providers/shared/pcm.js +78 -0
  488. package/esm/src/providers/shared/response-identity.d.ts +11 -0
  489. package/esm/src/providers/shared/response-identity.js +12 -0
  490. package/esm/src/providers/shared/sse.d.ts +10 -0
  491. package/esm/src/providers/shared/sse.js +79 -0
  492. package/esm/src/providers/shared/structured-output.d.ts +4 -0
  493. package/esm/src/providers/shared/structured-output.js +11 -0
  494. package/esm/src/providers/shared/tool-args.d.ts +25 -0
  495. package/esm/src/providers/shared/tool-args.js +84 -0
  496. package/esm/src/providers/shared/upstream-tap.d.ts +8 -0
  497. package/esm/src/providers/shared/upstream-tap.js +85 -0
  498. package/esm/src/providers/shared/upstream-tape.d.ts +6 -0
  499. package/esm/src/providers/shared/upstream-tape.js +88 -0
  500. package/esm/src/providers/shared/vault.d.ts +13 -0
  501. package/esm/src/providers/shared/vault.js +41 -0
  502. package/esm/src/providers/types.d.ts +19 -0
  503. package/esm/src/providers/types.js +1 -0
  504. package/esm/src/surface/formats.d.ts +28 -0
  505. package/esm/src/surface/formats.js +139 -0
  506. package/esm/src/surface/mod.d.ts +14 -0
  507. package/esm/src/surface/mod.js +10 -0
  508. package/esm/src/surface/runtime.d.ts +40 -0
  509. package/esm/src/surface/runtime.js +439 -0
  510. package/esm/src/surface/tools.d.ts +15 -0
  511. package/esm/src/surface/tools.js +80 -0
  512. package/esm/src/surface/types.d.ts +104 -0
  513. package/esm/src/surface/types.js +4 -0
  514. package/package.json +108 -4
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Every rule id Theorem's own guardrails report, in one place. The trace
3
+ * catalog describes each one, and its description map is keyed by
4
+ * {@link GuardrailRule}, so a new id fails typecheck until it is described.
5
+ * A host's egress `enforce` hook may report ids of its own; those are not here.
6
+ *
7
+ * @module
8
+ */
9
+ /** Injection phrasing or sensitive data stripped from text entering the turn. */
10
+ export const SANITIZE_RULES = {
11
+ injection: 'sanitize.injection',
12
+ sensitive: 'sanitize.sensitive',
13
+ };
14
+ /** What the bundled egress policy finds in the model's outbound text. */
15
+ export const EGRESS_RULES = {
16
+ canary: 'egress.canary-leak',
17
+ /** The reply repeats the system prompt (`guardrails.promptEcho`). */
18
+ promptEcho: 'egress.prompt-echo', // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
19
+ /**
20
+ * A provider-side built-in tool carried the canary or the system prompt. It
21
+ * ran before Theorem saw it: the data already left, so this is an incident.
22
+ */
23
+ providerToolLeak: 'egress.provider-tool-leak', // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
24
+ sensitive: 'egress.sensitive-echo',
25
+ boundary: 'egress.system-boundary',
26
+ injection: 'egress.injection-echo', // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
27
+ /** An image loads a URL the model was not given, from a host not allowed. */
28
+ image: 'egress.image-exfil', // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
29
+ /** A link goes to a URL the model was not given, on a host not allowed. */
30
+ link: 'egress.link-exfil', // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
31
+ /** Payload could not be rendered for inspection — released output is unverified. */
32
+ unscannable: 'egress.unscannable', // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
33
+ enforcerError: 'egress.enforcer-error', // lexicon-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
34
+ /** The progressive gate stopped the stream on a host verdict that named no rule. */
35
+ blocked: 'egress.blocked',
36
+ };
37
+ /** Remote tool content behaving like an instruction to the agent. */
38
+ export const DIRECTIVE_RULES = {
39
+ toolName: 'tool_result.names-callable-tool',
40
+ imperative: 'tool_result.imperative',
41
+ authority: 'tool_result.authority-claim',
42
+ };
43
+ /** The tool boundary: results and failures redacted, and calls flagged or blocked. */
44
+ export const TOOL_RULES = {
45
+ resultRedacted: 'tool_result.redacted',
46
+ failureRedacted: 'tool_failure.redacted',
47
+ sensitiveArgument: 'tool_call.sensitive-argument',
48
+ taintedTurn: 'tool_call.tainted-turn',
49
+ steeredTurn: 'tool_call.steered-turn',
50
+ };
51
+ /** A tool's network target refused before any request was made. */
52
+ export const NETWORK_RULES = {
53
+ blocked: 'network.blocked',
54
+ };
@@ -0,0 +1,23 @@
1
+ import type { NormalizedTurnRequest, Profile, TurnEvent, TurnRequest } from '../kernel/types.js';
2
+ import { type DetectionOptions } from './policy.js';
3
+ import type { GuardrailHit, TrustLevel } from './types.js';
4
+ declare function detectText(text: string, options?: Partial<DetectionOptions>): {
5
+ text: string;
6
+ hits: GuardrailHit[];
7
+ };
8
+ declare function sanitizeText(text: string, options?: Partial<DetectionOptions>): string;
9
+ declare function redactSensitiveOnly(text: string): string;
10
+ declare function sanitizeProjectId(id: string | undefined): string | undefined;
11
+ /**
12
+ * Exported because every path that injects messages into a turn needs it — turn
13
+ * history, and host steer injects mid-turn. A second copy would drift.
14
+ */
15
+ declare function sanitizeHistory(history: import('../kernel/types.js').TurnHistoryMessage[], options: DetectionOptions, hits?: GuardrailHit[]): import('../kernel/types.js').TurnHistoryMessage[];
16
+ declare function detectionForProfile(profile: Profile, trust: TrustLevel): DetectionOptions;
17
+ declare function sanitizeTurnRequest(req: TurnRequest, profile: Profile): NormalizedTurnRequest;
18
+ /** Attachments and voice are validated but emit no guardrail events. */
19
+ declare function sanitizeTurnRequestWithEvents(req: TurnRequest, profile: Profile): {
20
+ request: NormalizedTurnRequest;
21
+ events: TurnEvent[];
22
+ };
23
+ export { detectionForProfile, detectText, redactSensitiveOnly, sanitizeHistory, sanitizeProjectId, sanitizeText, sanitizeTurnRequest, sanitizeTurnRequestWithEvents, };
@@ -0,0 +1,184 @@
1
+ import { sanitizeTurnBlobs } from '../kernel/registry/attachments.js';
2
+ import { mapSystemPrompt } from '../kernel/system-parts.js';
3
+ import { applySpans } from '../observability/spans.js';
4
+ import { guardrailFromHits } from './events.js';
5
+ import { hitFromSpan } from './hits.js';
6
+ import { injectionSpans } from './injection.js';
7
+ import { detectionForTrust, resolveGuardrailPolicy } from './policy.js';
8
+ import { SANITIZE_RULES } from './rules.js';
9
+ import { anySensitive, resolveSensitive, sensitiveSpans } from './sensitive.js';
10
+ function detectText(text, options) {
11
+ const sanitizeInput = options?.sanitizeInput ?? true;
12
+ const groups = resolveSensitive(options?.redactSensitive);
13
+ if (!sanitizeInput && !anySensitive(groups)) {
14
+ return { text, hits: [] };
15
+ }
16
+ const spans = [...(sanitizeInput ? injectionSpans(text) : []), ...sensitiveSpans(text, groups)];
17
+ const hits = spans.map((span) => hitFromSpan(text, span, span.kind === 'injection' ? SANITIZE_RULES.injection : SANITIZE_RULES.sensitive, 'high'));
18
+ return { text: applySpans(text, spans), hits };
19
+ }
20
+ function sanitizeText(text, options) {
21
+ return detectText(text, options).text;
22
+ }
23
+ function redactSensitiveOnly(text) {
24
+ return detectText(text, { sanitizeInput: false, redactSensitive: true }).text;
25
+ }
26
+ function appendHits(into, hits) {
27
+ for (const hit of hits) {
28
+ into.push(hit);
29
+ }
30
+ }
31
+ function sanitizeSlots(slots, options, hits) {
32
+ if (!slots) {
33
+ return slots;
34
+ }
35
+ const out = {};
36
+ for (const [key, value] of Object.entries(slots)) {
37
+ const detected = detectText(value, options);
38
+ appendHits(hits, detected.hits);
39
+ out[key] = detected.text;
40
+ }
41
+ return out;
42
+ }
43
+ const PROJECT_ID_OK = /^[A-Za-z0-9._-]+$/;
44
+ function sanitizeProjectId(id) {
45
+ const trimmed = id?.trim();
46
+ return trimmed && PROJECT_ID_OK.test(trimmed) ? trimmed : undefined;
47
+ }
48
+ function sanitizeRepair(repair, options, hits) {
49
+ if (!repair) {
50
+ return repair;
51
+ }
52
+ const previous = detectText(repair.previousOutput, options);
53
+ const rejection = detectText(repair.rejection, options);
54
+ appendHits(hits, previous.hits);
55
+ appendHits(hits, rejection.hits);
56
+ let guidance = repair.guidance;
57
+ if (guidance) {
58
+ const detected = detectText(guidance, options);
59
+ appendHits(hits, detected.hits);
60
+ guidance = detected.text;
61
+ }
62
+ return {
63
+ previousOutput: previous.text,
64
+ rejection: rejection.text,
65
+ ...(guidance ? { guidance } : {}),
66
+ };
67
+ }
68
+ /**
69
+ * Exported because every path that injects messages into a turn needs it — turn
70
+ * history, and host steer injects mid-turn. A second copy would drift.
71
+ */
72
+ function sanitizeHistory(history, options, hits = []) {
73
+ return history.map((m) => {
74
+ let content = m.content;
75
+ if (content !== undefined) {
76
+ const detected = detectText(content, options);
77
+ appendHits(hits, detected.hits);
78
+ content = detected.text;
79
+ }
80
+ let parts = m.parts;
81
+ if (parts) {
82
+ parts = parts.map((p) => {
83
+ if (p.type !== 'text') {
84
+ return p;
85
+ }
86
+ const detected = detectText(p.text, options);
87
+ appendHits(hits, detected.hits);
88
+ return { ...p, text: detected.text };
89
+ });
90
+ }
91
+ return {
92
+ role: m.role,
93
+ ...(content !== undefined ? { content } : {}),
94
+ ...(parts ? { parts } : {}),
95
+ ...(m.tool_calls ? { tool_calls: m.tool_calls } : {}),
96
+ ...(m.tool_call_id ? { tool_call_id: m.tool_call_id } : {}),
97
+ ...(m.name ? { name: m.name } : {}),
98
+ ...(m.metadata ? { metadata: m.metadata } : {}),
99
+ };
100
+ });
101
+ }
102
+ function detectionForProfile(profile, trust) {
103
+ return detectionForTrust(resolveGuardrailPolicy(profile.guardrails), trust);
104
+ }
105
+ function pushStageEvent(events, stage, trust, hits) {
106
+ const event = guardrailFromHits(stage, trust, hits, 'redact');
107
+ if (event) {
108
+ events.push(event);
109
+ }
110
+ }
111
+ /**
112
+ * `req.system` is host-assembled per turn — it interpolates retrieval and user
113
+ * data, so it is treated as `assembled`, not trusted. `identity.system` never
114
+ * reaches this path and stays verbatim.
115
+ */
116
+ function sanitizeTurnRequestText(req, profile) {
117
+ const untrusted = detectionForProfile(profile, 'untrusted');
118
+ const assembled = detectionForProfile(profile, 'assembled');
119
+ const input = req.input ?? {};
120
+ const events = [];
121
+ const inputHits = [];
122
+ const historyHits = [];
123
+ const systemHits = [];
124
+ const { text: rawText } = input;
125
+ let text = rawText;
126
+ if (rawText !== undefined) {
127
+ const detected = detectText(rawText, untrusted);
128
+ appendHits(inputHits, detected.hits);
129
+ text = detected.text;
130
+ }
131
+ const system = req.system === undefined
132
+ ? undefined
133
+ : mapSystemPrompt(req.system, 'TurnRequest.system', (part) => {
134
+ const detected = detectText(part, assembled);
135
+ appendHits(systemHits, detected.hits);
136
+ return detected.text;
137
+ });
138
+ const slots = sanitizeSlots(input.slots, untrusted, inputHits);
139
+ const repair = sanitizeRepair(input.repair, untrusted, inputHits);
140
+ const history = input.history
141
+ ? sanitizeHistory(input.history, untrusted, historyHits)
142
+ : undefined;
143
+ pushStageEvent(events, 'input', 'untrusted', inputHits);
144
+ pushStageEvent(events, 'history', 'untrusted', historyHits);
145
+ pushStageEvent(events, 'system', 'assembled', systemHits);
146
+ return {
147
+ request: {
148
+ ...req,
149
+ system,
150
+ projectId: sanitizeProjectId(req.projectId),
151
+ input: {
152
+ ...input,
153
+ text,
154
+ slots,
155
+ repair,
156
+ history,
157
+ },
158
+ },
159
+ events,
160
+ };
161
+ }
162
+ function sanitizeTurnRequest(req, profile) {
163
+ return sanitizeTurnRequestWithEvents(req, profile).request;
164
+ }
165
+ /** Attachments and voice are validated but emit no guardrail events. */
166
+ function sanitizeTurnRequestWithEvents(req, profile) {
167
+ const { request: textSafe, events } = sanitizeTurnRequestText(req, profile);
168
+ const input = textSafe.input ?? {};
169
+ const { attachments, voice } = input.attachments?.length || input.voice?.length
170
+ ? sanitizeTurnBlobs(profile, input.attachments, input.voice)
171
+ : input;
172
+ return {
173
+ request: {
174
+ ...textSafe,
175
+ input: {
176
+ ...input,
177
+ attachments,
178
+ voice,
179
+ },
180
+ },
181
+ events,
182
+ };
183
+ }
184
+ export { detectionForProfile, detectText, redactSensitiveOnly, sanitizeHistory, sanitizeProjectId, sanitizeText, sanitizeTurnRequest, sanitizeTurnRequestWithEvents, };
@@ -0,0 +1,29 @@
1
+ import { type RedactSpan } from '../observability/spans.js';
2
+ declare const CARD_CANDIDATE: RegExp;
3
+ /**
4
+ * The families of sensitive data, each switched on its own: a profile can
5
+ * redact credentials and card numbers but leave network addresses alone.
6
+ */
7
+ declare const SENSITIVE_GROUPS: readonly ["ids", "financial", "network", "credentials"];
8
+ type SensitiveGroup = (typeof SENSITIVE_GROUPS)[number];
9
+ /** Per group, whether it runs. A group left out keeps its default. */
10
+ type SensitiveSwitches = Partial<Record<SensitiveGroup, boolean>>;
11
+ /** `true` runs every group, `false` none; an object switches the groups it names. */
12
+ type SensitiveSelection = boolean | SensitiveSwitches;
13
+ /** Every group's switch, defaults applied. */
14
+ type SensitiveGroups = Readonly<Record<SensitiveGroup, boolean>>;
15
+ /** Every pattern, with its group. */
16
+ declare const SENSITIVE_PATTERNS: readonly {
17
+ group: SensitiveGroup;
18
+ pattern: RegExp;
19
+ }[];
20
+ /** `selection` with the groups it leaves out taken from `defaults`. */
21
+ declare function resolveSensitive(selection: SensitiveSelection | undefined, defaults?: SensitiveGroups): SensitiveGroups;
22
+ /** Whether any group runs. */
23
+ declare function anySensitive(groups: SensitiveGroups): boolean;
24
+ /** A card-number candidate that is a card: 13–19 digits passing the Luhn check. */
25
+ declare function cardHit(blob: string): boolean;
26
+ /** Sensitive-data spans in `text`, from the groups `selection` runs (every group by default). */
27
+ declare function sensitiveSpans(text: string, selection?: SensitiveSelection): RedactSpan[];
28
+ export type { SensitiveGroup, SensitiveGroups, SensitiveSelection, SensitiveSwitches };
29
+ export { anySensitive, CARD_CANDIDATE, cardHit, resolveSensitive, SENSITIVE_GROUPS, SENSITIVE_PATTERNS, sensitiveSpans, };
@@ -0,0 +1,113 @@
1
+ import { blobAt, spansFromPatterns } from '../observability/spans.js';
2
+ const SSN = /\b\d{3}-\d{2}-\d{4}\b/g;
3
+ const SSN_CONTEXTUAL = /(?:SSN|social\s*security(?:\s*number)?)[:\s]+(?:\d[-\s]*){9}/gi;
4
+ const ITIN = /\b9\d{2}-\d{2}-\d{4}\b/g;
5
+ const EIN = /\b\d{2}-\d{7}\b/g;
6
+ const IBAN = /\b[A-Z]{2}\d{2}[A-Z0-9]{13,30}\b/g;
7
+ const IPV4 = /\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b/g;
8
+ const IPV6 = /\b(?:[0-9a-f]{1,4}:){7}[0-9a-f]{1,4}\b/gi;
9
+ const AWS_ACCESS = /\bAKIA[0-9A-Z]{16,20}\b/g;
10
+ const GOOGLE_API = /\bAIza[0-9A-Za-z_-]{35}\b/g;
11
+ const OPENAI_KEY = /\bsk-\s*[A-Za-z0-9]{20,}\b/g;
12
+ const ANTHROPIC_KEY = /\bsk-ant-[A-Za-z0-9_-]{20,}\b/g;
13
+ const OPENROUTER_KEY = /\bsk-or-[A-Za-z0-9_-]{20,}\b/g;
14
+ const GITHUB_PAT = /\bgithub_pat_[A-Za-z0-9_]{20,}\b/g;
15
+ const GITHUB_TOKEN = /\bghp_[A-Za-z0-9]{36}\b/g;
16
+ const SLACK_TOKEN = /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g;
17
+ const BEARER = /\bBearer\s+[A-Za-z0-9._~+/-]+=*/gi;
18
+ /** Bounded payload so PEM redaction cannot ReDoS on repeated BEGIN markers. */
19
+ const PEM_KEY = /-----BEGIN (?:RSA )?PRIVATE KEY-----[\s\S]{0,16384}?-----END (?:RSA )?PRIVATE KEY-----/g;
20
+ const CARD_CANDIDATE = /\b(?:\d[\s.-]*?){13,19}\b/g;
21
+ /**
22
+ * The families of sensitive data, each switched on its own: a profile can
23
+ * redact credentials and card numbers but leave network addresses alone.
24
+ */
25
+ const SENSITIVE_GROUPS = ['ids', 'financial', 'network', 'credentials'];
26
+ /** The patterns each group matches. Card numbers are financial too, found by `cardSpans`. */
27
+ const GROUP_PATTERNS = {
28
+ ids: [SSN, SSN_CONTEXTUAL, ITIN, EIN],
29
+ financial: [IBAN],
30
+ network: [IPV4, IPV6],
31
+ credentials: [
32
+ AWS_ACCESS,
33
+ GOOGLE_API,
34
+ OPENAI_KEY,
35
+ ANTHROPIC_KEY,
36
+ OPENROUTER_KEY,
37
+ GITHUB_PAT,
38
+ GITHUB_TOKEN,
39
+ SLACK_TOKEN,
40
+ BEARER,
41
+ PEM_KEY,
42
+ ],
43
+ };
44
+ /** Every pattern, with its group. */
45
+ const SENSITIVE_PATTERNS = SENSITIVE_GROUPS.flatMap((group) => GROUP_PATTERNS[group].map((pattern) => ({ group, pattern })));
46
+ const ALL_GROUPS = {
47
+ ids: true,
48
+ financial: true,
49
+ network: true,
50
+ credentials: true,
51
+ };
52
+ /** `selection` with the groups it leaves out taken from `defaults`. */
53
+ function resolveSensitive(selection, defaults = ALL_GROUPS) {
54
+ if (selection === undefined)
55
+ return defaults;
56
+ if (typeof selection === 'boolean') {
57
+ return { ids: selection, financial: selection, network: selection, credentials: selection };
58
+ }
59
+ return { ...defaults, ...selection };
60
+ }
61
+ /** Whether any group runs. */
62
+ function anySensitive(groups) {
63
+ return SENSITIVE_GROUPS.some((group) => groups[group]);
64
+ }
65
+ const LUHN_DOUBLE = 2;
66
+ const LUHN_NINE = 9;
67
+ const LUHN_TEN = 10;
68
+ const CARD_MIN_DIGITS = 13;
69
+ const CARD_MAX_DIGITS = 19;
70
+ function luhnOk(digits) {
71
+ let sum = 0;
72
+ let doubleIt = false;
73
+ for (let i = digits.length - 1; i >= 0; i -= 1) {
74
+ const ch = digits[i];
75
+ if (ch === undefined) {
76
+ return false;
77
+ }
78
+ let n = Number(ch);
79
+ if (doubleIt) {
80
+ n *= LUHN_DOUBLE;
81
+ if (n > LUHN_NINE) {
82
+ n -= LUHN_NINE;
83
+ }
84
+ }
85
+ sum += n;
86
+ doubleIt = !doubleIt;
87
+ }
88
+ return sum % LUHN_TEN === 0;
89
+ }
90
+ /** A card-number candidate that is a card: 13–19 digits passing the Luhn check. */
91
+ function cardHit(blob) {
92
+ const digits = blob.replaceAll(/[^\d]/g, '');
93
+ const inRange = digits.length >= CARD_MIN_DIGITS && digits.length <= CARD_MAX_DIGITS;
94
+ return inRange && luhnOk(digits);
95
+ }
96
+ function cardSpans(text) {
97
+ const spans = [];
98
+ for (const match of text.matchAll(CARD_CANDIDATE)) {
99
+ const found = blobAt(match);
100
+ if (found && cardHit(found.blob)) {
101
+ spans.push({ start: found.index, end: found.index + found.blob.length, kind: 'sensitive' });
102
+ }
103
+ }
104
+ return spans;
105
+ }
106
+ /** Sensitive-data spans in `text`, from the groups `selection` runs (every group by default). */
107
+ function sensitiveSpans(text, selection = true) {
108
+ const groups = resolveSensitive(selection);
109
+ const patterns = SENSITIVE_GROUPS.flatMap((group) => groups[group] ? GROUP_PATTERNS[group] : []);
110
+ const spans = spansFromPatterns(text, patterns, 'sensitive');
111
+ return groups.financial ? [...spans, ...cardSpans(text)] : spans;
112
+ }
113
+ export { anySensitive, CARD_CANDIDATE, cardHit, resolveSensitive, SENSITIVE_GROUPS, SENSITIVE_PATTERNS, sensitiveSpans, };
@@ -0,0 +1,14 @@
1
+ declare const CIRCULAR = "[circular]";
2
+ export interface ScanText {
3
+ text: string;
4
+ /** True when the payload could not be rendered and was not inspected. */
5
+ unscannable: boolean;
6
+ }
7
+ /**
8
+ * A guardrail must never be the thing that throws: cycles and bigints still get inspected, and
9
+ * only a payload that defeats that (a throwing `toJSON`) comes back `unscannable` so the caller can fail closed.
10
+ */
11
+ declare function textForScan(value: unknown): ScanText;
12
+ /** Discards `unscannable`: only for callers to whom an unrenderable payload is the same as no match. */
13
+ declare function scanTextOf(value: unknown): string;
14
+ export { CIRCULAR, scanTextOf, textForScan };
@@ -0,0 +1,37 @@
1
+ const CIRCULAR = '[circular]';
2
+ /**
3
+ * A guardrail must never be the thing that throws: cycles and bigints still get inspected, and
4
+ * only a payload that defeats that (a throwing `toJSON`) comes back `unscannable` so the caller can fail closed.
5
+ */
6
+ function textForScan(value) {
7
+ if (value === undefined) {
8
+ return { text: '', unscannable: false };
9
+ }
10
+ if (typeof value === 'string') {
11
+ return { text: value, unscannable: false };
12
+ }
13
+ const seen = new WeakSet();
14
+ try {
15
+ const json = JSON.stringify(value, (_key, val) => {
16
+ if (typeof val === 'bigint') {
17
+ return val.toString();
18
+ }
19
+ if (typeof val === 'object' && val !== null) {
20
+ if (seen.has(val)) {
21
+ return CIRCULAR;
22
+ }
23
+ seen.add(val);
24
+ }
25
+ return val;
26
+ });
27
+ return { text: json ?? '', unscannable: false };
28
+ }
29
+ catch {
30
+ return { text: '', unscannable: true };
31
+ }
32
+ }
33
+ /** Discards `unscannable`: only for callers to whom an unrenderable payload is the same as no match. */
34
+ function scanTextOf(value) {
35
+ return textForScan(value).text;
36
+ }
37
+ export { CIRCULAR, scanTextOf, textForScan };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Adversarial corpus, fuzz runners and live attack builders, kept off the production guardrails entry.
3
+ *
4
+ * @module
5
+ */
6
+ /** lexicon-exempt-file: adversarial harness helpers — not runtime user or model copy (P2) */
7
+ import "../../_dnt.polyfills.js";
8
+ export type { CanaryEgressAttack, CanaryEgressCatalogEntry, InboundFuzzPayload, InboundFuzzResult, LiveAttack, } from './corpus/mod.js';
9
+ export { buildCanaryEgressAttacks, buildLiveAttacks, canaryEgressCatalog, FIXED_CANARY, FUZZ_SYSTEM, filterLiveAttacks, inboundFuzzPayloads, inboundPayloadByName, runInboundGuardrailFuzz, summarizeAttackBank, } from './corpus/mod.js';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Adversarial corpus, fuzz runners and live attack builders, kept off the production guardrails entry.
3
+ *
4
+ * @module
5
+ */
6
+ /** lexicon-exempt-file: adversarial harness helpers — not runtime user or model copy (P2) */
7
+ import "../../_dnt.polyfills.js";
8
+ export { buildCanaryEgressAttacks, buildLiveAttacks, canaryEgressCatalog, FIXED_CANARY, FUZZ_SYSTEM, filterLiveAttacks, inboundFuzzPayloads, inboundPayloadByName, runInboundGuardrailFuzz, summarizeAttackBank, } from './corpus/mod.js';
@@ -0,0 +1,18 @@
1
+ import type { ErrorCopies, ErrorCopy } from './event-schemas.js';
2
+ export type { ErrorCopies, ErrorCopy };
3
+ /**
4
+ * What kind of failure happened, decided where it happens. Both worlds read it:
5
+ * the builder in code and traces (`errorKind`, `error.type`), the user through
6
+ * the kind's wording (`error.<kind>` in the lexicon).
7
+ */
8
+ export declare const ERROR_KINDS: readonly ["config", "request", "input", "action", "auth", "rate_limit", "unsupported", "unavailable", "bad_response", "network", "timeout", "safety", "blocked", "declined", "failed", "cancelled", "internal"];
9
+ export type ErrorKind = (typeof ERROR_KINDS)[number];
10
+ export interface TheoremErrorOptions extends ErrorOptions {
11
+ /** User wording more specific than the kind's: one line, or one per problem found. */
12
+ copy?: ErrorCopies;
13
+ }
14
+ export declare class TheoremError extends Error {
15
+ readonly kind: ErrorKind;
16
+ readonly copy?: ErrorCopies;
17
+ constructor(kind: ErrorKind, message: string, options?: TheoremErrorOptions);
18
+ }
@@ -0,0 +1,53 @@
1
+ // Its own module so `lexicon.ts` can throw it without importing `error.ts`, which reads the lexicon.
2
+ /**
3
+ * What kind of failure happened, decided where it happens. Both worlds read it:
4
+ * the builder in code and traces (`errorKind`, `error.type`), the user through
5
+ * the kind's wording (`error.<kind>` in the lexicon).
6
+ */
7
+ export const ERROR_KINDS = [
8
+ /** The profile, tool, or schema is set up wrong. */
9
+ 'config',
10
+ /** The host called THEOREM wrongly. */
11
+ 'request',
12
+ /** The user sent input the profile does not accept. */
13
+ 'input',
14
+ /** The user asked for something the profile does not allow. */
15
+ 'action',
16
+ /** A missing or rejected credential, or an account that cannot be billed. */
17
+ 'auth',
18
+ /** Too many requests, or a quota used up. */
19
+ 'rate_limit',
20
+ /** The model or route cannot serve this request. */
21
+ 'unsupported',
22
+ /** The provider is down or overloaded. */
23
+ 'unavailable',
24
+ /** The provider answered with something that cannot be used. */
25
+ 'bad_response',
26
+ /** The request never reached the provider. */
27
+ 'network',
28
+ /** The model took longer than the host allowed. */
29
+ 'timeout',
30
+ /** THEOREM or the provider held the reply back. */
31
+ 'safety',
32
+ /** A guardrail or host policy stopped one of the agent's steps. */
33
+ 'blocked',
34
+ /** The user declined one of the agent's steps. */
35
+ 'declined',
36
+ /** One of the agent's steps ran and failed. */
37
+ 'failed',
38
+ /** The user or host stopped the turn. */
39
+ 'cancelled',
40
+ /** A THEOREM invariant broke. */
41
+ 'internal',
42
+ ];
43
+ export class TheoremError extends Error {
44
+ kind;
45
+ copy;
46
+ constructor(kind, message, options) {
47
+ super(message, options);
48
+ this.name = 'TheoremError';
49
+ this.kind = kind;
50
+ if (options?.copy)
51
+ this.copy = options.copy;
52
+ }
53
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Thought guarding. A host that renders `thought` events shows the user what
3
+ * they say and loads what they link, as it does a reply: the canary, the
4
+ * system prompt and the user-data markers leak through a thought, and a URL
5
+ * the model was not given carries data out. Nothing in a thought stops a turn
6
+ * (`isGuardedOutput`); each leak is omitted and the rest of the thought
7
+ * released.
8
+ *
9
+ * @module
10
+ */
11
+ import { type ResolvedEgressChecks } from './egress.js';
12
+ import { type GivenUrls } from './egress-urls.js';
13
+ import { type LexiconOverrides } from './lexicon.js';
14
+ import type { EgressEnforcer, GuardrailContext, GuardrailHit } from './types.js';
15
+ /** What a thought guard lets through: the text to show, and what it omitted from it. */
16
+ interface ThoughtRelease {
17
+ text: string;
18
+ /** One hit per rule that omitted something; empty when nothing was. */
19
+ hits: GuardrailHit[];
20
+ }
21
+ /** One provider call's (or Live cycle's) thought text, released as it clears. */
22
+ interface ThoughtGuard {
23
+ /** Read the next thought chunk; the text now clear to show, leaks omitted. */
24
+ push(text: string): ThoughtRelease;
25
+ /** The thought ended: everything still held, leaks omitted. The next thought reads on from it. */
26
+ flush(): ThoughtRelease;
27
+ /** The tail of what was shown that a leak in the next call's thoughts could continue. */
28
+ carryOut(): string;
29
+ }
30
+ interface ThoughtGuardOptions {
31
+ /** The URL and boundary checks thoughts run; the rest of a policy is for replies. */
32
+ checks?: ResolvedEgressChecks;
33
+ canary?: string;
34
+ /** Guarded against echo alongside the canary. */
35
+ privateSystem?: readonly string[];
36
+ given?: GivenUrls;
37
+ lexicon?: LexiconOverrides;
38
+ /** Shown text an earlier thought ended on (`carryOut`), read in front and never shown again. */
39
+ carry?: string;
40
+ }
41
+ /**
42
+ * The guard reads the thought as it will be shown, placeholders in: text
43
+ * released is final, and what is held changes only by omission. The canary
44
+ * and prompt echo are read a second time with each placeholder as the text it
45
+ * replaced, so a leak running on past one, or across one longer than its
46
+ * text, is omitted too.
47
+ */
48
+ declare function createThoughtGuard(options: ThoughtGuardOptions): ThoughtGuard;
49
+ /**
50
+ * A guard for a turn's thoughts: the canary and prompt echo whenever the turn
51
+ * binds a canary, and the URL and boundary checks `enforce` runs.
52
+ */
53
+ declare function thoughtGuardFor(enforce: EgressEnforcer | undefined, context: GuardrailContext, carry?: string): ThoughtGuard | undefined;
54
+ export type { ThoughtGuard, ThoughtGuardOptions, ThoughtRelease };
55
+ export { createThoughtGuard, thoughtGuardFor };