@theoremjs/agents 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +277 -995
  2. package/esm/mod.d.ts +34 -20
  3. package/esm/mod.js +19 -12
  4. package/esm/src/cli/commands/bench.js +36 -14
  5. package/esm/src/cli/commands/detect-compile.d.ts +17 -0
  6. package/esm/src/cli/commands/detect-compile.js +22 -0
  7. package/esm/src/cli/commands/eval.d.ts +3 -3
  8. package/esm/src/cli/commands/fuzz-canary.js +55 -16
  9. package/esm/src/cli/commands/profile.js +4 -4
  10. package/esm/src/cli/commands/run.d.ts +2 -2
  11. package/esm/src/cli/commands/run.js +1 -1
  12. package/esm/src/cli/commands/test.d.ts +4 -3
  13. package/esm/src/cli/commands/test.js +2 -2
  14. package/esm/src/cli/index.js +9 -9
  15. package/esm/src/cli/matrix/fixtures.js +25 -30
  16. package/esm/src/evals/attachments.d.ts +1 -0
  17. package/esm/src/evals/attachments.js +4 -2
  18. package/esm/src/evals/breakdown.d.ts +2 -0
  19. package/esm/src/evals/breakdown.js +1 -0
  20. package/esm/src/evals/graders/answer.d.ts +3 -0
  21. package/esm/src/evals/graders/answer.js +1 -0
  22. package/esm/src/evals/graders/code.d.ts +7 -31
  23. package/esm/src/evals/graders/code.js +4 -25
  24. package/esm/src/evals/graders/judge.d.ts +4 -0
  25. package/esm/src/evals/graders/judge.js +7 -5
  26. package/esm/src/evals/graders/latency.d.ts +1 -0
  27. package/esm/src/evals/graders/latency.js +3 -2
  28. package/esm/src/evals/graders/live.d.ts +3 -0
  29. package/esm/src/evals/graders/live.js +2 -0
  30. package/esm/src/evals/graders/media.js +1 -2
  31. package/esm/src/evals/graders/shared.js +1 -1
  32. package/esm/src/evals/graders/transcript.d.ts +2 -0
  33. package/esm/src/evals/graders/transcript.js +5 -3
  34. package/esm/src/evals/mod.d.ts +1 -9
  35. package/esm/src/evals/mod.js +1 -9
  36. package/esm/src/evals/record.d.ts +6 -0
  37. package/esm/src/evals/record.js +4 -2
  38. package/esm/src/evals/rubrics/mod.d.ts +1 -1
  39. package/esm/src/evals/rubrics/mod.js +1 -1
  40. package/esm/src/evals/rubrics/mustache.js +1 -1
  41. package/esm/src/evals/rubrics/types.js +1 -1
  42. package/esm/src/evals/run.d.ts +9 -52
  43. package/esm/src/evals/run.js +12 -46
  44. package/esm/src/evals/suite.d.ts +12 -3
  45. package/esm/src/evals/suite.js +9 -4
  46. package/esm/src/evals/summary.d.ts +3 -0
  47. package/esm/src/evals/summary.js +1 -0
  48. package/esm/src/evals/trial.d.ts +3 -16
  49. package/esm/src/evals/trial.js +7 -30
  50. package/esm/src/evals/types.d.ts +30 -121
  51. package/esm/src/evals/types.js +3 -16
  52. package/esm/src/evals/verdict.d.ts +5 -0
  53. package/esm/src/evals/verdict.js +4 -1
  54. package/esm/src/guardrails/boundaries.d.ts +41 -0
  55. package/esm/src/guardrails/boundaries.js +103 -0
  56. package/esm/src/guardrails/canary-gate.d.ts +1 -0
  57. package/esm/src/guardrails/canary.d.ts +49 -15
  58. package/esm/src/guardrails/canary.js +103 -30
  59. package/esm/src/guardrails/compile-egress.d.ts +6 -5
  60. package/esm/src/guardrails/compile-egress.js +6 -5
  61. package/esm/src/guardrails/corpus/canary-egress-attacks.d.ts +3 -1
  62. package/esm/src/guardrails/corpus/canary-egress-attacks.js +4 -2
  63. package/esm/src/guardrails/corpus/fuzz-inbound.js +14 -17
  64. package/esm/src/guardrails/corpus/inbound-payloads.d.ts +2 -0
  65. package/esm/src/guardrails/corpus/inbound-payloads.js +4 -2
  66. package/esm/src/guardrails/corpus/live-attacks.d.ts +2 -0
  67. package/esm/src/guardrails/corpus/live-attacks.js +6 -1
  68. package/esm/src/guardrails/corpus/mod.d.ts +1 -1
  69. package/esm/src/guardrails/corpus/secrets.d.ts +3 -3
  70. package/esm/src/guardrails/corpus/secrets.js +2 -2
  71. package/esm/src/guardrails/corpus/strings.d.ts +1 -1
  72. package/esm/src/guardrails/corpus/strings.js +1 -1
  73. package/esm/src/guardrails/corpus/types.d.ts +5 -1
  74. package/esm/src/guardrails/credential-rules.d.ts +36 -0
  75. package/esm/src/guardrails/credential-rules.js +3001 -0
  76. package/esm/src/guardrails/credential-scan.d.ts +45 -0
  77. package/esm/src/guardrails/credential-scan.js +172 -0
  78. package/esm/src/guardrails/destinations.d.ts +45 -0
  79. package/esm/src/guardrails/destinations.js +234 -0
  80. package/esm/src/guardrails/detect-at.d.ts +107 -0
  81. package/esm/src/guardrails/detect-at.js +434 -0
  82. package/esm/src/guardrails/detect-reply.d.ts +61 -0
  83. package/esm/src/guardrails/detect-reply.js +95 -0
  84. package/esm/src/guardrails/detect-stream.d.ts +33 -0
  85. package/esm/src/guardrails/detect-stream.js +77 -0
  86. package/esm/src/guardrails/detectors.d.ts +216 -0
  87. package/esm/src/guardrails/detectors.js +503 -0
  88. package/esm/src/guardrails/egress-automata.d.ts +4 -6
  89. package/esm/src/guardrails/egress-automata.js +24095 -4572
  90. package/esm/src/guardrails/egress-compiler.d.ts +38 -16
  91. package/esm/src/guardrails/egress-compiler.js +254 -60
  92. package/esm/src/guardrails/egress-patterns.d.ts +4 -2
  93. package/esm/src/guardrails/egress-patterns.js +6 -2
  94. package/esm/src/guardrails/egress-stream.d.ts +54 -36
  95. package/esm/src/guardrails/egress-stream.js +253 -124
  96. package/esm/src/guardrails/egress-urls.d.ts +6 -3
  97. package/esm/src/guardrails/egress-urls.js +14 -22
  98. package/esm/src/guardrails/egress.d.ts +26 -86
  99. package/esm/src/guardrails/egress.js +59 -309
  100. package/esm/src/guardrails/error.d.ts +13 -8
  101. package/esm/src/guardrails/error.js +25 -18
  102. package/esm/src/guardrails/event-schemas.d.ts +46 -3
  103. package/esm/src/guardrails/event-schemas.js +12 -5
  104. package/esm/src/guardrails/events.d.ts +5 -1
  105. package/esm/src/guardrails/events.js +4 -1
  106. package/esm/src/guardrails/hints.d.ts +14 -0
  107. package/esm/src/guardrails/hints.js +57 -0
  108. package/esm/src/guardrails/hits.d.ts +7 -1
  109. package/esm/src/guardrails/hits.js +12 -1
  110. package/esm/src/guardrails/host-patterns.d.ts +85 -0
  111. package/esm/src/guardrails/host-patterns.js +173 -0
  112. package/esm/src/guardrails/injection-patterns.d.ts +6 -1
  113. package/esm/src/guardrails/injection-patterns.js +33 -1
  114. package/esm/src/guardrails/injection-reversed.d.ts +9 -0
  115. package/esm/src/guardrails/injection-reversed.js +49 -0
  116. package/esm/src/guardrails/injection.d.ts +17 -1
  117. package/esm/src/guardrails/injection.js +259 -36
  118. package/esm/src/guardrails/labels.d.ts +40 -0
  119. package/esm/src/guardrails/labels.js +881 -0
  120. package/esm/src/guardrails/live-outbound-gate.d.ts +9 -8
  121. package/esm/src/guardrails/live-outbound-gate.js +100 -107
  122. package/esm/src/guardrails/mod.d.ts +30 -22
  123. package/esm/src/guardrails/mod.js +19 -14
  124. package/esm/src/guardrails/network.d.ts +4 -0
  125. package/esm/src/guardrails/network.js +21 -19
  126. package/esm/src/guardrails/normalize.d.ts +15 -1
  127. package/esm/src/guardrails/normalize.js +34 -1
  128. package/esm/src/guardrails/policy.d.ts +2 -17
  129. package/esm/src/guardrails/policy.js +12 -41
  130. package/esm/src/guardrails/progressive-yield.d.ts +65 -24
  131. package/esm/src/guardrails/progressive-yield.js +191 -147
  132. package/esm/src/guardrails/prompt-echo.d.ts +4 -2
  133. package/esm/src/guardrails/prompt-echo.js +87 -6
  134. package/esm/src/guardrails/quota.d.ts +4 -1
  135. package/esm/src/guardrails/quota.js +7 -2
  136. package/esm/src/guardrails/rules.d.ts +20 -29
  137. package/esm/src/guardrails/rules.js +23 -30
  138. package/esm/src/guardrails/sanitize.d.ts +32 -15
  139. package/esm/src/guardrails/sanitize.js +100 -124
  140. package/esm/src/guardrails/sensitive-groups.d.ts +21 -0
  141. package/esm/src/guardrails/sensitive-groups.js +12 -0
  142. package/esm/src/guardrails/sensitive.d.ts +16 -23
  143. package/esm/src/guardrails/sensitive.js +168 -47
  144. package/esm/src/guardrails/serialize.d.ts +1 -0
  145. package/esm/src/guardrails/testing.d.ts +4 -2
  146. package/esm/src/guardrails/testing.js +4 -2
  147. package/esm/src/guardrails/theorem-error.d.ts +5 -2
  148. package/esm/src/guardrails/theorem-error.js +6 -3
  149. package/esm/src/guardrails/thought-guard.d.ts +34 -13
  150. package/esm/src/guardrails/thought-guard.js +264 -64
  151. package/esm/src/guardrails/tool-directives.d.ts +29 -10
  152. package/esm/src/guardrails/tool-directives.js +133 -47
  153. package/esm/src/guardrails/tool-leak.d.ts +26 -0
  154. package/esm/src/guardrails/tool-leak.js +45 -0
  155. package/esm/src/guardrails/tool-result.d.ts +45 -14
  156. package/esm/src/guardrails/tool-result.js +94 -70
  157. package/esm/src/guardrails/types.d.ts +79 -71
  158. package/esm/src/guardrails/types.js +11 -7
  159. package/esm/src/host/client-turn.d.ts +29 -2
  160. package/esm/src/host/client-turn.js +46 -4
  161. package/esm/src/host/mint-trace.d.ts +1 -0
  162. package/esm/src/host/mint-trace.js +3 -2
  163. package/esm/src/host/mod.d.ts +2 -2
  164. package/esm/src/host/mod.js +1 -1
  165. package/esm/src/host/readStreamingJsonStringField.js +2 -43
  166. package/esm/src/host/reply.d.ts +6 -0
  167. package/esm/src/host/reply.js +8 -1
  168. package/esm/src/interface/blocks.d.ts +3 -0
  169. package/esm/src/interface/blocks.js +84 -14
  170. package/esm/src/interface/composer-actions.d.ts +4 -0
  171. package/esm/src/interface/composer-actions.js +5 -3
  172. package/esm/src/interface/draft.d.ts +6 -0
  173. package/esm/src/interface/draft.js +22 -11
  174. package/esm/src/interface/from-profile.d.ts +13 -1
  175. package/esm/src/interface/from-profile.js +66 -31
  176. package/esm/src/interface/history.d.ts +9 -3
  177. package/esm/src/interface/history.js +33 -24
  178. package/esm/src/interface/inputs.d.ts +1 -0
  179. package/esm/src/interface/inputs.js +3 -0
  180. package/esm/src/interface/mod.d.ts +4 -2
  181. package/esm/src/interface/mod.js +3 -2
  182. package/esm/src/interface/models.d.ts +7 -0
  183. package/esm/src/interface/models.js +5 -0
  184. package/esm/src/interface/pending.d.ts +9 -0
  185. package/esm/src/interface/pending.js +9 -3
  186. package/esm/src/interface/profile-interface.js +54 -40
  187. package/esm/src/interface/session.d.ts +12 -5
  188. package/esm/src/interface/session.js +17 -10
  189. package/esm/src/interface/stop.d.ts +13 -0
  190. package/esm/src/interface/stop.js +28 -0
  191. package/esm/src/interface/tool-calls.d.ts +14 -2
  192. package/esm/src/interface/tool-calls.js +64 -10
  193. package/esm/src/interface/tool-invoke.d.ts +2 -0
  194. package/esm/src/interface/tool-invoke.js +3 -1
  195. package/esm/src/interface/tool-media.d.ts +2 -0
  196. package/esm/src/interface/tool-media.js +2 -1
  197. package/esm/src/interface/types.d.ts +105 -40
  198. package/esm/src/interface/types.js +1 -0
  199. package/esm/src/kernel/api-catalog.d.ts +85 -0
  200. package/esm/src/kernel/api-catalog.js +229 -0
  201. package/esm/src/kernel/auth/crypto.d.ts +7 -2
  202. package/esm/src/kernel/auth/crypto.js +12 -10
  203. package/esm/src/kernel/auth/oauth.d.ts +2 -1
  204. package/esm/src/kernel/auth/oauth.js +23 -22
  205. package/esm/src/kernel/auth/typed-secret.js +2 -2
  206. package/esm/src/kernel/auth/types.d.ts +13 -0
  207. package/esm/src/kernel/checkpoint.d.ts +43 -0
  208. package/esm/src/kernel/checkpoint.js +58 -0
  209. package/esm/src/kernel/default-scope.d.ts +43 -5
  210. package/esm/src/kernel/default-scope.js +54 -5
  211. package/esm/src/kernel/engine/call-trace.d.ts +19 -0
  212. package/esm/src/kernel/engine/call-trace.js +29 -0
  213. package/esm/src/kernel/engine/compaction.d.ts +6 -5
  214. package/esm/src/kernel/engine/compaction.js +12 -11
  215. package/esm/src/kernel/engine/decision.d.ts +10 -8
  216. package/esm/src/kernel/engine/decision.js +174 -146
  217. package/esm/src/kernel/engine/embedding.d.ts +8 -0
  218. package/esm/src/kernel/engine/embedding.js +118 -0
  219. package/esm/src/kernel/engine/live-inbound.d.ts +14 -4
  220. package/esm/src/kernel/engine/live-inbound.js +36 -11
  221. package/esm/src/kernel/engine/live-ingress.d.ts +6 -0
  222. package/esm/src/kernel/engine/live-ingress.js +6 -1
  223. package/esm/src/kernel/engine/repair.js +12 -12
  224. package/esm/src/kernel/engine/runner/gates.d.ts +2 -2
  225. package/esm/src/kernel/engine/runner/gates.js +287 -101
  226. package/esm/src/kernel/engine/runner/mod.d.ts +19 -5
  227. package/esm/src/kernel/engine/runner/mod.js +107 -56
  228. package/esm/src/kernel/engine/runner/nested.d.ts +32 -0
  229. package/esm/src/kernel/engine/runner/nested.js +134 -0
  230. package/esm/src/kernel/engine/runner/schema-validation.d.ts +24 -3
  231. package/esm/src/kernel/engine/runner/schema-validation.js +78 -4
  232. package/esm/src/kernel/engine/runner/stages.d.ts +1 -1
  233. package/esm/src/kernel/engine/runner/stages.js +1 -8
  234. package/esm/src/kernel/engine/runner/state.d.ts +33 -12
  235. package/esm/src/kernel/engine/runner/state.js +11 -1
  236. package/esm/src/kernel/engine/runner/step-order.d.ts +27 -0
  237. package/esm/src/kernel/engine/runner/step-order.js +165 -0
  238. package/esm/src/kernel/engine/runner/steps.d.ts +2 -2
  239. package/esm/src/kernel/engine/runner/steps.js +329 -169
  240. package/esm/src/kernel/engine/runner/stream.d.ts +42 -11
  241. package/esm/src/kernel/engine/runner/stream.js +197 -46
  242. package/esm/src/kernel/engine/runner/usage.d.ts +5 -5
  243. package/esm/src/kernel/engine/runner/usage.js +12 -14
  244. package/esm/src/kernel/engine/session/mod.d.ts +8 -6
  245. package/esm/src/kernel/engine/session/mod.js +360 -129
  246. package/esm/src/kernel/engine/session/session-trace.d.ts +10 -10
  247. package/esm/src/kernel/engine/session/session-trace.js +41 -30
  248. package/esm/src/kernel/engine/token-estimate.d.ts +10 -64
  249. package/esm/src/kernel/engine/token-estimate.js +14 -194
  250. package/esm/src/kernel/engine/tool-trace.d.ts +3 -3
  251. package/esm/src/kernel/engine/tool-trace.js +2 -1
  252. package/esm/src/kernel/engine/turn-trace.d.ts +8 -7
  253. package/esm/src/kernel/engine/turn-trace.js +28 -36
  254. package/esm/src/kernel/engine/usage.d.ts +6 -0
  255. package/esm/src/kernel/engine/usage.js +17 -0
  256. package/esm/src/kernel/interaction-parts.d.ts +3 -0
  257. package/esm/src/kernel/interaction-parts.js +18 -0
  258. package/esm/src/kernel/json.d.ts +10 -0
  259. package/esm/src/kernel/json.js +3 -0
  260. package/esm/src/kernel/mod.d.ts +38 -11
  261. package/esm/src/kernel/mod.js +22 -7
  262. package/esm/src/kernel/profile-graph.d.ts +11 -6
  263. package/esm/src/kernel/profile-graph.js +14 -7
  264. package/esm/src/kernel/profile-presence.d.ts +10 -1
  265. package/esm/src/kernel/profile-presence.js +90 -75
  266. package/esm/src/kernel/profile-scope.d.ts +7 -3
  267. package/esm/src/kernel/profile-scope.js +67 -55
  268. package/esm/src/kernel/protocols/binding.d.ts +65 -0
  269. package/esm/src/kernel/protocols/binding.js +125 -0
  270. package/esm/src/kernel/protocols/limits.d.ts +15 -0
  271. package/esm/src/kernel/protocols/limits.js +28 -0
  272. package/esm/src/kernel/protocols/mod.d.ts +5 -0
  273. package/esm/src/kernel/protocols/mod.js +5 -0
  274. package/esm/src/kernel/protocols/prices.d.ts +36 -0
  275. package/esm/src/kernel/protocols/prices.js +37 -0
  276. package/esm/src/kernel/protocols/protocol.d.ts +253 -0
  277. package/esm/src/kernel/protocols/protocol.js +253 -0
  278. package/esm/src/kernel/protocols/provider.d.ts +108 -0
  279. package/esm/src/kernel/protocols/provider.js +143 -0
  280. package/esm/src/kernel/protocols/runtime.d.ts +55 -0
  281. package/esm/src/kernel/protocols/runtime.js +534 -0
  282. package/esm/src/kernel/provider-budget.d.ts +32 -0
  283. package/esm/src/kernel/provider-budget.js +262 -0
  284. package/esm/src/kernel/provider-dispatch.d.ts +13 -0
  285. package/esm/src/kernel/provider-dispatch.js +36 -0
  286. package/esm/src/kernel/provider-live.d.ts +7 -0
  287. package/esm/src/kernel/provider-live.js +189 -0
  288. package/esm/src/kernel/provider-runtime.d.ts +57 -0
  289. package/esm/src/kernel/provider-runtime.js +524 -0
  290. package/esm/src/kernel/registry/attachments.d.ts +15 -4
  291. package/esm/src/kernel/registry/attachments.js +31 -22
  292. package/esm/src/kernel/registry/catalog.d.ts +6 -0
  293. package/esm/src/kernel/registry/catalog.js +9 -2
  294. package/esm/src/kernel/registry/embedding-rules.d.ts +28 -0
  295. package/esm/src/kernel/registry/embedding-rules.js +66 -0
  296. package/esm/src/kernel/registry/ingress.d.ts +6 -2
  297. package/esm/src/kernel/registry/ingress.js +55 -10
  298. package/esm/src/kernel/registry/kernel-registry.d.ts +3 -0
  299. package/esm/src/kernel/registry/kernel-registry.js +9 -2
  300. package/esm/src/kernel/registry/profile-outputs.js +4 -1
  301. package/esm/src/kernel/registry/profiles.d.ts +38 -14
  302. package/esm/src/kernel/registry/profiles.js +280 -205
  303. package/esm/src/kernel/registry/provider-request.d.ts +3 -3
  304. package/esm/src/kernel/registry/provider-request.js +5 -13
  305. package/esm/src/kernel/registry/resolve.d.ts +4 -1
  306. package/esm/src/kernel/registry/resolve.js +59 -58
  307. package/esm/src/kernel/registry/schemas.d.ts +3 -0
  308. package/esm/src/kernel/registry/schemas.js +3 -1
  309. package/esm/src/kernel/registry/slot-fill.d.ts +7 -0
  310. package/esm/src/kernel/registry/slot-fill.js +22 -0
  311. package/esm/src/kernel/registry/system-prompt.js +7 -8
  312. package/esm/src/kernel/registry/vault.d.ts +14 -13
  313. package/esm/src/kernel/registry/vault.js +1 -14
  314. package/esm/src/kernel/schema.d.ts +100 -46
  315. package/esm/src/kernel/schema.js +499 -257
  316. package/esm/src/kernel/scope.d.ts +12 -5
  317. package/esm/src/kernel/scope.js +23 -3
  318. package/esm/src/kernel/stages.d.ts +38 -3
  319. package/esm/src/kernel/stages.js +82 -39
  320. package/esm/src/kernel/stop.d.ts +29 -6
  321. package/esm/src/kernel/stop.js +16 -4
  322. package/esm/src/kernel/system-parts.js +6 -6
  323. package/esm/src/kernel/tools/activity-label.d.ts +12 -6
  324. package/esm/src/kernel/tools/activity-label.js +258 -32
  325. package/esm/src/kernel/tools/agent.d.ts +66 -0
  326. package/esm/src/kernel/tools/agent.js +212 -0
  327. package/esm/src/kernel/tools/coordinate.d.ts +4 -0
  328. package/esm/src/kernel/tools/coordinate.js +165 -0
  329. package/esm/src/kernel/tools/events.d.ts +21 -6
  330. package/esm/src/kernel/tools/events.js +53 -18
  331. package/esm/src/kernel/tools/execute.d.ts +47 -11
  332. package/esm/src/kernel/tools/execute.js +508 -136
  333. package/esm/src/kernel/tools/gate-answer.d.ts +12 -2
  334. package/esm/src/kernel/tools/gate-answer.js +17 -6
  335. package/esm/src/kernel/tools/handler-events.d.ts +45 -0
  336. package/esm/src/kernel/tools/handler-events.js +106 -0
  337. package/esm/src/kernel/tools/harness.d.ts +1 -0
  338. package/esm/src/kernel/tools/harness.js +2 -1
  339. package/esm/src/kernel/tools/http-limit.d.ts +27 -0
  340. package/esm/src/kernel/tools/http-limit.js +85 -0
  341. package/esm/src/kernel/tools/invoke.d.ts +27 -5
  342. package/esm/src/kernel/tools/invoke.js +223 -70
  343. package/esm/src/kernel/tools/mcp-sessions.d.ts +4 -1
  344. package/esm/src/kernel/tools/mcp-sessions.js +13 -8
  345. package/esm/src/kernel/tools/mod.d.ts +4 -3
  346. package/esm/src/kernel/tools/mod.js +3 -2
  347. package/esm/src/kernel/tools/model-text.d.ts +10 -5
  348. package/esm/src/kernel/tools/model-text.js +18 -12
  349. package/esm/src/kernel/tools/operation.d.ts +76 -0
  350. package/esm/src/kernel/tools/operation.js +100 -0
  351. package/esm/src/kernel/tools/page-answer.d.ts +8 -0
  352. package/esm/src/kernel/tools/page-answer.js +19 -0
  353. package/esm/src/kernel/tools/permission.d.ts +11 -2
  354. package/esm/src/kernel/tools/permission.js +12 -12
  355. package/esm/src/kernel/tools/project.d.ts +4 -1
  356. package/esm/src/kernel/tools/project.js +32 -2
  357. package/esm/src/kernel/tools/registry.d.ts +9 -2
  358. package/esm/src/kernel/tools/registry.js +69 -10
  359. package/esm/src/kernel/tools/remote.d.ts +40 -6
  360. package/esm/src/kernel/tools/remote.js +219 -92
  361. package/esm/src/kernel/tools/resolve.d.ts +3 -0
  362. package/esm/src/kernel/tools/resolve.js +12 -4
  363. package/esm/src/kernel/tools/run.d.ts +28 -0
  364. package/esm/src/kernel/tools/run.js +86 -0
  365. package/esm/src/kernel/tools/schema.d.ts +3 -3
  366. package/esm/src/kernel/tools/schema.js +21 -100
  367. package/esm/src/kernel/tools/signed-in-fetch.d.ts +2 -1
  368. package/esm/src/kernel/tools/signed-in-fetch.js +3 -3
  369. package/esm/src/kernel/tools/stage-run.d.ts +27 -4
  370. package/esm/src/kernel/tools/stage-run.js +75 -17
  371. package/esm/src/kernel/tools/types.d.ts +235 -25
  372. package/esm/src/kernel/tools/unchecked-output.d.ts +14 -0
  373. package/esm/src/kernel/tools/unchecked-output.js +18 -0
  374. package/esm/src/kernel/turn-events.d.ts +208 -31
  375. package/esm/src/kernel/turn-events.js +127 -9
  376. package/esm/src/kernel/types.d.ts +302 -161
  377. package/esm/src/kernel/util/base64.d.ts +2 -0
  378. package/esm/src/kernel/util/base64.js +2 -0
  379. package/esm/src/kernel/util/partial-json.d.ts +23 -0
  380. package/esm/src/kernel/util/partial-json.js +128 -0
  381. package/esm/src/kernel/util/record.d.ts +1 -0
  382. package/esm/src/kernel/util/record.js +1 -0
  383. package/esm/src/observability/destinations.d.ts +5 -0
  384. package/esm/src/observability/destinations.js +7 -2
  385. package/esm/src/observability/jsonl.d.ts +2 -2
  386. package/esm/src/observability/jsonl.js +15 -22
  387. package/esm/src/observability/mod.d.ts +3 -3
  388. package/esm/src/observability/mod.js +2 -2
  389. package/esm/src/observability/openinference.d.ts +1 -1
  390. package/esm/src/observability/openinference.js +3 -3
  391. package/esm/src/observability/otlp.d.ts +3 -0
  392. package/esm/src/observability/otlp.js +3 -3
  393. package/esm/src/observability/phoenix.d.ts +1 -0
  394. package/esm/src/observability/policy.d.ts +3 -0
  395. package/esm/src/observability/policy.js +5 -1
  396. package/esm/src/observability/resolve-policy.js +11 -5
  397. package/esm/src/observability/spans.d.ts +8 -2
  398. package/esm/src/observability/spans.js +21 -5
  399. package/esm/src/observability/trace-catalog.d.ts +19 -2
  400. package/esm/src/observability/trace-catalog.js +130 -88
  401. package/esm/src/observability/trace-record.js +22 -17
  402. package/esm/src/observability/trace-schema.d.ts +3 -0
  403. package/esm/src/observability/trace-schema.js +1 -1
  404. package/esm/src/observability/trace-sink.d.ts +1 -0
  405. package/esm/src/observability/trace-sink.js +1 -1
  406. package/esm/src/observability/trace-span.d.ts +7 -1
  407. package/esm/src/observability/trace-span.js +3 -1
  408. package/esm/src/observability/trace.d.ts +2 -0
  409. package/esm/src/observability/trace.js +4 -2
  410. package/esm/src/observability/types.d.ts +35 -11
  411. package/esm/src/observability/types.js +1 -1
  412. package/esm/src/presets/google/speech-voices.d.ts +1 -0
  413. package/esm/src/presets/google-limits.d.ts +1 -0
  414. package/esm/src/presets/google.d.ts +27 -12
  415. package/esm/src/presets/google.js +34 -25
  416. package/esm/src/presets/local.d.ts +26 -0
  417. package/esm/src/presets/local.js +30 -0
  418. package/esm/src/presets/mod.d.ts +5 -4
  419. package/esm/src/presets/mod.js +4 -4
  420. package/esm/src/presets/openrouter.d.ts +14 -1
  421. package/esm/src/presets/openrouter.js +19 -1
  422. package/esm/src/providers/embedding-limits.d.ts +7 -0
  423. package/esm/src/providers/embedding-limits.js +12 -0
  424. package/esm/src/providers/gemini/embedding-protocol.d.ts +8 -0
  425. package/esm/src/providers/gemini/embedding-protocol.js +125 -0
  426. package/esm/src/providers/gemini/interactions-protocol.d.ts +8 -0
  427. package/esm/src/providers/gemini/interactions-protocol.js +102 -0
  428. package/esm/src/providers/gemini/live-protocol.d.ts +3 -0
  429. package/esm/src/providers/gemini/live-protocol.js +191 -0
  430. package/esm/src/providers/gemini/prices.d.ts +3 -0
  431. package/esm/src/providers/gemini/prices.js +63 -0
  432. package/esm/src/providers/gemini/provider.d.ts +7 -0
  433. package/esm/src/providers/gemini/provider.js +39 -0
  434. package/esm/src/providers/google/api-error.d.ts +2 -0
  435. package/esm/src/providers/google/api-error.js +26 -18
  436. package/esm/src/providers/google/builtins.d.ts +14 -0
  437. package/esm/src/providers/google/builtins.js +57 -0
  438. package/esm/src/providers/google/grounding.d.ts +4 -4
  439. package/esm/src/providers/google/interactions/framing.d.ts +20 -8
  440. package/esm/src/providers/google/interactions/framing.js +85 -44
  441. package/esm/src/providers/google/interactions/steps.d.ts +5 -5
  442. package/esm/src/providers/google/interactions/steps.js +4 -4
  443. package/esm/src/providers/google/interactions/stream.d.ts +10 -11
  444. package/esm/src/providers/google/interactions/stream.js +33 -100
  445. package/esm/src/providers/google/live/framing.d.ts +15 -5
  446. package/esm/src/providers/google/live/framing.js +25 -25
  447. package/esm/src/providers/google/live/stream.d.ts +6 -44
  448. package/esm/src/providers/google/live/stream.js +4 -210
  449. package/esm/src/providers/google/urls.d.ts +1 -3
  450. package/esm/src/providers/google/urls.js +1 -3
  451. package/esm/src/providers/google/usage.js +2 -2
  452. package/esm/src/providers/live.d.ts +6 -0
  453. package/esm/src/providers/live.js +6 -0
  454. package/esm/src/providers/local/embedding-protocol.d.ts +7 -0
  455. package/esm/src/providers/local/embedding-protocol.js +60 -0
  456. package/esm/src/providers/local/provider.d.ts +7 -0
  457. package/esm/src/providers/local/provider.js +28 -0
  458. package/esm/src/providers/mod.d.ts +28 -7
  459. package/esm/src/providers/mod.js +19 -3
  460. package/esm/src/providers/open-ai/protocol.d.ts +3 -0
  461. package/esm/src/providers/open-ai/protocol.js +189 -0
  462. package/esm/src/providers/openrouter/embedding-protocol.d.ts +6 -0
  463. package/esm/src/providers/openrouter/embedding-protocol.js +86 -0
  464. package/esm/src/providers/openrouter/image.d.ts +0 -9
  465. package/esm/src/providers/openrouter/image.js +0 -153
  466. package/esm/src/providers/openrouter/images-protocol.d.ts +3 -0
  467. package/esm/src/providers/openrouter/images-protocol.js +82 -0
  468. package/esm/src/providers/openrouter/openai/compat.d.ts +2 -2
  469. package/esm/src/providers/openrouter/openai/compat.js +6 -6
  470. package/esm/src/providers/openrouter/openai/image-payload.d.ts +2 -2
  471. package/esm/src/providers/openrouter/openai/reasoning-state.d.ts +2 -0
  472. package/esm/src/providers/openrouter/openai/reasoning-state.js +31 -0
  473. package/esm/src/providers/openrouter/protocol.d.ts +8 -0
  474. package/esm/src/providers/openrouter/protocol.js +171 -0
  475. package/esm/src/providers/openrouter/provider.d.ts +10 -0
  476. package/esm/src/providers/openrouter/provider.js +50 -0
  477. package/esm/src/providers/shared/carried-tool-files.d.ts +7 -0
  478. package/esm/src/providers/shared/carried-tool-files.js +43 -0
  479. package/esm/src/providers/shared/pcm.js +2 -2
  480. package/esm/src/providers/shared/protocol-events.d.ts +8 -0
  481. package/esm/src/providers/shared/protocol-events.js +20 -0
  482. package/esm/src/providers/shared/response-identity.d.ts +2 -2
  483. package/esm/src/providers/shared/retry.d.ts +18 -0
  484. package/esm/src/providers/shared/retry.js +89 -0
  485. package/esm/src/providers/shared/sse.d.ts +0 -4
  486. package/esm/src/providers/shared/sse.js +50 -36
  487. package/esm/src/providers/shared/tool-args.d.ts +6 -7
  488. package/esm/src/providers/shared/tool-args.js +10 -6
  489. package/esm/src/providers/shared/tool-draft.d.ts +16 -0
  490. package/esm/src/providers/shared/tool-draft.js +14 -0
  491. package/esm/src/providers/shared/upstream-tap.d.ts +2 -2
  492. package/esm/src/providers/shared/upstream-tape.js +1 -1
  493. package/esm/src/providers/system-one/protocol.d.ts +8 -0
  494. package/esm/src/providers/system-one/protocol.js +93 -0
  495. package/esm/src/providers/types.d.ts +48 -16
  496. package/esm/src/providers/types.js +2 -1
  497. package/esm/src/providers/typesafe/provider.d.ts +7 -0
  498. package/esm/src/providers/typesafe/provider.js +24 -0
  499. package/esm/src/surface/formats.d.ts +19 -1
  500. package/esm/src/surface/formats.js +68 -29
  501. package/esm/src/surface/mod.d.ts +4 -2
  502. package/esm/src/surface/mod.js +4 -2
  503. package/esm/src/surface/runtime.d.ts +4 -0
  504. package/esm/src/surface/runtime.js +2 -0
  505. package/esm/src/surface/tools.d.ts +2 -8
  506. package/esm/src/surface/tools.js +4 -22
  507. package/esm/src/surface/types.d.ts +6 -0
  508. package/package.json +5 -13
  509. package/esm/src/cli/commands/egress-compile.d.ts +0 -17
  510. package/esm/src/cli/commands/egress-compile.js +0 -25
  511. package/esm/src/guardrails/egress-policy.d.ts +0 -27
  512. package/esm/src/guardrails/egress-policy.js +0 -76
  513. package/esm/src/guardrails/egress-rules.d.ts +0 -54
  514. package/esm/src/guardrails/egress-rules.js +0 -49
  515. package/esm/src/guardrails/lexicon.d.ts +0 -30
  516. package/esm/src/guardrails/lexicon.js +0 -478
  517. package/esm/src/kernel/engine/media-probe/audio.d.ts +0 -7
  518. package/esm/src/kernel/engine/media-probe/audio.js +0 -342
  519. package/esm/src/kernel/engine/media-probe/bytes.d.ts +0 -6
  520. package/esm/src/kernel/engine/media-probe/bytes.js +0 -26
  521. package/esm/src/kernel/engine/media-probe/image.d.ts +0 -5
  522. package/esm/src/kernel/engine/media-probe/image.js +0 -171
  523. package/esm/src/kernel/engine/media-probe/iso-bmff.d.ts +0 -19
  524. package/esm/src/kernel/engine/media-probe/iso-bmff.js +0 -48
  525. package/esm/src/kernel/engine/media-probe/matroska.d.ts +0 -35
  526. package/esm/src/kernel/engine/media-probe/matroska.js +0 -226
  527. package/esm/src/kernel/engine/media-probe/mp4.d.ts +0 -22
  528. package/esm/src/kernel/engine/media-probe/mp4.js +0 -279
  529. package/esm/src/kernel/engine/media-probe/opus.d.ts +0 -4
  530. package/esm/src/kernel/engine/media-probe/opus.js +0 -23
  531. package/esm/src/kernel/engine/media-probe/pdf.d.ts +0 -5
  532. package/esm/src/kernel/engine/media-probe/pdf.js +0 -117
  533. package/esm/src/kernel/engine/media-probe/video.d.ts +0 -15
  534. package/esm/src/kernel/engine/media-probe/video.js +0 -49
  535. package/esm/src/presets/typesafe.d.ts +0 -2
  536. package/esm/src/presets/typesafe.js +0 -2
  537. package/esm/src/providers/create-provider.d.ts +0 -21
  538. package/esm/src/providers/create-provider.js +0 -90
  539. package/esm/src/providers/decision/usage.d.ts +0 -3
  540. package/esm/src/providers/decision/usage.js +0 -25
  541. package/esm/src/providers/google/interactions/mod.d.ts +0 -2
  542. package/esm/src/providers/google/interactions/mod.js +0 -2
  543. package/esm/src/providers/google/keys.d.ts +0 -20
  544. package/esm/src/providers/google/keys.js +0 -87
  545. package/esm/src/providers/google/live/mod.d.ts +0 -7
  546. package/esm/src/providers/google/live/mod.js +0 -7
  547. package/esm/src/providers/google/live/openapi-schema.d.ts +0 -1
  548. package/esm/src/providers/google/live/openapi-schema.js +0 -42
  549. package/esm/src/providers/google/live/session.d.ts +0 -14
  550. package/esm/src/providers/google/live/session.js +0 -150
  551. package/esm/src/providers/local/local.d.ts +0 -12
  552. package/esm/src/providers/local/local.js +0 -186
  553. package/esm/src/providers/local/mod.d.ts +0 -8
  554. package/esm/src/providers/local/mod.js +0 -8
  555. package/esm/src/providers/openrouter/cache-control.d.ts +0 -5
  556. package/esm/src/providers/openrouter/cache-control.js +0 -4
  557. package/esm/src/providers/openrouter/chat.d.ts +0 -64
  558. package/esm/src/providers/openrouter/chat.js +0 -490
  559. package/esm/src/providers/openrouter/openai/sdk-messages.d.ts +0 -10
  560. package/esm/src/providers/openrouter/openai/sdk-messages.js +0 -99
  561. package/esm/src/providers/openrouter/resolve-api-key.d.ts +0 -3
  562. package/esm/src/providers/openrouter/resolve-api-key.js +0 -8
  563. package/esm/src/providers/openrouter/speech.d.ts +0 -18
  564. package/esm/src/providers/openrouter/speech.js +0 -109
  565. package/esm/src/providers/probe.d.ts +0 -5
  566. package/esm/src/providers/probe.js +0 -15
  567. package/esm/src/providers/shared/builtin-wire.d.ts +0 -4
  568. package/esm/src/providers/shared/builtin-wire.js +0 -9
  569. package/esm/src/providers/shared/vault.d.ts +0 -13
  570. package/esm/src/providers/shared/vault.js +0 -41
@@ -1,48 +1,89 @@
1
1
  import { blobAt, spansFromPatterns } from '../observability/spans.js';
2
+ import { CREDENTIAL_RULES, GLOBAL_ALLOWLIST } from './credential-rules.js';
3
+ import { credentialHit, credentialSpans } from './credential-scan.js';
2
4
  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;
5
+ const SSN_CONTEXTUAL = /(?:SSN|social\s*security(?:\s*number)?)[:\s]+\d(?:[-\s]*\d){8}/gi;
4
6
  const ITIN = /\b9\d{2}-\d{2}-\d{4}\b/g;
5
7
  const EIN = /\b\d{2}-\d{7}\b/g;
6
8
  const IBAN = /\b[A-Z]{2}\d{2}[A-Z0-9]{13,30}\b/g;
7
9
  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;
10
+ const HEX_GROUP = '[0-9a-f]{1,4}';
11
+ const DOTTED_QUAD = '(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)';
12
+ /** Every RFC 4291 text form: full, `::`-compressed, and with a dotted IPv4 tail. */
13
+ const IPV6_FORMS = [
14
+ `(?:${HEX_GROUP}:){6}${DOTTED_QUAD}`,
15
+ `(?:${HEX_GROUP}:){1,5}:${DOTTED_QUAD}`,
16
+ `::(?:${HEX_GROUP}:){0,5}${DOTTED_QUAD}`,
17
+ `(?:${HEX_GROUP}:){7}${HEX_GROUP}`,
18
+ `(?:${HEX_GROUP}:){1,6}(?::${HEX_GROUP}){1,6}`,
19
+ `(?:${HEX_GROUP}:){1,7}:`,
20
+ `:(?::${HEX_GROUP}){1,7}`,
21
+ ];
22
+ const IPV6 = new RegExp(`(?<![\\w:.])(?:${IPV6_FORMS.join('|')})(?![\\w:])`, 'gi');
23
+ /** Credentials gitleaks' rules miss: keys cut short or spaced out, a short private key, and a bare bearer token. */
24
+ const OWN_CREDENTIAL_RULES = [
25
+ {
26
+ id: 'openai-api-key-any',
27
+ pattern: /\bsk-\s*[A-Za-z0-9]{20,}\b/,
28
+ keywords: ['sk-'],
29
+ allowlists: [],
30
+ },
31
+ {
32
+ id: 'anthropic-api-key-any',
33
+ pattern: /\bsk-ant-[A-Za-z0-9_-]{20,}\b/,
34
+ keywords: ['sk-ant-'],
35
+ allowlists: [],
36
+ },
37
+ {
38
+ id: 'openrouter-api-key',
39
+ pattern: /\bsk-or-[A-Za-z0-9_-]{20,}\b/,
40
+ keywords: ['sk-or-'],
41
+ allowlists: [],
42
+ },
43
+ {
44
+ id: 'github-fine-grained-pat-any',
45
+ pattern: /\bgithub_pat_[A-Za-z0-9_]{20,}\b/,
46
+ keywords: ['github_pat_'],
47
+ allowlists: [],
48
+ },
49
+ {
50
+ id: 'slack-token-any',
51
+ pattern: /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/,
52
+ keywords: ['xox'],
53
+ allowlists: [],
54
+ },
55
+ {
56
+ id: 'private-key-any',
57
+ pattern: /-----BEGIN (?:(?:RSA|DSA|EC|OPENSSH|ENCRYPTED|PGP) )?PRIVATE KEY(?: BLOCK)?-----[\s\S]{0,16384}?-----END (?:(?:RSA|DSA|EC|OPENSSH|ENCRYPTED|PGP) )?PRIVATE KEY(?: BLOCK)?-----/,
58
+ keywords: ['-----begin'],
59
+ allowlists: [],
60
+ },
61
+ {
62
+ id: 'bearer-token',
63
+ pattern: /\bBearer[ \t]+([A-Za-z0-9._~+/-]{16,}=*)/i,
64
+ entropy: 3,
65
+ keywords: ['bearer'],
66
+ allowlists: [],
67
+ },
68
+ ];
69
+ /** Every credential rule: gitleaks', then Theorem's own. */
70
+ const CREDENTIALS = [...CREDENTIAL_RULES, ...OWN_CREDENTIAL_RULES];
20
71
  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`. */
72
+ /** The patterns each group matches. Card numbers are financial too, found by `cardSpans`; credentials by `credentialSpans`. */
27
73
  const GROUP_PATTERNS = {
28
74
  ids: [SSN, SSN_CONTEXTUAL, ITIN, EIN],
29
75
  financial: [IBAN],
30
76
  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
77
  };
44
78
  /** Every pattern, with its group. */
45
- const SENSITIVE_PATTERNS = SENSITIVE_GROUPS.flatMap((group) => GROUP_PATTERNS[group].map((pattern) => ({ group, pattern })));
79
+ const SENSITIVE_PATTERNS = [
80
+ ...['ids', 'financial', 'network'].flatMap((group) => GROUP_PATTERNS[group].map((pattern) => ({ group, pattern }))),
81
+ ...CREDENTIALS.map((rule) => ({
82
+ group: 'credentials',
83
+ pattern: new RegExp(rule.pattern.source, `${rule.pattern.flags}g`),
84
+ hit: (match, text, at) => credentialHit(rule, GLOBAL_ALLOWLIST, match, text, at),
85
+ })),
86
+ ];
46
87
  const ALL_GROUPS = {
47
88
  ids: true,
48
89
  financial: true,
@@ -58,15 +99,9 @@ function resolveSensitive(selection, defaults = ALL_GROUPS) {
58
99
  }
59
100
  return { ...defaults, ...selection };
60
101
  }
61
- /** Whether any group runs. */
62
- function anySensitive(groups) {
63
- return SENSITIVE_GROUPS.some((group) => groups[group]);
64
- }
65
102
  const LUHN_DOUBLE = 2;
66
103
  const LUHN_NINE = 9;
67
104
  const LUHN_TEN = 10;
68
- const CARD_MIN_DIGITS = 13;
69
- const CARD_MAX_DIGITS = 19;
70
105
  function luhnOk(digits) {
71
106
  let sum = 0;
72
107
  let doubleIt = false;
@@ -87,17 +122,100 @@ function luhnOk(digits) {
87
122
  }
88
123
  return sum % LUHN_TEN === 0;
89
124
  }
90
- /** A card-number candidate that is a card: 13–19 digits passing the Luhn check. */
91
- function cardHit(blob) {
125
+ const LENGTHS_16_TO_19 = [16, 17, 18, 19];
126
+ /** Visa, Mastercard, American Express, Diners Club, Discover, JCB, UnionPay, Maestro, Mir, and RuPay, in that order. */
127
+ const CARD_NETWORKS = [
128
+ { leading: [['4', '4']], lengths: [13, 16, 19] },
129
+ {
130
+ leading: [
131
+ ['51', '55'],
132
+ ['2221', '2720'],
133
+ ],
134
+ lengths: [16],
135
+ },
136
+ {
137
+ leading: [
138
+ ['34', '34'],
139
+ ['37', '37'],
140
+ ],
141
+ lengths: [15],
142
+ },
143
+ {
144
+ leading: [
145
+ ['300', '305'],
146
+ ['3095', '3095'],
147
+ ['36', '36'],
148
+ ['38', '39'],
149
+ ],
150
+ lengths: [14, 15, ...LENGTHS_16_TO_19],
151
+ },
152
+ {
153
+ leading: [
154
+ ['6011', '6011'],
155
+ ['644', '649'],
156
+ ['65', '65'],
157
+ ],
158
+ lengths: LENGTHS_16_TO_19,
159
+ },
160
+ { leading: [['3528', '3589']], lengths: LENGTHS_16_TO_19 },
161
+ { leading: [['62', '62']], lengths: LENGTHS_16_TO_19 },
162
+ {
163
+ leading: [
164
+ ['5018', '5018'],
165
+ ['5020', '5020'],
166
+ ['5038', '5038'],
167
+ ['5893', '5893'],
168
+ ['6304', '6304'],
169
+ ['6759', '6759'],
170
+ ['6761', '6763'],
171
+ ],
172
+ lengths: [13, 14, 15, ...LENGTHS_16_TO_19],
173
+ },
174
+ { leading: [['2200', '2204']], lengths: LENGTHS_16_TO_19 },
175
+ {
176
+ leading: [
177
+ ['60', '60'],
178
+ ['81', '82'],
179
+ ['508', '508'],
180
+ ['353', '353'],
181
+ ['356', '356'],
182
+ ],
183
+ lengths: [16],
184
+ },
185
+ ];
186
+ /** Whether some card network issues numbers that start and run as long as `digits`. */
187
+ function isIssued(digits) {
188
+ return CARD_NETWORKS.some((network) => network.lengths.includes(digits.length) &&
189
+ network.leading.some(([low, high]) => {
190
+ const start = digits.slice(0, low.length);
191
+ return start >= low && start <= high;
192
+ }));
193
+ }
194
+ const URL_SCHEME = /https?:\/\//i;
195
+ const URL_LOOKBACK = 2048;
196
+ /** Whether `at` of `text` is inside a web address: the unbroken run of characters before it holds `http://` or `https://`. */
197
+ function isInUrl(text, at) {
198
+ const floor = Math.max(0, at - URL_LOOKBACK);
199
+ let from = at;
200
+ while (from > floor && !/\s/.test(text[from - 1] ?? ' '))
201
+ from -= 1;
202
+ return URL_SCHEME.test(text.slice(from, at));
203
+ }
204
+ /**
205
+ * A card-number candidate at `at` of `text` that is a card: digits a card
206
+ * network issues, passing the Luhn check, outside a web address. A run of
207
+ * digits in an address is the address's own identifier: one random 19-digit
208
+ * identifier in a hundred passes the first two tests.
209
+ */
210
+ function cardHit(blob, text, at) {
92
211
  const digits = blob.replaceAll(/[^\d]/g, '');
93
- const inRange = digits.length >= CARD_MIN_DIGITS && digits.length <= CARD_MAX_DIGITS;
94
- return inRange && luhnOk(digits);
212
+ return isIssued(digits) && luhnOk(digits) && !isInUrl(text, at);
95
213
  }
96
214
  function cardSpans(text) {
97
215
  const spans = [];
98
216
  for (const match of text.matchAll(CARD_CANDIDATE)) {
99
217
  const found = blobAt(match);
100
- if (found && cardHit(found.blob)) {
218
+ if (found && cardHit(found.blob, text, found.index)) {
101
219
  spans.push({ start: found.index, end: found.index + found.blob.length, kind: 'sensitive' });
102
220
  }
103
221
  }
@@ -106,8 +224,11 @@ function cardSpans(text) {
106
224
  /** Sensitive-data spans in `text`, from the groups `selection` runs (every group by default). */
107
225
  function sensitiveSpans(text, selection = true) {
108
226
  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;
227
+ const patterns = ['ids', 'financial', 'network'].flatMap((group) => groups[group] ? GROUP_PATTERNS[group] : []);
228
+ return [
229
+ ...spansFromPatterns(text, patterns, 'sensitive'),
230
+ ...(groups.financial ? cardSpans(text) : []),
231
+ ...(groups.credentials ? credentialSpans(text, CREDENTIALS, GLOBAL_ALLOWLIST) : []),
232
+ ];
112
233
  }
113
- export { anySensitive, CARD_CANDIDATE, cardHit, resolveSensitive, SENSITIVE_GROUPS, SENSITIVE_PATTERNS, sensitiveSpans, };
234
+ export { CARD_CANDIDATE, cardHit, SENSITIVE_PATTERNS, sensitiveSpans };
@@ -1,4 +1,5 @@
1
1
  declare const CIRCULAR = "[circular]";
2
+ /** A value rendered as text for a guardrail scan, and whether it could not be rendered. */
2
3
  export interface ScanText {
3
4
  text: string;
4
5
  /** True when the payload could not be rendered and was not inspected. */
@@ -1,9 +1,11 @@
1
1
  /**
2
- * Adversarial corpus, fuzz runners and live attack builders, kept off the production guardrails entry.
2
+ * Adversarial corpus, fuzz runners, and live attack builders, kept off the production guardrails entry.
3
3
  *
4
4
  * @module
5
5
  */
6
- /** lexicon-exempt-file: adversarial harness helpers — not runtime user or model copy (P2) */
6
+ /** labels-exempt-file: adversarial harness helpers — not runtime user or model copy (P2) */
7
7
  import "../../_dnt.polyfills.js";
8
8
  export type { CanaryEgressAttack, CanaryEgressCatalogEntry, InboundFuzzPayload, InboundFuzzResult, LiveAttack, } from './corpus/mod.js';
9
9
  export { buildCanaryEgressAttacks, buildLiveAttacks, canaryEgressCatalog, FIXED_CANARY, FUZZ_SYSTEM, filterLiveAttacks, inboundFuzzPayloads, inboundPayloadByName, runInboundGuardrailFuzz, summarizeAttackBank, } from './corpus/mod.js';
10
+ export { TEST_AWS_KEY, TEST_GITHUB_PAT, TEST_GOOGLE_KEY, TEST_OPENAI_KEY, TEST_PEM, TEST_SLACK, TEST_VISA, } from './corpus/secrets.js';
11
+ export { INJ_IGNORE, INJ_IGNORE_REVEAL, injHexSpaced } from './corpus/strings.js';
@@ -1,8 +1,10 @@
1
1
  /**
2
- * Adversarial corpus, fuzz runners and live attack builders, kept off the production guardrails entry.
2
+ * Adversarial corpus, fuzz runners, and live attack builders, kept off the production guardrails entry.
3
3
  *
4
4
  * @module
5
5
  */
6
- /** lexicon-exempt-file: adversarial harness helpers — not runtime user or model copy (P2) */
6
+ /** labels-exempt-file: adversarial harness helpers — not runtime user or model copy (P2) */
7
7
  import "../../_dnt.polyfills.js";
8
8
  export { buildCanaryEgressAttacks, buildLiveAttacks, canaryEgressCatalog, FIXED_CANARY, FUZZ_SYSTEM, filterLiveAttacks, inboundFuzzPayloads, inboundPayloadByName, runInboundGuardrailFuzz, summarizeAttackBank, } from './corpus/mod.js';
9
+ export { TEST_AWS_KEY, TEST_GITHUB_PAT, TEST_GOOGLE_KEY, TEST_OPENAI_KEY, TEST_PEM, TEST_SLACK, TEST_VISA, } from './corpus/secrets.js';
10
+ export { INJ_IGNORE, INJ_IGNORE_REVEAL, injHexSpaced } from './corpus/strings.js';
@@ -3,14 +3,17 @@ export type { ErrorCopies, ErrorCopy };
3
3
  /**
4
4
  * What kind of failure happened, decided where it happens. Both worlds read it:
5
5
  * the builder in code and traces (`errorKind`, `error.type`), the user through
6
- * the kind's wording (`error.<kind>` in the lexicon).
6
+ * the kind's wording (`error.<kind>` in the labels).
7
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"];
8
+ export declare const ERROR_KINDS: readonly ["config", "request", "input", "action", "auth", "rate_limit", "busy", "unsupported", "unavailable", "bad_response", "network", "timeout", "safety", "blocked", "declined", "failed", "cancelled", "internal"];
9
+ /** Why an operation failed; the user's wording and the HTTP status follow from it. */
9
10
  export type ErrorKind = (typeof ERROR_KINDS)[number];
11
+ /** Options for a `TheoremError`: the cause and, optionally, wording for the user. */
10
12
  export interface TheoremErrorOptions extends ErrorOptions {
11
13
  /** User wording more specific than the kind's: one line, or one per problem found. */
12
14
  copy?: ErrorCopies;
13
15
  }
16
+ /** An error that carries a `kind`, from which hosts choose a status and the user's wording. */
14
17
  export declare class TheoremError extends Error {
15
18
  readonly kind: ErrorKind;
16
19
  readonly copy?: ErrorCopies;
@@ -1,8 +1,8 @@
1
- // Its own module so `lexicon.ts` can throw it without importing `error.ts`, which reads the lexicon.
1
+ // invariant: Its own module so `labels.ts` can throw it without importing `error.ts`, which reads the labels.
2
2
  /**
3
3
  * What kind of failure happened, decided where it happens. Both worlds read it:
4
4
  * the builder in code and traces (`errorKind`, `error.type`), the user through
5
- * the kind's wording (`error.<kind>` in the lexicon).
5
+ * the kind's wording (`error.<kind>` in the labels).
6
6
  */
7
7
  export const ERROR_KINDS = [
8
8
  /** The profile, tool, or schema is set up wrong. */
@@ -17,9 +17,11 @@ export const ERROR_KINDS = [
17
17
  'auth',
18
18
  /** Too many requests, or a quota used up. */
19
19
  'rate_limit',
20
+ /** The provider is up but too busy for the call; another key or a moment later may serve it. */
21
+ 'busy',
20
22
  /** The model or route cannot serve this request. */
21
23
  'unsupported',
22
- /** The provider is down or overloaded. */
24
+ /** The provider is down. */
23
25
  'unavailable',
24
26
  /** The provider answered with something that cannot be used. */
25
27
  'bad_response',
@@ -40,6 +42,7 @@ export const ERROR_KINDS = [
40
42
  /** A THEOREM invariant broke. */
41
43
  'internal',
42
44
  ];
45
+ /** An error that carries a `kind`, from which hosts choose a status and the user's wording. */
43
46
  export class TheoremError extends Error {
44
47
  kind;
45
48
  copy;
@@ -1,22 +1,25 @@
1
1
  /**
2
- * Thought guarding. A host that renders `thought` events shows the user what
2
+ * Thought guarding, under `guardrails.detect` at `thought`. A host that renders `thought` events shows the user what
3
3
  * they say and loads what they link, as it does a reply: the canary, the
4
4
  * system prompt and the user-data markers leak through a thought, and a URL
5
5
  * the model was not given carries data out. Nothing in a thought stops a turn
6
6
  * (`isGuardedOutput`); each leak is omitted and the rest of the thought
7
- * released.
7
+ * released, or under `block` omitted with the rest of the thought.
8
8
  *
9
9
  * @module
10
10
  */
11
- import { type ResolvedEgressChecks } from './egress.js';
11
+ import { type Detection } from './detect-at.js';
12
+ import type { UrlAllow } from './detectors.js';
12
13
  import { type GivenUrls } from './egress-urls.js';
13
- import { type LexiconOverrides } from './lexicon.js';
14
- import type { EgressEnforcer, GuardrailContext, GuardrailHit } from './types.js';
14
+ import { type LabelOverrides } from './labels.js';
15
+ import type { GuardrailContext, GuardrailHit, ResolvedGuardrailPolicy } from './types.js';
15
16
  /** What a thought guard lets through: the text to show, and what it omitted from it. */
16
17
  interface ThoughtRelease {
17
18
  text: string;
18
19
  /** One hit per rule that omitted something; empty when nothing was. */
19
20
  hits: GuardrailHit[];
21
+ /** What `guardrails.detect` found in the thought as it was read at `thought`. */
22
+ found?: Pick<Detection, 'action' | 'hits'>;
20
23
  }
21
24
  /** One provider call's (or Live cycle's) thought text, released as it clears. */
22
25
  interface ThoughtGuard {
@@ -27,14 +30,29 @@ interface ThoughtGuard {
27
30
  /** The tail of what was shown that a leak in the next call's thoughts could continue. */
28
31
  carryOut(): string;
29
32
  }
33
+ /** What a thought loses besides the canary and the system instruction. */
34
+ interface ThoughtOmits {
35
+ /** The kernel's markers and the words of the canary note (`marker_leak`). */
36
+ markers?: boolean;
37
+ /** Images to a URL the model was not given, but for what this lets through (`ungiven_images`). */
38
+ images?: UrlAllow;
39
+ /** Links to a URL the model was not given, but for what this lets through (`ungiven_links`). */
40
+ links?: UrlAllow;
41
+ /** Whether `ungiven_images` reads the thought, here or in front: a link then leaves an image's markup to it. */
42
+ imagesRead?: boolean;
43
+ }
30
44
  interface ThoughtGuardOptions {
31
- /** The URL and boundary checks thoughts run; the rest of a policy is for replies. */
32
- checks?: ResolvedEgressChecks;
45
+ omit?: ThoughtOmits;
46
+ /** The canary to omit from a thought. */
33
47
  canary?: string;
34
- /** Guarded against echo alongside the canary. */
48
+ /** The private stretches of the system instruction, whose words are omitted from a thought. */
35
49
  privateSystem?: readonly string[];
50
+ /** The canary the turn planted, when a thought is not read for it: the echo and the note still know its place. */
51
+ planted?: string;
52
+ /** Rules whose leak ends what is shown of the thought, where the others are omitted alone. */
53
+ ends?: ReadonlySet<string>;
36
54
  given?: GivenUrls;
37
- lexicon?: LexiconOverrides;
55
+ labels?: LabelOverrides;
38
56
  /** Shown text an earlier thought ended on (`carryOut`), read in front and never shown again. */
39
57
  carry?: string;
40
58
  }
@@ -47,9 +65,12 @@ interface ThoughtGuardOptions {
47
65
  */
48
66
  declare function createThoughtGuard(options: ThoughtGuardOptions): ThoughtGuard;
49
67
  /**
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.
68
+ * A guard for a turn's thoughts: the detectors `guardrails.detect` sets at
69
+ * `thought`. `context` carries the canary and the system instruction only
70
+ * while their detectors read somewhere (`leakScopeOf`); at `thought`, `redact`
71
+ * omits a match, `block` ends what is shown of the thought there, and `flag`
72
+ * reports it and shows it.
52
73
  */
53
- declare function thoughtGuardFor(enforce: EgressEnforcer | undefined, context: GuardrailContext, carry?: string): ThoughtGuard | undefined;
54
- export type { ThoughtGuard, ThoughtGuardOptions, ThoughtRelease };
74
+ declare function thoughtGuardFor(policy: Pick<ResolvedGuardrailPolicy, 'detect' | 'allow'>, context: GuardrailContext, carry?: string): Promise<ThoughtGuard | undefined>;
75
+ export type { ThoughtGuard, ThoughtGuardOptions, ThoughtOmits, ThoughtRelease };
55
76
  export { createThoughtGuard, thoughtGuardFor };