@theoremjs/agents 0.0.0-stage → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (588) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +545 -2
  3. package/esm/_dnt.polyfills.d.ts +66 -0
  4. package/esm/_dnt.polyfills.js +51 -0
  5. package/esm/mod.d.ts +79 -0
  6. package/esm/mod.js +49 -0
  7. package/esm/package.json +3 -0
  8. package/esm/src/cli/bin.d.ts +7 -0
  9. package/esm/src/cli/bin.js +9 -0
  10. package/esm/src/cli/commands/bench.d.ts +6 -0
  11. package/esm/src/cli/commands/bench.js +480 -0
  12. package/esm/src/cli/commands/detect-compile.d.ts +17 -0
  13. package/esm/src/cli/commands/detect-compile.js +22 -0
  14. package/esm/src/cli/commands/eval.d.ts +37 -0
  15. package/esm/src/cli/commands/eval.js +190 -0
  16. package/esm/src/cli/commands/fuzz-canary.d.ts +15 -0
  17. package/esm/src/cli/commands/fuzz-canary.js +241 -0
  18. package/esm/src/cli/commands/fuzz-guardrails.d.ts +2 -0
  19. package/esm/src/cli/commands/fuzz-guardrails.js +5 -0
  20. package/esm/src/cli/commands/profile.d.ts +2 -0
  21. package/esm/src/cli/commands/profile.js +80 -0
  22. package/esm/src/cli/commands/run.d.ts +13 -0
  23. package/esm/src/cli/commands/run.js +45 -0
  24. package/esm/src/cli/commands/test.d.ts +26 -0
  25. package/esm/src/cli/commands/test.js +143 -0
  26. package/esm/src/cli/event-log.d.ts +15 -0
  27. package/esm/src/cli/event-log.js +136 -0
  28. package/esm/src/cli/index.d.ts +10 -0
  29. package/esm/src/cli/index.js +267 -0
  30. package/esm/src/cli/matrix/fixtures.d.ts +10 -0
  31. package/esm/src/cli/matrix/fixtures.js +67 -0
  32. package/esm/src/cli/matrix/synthesizer.d.ts +18 -0
  33. package/esm/src/cli/matrix/synthesizer.js +103 -0
  34. package/esm/src/evals/attachments.d.ts +5 -0
  35. package/esm/src/evals/attachments.js +55 -0
  36. package/esm/src/evals/breakdown.d.ts +30 -0
  37. package/esm/src/evals/breakdown.js +69 -0
  38. package/esm/src/evals/graders/answer.d.ts +16 -0
  39. package/esm/src/evals/graders/answer.js +134 -0
  40. package/esm/src/evals/graders/code.d.ts +40 -0
  41. package/esm/src/evals/graders/code.js +184 -0
  42. package/esm/src/evals/graders/judge.d.ts +24 -0
  43. package/esm/src/evals/graders/judge.js +367 -0
  44. package/esm/src/evals/graders/latency.d.ts +6 -0
  45. package/esm/src/evals/graders/latency.js +82 -0
  46. package/esm/src/evals/graders/live.d.ts +14 -0
  47. package/esm/src/evals/graders/live.js +42 -0
  48. package/esm/src/evals/graders/media.d.ts +18 -0
  49. package/esm/src/evals/graders/media.js +91 -0
  50. package/esm/src/evals/graders/shared.d.ts +11 -0
  51. package/esm/src/evals/graders/shared.js +62 -0
  52. package/esm/src/evals/graders/transcript.d.ts +19 -0
  53. package/esm/src/evals/graders/transcript.js +202 -0
  54. package/esm/src/evals/mod.d.ts +34 -0
  55. package/esm/src/evals/mod.js +22 -0
  56. package/esm/src/evals/record.d.ts +41 -0
  57. package/esm/src/evals/record.js +107 -0
  58. package/esm/src/evals/rubrics/catalog.d.ts +148 -0
  59. package/esm/src/evals/rubrics/catalog.js +846 -0
  60. package/esm/src/evals/rubrics/mod.d.ts +24 -0
  61. package/esm/src/evals/rubrics/mod.js +55 -0
  62. package/esm/src/evals/rubrics/mustache.d.ts +23 -0
  63. package/esm/src/evals/rubrics/mustache.js +154 -0
  64. package/esm/src/evals/rubrics/types.d.ts +54 -0
  65. package/esm/src/evals/rubrics/types.js +74 -0
  66. package/esm/src/evals/run.d.ts +75 -0
  67. package/esm/src/evals/run.js +418 -0
  68. package/esm/src/evals/suite.d.ts +28 -0
  69. package/esm/src/evals/suite.js +97 -0
  70. package/esm/src/evals/summary.d.ts +35 -0
  71. package/esm/src/evals/summary.js +31 -0
  72. package/esm/src/evals/trial.d.ts +14 -0
  73. package/esm/src/evals/trial.js +135 -0
  74. package/esm/src/evals/types.d.ts +169 -0
  75. package/esm/src/evals/types.js +113 -0
  76. package/esm/src/evals/verdict.d.ts +23 -0
  77. package/esm/src/evals/verdict.js +48 -0
  78. package/esm/src/guardrails/boundaries.d.ts +41 -0
  79. package/esm/src/guardrails/boundaries.js +103 -0
  80. package/esm/src/guardrails/canary-gate.d.ts +22 -0
  81. package/esm/src/guardrails/canary-gate.js +40 -0
  82. package/esm/src/guardrails/canary.d.ts +146 -0
  83. package/esm/src/guardrails/canary.js +974 -0
  84. package/esm/src/guardrails/compile-egress.d.ts +12 -0
  85. package/esm/src/guardrails/compile-egress.js +12 -0
  86. package/esm/src/guardrails/corpus/canary-egress-attacks.d.ts +24 -0
  87. package/esm/src/guardrails/corpus/canary-egress-attacks.js +305 -0
  88. package/esm/src/guardrails/corpus/fuzz-inbound.d.ts +5 -0
  89. package/esm/src/guardrails/corpus/fuzz-inbound.js +199 -0
  90. package/esm/src/guardrails/corpus/inbound-payloads.d.ts +5 -0
  91. package/esm/src/guardrails/corpus/inbound-payloads.js +120 -0
  92. package/esm/src/guardrails/corpus/live-attacks.d.ts +15 -0
  93. package/esm/src/guardrails/corpus/live-attacks.js +229 -0
  94. package/esm/src/guardrails/corpus/mod.d.ts +7 -0
  95. package/esm/src/guardrails/corpus/mod.js +4 -0
  96. package/esm/src/guardrails/corpus/secrets.d.ts +12 -0
  97. package/esm/src/guardrails/corpus/secrets.js +16 -0
  98. package/esm/src/guardrails/corpus/strings.d.ts +23 -0
  99. package/esm/src/guardrails/corpus/strings.js +29 -0
  100. package/esm/src/guardrails/corpus/types.d.ts +36 -0
  101. package/esm/src/guardrails/corpus/types.js +1 -0
  102. package/esm/src/guardrails/credential-rules.d.ts +36 -0
  103. package/esm/src/guardrails/credential-rules.js +3001 -0
  104. package/esm/src/guardrails/credential-scan.d.ts +45 -0
  105. package/esm/src/guardrails/credential-scan.js +172 -0
  106. package/esm/src/guardrails/destinations.d.ts +45 -0
  107. package/esm/src/guardrails/destinations.js +234 -0
  108. package/esm/src/guardrails/detect-at.d.ts +107 -0
  109. package/esm/src/guardrails/detect-at.js +434 -0
  110. package/esm/src/guardrails/detect-reply.d.ts +61 -0
  111. package/esm/src/guardrails/detect-reply.js +95 -0
  112. package/esm/src/guardrails/detect-stream.d.ts +33 -0
  113. package/esm/src/guardrails/detect-stream.js +77 -0
  114. package/esm/src/guardrails/detectors.d.ts +216 -0
  115. package/esm/src/guardrails/detectors.js +503 -0
  116. package/esm/src/guardrails/egress-automata.d.ts +12 -0
  117. package/esm/src/guardrails/egress-automata.js +25582 -0
  118. package/esm/src/guardrails/egress-compiler.d.ts +55 -0
  119. package/esm/src/guardrails/egress-compiler.js +431 -0
  120. package/esm/src/guardrails/egress-patterns.d.ts +26 -0
  121. package/esm/src/guardrails/egress-patterns.js +36 -0
  122. package/esm/src/guardrails/egress-stream.d.ts +123 -0
  123. package/esm/src/guardrails/egress-stream.js +774 -0
  124. package/esm/src/guardrails/egress-urls.d.ts +86 -0
  125. package/esm/src/guardrails/egress-urls.js +909 -0
  126. package/esm/src/guardrails/egress.d.ts +46 -0
  127. package/esm/src/guardrails/egress.js +124 -0
  128. package/esm/src/guardrails/error.d.ts +31 -0
  129. package/esm/src/guardrails/error.js +96 -0
  130. package/esm/src/guardrails/event-schemas.d.ts +100 -0
  131. package/esm/src/guardrails/event-schemas.js +48 -0
  132. package/esm/src/guardrails/events.d.ts +13 -0
  133. package/esm/src/guardrails/events.js +45 -0
  134. package/esm/src/guardrails/hints.d.ts +14 -0
  135. package/esm/src/guardrails/hints.js +57 -0
  136. package/esm/src/guardrails/hits.d.ts +14 -0
  137. package/esm/src/guardrails/hits.js +30 -0
  138. package/esm/src/guardrails/host-patterns.d.ts +85 -0
  139. package/esm/src/guardrails/host-patterns.js +173 -0
  140. package/esm/src/guardrails/injection-patterns.d.ts +20 -0
  141. package/esm/src/guardrails/injection-patterns.js +126 -0
  142. package/esm/src/guardrails/injection-reversed.d.ts +9 -0
  143. package/esm/src/guardrails/injection-reversed.js +49 -0
  144. package/esm/src/guardrails/injection.d.ts +30 -0
  145. package/esm/src/guardrails/injection.js +460 -0
  146. package/esm/src/guardrails/labels.d.ts +40 -0
  147. package/esm/src/guardrails/labels.js +874 -0
  148. package/esm/src/guardrails/live-outbound-gate.d.ts +55 -0
  149. package/esm/src/guardrails/live-outbound-gate.js +298 -0
  150. package/esm/src/guardrails/mod.d.ts +54 -0
  151. package/esm/src/guardrails/mod.js +34 -0
  152. package/esm/src/guardrails/network.d.ts +46 -0
  153. package/esm/src/guardrails/network.js +330 -0
  154. package/esm/src/guardrails/normalize.d.ts +20 -0
  155. package/esm/src/guardrails/normalize.js +165 -0
  156. package/esm/src/guardrails/policy.d.ts +4 -0
  157. package/esm/src/guardrails/policy.js +21 -0
  158. package/esm/src/guardrails/progressive-yield.d.ts +110 -0
  159. package/esm/src/guardrails/progressive-yield.js +281 -0
  160. package/esm/src/guardrails/prompt-echo.d.ts +40 -0
  161. package/esm/src/guardrails/prompt-echo.js +306 -0
  162. package/esm/src/guardrails/quota.d.ts +21 -0
  163. package/esm/src/guardrails/quota.js +80 -0
  164. package/esm/src/guardrails/rules.d.ts +47 -0
  165. package/esm/src/guardrails/rules.js +47 -0
  166. package/esm/src/guardrails/sanitize.d.ts +40 -0
  167. package/esm/src/guardrails/sanitize.js +160 -0
  168. package/esm/src/guardrails/sensitive-groups.d.ts +21 -0
  169. package/esm/src/guardrails/sensitive-groups.js +12 -0
  170. package/esm/src/guardrails/sensitive.d.ts +22 -0
  171. package/esm/src/guardrails/sensitive.js +234 -0
  172. package/esm/src/guardrails/serialize.d.ts +15 -0
  173. package/esm/src/guardrails/serialize.js +37 -0
  174. package/esm/src/guardrails/testing.d.ts +11 -0
  175. package/esm/src/guardrails/testing.js +10 -0
  176. package/esm/src/guardrails/theorem-error.d.ts +21 -0
  177. package/esm/src/guardrails/theorem-error.js +54 -0
  178. package/esm/src/guardrails/thought-guard.d.ts +76 -0
  179. package/esm/src/guardrails/thought-guard.js +664 -0
  180. package/esm/src/guardrails/tool-directives.d.ts +38 -0
  181. package/esm/src/guardrails/tool-directives.js +195 -0
  182. package/esm/src/guardrails/tool-leak.d.ts +26 -0
  183. package/esm/src/guardrails/tool-leak.js +45 -0
  184. package/esm/src/guardrails/tool-result.d.ts +92 -0
  185. package/esm/src/guardrails/tool-result.js +272 -0
  186. package/esm/src/guardrails/types.d.ts +250 -0
  187. package/esm/src/guardrails/types.js +58 -0
  188. package/esm/src/host/client-turn.d.ts +36 -0
  189. package/esm/src/host/client-turn.js +80 -0
  190. package/esm/src/host/mint-trace.d.ts +29 -0
  191. package/esm/src/host/mint-trace.js +60 -0
  192. package/esm/src/host/mod.d.ts +13 -0
  193. package/esm/src/host/mod.js +11 -0
  194. package/esm/src/host/readStreamingJsonStringField.d.ts +2 -0
  195. package/esm/src/host/readStreamingJsonStringField.js +27 -0
  196. package/esm/src/host/reply.d.ts +13 -0
  197. package/esm/src/host/reply.js +41 -0
  198. package/esm/src/interface/blocks.d.ts +11 -0
  199. package/esm/src/interface/blocks.js +283 -0
  200. package/esm/src/interface/composer-actions.d.ts +24 -0
  201. package/esm/src/interface/composer-actions.js +33 -0
  202. package/esm/src/interface/draft.d.ts +20 -0
  203. package/esm/src/interface/draft.js +39 -0
  204. package/esm/src/interface/from-profile.d.ts +24 -0
  205. package/esm/src/interface/from-profile.js +179 -0
  206. package/esm/src/interface/history.d.ts +46 -0
  207. package/esm/src/interface/history.js +278 -0
  208. package/esm/src/interface/inputs.d.ts +11 -0
  209. package/esm/src/interface/inputs.js +67 -0
  210. package/esm/src/interface/mod.d.ts +33 -0
  211. package/esm/src/interface/mod.js +22 -0
  212. package/esm/src/interface/models.d.ts +26 -0
  213. package/esm/src/interface/models.js +50 -0
  214. package/esm/src/interface/pending.d.ts +57 -0
  215. package/esm/src/interface/pending.js +152 -0
  216. package/esm/src/interface/profile-interface.d.ts +4 -0
  217. package/esm/src/interface/profile-interface.js +237 -0
  218. package/esm/src/interface/session.d.ts +71 -0
  219. package/esm/src/interface/session.js +128 -0
  220. package/esm/src/interface/stop.d.ts +13 -0
  221. package/esm/src/interface/stop.js +28 -0
  222. package/esm/src/interface/tool-calls.d.ts +32 -0
  223. package/esm/src/interface/tool-calls.js +127 -0
  224. package/esm/src/interface/tool-invoke.d.ts +6 -0
  225. package/esm/src/interface/tool-invoke.js +22 -0
  226. package/esm/src/interface/tool-media.d.ts +11 -0
  227. package/esm/src/interface/tool-media.js +113 -0
  228. package/esm/src/interface/types.d.ts +278 -0
  229. package/esm/src/interface/types.js +5 -0
  230. package/esm/src/kernel/api-catalog.d.ts +85 -0
  231. package/esm/src/kernel/api-catalog.js +229 -0
  232. package/esm/src/kernel/auth/credential-source.d.ts +23 -0
  233. package/esm/src/kernel/auth/credential-source.js +11 -0
  234. package/esm/src/kernel/auth/crypto.d.ts +56 -0
  235. package/esm/src/kernel/auth/crypto.js +163 -0
  236. package/esm/src/kernel/auth/mod.d.ts +5 -0
  237. package/esm/src/kernel/auth/mod.js +5 -0
  238. package/esm/src/kernel/auth/oauth.d.ts +18 -0
  239. package/esm/src/kernel/auth/oauth.js +439 -0
  240. package/esm/src/kernel/auth/scope-refusal.d.ts +9 -0
  241. package/esm/src/kernel/auth/scope-refusal.js +8 -0
  242. package/esm/src/kernel/auth/typed-secret.d.ts +13 -0
  243. package/esm/src/kernel/auth/typed-secret.js +23 -0
  244. package/esm/src/kernel/auth/types.d.ts +152 -0
  245. package/esm/src/kernel/auth/types.js +1 -0
  246. package/esm/src/kernel/checkpoint.d.ts +43 -0
  247. package/esm/src/kernel/checkpoint.js +58 -0
  248. package/esm/src/kernel/default-scope.d.ts +72 -0
  249. package/esm/src/kernel/default-scope.js +121 -0
  250. package/esm/src/kernel/engine/call-trace.d.ts +19 -0
  251. package/esm/src/kernel/engine/call-trace.js +29 -0
  252. package/esm/src/kernel/engine/compaction.d.ts +71 -0
  253. package/esm/src/kernel/engine/compaction.js +203 -0
  254. package/esm/src/kernel/engine/decision.d.ts +43 -0
  255. package/esm/src/kernel/engine/decision.js +439 -0
  256. package/esm/src/kernel/engine/embedding.d.ts +8 -0
  257. package/esm/src/kernel/engine/embedding.js +118 -0
  258. package/esm/src/kernel/engine/hash.d.ts +6 -0
  259. package/esm/src/kernel/engine/hash.js +22 -0
  260. package/esm/src/kernel/engine/live-inbound.d.ts +19 -0
  261. package/esm/src/kernel/engine/live-inbound.js +44 -0
  262. package/esm/src/kernel/engine/live-ingress.d.ts +15 -0
  263. package/esm/src/kernel/engine/live-ingress.js +42 -0
  264. package/esm/src/kernel/engine/record.d.ts +3 -0
  265. package/esm/src/kernel/engine/record.js +11 -0
  266. package/esm/src/kernel/engine/repair.d.ts +7 -0
  267. package/esm/src/kernel/engine/repair.js +36 -0
  268. package/esm/src/kernel/engine/runner/gates.d.ts +5 -0
  269. package/esm/src/kernel/engine/runner/gates.js +508 -0
  270. package/esm/src/kernel/engine/runner/mod.d.ts +29 -0
  271. package/esm/src/kernel/engine/runner/mod.js +625 -0
  272. package/esm/src/kernel/engine/runner/nested.d.ts +32 -0
  273. package/esm/src/kernel/engine/runner/nested.js +134 -0
  274. package/esm/src/kernel/engine/runner/schema-validation.d.ts +35 -0
  275. package/esm/src/kernel/engine/runner/schema-validation.js +179 -0
  276. package/esm/src/kernel/engine/runner/stages.d.ts +28 -0
  277. package/esm/src/kernel/engine/runner/stages.js +41 -0
  278. package/esm/src/kernel/engine/runner/state.d.ts +97 -0
  279. package/esm/src/kernel/engine/runner/state.js +50 -0
  280. package/esm/src/kernel/engine/runner/step-order.d.ts +27 -0
  281. package/esm/src/kernel/engine/runner/step-order.js +165 -0
  282. package/esm/src/kernel/engine/runner/steps.d.ts +14 -0
  283. package/esm/src/kernel/engine/runner/steps.js +519 -0
  284. package/esm/src/kernel/engine/runner/stream.d.ts +71 -0
  285. package/esm/src/kernel/engine/runner/stream.js +376 -0
  286. package/esm/src/kernel/engine/runner/usage.d.ts +45 -0
  287. package/esm/src/kernel/engine/runner/usage.js +148 -0
  288. package/esm/src/kernel/engine/session/mod.d.ts +33 -0
  289. package/esm/src/kernel/engine/session/mod.js +1182 -0
  290. package/esm/src/kernel/engine/session/session-trace.d.ts +115 -0
  291. package/esm/src/kernel/engine/session/session-trace.js +500 -0
  292. package/esm/src/kernel/engine/token-estimate.d.ts +23 -0
  293. package/esm/src/kernel/engine/token-estimate.js +38 -0
  294. package/esm/src/kernel/engine/tool-trace.d.ts +58 -0
  295. package/esm/src/kernel/engine/tool-trace.js +132 -0
  296. package/esm/src/kernel/engine/tree.d.ts +2 -0
  297. package/esm/src/kernel/engine/tree.js +17 -0
  298. package/esm/src/kernel/engine/turn-trace.d.ts +119 -0
  299. package/esm/src/kernel/engine/turn-trace.js +855 -0
  300. package/esm/src/kernel/engine/usage.d.ts +36 -0
  301. package/esm/src/kernel/engine/usage.js +151 -0
  302. package/esm/src/kernel/interaction-parts.d.ts +13 -0
  303. package/esm/src/kernel/interaction-parts.js +40 -0
  304. package/esm/src/kernel/json.d.ts +10 -0
  305. package/esm/src/kernel/json.js +3 -0
  306. package/esm/src/kernel/mod.d.ts +74 -0
  307. package/esm/src/kernel/mod.js +45 -0
  308. package/esm/src/kernel/profile-graph.d.ts +145 -0
  309. package/esm/src/kernel/profile-graph.js +158 -0
  310. package/esm/src/kernel/profile-presence.d.ts +18 -0
  311. package/esm/src/kernel/profile-presence.js +158 -0
  312. package/esm/src/kernel/profile-scope.d.ts +40 -0
  313. package/esm/src/kernel/profile-scope.js +274 -0
  314. package/esm/src/kernel/protocols/binding.d.ts +65 -0
  315. package/esm/src/kernel/protocols/binding.js +125 -0
  316. package/esm/src/kernel/protocols/limits.d.ts +15 -0
  317. package/esm/src/kernel/protocols/limits.js +28 -0
  318. package/esm/src/kernel/protocols/mod.d.ts +5 -0
  319. package/esm/src/kernel/protocols/mod.js +5 -0
  320. package/esm/src/kernel/protocols/prices.d.ts +36 -0
  321. package/esm/src/kernel/protocols/prices.js +37 -0
  322. package/esm/src/kernel/protocols/protocol.d.ts +253 -0
  323. package/esm/src/kernel/protocols/protocol.js +253 -0
  324. package/esm/src/kernel/protocols/provider.d.ts +108 -0
  325. package/esm/src/kernel/protocols/provider.js +143 -0
  326. package/esm/src/kernel/protocols/runtime.d.ts +55 -0
  327. package/esm/src/kernel/protocols/runtime.js +534 -0
  328. package/esm/src/kernel/provider-budget.d.ts +32 -0
  329. package/esm/src/kernel/provider-budget.js +262 -0
  330. package/esm/src/kernel/provider-dispatch.d.ts +13 -0
  331. package/esm/src/kernel/provider-dispatch.js +36 -0
  332. package/esm/src/kernel/provider-live.d.ts +7 -0
  333. package/esm/src/kernel/provider-live.js +189 -0
  334. package/esm/src/kernel/provider-runtime.d.ts +57 -0
  335. package/esm/src/kernel/provider-runtime.js +524 -0
  336. package/esm/src/kernel/registry/attachments.d.ts +46 -0
  337. package/esm/src/kernel/registry/attachments.js +220 -0
  338. package/esm/src/kernel/registry/catalog.d.ts +25 -0
  339. package/esm/src/kernel/registry/catalog.js +85 -0
  340. package/esm/src/kernel/registry/embedding-rules.d.ts +28 -0
  341. package/esm/src/kernel/registry/embedding-rules.js +66 -0
  342. package/esm/src/kernel/registry/ingress.d.ts +12 -0
  343. package/esm/src/kernel/registry/ingress.js +179 -0
  344. package/esm/src/kernel/registry/kernel-registry.d.ts +15 -0
  345. package/esm/src/kernel/registry/kernel-registry.js +15 -0
  346. package/esm/src/kernel/registry/profile-outputs.d.ts +3 -0
  347. package/esm/src/kernel/registry/profile-outputs.js +10 -0
  348. package/esm/src/kernel/registry/profiles.d.ts +116 -0
  349. package/esm/src/kernel/registry/profiles.js +773 -0
  350. package/esm/src/kernel/registry/provider-request.d.ts +6 -0
  351. package/esm/src/kernel/registry/provider-request.js +34 -0
  352. package/esm/src/kernel/registry/resolve.d.ts +17 -0
  353. package/esm/src/kernel/registry/resolve.js +238 -0
  354. package/esm/src/kernel/registry/schemas.d.ts +12 -0
  355. package/esm/src/kernel/registry/schemas.js +27 -0
  356. package/esm/src/kernel/registry/slot-fill.d.ts +7 -0
  357. package/esm/src/kernel/registry/slot-fill.js +22 -0
  358. package/esm/src/kernel/registry/sole-model.d.ts +2 -0
  359. package/esm/src/kernel/registry/sole-model.js +4 -0
  360. package/esm/src/kernel/registry/system-prompt.d.ts +8 -0
  361. package/esm/src/kernel/registry/system-prompt.js +32 -0
  362. package/esm/src/kernel/registry/system-role.d.ts +3 -0
  363. package/esm/src/kernel/registry/system-role.js +9 -0
  364. package/esm/src/kernel/registry/vault.d.ts +14 -0
  365. package/esm/src/kernel/registry/vault.js +1 -0
  366. package/esm/src/kernel/schema.d.ts +226 -0
  367. package/esm/src/kernel/schema.js +895 -0
  368. package/esm/src/kernel/scope.d.ts +29 -0
  369. package/esm/src/kernel/scope.js +45 -0
  370. package/esm/src/kernel/stages.d.ts +176 -0
  371. package/esm/src/kernel/stages.js +431 -0
  372. package/esm/src/kernel/stop.d.ts +116 -0
  373. package/esm/src/kernel/stop.js +137 -0
  374. package/esm/src/kernel/system-parts.d.ts +26 -0
  375. package/esm/src/kernel/system-parts.js +98 -0
  376. package/esm/src/kernel/tools/activity-label.d.ts +22 -0
  377. package/esm/src/kernel/tools/activity-label.js +435 -0
  378. package/esm/src/kernel/tools/agent.d.ts +66 -0
  379. package/esm/src/kernel/tools/agent.js +212 -0
  380. package/esm/src/kernel/tools/coordinate.d.ts +4 -0
  381. package/esm/src/kernel/tools/coordinate.js +165 -0
  382. package/esm/src/kernel/tools/events.d.ts +66 -0
  383. package/esm/src/kernel/tools/events.js +184 -0
  384. package/esm/src/kernel/tools/execute.d.ts +100 -0
  385. package/esm/src/kernel/tools/execute.js +1173 -0
  386. package/esm/src/kernel/tools/gate-answer.d.ts +60 -0
  387. package/esm/src/kernel/tools/gate-answer.js +65 -0
  388. package/esm/src/kernel/tools/handler-events.d.ts +45 -0
  389. package/esm/src/kernel/tools/handler-events.js +106 -0
  390. package/esm/src/kernel/tools/harness.d.ts +17 -0
  391. package/esm/src/kernel/tools/harness.js +43 -0
  392. package/esm/src/kernel/tools/http-limit.d.ts +27 -0
  393. package/esm/src/kernel/tools/http-limit.js +85 -0
  394. package/esm/src/kernel/tools/invoke.d.ts +32 -0
  395. package/esm/src/kernel/tools/invoke.js +282 -0
  396. package/esm/src/kernel/tools/mcp-sessions.d.ts +23 -0
  397. package/esm/src/kernel/tools/mcp-sessions.js +69 -0
  398. package/esm/src/kernel/tools/mod.d.ts +10 -0
  399. package/esm/src/kernel/tools/mod.js +7 -0
  400. package/esm/src/kernel/tools/model-text.d.ts +16 -0
  401. package/esm/src/kernel/tools/model-text.js +31 -0
  402. package/esm/src/kernel/tools/operation.d.ts +76 -0
  403. package/esm/src/kernel/tools/operation.js +100 -0
  404. package/esm/src/kernel/tools/page-answer.d.ts +8 -0
  405. package/esm/src/kernel/tools/page-answer.js +19 -0
  406. package/esm/src/kernel/tools/permission.d.ts +15 -0
  407. package/esm/src/kernel/tools/permission.js +38 -0
  408. package/esm/src/kernel/tools/project.d.ts +11 -0
  409. package/esm/src/kernel/tools/project.js +55 -0
  410. package/esm/src/kernel/tools/registry.d.ts +27 -0
  411. package/esm/src/kernel/tools/registry.js +143 -0
  412. package/esm/src/kernel/tools/remote.d.ts +144 -0
  413. package/esm/src/kernel/tools/remote.js +1125 -0
  414. package/esm/src/kernel/tools/resolve.d.ts +31 -0
  415. package/esm/src/kernel/tools/resolve.js +267 -0
  416. package/esm/src/kernel/tools/run.d.ts +28 -0
  417. package/esm/src/kernel/tools/run.js +86 -0
  418. package/esm/src/kernel/tools/schema.d.ts +10 -0
  419. package/esm/src/kernel/tools/schema.js +95 -0
  420. package/esm/src/kernel/tools/signed-in-fetch.d.ts +19 -0
  421. package/esm/src/kernel/tools/signed-in-fetch.js +45 -0
  422. package/esm/src/kernel/tools/stage-run.d.ts +116 -0
  423. package/esm/src/kernel/tools/stage-run.js +198 -0
  424. package/esm/src/kernel/tools/types.d.ts +497 -0
  425. package/esm/src/kernel/tools/types.js +1 -0
  426. package/esm/src/kernel/tools/unchecked-output.d.ts +14 -0
  427. package/esm/src/kernel/tools/unchecked-output.js +18 -0
  428. package/esm/src/kernel/turn-events.d.ts +776 -0
  429. package/esm/src/kernel/turn-events.js +543 -0
  430. package/esm/src/kernel/types.d.ts +1025 -0
  431. package/esm/src/kernel/types.js +1 -0
  432. package/esm/src/kernel/util/base64.d.ts +4 -0
  433. package/esm/src/kernel/util/base64.js +15 -0
  434. package/esm/src/kernel/util/exact-type.d.ts +31 -0
  435. package/esm/src/kernel/util/exact-type.js +1 -0
  436. package/esm/src/kernel/util/find-last.d.ts +3 -0
  437. package/esm/src/kernel/util/find-last.js +9 -0
  438. package/esm/src/kernel/util/mime.d.ts +2 -0
  439. package/esm/src/kernel/util/mime.js +4 -0
  440. package/esm/src/kernel/util/partial-json.d.ts +23 -0
  441. package/esm/src/kernel/util/partial-json.js +128 -0
  442. package/esm/src/kernel/util/record.d.ts +2 -0
  443. package/esm/src/kernel/util/record.js +4 -0
  444. package/esm/src/observability/destinations.d.ts +14 -0
  445. package/esm/src/observability/destinations.js +43 -0
  446. package/esm/src/observability/jsonl.d.ts +18 -0
  447. package/esm/src/observability/jsonl.js +110 -0
  448. package/esm/src/observability/mod.d.ts +22 -0
  449. package/esm/src/observability/mod.js +16 -0
  450. package/esm/src/observability/openinference.d.ts +11 -0
  451. package/esm/src/observability/openinference.js +205 -0
  452. package/esm/src/observability/otlp.d.ts +71 -0
  453. package/esm/src/observability/otlp.js +98 -0
  454. package/esm/src/observability/phoenix.d.ts +30 -0
  455. package/esm/src/observability/phoenix.js +71 -0
  456. package/esm/src/observability/policy.d.ts +17 -0
  457. package/esm/src/observability/policy.js +73 -0
  458. package/esm/src/observability/resolve-policy.d.ts +8 -0
  459. package/esm/src/observability/resolve-policy.js +64 -0
  460. package/esm/src/observability/spans.d.ts +22 -0
  461. package/esm/src/observability/spans.js +72 -0
  462. package/esm/src/observability/trace-catalog.d.ts +128 -0
  463. package/esm/src/observability/trace-catalog.js +906 -0
  464. package/esm/src/observability/trace-record.d.ts +23 -0
  465. package/esm/src/observability/trace-record.js +228 -0
  466. package/esm/src/observability/trace-schema.d.ts +57 -0
  467. package/esm/src/observability/trace-schema.js +59 -0
  468. package/esm/src/observability/trace-sink.d.ts +14 -0
  469. package/esm/src/observability/trace-sink.js +3 -0
  470. package/esm/src/observability/trace-span.d.ts +98 -0
  471. package/esm/src/observability/trace-span.js +201 -0
  472. package/esm/src/observability/trace.d.ts +13 -0
  473. package/esm/src/observability/trace.js +37 -0
  474. package/esm/src/observability/types.d.ts +109 -0
  475. package/esm/src/observability/types.js +3 -0
  476. package/esm/src/presets/google/speech-voices.d.ts +9 -0
  477. package/esm/src/presets/google/speech-voices.js +38 -0
  478. package/esm/src/presets/google-limits.d.ts +13 -0
  479. package/esm/src/presets/google-limits.js +18 -0
  480. package/esm/src/presets/google.d.ts +119 -0
  481. package/esm/src/presets/google.js +197 -0
  482. package/esm/src/presets/local.d.ts +26 -0
  483. package/esm/src/presets/local.js +30 -0
  484. package/esm/src/presets/mod.d.ts +11 -0
  485. package/esm/src/presets/mod.js +9 -0
  486. package/esm/src/presets/openrouter.d.ts +26 -0
  487. package/esm/src/presets/openrouter.js +31 -0
  488. package/esm/src/providers/embedding-limits.d.ts +7 -0
  489. package/esm/src/providers/embedding-limits.js +12 -0
  490. package/esm/src/providers/gemini/embedding-protocol.d.ts +8 -0
  491. package/esm/src/providers/gemini/embedding-protocol.js +125 -0
  492. package/esm/src/providers/gemini/interactions-protocol.d.ts +8 -0
  493. package/esm/src/providers/gemini/interactions-protocol.js +105 -0
  494. package/esm/src/providers/gemini/live-protocol.d.ts +3 -0
  495. package/esm/src/providers/gemini/live-protocol.js +191 -0
  496. package/esm/src/providers/gemini/prices.d.ts +3 -0
  497. package/esm/src/providers/gemini/prices.js +63 -0
  498. package/esm/src/providers/gemini/provider.d.ts +7 -0
  499. package/esm/src/providers/gemini/provider.js +39 -0
  500. package/esm/src/providers/google/api-error.d.ts +8 -0
  501. package/esm/src/providers/google/api-error.js +123 -0
  502. package/esm/src/providers/google/builtins.d.ts +14 -0
  503. package/esm/src/providers/google/builtins.js +57 -0
  504. package/esm/src/providers/google/grounding.d.ts +5 -0
  505. package/esm/src/providers/google/grounding.js +226 -0
  506. package/esm/src/providers/google/interactions/framing.d.ts +27 -0
  507. package/esm/src/providers/google/interactions/framing.js +304 -0
  508. package/esm/src/providers/google/interactions/steps.d.ts +12 -0
  509. package/esm/src/providers/google/interactions/steps.js +200 -0
  510. package/esm/src/providers/google/interactions/stream.d.ts +23 -0
  511. package/esm/src/providers/google/interactions/stream.js +230 -0
  512. package/esm/src/providers/google/live/framing.d.ts +61 -0
  513. package/esm/src/providers/google/live/framing.js +597 -0
  514. package/esm/src/providers/google/live/stream.d.ts +13 -0
  515. package/esm/src/providers/google/live/stream.js +57 -0
  516. package/esm/src/providers/google/thinking.d.ts +3 -0
  517. package/esm/src/providers/google/thinking.js +8 -0
  518. package/esm/src/providers/google/urls.d.ts +4 -0
  519. package/esm/src/providers/google/urls.js +4 -0
  520. package/esm/src/providers/google/usage.d.ts +7 -0
  521. package/esm/src/providers/google/usage.js +49 -0
  522. package/esm/src/providers/live.d.ts +6 -0
  523. package/esm/src/providers/live.js +6 -0
  524. package/esm/src/providers/local/embedding-protocol.d.ts +7 -0
  525. package/esm/src/providers/local/embedding-protocol.js +60 -0
  526. package/esm/src/providers/local/provider.d.ts +7 -0
  527. package/esm/src/providers/local/provider.js +28 -0
  528. package/esm/src/providers/mod.d.ts +32 -0
  529. package/esm/src/providers/mod.js +23 -0
  530. package/esm/src/providers/open-ai/protocol.d.ts +3 -0
  531. package/esm/src/providers/open-ai/protocol.js +189 -0
  532. package/esm/src/providers/openrouter/embedding-protocol.d.ts +6 -0
  533. package/esm/src/providers/openrouter/embedding-protocol.js +86 -0
  534. package/esm/src/providers/openrouter/image.d.ts +15 -0
  535. package/esm/src/providers/openrouter/image.js +34 -0
  536. package/esm/src/providers/openrouter/images-protocol.d.ts +3 -0
  537. package/esm/src/providers/openrouter/images-protocol.js +82 -0
  538. package/esm/src/providers/openrouter/openai/compat.d.ts +19 -0
  539. package/esm/src/providers/openrouter/openai/compat.js +162 -0
  540. package/esm/src/providers/openrouter/openai/image-payload.d.ts +9 -0
  541. package/esm/src/providers/openrouter/openai/image-payload.js +115 -0
  542. package/esm/src/providers/openrouter/openai/reasoning-state.d.ts +2 -0
  543. package/esm/src/providers/openrouter/openai/reasoning-state.js +31 -0
  544. package/esm/src/providers/openrouter/openai/usage.d.ts +8 -0
  545. package/esm/src/providers/openrouter/openai/usage.js +56 -0
  546. package/esm/src/providers/openrouter/protocol.d.ts +8 -0
  547. package/esm/src/providers/openrouter/protocol.js +171 -0
  548. package/esm/src/providers/openrouter/provider.d.ts +10 -0
  549. package/esm/src/providers/openrouter/provider.js +50 -0
  550. package/esm/src/providers/shared/carried-tool-files.d.ts +7 -0
  551. package/esm/src/providers/shared/carried-tool-files.js +43 -0
  552. package/esm/src/providers/shared/pcm.d.ts +14 -0
  553. package/esm/src/providers/shared/pcm.js +78 -0
  554. package/esm/src/providers/shared/protocol-events.d.ts +8 -0
  555. package/esm/src/providers/shared/protocol-events.js +20 -0
  556. package/esm/src/providers/shared/response-identity.d.ts +11 -0
  557. package/esm/src/providers/shared/response-identity.js +12 -0
  558. package/esm/src/providers/shared/retry.d.ts +17 -0
  559. package/esm/src/providers/shared/retry.js +90 -0
  560. package/esm/src/providers/shared/sse.d.ts +6 -0
  561. package/esm/src/providers/shared/sse.js +93 -0
  562. package/esm/src/providers/shared/structured-output.d.ts +4 -0
  563. package/esm/src/providers/shared/structured-output.js +11 -0
  564. package/esm/src/providers/shared/tool-args.d.ts +24 -0
  565. package/esm/src/providers/shared/tool-args.js +88 -0
  566. package/esm/src/providers/shared/tool-draft.d.ts +16 -0
  567. package/esm/src/providers/shared/tool-draft.js +14 -0
  568. package/esm/src/providers/shared/upstream-tap.d.ts +8 -0
  569. package/esm/src/providers/shared/upstream-tap.js +85 -0
  570. package/esm/src/providers/shared/upstream-tape.d.ts +6 -0
  571. package/esm/src/providers/shared/upstream-tape.js +88 -0
  572. package/esm/src/providers/system-one/protocol.d.ts +8 -0
  573. package/esm/src/providers/system-one/protocol.js +93 -0
  574. package/esm/src/providers/types.d.ts +51 -0
  575. package/esm/src/providers/types.js +2 -0
  576. package/esm/src/providers/typesafe/provider.d.ts +7 -0
  577. package/esm/src/providers/typesafe/provider.js +24 -0
  578. package/esm/src/surface/formats.d.ts +46 -0
  579. package/esm/src/surface/formats.js +178 -0
  580. package/esm/src/surface/mod.d.ts +16 -0
  581. package/esm/src/surface/mod.js +12 -0
  582. package/esm/src/surface/runtime.d.ts +44 -0
  583. package/esm/src/surface/runtime.js +441 -0
  584. package/esm/src/surface/tools.d.ts +9 -0
  585. package/esm/src/surface/tools.js +62 -0
  586. package/esm/src/surface/types.d.ts +110 -0
  587. package/esm/src/surface/types.js +4 -0
  588. package/package.json +100 -4
@@ -0,0 +1,85 @@
1
+ /** labels-exempt-file: profile-registration diagnostics for a host's patterns — not runtime user or model copy (P2) */
2
+ /**
3
+ * A pattern of the host's own, as data: a regular expression, or words. Words match whole and
4
+ * without regard to case, and a space in one matches any run of whitespace.
5
+ */
6
+ type HostPattern = {
7
+ /** What a match is called in the trace. */
8
+ name: string;
9
+ /** The source of a regular expression. */
10
+ pattern: string;
11
+ /** Any of `i`, `m`, `s`, and `u`. Every match is found, so `g` is implied; `y` is refused. */
12
+ flags?: string;
13
+ } | {
14
+ /** What a match is called in the trace. */
15
+ name: string;
16
+ words: readonly string[];
17
+ };
18
+ /**
19
+ * An automaton over UTF-16 code units, as tables.
20
+ *
21
+ * - `classStarts`: first code unit of each character class; class k covers
22
+ * `[classStarts[k], classStarts[k+1])`.
23
+ * - `charsets`: each charset as the sorted class ids it contains.
24
+ * - `initials`: the initial node of each pattern.
25
+ * - `leads`: per pattern, the charset an optional repeat opening it reads, or
26
+ * -1. The pattern's nodes are of what follows the repeat.
27
+ * - `nodes`: each node as `[pattern, final (0/1), target, charset, target, charset, ...]`.
28
+ */
29
+ interface AutomatonData {
30
+ classStarts: readonly number[];
31
+ charsets: readonly (readonly number[])[];
32
+ initials: readonly number[];
33
+ leads: readonly number[];
34
+ nodes: readonly (readonly number[])[];
35
+ }
36
+ /**
37
+ * What compiling a list of patterns writes (`compilePatterns`, `agents detect-compile`): the
38
+ * patterns it read and checked, and their automaton. A stream holds exactly the text a match
39
+ * could still be under way in by it.
40
+ */
41
+ interface CompiledPatterns {
42
+ /** `PATTERN_COMPILER_VERSION` of the compiler that wrote it. */
43
+ compiler: number;
44
+ /** Each pattern as compiled, in order: a table that no longer matches its patterns is refused. */
45
+ patterns: readonly PatternSource[];
46
+ automaton: AutomatonData;
47
+ }
48
+ /** A pattern as the kernel runs it: the source and flags of its regular expression. */
49
+ interface PatternSource {
50
+ name: string;
51
+ source: string;
52
+ flags: string;
53
+ }
54
+ /** A host pattern ready to run. */
55
+ interface HostMatcher {
56
+ name: string;
57
+ /** Global, so every match is found. */
58
+ regex: RegExp;
59
+ }
60
+ /** Bumped whenever the compiled table's layout or meaning changes. */
61
+ declare const PATTERN_COMPILER_VERSION = 3;
62
+ /** The most patterns one detector takes, and the longest each may be once written as a regular expression. */
63
+ declare const MAX_PATTERNS = 64;
64
+ declare const MAX_PATTERN_LENGTH = 1024;
65
+ /** The patterns as a compiled table records them. */
66
+ declare function patternSources(patterns: readonly HostPattern[]): PatternSource[];
67
+ /** What is wrong with one pattern, or `undefined` when it runs. */
68
+ declare function patternProblem(path: string, pattern: unknown): string | undefined;
69
+ /**
70
+ * What is wrong with a detector's `patterns` and the table `compiled` for them, or `undefined`
71
+ * when both are sound. Patterns need their table: compiling is where a pattern that could take
72
+ * more than linear time on hostile text is refused.
73
+ */
74
+ declare function patternsProblem(path: string, patterns: unknown, compiled: unknown): string | undefined;
75
+ /**
76
+ * What is wrong with a list of patterns before it is compiled, or `undefined`: an editor checks
77
+ * with it as the patterns are written.
78
+ */
79
+ declare function patternListProblem(path: string, patterns: unknown): string | undefined;
80
+ /** Whether any detector of `detect` lists patterns of the host's own, which need compiling. */
81
+ declare function listsPatterns(detect: unknown): boolean;
82
+ /** `patterns`, valid, ready to run. */
83
+ declare function matchersOf(patterns: readonly HostPattern[]): readonly HostMatcher[];
84
+ export type { AutomatonData, CompiledPatterns, HostMatcher, HostPattern, PatternSource };
85
+ export { listsPatterns, MAX_PATTERN_LENGTH, MAX_PATTERNS, matchersOf, PATTERN_COMPILER_VERSION, patternListProblem, patternProblem, patternSources, patternsProblem, };
@@ -0,0 +1,173 @@
1
+ // invariant: Leaf module. Imports nothing from `src/guardrails/types.ts` or `src/kernel/`, so
2
+ // `detectors.ts` can read a host's patterns without a cycle.
3
+ /** Bumped whenever the compiled table's layout or meaning changes. */
4
+ const PATTERN_COMPILER_VERSION = 3;
5
+ /** The most patterns one detector takes, and the longest each may be once written as a regular expression. */
6
+ const MAX_PATTERNS = 64;
7
+ const MAX_PATTERN_LENGTH = 1024;
8
+ const PATTERN_FLAGS = 'imsu';
9
+ /** A letter, digit, or underscore in any script: what a word may not touch on either side. */
10
+ const WORD_UNIT = '[\\p{L}\\p{N}_]';
11
+ function escaped(text) {
12
+ return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
13
+ }
14
+ /** `words` as one alternation, longest first so a word is not cut short by one it starts with. */
15
+ function wordsSource(words) {
16
+ const alternatives = [...new Set(words.map((word) => word.trim()).filter(Boolean))]
17
+ .sort((left, right) => right.length - left.length)
18
+ .map((word) => word.split(/\s+/).map(escaped).join('\\s+'));
19
+ return `(?<!${WORD_UNIT})(?:${alternatives.join('|')})(?!${WORD_UNIT})`;
20
+ }
21
+ /** The regular expression `pattern` runs as. */
22
+ function patternSource(pattern) {
23
+ if ('words' in pattern) {
24
+ return { name: pattern.name, source: wordsSource(pattern.words), flags: 'iu' };
25
+ }
26
+ return { name: pattern.name, source: pattern.pattern, flags: pattern.flags ?? '' };
27
+ }
28
+ /** The patterns as a compiled table records them. */
29
+ function patternSources(patterns) {
30
+ return patterns.map(patternSource);
31
+ }
32
+ function isRecord(value) {
33
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
34
+ }
35
+ function isStrings(value) {
36
+ return Array.isArray(value) && value.every((item) => typeof item === 'string');
37
+ }
38
+ /** What is wrong with the shape of one pattern, before it is compiled. */
39
+ function shapeProblem(path, pattern) {
40
+ if (!isRecord(pattern))
41
+ return `${path} must be an object`;
42
+ const { name, words, flags } = pattern;
43
+ if (typeof name !== 'string' || !name.trim())
44
+ return `${path}.name must be a non-empty string`;
45
+ const kinds = ['pattern', 'words'].filter((key) => pattern[key] !== undefined);
46
+ if (kinds.length !== 1)
47
+ return `${path} takes one of pattern and words`;
48
+ const unknown = Object.keys(pattern).find((key) => !['name', 'pattern', 'flags', 'words'].includes(key));
49
+ if (unknown !== undefined) {
50
+ return `${path}.${unknown} is not a setting of a pattern (name, pattern, flags, words)`;
51
+ }
52
+ if (words !== undefined) {
53
+ if (flags !== undefined)
54
+ return `${path}.flags is a setting of pattern, not of words`;
55
+ if (!isStrings(words) || !words.some((word) => word.trim())) {
56
+ return `${path}.words must be a list with at least one word`;
57
+ }
58
+ return undefined;
59
+ }
60
+ if (typeof pattern.pattern !== 'string' || !pattern.pattern) {
61
+ return `${path}.pattern must be a non-empty string`;
62
+ }
63
+ if (flags === undefined)
64
+ return undefined;
65
+ if (typeof flags !== 'string')
66
+ return `${path}.flags must be a string`;
67
+ const bad = [...flags].find((flag, at) => !PATTERN_FLAGS.includes(flag) || flags.indexOf(flag) < at);
68
+ if (bad === 'y')
69
+ return `${path}.flags: a sticky (y) pattern only matches where the last one ended`;
70
+ if (bad === 'g')
71
+ return `${path}.flags: g is implied, every match is found`;
72
+ return bad === undefined
73
+ ? undefined
74
+ : `${path}.flags takes each of ${[...PATTERN_FLAGS].join(', ')} once, not ${JSON.stringify(bad)}`;
75
+ }
76
+ /** What is wrong with one pattern, or `undefined` when it runs. */
77
+ function patternProblem(path, pattern) {
78
+ const shape = shapeProblem(path, pattern);
79
+ if (shape !== undefined)
80
+ return shape;
81
+ const { source, flags } = patternSource(pattern);
82
+ if (source.length > MAX_PATTERN_LENGTH) {
83
+ return `${path} is ${source.length} characters as a regular expression; the most is ${MAX_PATTERN_LENGTH}`;
84
+ }
85
+ let regex;
86
+ try {
87
+ // why: this only checks that the pattern parses and tests it on the empty text; a pattern that
88
+ // could run away on hostile text is refused when it is compiled (compilePatterns).
89
+ regex = new RegExp(source, `${flags}g`);
90
+ }
91
+ catch (err) {
92
+ return `${path} does not compile (${err instanceof Error ? err.message : String(err)})`;
93
+ }
94
+ // why: A pattern the empty text matches matches between every two characters: it names nothing.
95
+ return regex.test('') ? `${path} matches the empty text` : undefined;
96
+ }
97
+ /** Whether `compiled` was written for `sources` by this compiler. */
98
+ function compiledProblem(path, compiled, sources) {
99
+ const again = 'run `agents detect-compile` or compilePatterns again';
100
+ if (!isRecord(compiled) || !isRecord(compiled.automaton) || !Array.isArray(compiled.patterns)) {
101
+ return `${path} must be the table compilePatterns or \`agents detect-compile\` writes`;
102
+ }
103
+ if (compiled.compiler !== PATTERN_COMPILER_VERSION) {
104
+ return `${path} comes from compiler ${String(compiled.compiler)}, this one is ${PATTERN_COMPILER_VERSION}; ${again}`;
105
+ }
106
+ return JSON.stringify(compiled.patterns) === JSON.stringify(sources)
107
+ ? undefined
108
+ : `${path} was compiled from other patterns; ${again}`;
109
+ }
110
+ /**
111
+ * What is wrong with a detector's `patterns` and the table `compiled` for them, or `undefined`
112
+ * when both are sound. Patterns need their table: compiling is where a pattern that could take
113
+ * more than linear time on hostile text is refused.
114
+ */
115
+ function patternsProblem(path, patterns, compiled) {
116
+ if (patterns === undefined) {
117
+ return compiled === undefined ? undefined : `${path}.compiled is set without patterns`;
118
+ }
119
+ const problem = patternListProblem(path, patterns);
120
+ if (problem !== undefined)
121
+ return problem;
122
+ if (patterns.length === 0) {
123
+ return compiled === undefined ? undefined : `${path}.compiled is set without patterns`;
124
+ }
125
+ if (compiled === undefined) {
126
+ return `${path}.patterns need their compiled table: set ${path}.compiled from \`agents detect-compile\`, or wrap the detect setting in compileDetect from @theoremjs/agents/guardrails/compile`;
127
+ }
128
+ return compiledProblem(`${path}.compiled`, compiled, patternSources(patterns));
129
+ }
130
+ /**
131
+ * What is wrong with a list of patterns before it is compiled, or `undefined`: an editor checks
132
+ * with it as the patterns are written.
133
+ */
134
+ function patternListProblem(path, patterns) {
135
+ if (!Array.isArray(patterns))
136
+ return `${path}.patterns must be a list`;
137
+ if (patterns.length > MAX_PATTERNS) {
138
+ return `${path}.patterns lists ${patterns.length} patterns; the most is ${MAX_PATTERNS}`;
139
+ }
140
+ const names = new Set();
141
+ for (const [index, pattern] of patterns.entries()) {
142
+ const at = `${path}.patterns[${index}]`;
143
+ const problem = patternProblem(at, pattern);
144
+ if (problem !== undefined)
145
+ return problem;
146
+ const { name } = pattern;
147
+ if (names.has(name))
148
+ return `${at}.name ${JSON.stringify(name)} is listed twice`;
149
+ names.add(name);
150
+ }
151
+ return undefined;
152
+ }
153
+ /** Whether any detector of `detect` lists patterns of the host's own, which need compiling. */
154
+ function listsPatterns(detect) {
155
+ if (!isRecord(detect))
156
+ return false;
157
+ return Object.values(detect).some((rule) => isRecord(rule) && Array.isArray(rule.patterns) && rule.patterns.length > 0);
158
+ }
159
+ /** The matchers of each list of patterns, built once: a profile's patterns are resolved every turn. */
160
+ const MATCHERS = new WeakMap();
161
+ /** `patterns`, valid, ready to run. */
162
+ function matchersOf(patterns) {
163
+ let matchers = MATCHERS.get(patterns);
164
+ if (!matchers) {
165
+ matchers = patternSources(patterns).map(({ name, source, flags }) => ({
166
+ name,
167
+ regex: new RegExp(source, `${flags}g`),
168
+ }));
169
+ MATCHERS.set(patterns, matchers);
170
+ }
171
+ return matchers;
172
+ }
173
+ export { listsPatterns, MAX_PATTERN_LENGTH, MAX_PATTERNS, matchersOf, PATTERN_COMPILER_VERSION, patternListProblem, patternProblem, patternSources, patternsProblem, };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The prompt-injection patterns, apart from the code that runs them, so the
3
+ * egress automata generator (`scripts/gen-egress-automata.ts`) can read them
4
+ * without the generated table it writes.
5
+ *
6
+ * @module
7
+ */
8
+ /**
9
+ * An order to set instructions aside, with up to `gap` words between the verb
10
+ * and its object. `word` is what a word in the gap may be.
11
+ */
12
+ declare function overrideFrame(gap: number, word?: string): string;
13
+ declare const INJECTION_PATTERNS: RegExp[];
14
+ /** Runs that might encode an injection; each is decoded and checked in `injection.ts`. */
15
+ declare const BASE64_BLOB: RegExp;
16
+ declare const HEX_BLOB: RegExp;
17
+ declare const SPACED_LETTERS: RegExp;
18
+ /** Three+ alphabetic tokens joined by `|` (no shell spaces around pipes). */
19
+ declare const PIPE_SEPARATED: RegExp;
20
+ export { BASE64_BLOB, HEX_BLOB, INJECTION_PATTERNS, overrideFrame, PIPE_SEPARATED, SPACED_LETTERS };
@@ -0,0 +1,126 @@
1
+ /**
2
+ * The prompt-injection patterns, apart from the code that runs them, so the
3
+ * egress automata generator (`scripts/gen-egress-automata.ts`) can read them
4
+ * without the generated table it writes.
5
+ *
6
+ * @module
7
+ */
8
+ const IGNORE_PREVIOUS = /ignore\s+(all\s+)?(previous|prior)\s+((?:safety|security|system|operational|internal|core|original|initial|existing|given|stated|provided|defined|specified|established)\s+)?(instructions?|rules?|guidelines?|constraints?|directives?)/gi;
9
+ const DISREGARD_INSTRUCTIONS = /disregard\s+(all\s+)?(previous|prior|above)\s+(instructions?|rules?|guidelines?|constraints?|directives?)/gi;
10
+ const FORGET_INSTRUCTIONS = /forget\s+(all\s+)?(previous|prior|above)\s+(instructions?|rules?|guidelines?|constraints?|directives?)/gi;
11
+ const NEW_INSTRUCTIONS = /new\s+instructions?:/gi;
12
+ const DO_NOT_FOLLOW = /do\s+not\s+follow\s+(the\s+)?(system|developer|previous|original)/gi;
13
+ const SUPERSEDE_INSTRUCTIONS = /supersedes?\s+(all\s+)?(prior|previous)\s+(instructions?|rules?|guidelines?|constraints?|directives?)/gi;
14
+ const VOID_INSTRUCTIONS = /(all\s+)?(previous|prior)\s+instructions?\s+(are|is)\s+(void|invalid|null|obsolete|cancelled|revoked)/gi;
15
+ const DEVELOPER_MODE = /you\s+are\s+now\s+(in\s+)?developer\s+mode/gi;
16
+ const ENTER_SPECIAL_MODE = /enter\s+(developer|admin|debug|maintenance)\s+mode(?!\s+(?:in|on|via|through|from|using|for)\b)/gi;
17
+ const ACTIVATE_SPECIAL_MODE = /activate\s+(developer|admin|debug|jailbreak)\s+mode(?!\s+(?:in|on|via|through|from|using|for)\b)/gi;
18
+ const SYSTEM_OVERRIDE = /\bsystem\s+override\b/gi;
19
+ const OVERRIDE_INSTRUCTIONS = /override\s+(your\s+)?(instructions?|rules?|guidelines?|constraints?|directives?)/gi;
20
+ const REVEAL_PROMPT = /reveal\s+((?:your?|yoru|yuor|the|my|its|his|her|our|their)\s+)?((?:(?:full|hidden|complete|internal|secret|original|entire|exact|actual|real)\s+){0,2})((?:system|systme|sysetm|systemp?)\s+)?prompt\b/gi;
21
+ const SHOW_PROMPT = /show\s+(me\s+)?((?:your?|yoru|yuor|the|my|its|his|her|our|their)\s+)((?:system|systme|sysetm|systemp?)\s+)?prompt\b/gi;
22
+ const WHAT_INSTRUCTIONS = /what\s+(are|were)\s+(your\s+)?(exact\s+)?instructions/gi;
23
+ const REPEAT_INSTRUCTIONS = /repeat\s+(the\s+)?(text|instructions?)\s+(above|before)/gi;
24
+ const OUTPUT_PROMPT = /output\s+(your\s+)?(initial|original|system)\s+(prompt|instructions?)/gi;
25
+ const REMOVE_RESTRICTIONS = /you\s+are\s+no\s+longer\s+(bound|restricted|limited)/gi;
26
+ const ACT_UNBOUND = /act\s+as\s+if\s+(you('re|\s+are)\s+)?not\s+bound/gi;
27
+ const PRETEND_DIFFERENT = /pretend\s+(you('re|\s+are)\s+)?(a\s+)?different\s+(ai|assistant|model)/gi;
28
+ const IDENTITY_HIJACK = /you\s+are\s+now\s+(?:(?:a|an)\s+)?\w+.{0,40}(without\s+(any\s+)?restrict|ignor\w*\s+(all|any|every|prev)|bypass|unrestrict|unlimit|obey\s+only|no\s+(rules|limits|restrict|boundari))/gi;
29
+ const DAN_JAILBREAK = /\bDAN\b[\s\S]{0,120}\bdo\s+anything\s+now\b/g;
30
+ const JAILBREAK_MODE = /jailbreak(ed)?\s+(mode|prompt)/gi;
31
+ const DO_ANYTHING_NOW = /\bdo\s+anything\s+now\b/gi;
32
+ const BYPASS_SAFETY = /bypass\s+(your\s+)?(safety|security|content|ethical)\s+(filters?|measures?|guidelines?|restrictions?)/gi;
33
+ const DISABLE_SAFETY = /(disable|delete|remove|turn\s+off|eliminate)\s+(all\s+)?(your\s+)?(safety|security|content)\s+(filters?|measures?|rules?|guidelines?|restrictions?)/gi;
34
+ const IGNORE_SAFETY = /(ignore|disregard)\s+(all\s+)?(your\s+)?(safety|security|ethical|content)\s+(guidelines?|rules?|restrictions?|measures?|filters?|polic(?:y|ies)|protocols?)/gi;
35
+ /** Bound whitespace so tag scanners cannot polynomial-backtrack on long runs. */
36
+ const TAG_WS = String.raw `[^\S\r\n]{0,32}`;
37
+ const SYSTEM_TAG = new RegExp(`<${TAG_WS}\\/?${TAG_WS}system${TAG_WS}\\/?>`, 'gi');
38
+ const ROLE_TAG = new RegExp(`<${TAG_WS}\\/?${TAG_WS}(assistant|developer|tool|function)${TAG_WS}\\/?>`, 'gi');
39
+ const ROLE_DELIMITER = /\][^\S\r\n]{0,32}\n[^\S\r\n]{0,32}\[?(system|assistant|user)\]?:/gi;
40
+ const BRACKETED_ROLE = /\[[^\S\r\n]{0,32}(System[^\S\r\n]{0,8}Message|System|Assistant|Internal)[^\S\r\n]{0,32}\]/gi;
41
+ const SYSTEM_YOU_ARE = /^[^\S\r\n]{0,32}System:[^\S\r\n]{1,32}(you\s+are|ignore|override)/gim;
42
+ const CONTROL_TOKEN = /<\|(?:im_start|im_end|eot_id|start_header_id|end_header_id|endoftext)\|>/g;
43
+ const DEEPSEEK_CONTROL = /<|(?:end▁of▁sentence|begin▁of▁sentence)|>/g;
44
+ const LLAMA_INST = /\[\/?INST\]/gi;
45
+ const IGNORE_YOUR_INSTRUCTIONS = /ignore\s+(all\s+)?(your\s+)?(instructions?|rules?)\b/gi;
46
+ const UNRESTRICTED_MODE = /\bunrestricted\s+(ai|mode|model)\b/gi;
47
+ const IGNORE_MULTILANG = /\b(?:ignorieren|ignorez|ignora|ignorer|oubliez|vergessen|olvida|desestima|missachten)\b[\s\S]{0,50}\b(?:anweisungen|instructions?|instrucciones|directives?|r[eè]gles|reglas)\b/gi;
48
+ /** The verbs that tell a reader to set a thing aside, as written to give an order. */
49
+ const OVERRIDE_VERB = 'ignore|disregard|forget|override|bypass';
50
+ /** What an agent is told to set aside. */
51
+ const OVERRIDE_OBJECT = 'instructions?|rules|guidelines?|constraints?|directives?|prompts?';
52
+ const FRAME_WORD = String.raw `[\w'’-]{1,40}`;
53
+ /**
54
+ * An order to set instructions aside, with up to `gap` words between the verb
55
+ * and its object. `word` is what a word in the gap may be.
56
+ */
57
+ function overrideFrame(gap, word = FRAME_WORD) {
58
+ return String.raw `\b(?:${OVERRIDE_VERB})\s+(?:${word}\s+){0,${gap}}(?:${OVERRIDE_OBJECT})\b`;
59
+ }
60
+ /** The verb is negated: "never ignore the rules". */
61
+ const NEGATED = String.raw `(?<!(?:\b(?:not|never|cannot|without)|n['’]t)\s+(?:${FRAME_WORD}\s+)?)`;
62
+ /** The verb is a noun: "his disregard for the rules". */
63
+ const NOUN_USE = String.raw `(?<!\b(?:the|a|an|his|her|its|their|your|my|our)\s+)`;
64
+ /**
65
+ * The verb reports or describes, and "you" is not its subject: "an attempt to
66
+ * bypass the rules", "I must ignore the instructions", "they override
67
+ * constraints". "you must ignore the rules" and "I want you to ignore the
68
+ * rules" stay orders.
69
+ */
70
+ const DESCRIBED = String.raw `(?:(?<=\byou\s+(?:${FRAME_WORD}\s+){0,2})|(?<!\b(?:to|must|should|would|will|can|could|may|might|shall|I|we|they|he|she|it|who|that|which)\s+(?:\w+ly\s+)?))`;
71
+ /** A word in the gap that is not the writer's own: "ignore my rules" speaks of the writer's rules. */
72
+ const NOT_OWN = String.raw `(?!(?:my|our)\b)${FRAME_WORD}`;
73
+ /**
74
+ * {@linkcode overrideFrame} where the verb gives the reader an order about
75
+ * the reader's instructions. The patterns above still match their own wording
76
+ * in every guarded case.
77
+ */
78
+ const OVERRIDE_FRAME = new RegExp(`${NEGATED}${NOUN_USE}${DESCRIBED}${overrideFrame(3, NOT_OWN)}`, 'gi');
79
+ const INJECTION_PATTERNS = [
80
+ IGNORE_PREVIOUS,
81
+ DISREGARD_INSTRUCTIONS,
82
+ FORGET_INSTRUCTIONS,
83
+ NEW_INSTRUCTIONS,
84
+ DO_NOT_FOLLOW,
85
+ SUPERSEDE_INSTRUCTIONS,
86
+ VOID_INSTRUCTIONS,
87
+ DEVELOPER_MODE,
88
+ ENTER_SPECIAL_MODE,
89
+ ACTIVATE_SPECIAL_MODE,
90
+ SYSTEM_OVERRIDE,
91
+ OVERRIDE_INSTRUCTIONS,
92
+ REVEAL_PROMPT,
93
+ SHOW_PROMPT,
94
+ WHAT_INSTRUCTIONS,
95
+ REPEAT_INSTRUCTIONS,
96
+ OUTPUT_PROMPT,
97
+ REMOVE_RESTRICTIONS,
98
+ ACT_UNBOUND,
99
+ PRETEND_DIFFERENT,
100
+ IDENTITY_HIJACK,
101
+ DAN_JAILBREAK,
102
+ JAILBREAK_MODE,
103
+ DO_ANYTHING_NOW,
104
+ BYPASS_SAFETY,
105
+ DISABLE_SAFETY,
106
+ IGNORE_SAFETY,
107
+ SYSTEM_TAG,
108
+ ROLE_TAG,
109
+ ROLE_DELIMITER,
110
+ BRACKETED_ROLE,
111
+ SYSTEM_YOU_ARE,
112
+ CONTROL_TOKEN,
113
+ DEEPSEEK_CONTROL,
114
+ LLAMA_INST,
115
+ IGNORE_YOUR_INSTRUCTIONS,
116
+ UNRESTRICTED_MODE,
117
+ IGNORE_MULTILANG,
118
+ OVERRIDE_FRAME,
119
+ ];
120
+ /** Runs that might encode an injection; each is decoded and checked in `injection.ts`. */
121
+ const BASE64_BLOB = /[A-Za-z0-9+/]{16,}={0,2}/g;
122
+ const HEX_BLOB = /(?:[0-9a-f]{2}[\s]?){8,}/gi;
123
+ const SPACED_LETTERS = /\b(?:[A-Za-z] ){3,}[A-Za-z]\b/g;
124
+ /** Three+ alphabetic tokens joined by `|` (no shell spaces around pipes). */
125
+ const PIPE_SEPARATED = /\b(?:[A-Za-z]+\|){2,}[A-Za-z]+\b/g;
126
+ export { BASE64_BLOB, HEX_BLOB, INJECTION_PATTERNS, overrideFrame, PIPE_SEPARATED, SPACED_LETTERS };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Generated by `scripts/gen-egress-automata.ts` from `egress-patterns.ts`.
3
+ * Do not edit: change the patterns and run the script.
4
+ *
5
+ * @module
6
+ */
7
+ /** Each injection pattern reversed: it matches where the pattern matches the text written backwards. */
8
+ declare const REVERSED_INJECTION_PATTERNS: RegExp[];
9
+ export { REVERSED_INJECTION_PATTERNS };
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Generated by `scripts/gen-egress-automata.ts` from `egress-patterns.ts`.
3
+ * Do not edit: change the patterns and run the script.
4
+ *
5
+ * @module
6
+ */
7
+ /** Each injection pattern reversed: it matches where the pattern matches the text written backwards. */
8
+ const REVERSED_INJECTION_PATTERNS = [
9
+ /(?:S?NOITCURTSNI|S?ELUR|S?ENILEDIUG|S?TNIARTSNOC|S?EVITCERID)(?:\s+(?:YTEFAS|YTIRUCES|METSYS|LANOITAREPO|LANRETNI|EROC|LANIGIRO|LAITINI|GNITSIXE|NEVIG|DETATS|DEDIVORP|DENIFED|DEIFICEPS|DEHSILBATSE))?\s+(?:SUOIVERP|ROIRP)(?:\s+LLA)?\s+ERONGI/gi,
10
+ /(?:S?NOITCURTSNI|S?ELUR|S?ENILEDIUG|S?TNIARTSNOC|S?EVITCERID)\s+(?:SUOIVERP|ROIRP|EVOBA)(?:\s+LLA)?\s+DRAGERSID/gi,
11
+ /(?:S?NOITCURTSNI|S?ELUR|S?ENILEDIUG|S?TNIARTSNOC|S?EVITCERID)\s+(?:SUOIVERP|ROIRP|EVOBA)(?:\s+LLA)?\s+TEGROF/gi,
12
+ /:S?NOITCURTSNI\s+WEN/gi,
13
+ /(?:METSYS|REPOLEVED|SUOIVERP|LANIGIRO)(?:\s+EHT)?\s+WOLLOF\s+TON\s+OD/gi,
14
+ /(?:S?NOITCURTSNI|S?ELUR|S?ENILEDIUG|S?TNIARTSNOC|S?EVITCERID)\s+(?:ROIRP|SUOIVERP)(?:\s+LLA)?\s+S?EDESREPUS/gi,
15
+ /(?:DIOV|DILAVNI|LLUN|ETELOSBO|DELLECNAC|DEKOVER)\s+(?:ERA|SI)\s+S?NOITCURTSNI\s+(?:SUOIVERP|ROIRP)(?:\s+LLA)?/gi,
16
+ /EDOM\s+REPOLEVED(?:\s+NI)?\s+WON\s+ERA\s+UOY/gi,
17
+ /(?<!\b(?:NI|NO|AIV|HGUORHT|MORF|GNISU|ROF)\s+)EDOM\s+(?:REPOLEVED|NIMDA|GUBED|ECNANETNIAM)\s+RETNE/gi,
18
+ /(?<!\b(?:NI|NO|AIV|HGUORHT|MORF|GNISU|ROF)\s+)EDOM\s+(?:REPOLEVED|NIMDA|GUBED|KAERBLIAJ)\s+ETAVITCA/gi,
19
+ /\bEDIRREVO\s+METSYS\b/gi,
20
+ /(?:S?NOITCURTSNI|S?ELUR|S?ENILEDIUG|S?TNIARTSNOC|S?EVITCERID)(?:\s+RUOY)?\s+EDIRREVO/gi,
21
+ /\bTPMORP(?:\s+(?:METSYS|EMTSYS|MTESYS|P?METSYS))?(?:\s+(?:LLUF|NEDDIH|ETELPMOC|LANRETNI|TERCES|LANIGIRO|ERITNE|TCAXE|LAUTCA|LAER)){0,2}(?:\s+(?:R?UOY|UROY|ROUY|EHT|YM|STI|SIH|REH|RUO|RIEHT))?\s+LAEVER/gi,
22
+ /\bTPMORP(?:\s+(?:METSYS|EMTSYS|MTESYS|P?METSYS))?\s+(?:R?UOY|UROY|ROUY|EHT|YM|STI|SIH|REH|RUO|RIEHT)(?:\s+EM)?\s+WOHS/gi,
23
+ /SNOITCURTSNI(?:\s+TCAXE)?(?:\s+RUOY)?\s+(?:ERA|EREW)\s+TAHW/gi,
24
+ /(?:EVOBA|EROFEB)\s+(?:TXET|S?NOITCURTSNI)(?:\s+EHT)?\s+TAEPER/gi,
25
+ /(?:TPMORP|S?NOITCURTSNI)\s+(?:LAITINI|LANIGIRO|METSYS)(?:\s+RUOY)?\s+TUPTUO/gi,
26
+ /(?:DNUOB|DETCIRTSER|DETIMIL)\s+REGNOL\s+ON\s+ERA\s+UOY/gi,
27
+ /DNUOB\s+TON(?:\s+(?:ER'|ERA\s+)UOY)?\s+FI\s+SA\s+TCA/gi,
28
+ /(?:IA|TNATSISSA|LEDOM)\s+TNEREFFID(?:\s+A)?(?:\s+(?:ER'|ERA\s+)UOY)?\s+DNETERP/gi,
29
+ /(?:TCIRTSER(?:\s+YNA)?\s+TUOHTIW|(?:LLA|YNA|YREVE|VERP)\s+\w*RONGI|SSAPYB|TCIRTSERNU|TIMILNU|YLNO\s+YEBO|(?:SELUR|STIMIL|TCIRTSER|IRADNUOB)\s+ON).{0,40}\w+(?:\s+(?:A|NA))?\s+WON\s+ERA\s+UOY/gi,
30
+ /\bwon\s+gnihtyna\s+od\b[\s\S]{0,120}\bNAD\b/g,
31
+ /(?:EDOM|TPMORP)\s+(?:DE)?KAERBLIAJ/gi,
32
+ /\bWON\s+GNIHTYNA\s+OD\b/gi,
33
+ /(?:S?RETLIF|S?ERUSAEM|S?ENILEDIUG|S?NOITCIRTSER)\s+(?:YTEFAS|YTIRUCES|TNETNOC|LACIHTE)(?:\s+RUOY)?\s+SSAPYB/gi,
34
+ /(?:S?RETLIF|S?ERUSAEM|S?ELUR|S?ENILEDIUG|S?NOITCIRTSER)\s+(?:YTEFAS|YTIRUCES|TNETNOC)(?:\s+RUOY)?(?:\s+LLA)?\s+(?:ELBASID|ETELED|EVOMER|FFO\s+NRUT|ETANIMILE)/gi,
35
+ /(?:S?ENILEDIUG|S?ELUR|S?NOITCIRTSER|S?ERUSAEM|S?RETLIF|(?:Y|SEI)CILOP|S?LOCOTORP)\s+(?:YTEFAS|YTIRUCES|LACIHTE|TNETNOC)(?:\s+RUOY)?(?:\s+LLA)?\s+(?:ERONGI|DRAGERSID)/gi,
36
+ />\/?[\t\v\f \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]{0,32}METSYS[\t\v\f \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]{0,32}\/?[\t\v\f \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]{0,32}</gi,
37
+ />\/?[\t\v\f \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]{0,32}(?:TNATSISSA|REPOLEVED|LOOT|NOITCNUF)[\t\v\f \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]{0,32}\/?[\t\v\f \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]{0,32}</gi,
38
+ /:\]?(?:METSYS|TNATSISSA|RESU)\[?[\t\v\f \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]{0,32}\n[\t\v\f \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]{0,32}\]/gi,
39
+ /\][\t\v\f \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]{0,32}(?:EGASSEM[\t\v\f \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]{0,8}METSYS|METSYS|TNATSISSA|LANRETNI)[\t\v\f \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]{0,32}\[/gi,
40
+ /(?:ERA\s+UOY|ERONGI|EDIRREVO)[\t\v\f \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]{1,32}:METSYS[\t\v\f \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]{0,32}$/gim,
41
+ />\|(?:trats_mi|dne_mi|di_toe|di_redaeh_trats|di_redaeh_dne|txetfodne)\|</g,
42
+ />\uff5c(?:ecnetnes\u2581fo\u2581dne|ecnetnes\u2581fo\u2581nigeb)\uff5c</g,
43
+ /\]TSNI\/?\[/gi,
44
+ /\b(?:S?NOITCURTSNI|S?ELUR)(?:\s+RUOY)?(?:\s+LLA)?\s+ERONGI/gi,
45
+ /\b(?:IA|EDOM|LEDOM)\s+DETCIRTSERNU\b/gi,
46
+ /\b(?:NEGNUSIEWNA|S?NOITCURTSNI|SENOICCURTSNI|S?EVITCERID|SELG[E\xc8]R|SALGER)\b[\s\S]{0,50}\b(?:NEREIRONGI|ZERONGI|ARONGI|RERONGI|ZEILBUO|NESSEGREV|ADIVLO|AMITSESED|NETHCASSIM)\b/gi,
47
+ /\b(?:S?NOITCURTSNI|SELUR|S?ENILEDIUG|S?TNIARTSNOC|S?EVITCERID|S?TPMORP)(?:\s+[-\w'\u2019]{1,40}(?<!\b(?:YM|RUO))){0,3}\s+(?:ERONGI|DRAGERSID|TEGROF|EDIRREVO|SSAPYB)\b(?:(?=(?:\s+[-\w'\u2019]{1,40}){0,2}\s+UOY\b)|(?!(?:\s+YL\w+)?\s+(?:OT|TSUM|DLUOHS|DLUOW|LLIW|NAC|DLUOC|YAM|THGIM|LLAHS|I|EW|YEHT|EH|EHS|TI|OHW|TAHT|HCIHW)\b))(?!\s+(?:EHT|A|NA|SIH|REH|STI|RIEHT|RUOY|YM|RUO)\b)(?!(?:\s+[-\w'\u2019]{1,40})?\s+(?:(?:TON|REVEN|TONNAC|TUOHTIW)\b|T['\u2019]N))/gi,
48
+ ];
49
+ export { REVERSED_INJECTION_PATTERNS };
@@ -0,0 +1,30 @@
1
+ import { type RedactSpan } from '../observability/spans.js';
2
+ declare const TYPO_TARGETS: string[];
3
+ declare function typoNormalize(text: string): string;
4
+ /**
5
+ * `typoNormalize(text)`, and for an index in it the index of `text` it stands
6
+ * for. A corrected word may be a letter longer or shorter than the word as
7
+ * written, so an index past the written word stands for its last letter.
8
+ */
9
+ declare function typoFolded(text: string): {
10
+ text: string;
11
+ at: (index: number) => number;
12
+ };
13
+ /** Blob patterns whose match is a hit only when the blob decodes to an injection. */
14
+ declare const INJECTION_BLOBS: readonly {
15
+ pattern: RegExp;
16
+ hit: (blob: string) => boolean;
17
+ }[];
18
+ declare function tryRot13(text: string): string;
19
+ /** Each run of `%XX` escapes decoded on its own, so one stray `%` cannot switch decoding off. */
20
+ declare function decodeUrlRuns(text: string): string;
21
+ declare const LEET_MAP: Record<string, string>;
22
+ declare function tryLeet(text: string): string | undefined;
23
+ /**
24
+ * The spans of injection in the text, each stretch once. The text is read as
25
+ * written and in each rewrite of it: typo-folded, normalized, decoded, and its
26
+ * encoded blobs. A match in a rewrite is the stretch of the text as written it
27
+ * was read from, so text around a match stays.
28
+ */
29
+ declare function injectionSpans(text: string): RedactSpan[];
30
+ export { decodeUrlRuns, INJECTION_BLOBS, injectionSpans, LEET_MAP, TYPO_TARGETS, tryLeet, tryRot13, typoFolded, typoNormalize, };