@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,46 @@
1
+ import type { ModelEvent } from '../kernel/types.js';
2
+ import type { ResolvedDetect } from './detectors.js';
3
+ import type { GuardrailContext, GuardrailHit } from './types.js';
4
+ /** Why a reply was withheld, for the builder (`errorInternal`); the user reads `error.safety`. */
5
+ declare const WITHHELD_REASON: {
6
+ readonly canary: "canary leaked";
7
+ readonly promptEcho: "system prompt echoed";
8
+ readonly providerToolLeak: "a provider-side tool already sent the canary or system prompt";
9
+ readonly egress: "Turn withheld: egress disclosure violation";
10
+ };
11
+ /** The prompt-echo hit, when `text` repeats the guarded system prompt's own words. */
12
+ declare function promptEchoHits(text: string, privateSystem?: readonly string[], canary?: string): GuardrailHit[];
13
+ /** What a prompt-leak check reads of the turn. */
14
+ type LeakScope = Pick<GuardrailContext, 'canary' | 'canaryGiven' | 'privateSystem'>;
15
+ /**
16
+ * The system-prompt leak hits in any content-bearing field of an event
17
+ * (`guardedEventTexts`). In the report of a provider-side tool they are one
18
+ * `egress.provider-tool-leak`: the call already ran.
19
+ */
20
+ declare function eventPromptLeakHits(event: ModelEvent, scope: LeakScope): GuardrailHit[];
21
+ /** A leak of ours in an event that is not the reply's text: its hits, and whether it stops the turn. */
22
+ interface EventLeak {
23
+ stop: boolean;
24
+ hits: GuardrailHit[];
25
+ }
26
+ /**
27
+ * What the detectors of what is ours find in an event's host content
28
+ * (`guardedEventTexts`) under their actions at `boundary`, as the event goes
29
+ * to the host with the reply. `flag` reports it; `redact` and `block` stop the
30
+ * turn, as an event has no text to replace. The report of a provider-side tool
31
+ * is read whatever the actions are and always stops: the call already ran.
32
+ */
33
+ declare function eventLeak(event: ModelEvent, scope: LeakScope, detect: ResolvedDetect, boundary: 'reply' | 'live_reply'): EventLeak | undefined;
34
+ /** Whether a hit is a system-prompt leak. */
35
+ declare function isPromptLeakHit(hit: GuardrailHit): boolean;
36
+ /** Why a system-prompt leak withheld the reply, for the builder. */
37
+ declare function promptLeakReason(hits: GuardrailHit[]): string;
38
+ /** The distinct rule names among the hits. */
39
+ declare function hitRules(hits: GuardrailHit[]): string[];
40
+ /**
41
+ * The words of the canary note a turn binds, when the profile's labels
42
+ * rewords it so that `SYSTEM_BOUNDARY` no longer reads them.
43
+ */
44
+ declare function boundaryNote({ canary, labels, }: Pick<GuardrailContext, 'canary' | 'labels'>): string | undefined;
45
+ export type { EventLeak, LeakScope };
46
+ export { boundaryNote, eventLeak, eventPromptLeakHits, hitRules, isPromptLeakHit, promptEchoHits, promptLeakReason, WITHHELD_REASON, };
@@ -0,0 +1,124 @@
1
+ import { canaryNoteMarker, guardedEventTexts, scanTextForCanaryLeak } from './canary.js';
2
+ import { SYSTEM_BOUNDARY } from './egress-patterns.js';
3
+ import { CANARY_HIT, PROMPT_ECHO_HIT } from './hits.js';
4
+ import { scanTextForPromptEcho } from './prompt-echo.js';
5
+ import { DETECT_RULES, EGRESS_RULES } from './rules.js';
6
+ /** Why a reply was withheld, for the builder (`errorInternal`); the user reads `error.safety`. */
7
+ const WITHHELD_REASON = {
8
+ canary: 'canary leaked',
9
+ promptEcho: 'system prompt echoed', // labels-exempt: internal diagnostic — the user reads error.safety
10
+ providerToolLeak: 'a provider-side tool already sent the canary or system prompt', // labels-exempt: internal diagnostic — the user reads error.safety
11
+ egress: 'Turn withheld: egress disclosure violation', // labels-exempt: internal diagnostic — the user reads error.safety
12
+ };
13
+ function canaryHits(text, canary) {
14
+ return canary && scanTextForCanaryLeak(text, canary) ? [CANARY_HIT] : [];
15
+ }
16
+ /** The prompt-echo hit, when `text` repeats the guarded system prompt's own words. */
17
+ function promptEchoHits(text, privateSystem, canary) {
18
+ return privateSystem && scanTextForPromptEcho(text, privateSystem, canary)
19
+ ? [PROMPT_ECHO_HIT]
20
+ : [];
21
+ }
22
+ /** The system-prompt leak hits: the canary unless it was given, and the prompt's own words when guarded. */
23
+ function promptLeakHits(text, scope) {
24
+ const { canary, canaryGiven, privateSystem } = scope;
25
+ return [
26
+ ...canaryHits(text, canaryGiven ? undefined : canary),
27
+ ...promptEchoHits(text, privateSystem, canary),
28
+ ];
29
+ }
30
+ const PROVIDER_TOOL_LEAK_HIT = {
31
+ rule: EGRESS_RULES.providerToolLeak,
32
+ severity: 'high',
33
+ };
34
+ /**
35
+ * Evidence kinds that report a step the provider ran itself: its built-in
36
+ * tools, and any step an adapter does not map (`provider_step`).
37
+ */
38
+ const PROVIDER_TOOL_EVIDENCE = new Set([
39
+ 'code_execution_call',
40
+ 'code_execution_result',
41
+ 'url_context',
42
+ 'provider_step',
43
+ ]);
44
+ /** The provider's report of a built-in tool it already ran. What it carries has left. */
45
+ function isProviderToolReport(event) {
46
+ return (event.type === 'grounding' ||
47
+ (event.type === 'evidence' && PROVIDER_TOOL_EVIDENCE.has(event.evidence.kind)));
48
+ }
49
+ /**
50
+ * The system-prompt leak hits in any content-bearing field of an event
51
+ * (`guardedEventTexts`). In the report of a provider-side tool they are one
52
+ * `egress.provider-tool-leak`: the call already ran.
53
+ */
54
+ function eventPromptLeakHits(event, scope) {
55
+ const hits = guardedEventTexts(event).flatMap((text) => promptLeakHits(text, scope));
56
+ if (hits.length > 0 && isProviderToolReport(event)) {
57
+ return [PROVIDER_TOOL_LEAK_HIT];
58
+ }
59
+ return [...new Map(hits.map((hit) => [hit.rule, hit])).values()];
60
+ }
61
+ /**
62
+ * What the detectors of what is ours find in an event's host content
63
+ * (`guardedEventTexts`) under their actions at `boundary`, as the event goes
64
+ * to the host with the reply. `flag` reports it; `redact` and `block` stop the
65
+ * turn, as an event has no text to replace. The report of a provider-side tool
66
+ * is read whatever the actions are and always stops: the call already ran.
67
+ */
68
+ function eventLeak(event, scope, detect, boundary) {
69
+ if (isProviderToolReport(event)) {
70
+ const hits = eventPromptLeakHits(event, scope);
71
+ return hits.length > 0 ? { stop: true, hits } : undefined;
72
+ }
73
+ const texts = guardedEventTexts(event);
74
+ const found = [];
75
+ const canary = scope.canaryGiven ? undefined : scope.canary;
76
+ const canaryAction = detect.canary_leak[boundary];
77
+ if (canaryAction !== 'ignore' && texts.some((text) => canaryHits(text, canary).length > 0)) {
78
+ found.push([canaryAction, CANARY_HIT]);
79
+ }
80
+ const promptAction = detect.prompt_leak[boundary];
81
+ if (promptAction !== 'ignore' &&
82
+ texts.some((text) => promptEchoHits(text, scope.privateSystem, scope.canary).length > 0)) {
83
+ found.push([promptAction, PROMPT_ECHO_HIT]);
84
+ }
85
+ if (found.length === 0)
86
+ return undefined;
87
+ return {
88
+ stop: found.some(([action]) => action !== 'flag'),
89
+ hits: found.map(([, hit]) => hit),
90
+ };
91
+ }
92
+ const PROMPT_LEAK_RULES = new Set([
93
+ DETECT_RULES.canary_leak,
94
+ DETECT_RULES.prompt_leak,
95
+ EGRESS_RULES.providerToolLeak,
96
+ ]);
97
+ /** Whether a hit is a system-prompt leak. */
98
+ function isPromptLeakHit(hit) {
99
+ return PROMPT_LEAK_RULES.has(hit.rule);
100
+ }
101
+ /** Why a system-prompt leak withheld the reply, for the builder. */
102
+ function promptLeakReason(hits) {
103
+ if (hits.some((hit) => hit.rule === EGRESS_RULES.providerToolLeak)) {
104
+ return WITHHELD_REASON.providerToolLeak;
105
+ }
106
+ return hits.some((hit) => hit.rule === DETECT_RULES.canary_leak)
107
+ ? WITHHELD_REASON.canary
108
+ : WITHHELD_REASON.promptEcho;
109
+ }
110
+ /** The distinct rule names among the hits. */
111
+ function hitRules(hits) {
112
+ return [...new Set(hits.map((hit) => hit.rule))];
113
+ }
114
+ /**
115
+ * The words of the canary note a turn binds, when the profile's labels
116
+ * rewords it so that `SYSTEM_BOUNDARY` no longer reads them.
117
+ */
118
+ function boundaryNote({ canary, labels, }) {
119
+ if (!canary)
120
+ return undefined;
121
+ const marker = canaryNoteMarker(labels);
122
+ return marker && !SYSTEM_BOUNDARY.test(marker) ? marker : undefined;
123
+ }
124
+ export { boundaryNote, eventLeak, eventPromptLeakHits, hitRules, isPromptLeakHit, promptEchoHits, promptLeakReason, WITHHELD_REASON, };
@@ -0,0 +1,31 @@
1
+ import type { TurnEventOf } from '../kernel/turn-events.js';
2
+ import type { TurnEvent } from '../kernel/types.js';
3
+ import { type LabelOverrides } from './labels.js';
4
+ import { type ErrorCopies, type ErrorKind, TheoremError } from './theorem-error.js';
5
+ /** True when the value is an error named `AbortError`. */
6
+ declare function isAbortError(err: unknown): boolean;
7
+ /** `AbortSignal.timeout` rejects with a `TimeoutError`, not an `AbortError`. */
8
+ declare function isTimeoutError(err: unknown): boolean;
9
+ /** Throws when the signal has aborted: its framework, abort or timeout reason, else an `AbortError`. */
10
+ declare function throwIfAborted(signal?: AbortSignal): void;
11
+ /** Anything that is not a `TheoremError` or an abort escaped every boundary that names kinds: a THEOREM bug. */
12
+ declare function errorKind(err: unknown): ErrorKind;
13
+ /** The error kind for an HTTP status: 401, 402 and 403 are `auth`; 408, 504 and 524 `timeout`; 429 `rate_limit`; 500 and above `unavailable`; the rest `unsupported`. */
14
+ declare function kindOfHttpStatus(status: number): ErrorKind;
15
+ /** The named reasons an error carries, one line each, in the profile's wording. */
16
+ declare function errorCopyText(copy: ErrorCopies, labels?: LabelOverrides): string;
17
+ /** Pass the profile's `labels`, or the profile's wording is skipped. */
18
+ declare function publicError(err: unknown, labels?: LabelOverrides): string;
19
+ /** Raw diagnostic for hosts, traces, and logs; never shown to end users. */
20
+ declare function describeError(err: unknown): string;
21
+ type ProducedError = TurnEventOf<'error'> & {
22
+ errorInternal: string;
23
+ };
24
+ /** No user wording yet: `withPublicLabels` adds it where the event reaches the host, the one place that knows the profile. */
25
+ declare function toErrorEvent(err: unknown): ProducedError;
26
+ /** Wording already set (host copy) is kept. */
27
+ declare function withPublicLabels(event: TurnEvent, labels?: LabelOverrides): TurnEvent;
28
+ export type { ErrorCopies, ErrorCopy, ErrorKind, TheoremErrorOptions } from './theorem-error.js';
29
+ export { ERROR_KINDS } from './theorem-error.js';
30
+ export type { ProducedError };
31
+ export { describeError, errorCopyText, errorKind, isAbortError, isTimeoutError, kindOfHttpStatus, publicError, TheoremError, throwIfAborted, toErrorEvent, withPublicLabels, };
@@ -0,0 +1,96 @@
1
+ import { labelText } from './labels.js';
2
+ import { TheoremError } from './theorem-error.js';
3
+ /** True when the value is an error named `AbortError`. */
4
+ function isAbortError(err) {
5
+ return errorName(err) === 'AbortError';
6
+ }
7
+ /** `AbortSignal.timeout` rejects with a `TimeoutError`, not an `AbortError`. */
8
+ function isTimeoutError(err) {
9
+ return errorName(err) === 'TimeoutError';
10
+ }
11
+ function errorName(err) {
12
+ return err && typeof err === 'object' ? err.name : undefined;
13
+ }
14
+ /** Throws when the signal has aborted: its framework, abort or timeout reason, else an `AbortError`. */
15
+ function throwIfAborted(signal) {
16
+ if (!signal?.aborted) {
17
+ return;
18
+ }
19
+ const { reason } = signal;
20
+ if (reason instanceof TheoremError || isAbortError(reason) || isTimeoutError(reason)) {
21
+ throw reason;
22
+ }
23
+ throw new DOMException('The operation was aborted.', 'AbortError'); // labels-exempt: DOM AbortError fingerprint
24
+ }
25
+ /** Anything that is not a `TheoremError` or an abort escaped every boundary that names kinds: a THEOREM bug. */
26
+ function errorKind(err) {
27
+ if (err instanceof TheoremError)
28
+ return err.kind;
29
+ if (isTimeoutError(err))
30
+ return 'timeout';
31
+ if (isAbortError(err))
32
+ return 'cancelled';
33
+ return 'internal';
34
+ }
35
+ /** The error kind for an HTTP status: 401, 402 and 403 are `auth`; 408, 504 and 524 `timeout`; 429 `rate_limit`; 500 and above `unavailable`; the rest `unsupported`. */
36
+ function kindOfHttpStatus(status) {
37
+ if (status === 401 || status === 402 || status === 403)
38
+ return 'auth';
39
+ if (status === 408 || status === 504 || status === 524)
40
+ return 'timeout';
41
+ if (status === 429)
42
+ return 'rate_limit';
43
+ if (status >= 500)
44
+ return 'unavailable';
45
+ return 'unsupported';
46
+ }
47
+ function kindText(kind, labels, params) {
48
+ return labelText(`error.${kind}`, params, labels);
49
+ }
50
+ function wording(kind, copy, labels) {
51
+ return copy ? errorCopyText(copy, labels) : kindText(kind, labels);
52
+ }
53
+ /** The named reasons an error carries, one line each, in the profile's wording. */
54
+ function errorCopyText(copy, labels) {
55
+ const lines = 'key' in copy ? [copy] : copy;
56
+ return lines.map((line) => labelText(line.key, line.params, labels)).join('\n');
57
+ }
58
+ /** Pass the profile's `labels`, or the profile's wording is skipped. */
59
+ function publicError(err, labels) {
60
+ return wording(errorKind(err), err instanceof TheoremError ? err.copy : undefined, labels);
61
+ }
62
+ /** Raw diagnostic for hosts, traces, and logs; never shown to end users. */
63
+ function describeError(err) {
64
+ if (typeof err === 'string') {
65
+ return err;
66
+ }
67
+ if (err instanceof Error && err.message) {
68
+ return err.message;
69
+ }
70
+ return String(err);
71
+ }
72
+ /** No user wording yet: `withPublicLabels` adds it where the event reaches the host, the one place that knows the profile. */
73
+ function toErrorEvent(err) {
74
+ return {
75
+ type: 'error',
76
+ errorKind: errorKind(err),
77
+ ...(err instanceof TheoremError && err.copy ? { errorCopy: err.copy } : {}),
78
+ errorInternal: describeError(err),
79
+ };
80
+ }
81
+ /** Wording already set (host copy) is kept. */
82
+ function withPublicLabels(event, labels) {
83
+ if (event.type === 'error' && event.error === undefined) {
84
+ return { ...event, error: wording(event.errorKind, event.errorCopy, labels) };
85
+ }
86
+ if (event.type === 'tool' &&
87
+ event.tool.phase === 'error' &&
88
+ event.tool.failure.error === undefined) {
89
+ const { tool } = event;
90
+ const error = kindText(tool.failure.kind, labels, { tool: tool.name });
91
+ return { ...event, tool: { ...tool, failure: { ...tool.failure, error } } };
92
+ }
93
+ return event;
94
+ }
95
+ export { ERROR_KINDS } from './theorem-error.js';
96
+ export { describeError, errorCopyText, errorKind, isAbortError, isTimeoutError, kindOfHttpStatus, publicError, TheoremError, throwIfAborted, toErrorEvent, withPublicLabels, };
@@ -0,0 +1,100 @@
1
+ import { z } from 'zod';
2
+ import { type Boundary } from './boundaries.js';
3
+ import { type LabelKey } from './labels.js';
4
+ import { type ErrorKind } from './theorem-error.js';
5
+ import { type GuardrailAction, type GuardrailStage, type Severity, type ToolOrigin, type TrustLevel } from './types.js';
6
+ /** The schema an error kind parses against. */
7
+ export declare const errorKindSchema: z.ZodType<ErrorKind>;
8
+ /** Wording for the user more specific than its kind's: a label key and its parameters. */
9
+ export interface ErrorCopy {
10
+ key: LabelKey;
11
+ params?: Record<string, string | number>;
12
+ }
13
+ /** One line of wording, or one per problem found. */
14
+ export type ErrorCopies = ErrorCopy | readonly ErrorCopy[];
15
+ /** The schema error wording parses against. */
16
+ export declare const errorCopiesSchema: z.ZodType<ErrorCopies>;
17
+ /**
18
+ * `depth` is hops from the user's turn: a direct tool call is 1; a tool result
19
+ * produced by a delegated agent that itself called tools is deeper. Depth
20
+ * matters because a two-hop delegation can otherwise launder remote content
21
+ * into trusted-looking output.
22
+ */
23
+ export interface Provenance {
24
+ origin: ToolOrigin;
25
+ tool: string;
26
+ depth: number;
27
+ }
28
+ export declare const provenance: z.ZodObject<{
29
+ origin: z.ZodEnum<{
30
+ http: "http";
31
+ mcp: "mcp";
32
+ builtin: "builtin";
33
+ local: "local";
34
+ delegated: "delegated";
35
+ }>;
36
+ tool: z.ZodString;
37
+ depth: z.ZodNumber;
38
+ }, z.core.$strip>;
39
+ /** One rule match: the rule id, its severity, where it matched and, when kept, the matched text. */
40
+ export interface GuardrailHit {
41
+ /** Stable rule id, e.g. `egress.canary-leak`. */
42
+ rule: string;
43
+ severity: Severity;
44
+ /** Offsets into the inspected text; absent for whole-payload checks. */
45
+ span?: {
46
+ start: number;
47
+ end: number;
48
+ };
49
+ /** Stripped from host and trace unless `observability.include.guardrailMatchPreview`. */
50
+ match?: string;
51
+ /**
52
+ * What the rule catches, in a few words, for a host's own rule: Theorem's
53
+ * rules are named in the trace catalog. Shown in place of the id.
54
+ */
55
+ label?: string;
56
+ /** Why a match matters, in a sentence, for a host's own rule. */
57
+ doc?: string;
58
+ /** The name of the host's pattern that matched; unset for a match of Theorem's own patterns. */
59
+ pattern?: string;
60
+ /**
61
+ * What about the match made it one, for `tool_instructions`: `override`, `tool_name`, `order`
62
+ * or `authority`. For a host's `find` that failed, how: `find_threw` or `find_result`.
63
+ */
64
+ signal?: string;
65
+ }
66
+ export declare const guardrailHit: z.ZodObject<{
67
+ rule: z.ZodString;
68
+ severity: z.ZodEnum<{
69
+ low: "low";
70
+ medium: "medium";
71
+ high: "high";
72
+ info: "info";
73
+ }>;
74
+ span: z.ZodOptional<z.ZodObject<{
75
+ start: z.ZodNumber;
76
+ end: z.ZodNumber;
77
+ }, z.core.$strip>>;
78
+ match: z.ZodOptional<z.ZodString>;
79
+ label: z.ZodOptional<z.ZodString>;
80
+ doc: z.ZodOptional<z.ZodString>;
81
+ pattern: z.ZodOptional<z.ZodString>;
82
+ signal: z.ZodOptional<z.ZodString>;
83
+ }, z.core.$strip>;
84
+ /**
85
+ * Matched text rides only under `observability.include.guardrailMatchPreview`, so by default a
86
+ * trace sink can count and locate hits without becoming a second copy of the secret.
87
+ */
88
+ export interface GuardrailEvent {
89
+ stage: GuardrailStage;
90
+ /** Where the text was crossing, when a detector read it there. */
91
+ boundary?: Boundary;
92
+ trust: TrustLevel;
93
+ action: GuardrailAction;
94
+ hits: GuardrailHit[];
95
+ provenance?: Provenance;
96
+ /** The block verdict's `errorInternal`: builder-only, stripped by `forClient`. */
97
+ errorInternal?: string;
98
+ }
99
+ /** The schema a guardrail event parses against. */
100
+ export declare const guardrailEventSchema: z.ZodType<GuardrailEvent>;
@@ -0,0 +1,48 @@
1
+ // invariant: Imports nothing from `src/kernel/` but the dependency-free `Equals`: `src/kernel/turn-events.ts` imports these.
2
+ import { z } from 'zod';
3
+ import { BOUNDARIES } from './boundaries.js';
4
+ import { LABEL_KEYS } from './labels.js';
5
+ import { ERROR_KINDS } from './theorem-error.js';
6
+ import { GUARDRAIL_ACTIONS, GUARDRAIL_STAGES, SEVERITIES, TOOL_ORIGINS, TRUST_LEVELS, } from './types.js';
7
+ const errorKind = z.enum(ERROR_KINDS);
8
+ true;
9
+ /** The schema an error kind parses against. */
10
+ export const errorKindSchema = errorKind;
11
+ const errorCopy = z.object({
12
+ key: z.enum(LABEL_KEYS),
13
+ params: z.record(z.string(), z.union([z.string(), z.number()])).optional(),
14
+ });
15
+ true;
16
+ const errorCopies = z.union([errorCopy, z.array(errorCopy).readonly()]);
17
+ true;
18
+ /** The schema error wording parses against. */
19
+ export const errorCopiesSchema = errorCopies;
20
+ export const provenance = z.object({
21
+ origin: z.enum(TOOL_ORIGINS),
22
+ tool: z.string(),
23
+ depth: z.number(),
24
+ });
25
+ true;
26
+ export const guardrailHit = z.object({
27
+ rule: z.string(),
28
+ severity: z.enum(SEVERITIES),
29
+ span: z.object({ start: z.number(), end: z.number() }).optional(),
30
+ match: z.string().optional(),
31
+ label: z.string().optional(),
32
+ doc: z.string().optional(),
33
+ pattern: z.string().optional(),
34
+ signal: z.string().optional(),
35
+ });
36
+ true;
37
+ const guardrailEvent = z.object({
38
+ stage: z.enum(GUARDRAIL_STAGES),
39
+ boundary: z.enum(BOUNDARIES).optional(),
40
+ trust: z.enum(TRUST_LEVELS),
41
+ action: z.enum(GUARDRAIL_ACTIONS),
42
+ hits: z.array(guardrailHit),
43
+ provenance: provenance.optional(),
44
+ errorInternal: z.string().optional(),
45
+ });
46
+ true;
47
+ /** The schema a guardrail event parses against. */
48
+ export const guardrailEventSchema = guardrailEvent;
@@ -0,0 +1,13 @@
1
+ import type { TurnEvent, TurnEventOf } from '../kernel/turn-events.js';
2
+ import type { GuardrailAction, GuardrailEvent, GuardrailHit, GuardrailStage, Provenance, TrustLevel, Verdict } from './types.js';
3
+ /** Wraps a guardrail event as a turn event. */
4
+ declare function guardrailTurnEvent(guardrail: GuardrailEvent): TurnEventOf<'guardrail'>;
5
+ /** `allow` yields nothing; `flag`, `redact`, and `block` all emit so hosts and traces can count hits. */
6
+ declare function guardrailFromVerdict(stage: GuardrailStage, trust: TrustLevel, verdict: Verdict, provenance?: Provenance): TurnEventOf<'guardrail'> | undefined;
7
+ /** Builds the guardrail event for the hits found at a stage. */
8
+ declare function guardrailFromHits(stage: GuardrailStage, trust: TrustLevel, hits: GuardrailHit[], action?: GuardrailAction, provenance?: Provenance): TurnEventOf<'guardrail'> | undefined;
9
+ /** The guardrail turn event, with the matched text kept or dropped. */
10
+ declare function projectGuardrailTurnEvent(event: TurnEventOf<'guardrail'>, includeMatch: boolean): TurnEventOf<'guardrail'>;
11
+ /** The turn event unchanged, or a guardrail one with the matched text kept or dropped. */
12
+ declare function projectGuardrailTurnEvent(event: TurnEvent, includeMatch: boolean): TurnEvent;
13
+ export { guardrailFromHits, guardrailFromVerdict, guardrailTurnEvent, projectGuardrailTurnEvent };
@@ -0,0 +1,45 @@
1
+ import { projectGuardrailEvent } from './hits.js';
2
+ /** Wraps a guardrail event as a turn event. */
3
+ function guardrailTurnEvent(guardrail) {
4
+ return { type: 'guardrail', guardrail };
5
+ }
6
+ /** `allow` yields nothing; `flag`, `redact`, and `block` all emit so hosts and traces can count hits. */
7
+ function guardrailFromVerdict(stage, trust, verdict, provenance) {
8
+ if (verdict.action === 'allow') {
9
+ return undefined;
10
+ }
11
+ return guardrailTurnEvent({
12
+ stage,
13
+ trust,
14
+ action: verdict.action,
15
+ hits: verdict.hits,
16
+ ...(provenance ? { provenance } : {}),
17
+ ...(verdict.action === 'block' && verdict.errorInternal
18
+ ? { errorInternal: verdict.errorInternal }
19
+ : {}),
20
+ });
21
+ }
22
+ /** Builds the guardrail event for the hits found at a stage. */
23
+ function guardrailFromHits(stage, trust, hits, action = 'redact', provenance) {
24
+ if (hits.length === 0) {
25
+ return undefined;
26
+ }
27
+ return guardrailTurnEvent({
28
+ stage,
29
+ trust,
30
+ action,
31
+ hits,
32
+ ...(provenance ? { provenance } : {}),
33
+ });
34
+ }
35
+ /** The turn event unchanged, or a guardrail one with the matched text kept or dropped. */
36
+ function projectGuardrailTurnEvent(event, includeMatch) {
37
+ if (event.type !== 'guardrail') {
38
+ return event;
39
+ }
40
+ return {
41
+ ...event,
42
+ guardrail: projectGuardrailEvent(event.guardrail, includeMatch),
43
+ };
44
+ }
45
+ export { guardrailFromHits, guardrailFromVerdict, guardrailTurnEvent, projectGuardrailTurnEvent };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * What a model is told when a reply a detector blocked is retried: for each detector that
3
+ * matched, its hint and, where a match may be repeated, what it matched. The retry is read at the
4
+ * `repair` boundary like any other text on its way to the model, so a secret quoted here meets
5
+ * the action the profile set there.
6
+ *
7
+ * @module
8
+ */
9
+ import { type ResolvedDetect } from './detectors.js';
10
+ import type { GuardrailHit } from './event-schemas.js';
11
+ import { type LabelOverrides } from './labels.js';
12
+ /** The rejection a retry carries for the `hits` that stopped a reply, a line for each rule among them. */
13
+ declare function retryRejection(hits: readonly GuardrailHit[], detect: ResolvedDetect, labels?: LabelOverrides): string;
14
+ export { retryRejection };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * What a model is told when a reply a detector blocked is retried: for each detector that
3
+ * matched, its hint and, where a match may be repeated, what it matched. The retry is read at the
4
+ * `repair` boundary like any other text on its way to the model, so a secret quoted here meets
5
+ * the action the profile set there.
6
+ *
7
+ * @module
8
+ */
9
+ import { isDetector } from './detectors.js';
10
+ import { labelText } from './labels.js';
11
+ import { DETECT_RULES, EGRESS_RULES } from './rules.js';
12
+ /** The hint of what stops a reply besides a detector's match. */
13
+ const OTHER_HINTS = {
14
+ [EGRESS_RULES.unscannable]: 'egress.hint_unscannable',
15
+ [EGRESS_RULES.providerToolLeak]: 'egress.hint_provider_tool_leak',
16
+ };
17
+ /** The rules whose match is the profile's own, and is never repeated. */
18
+ const UNQUOTED = [DETECT_RULES.canary_leak, DETECT_RULES.prompt_leak];
19
+ /** How many matches a detector's line quotes, and how much of each. */
20
+ const MAX_QUOTED = 3;
21
+ const MAX_QUOTE = 120;
22
+ const DETECT_PREFIX = 'detect.';
23
+ /** The hint of the rule `hit` reports: the profile's, or else the labels'. */
24
+ function hintOf(hit, detect, labels) {
25
+ const other = OTHER_HINTS[hit.rule];
26
+ if (other)
27
+ return labelText(other, {}, labels);
28
+ const key = hit.rule.startsWith(DETECT_PREFIX) ? hit.rule.slice(DETECT_PREFIX.length) : hit.rule;
29
+ if (isDetector(key)) {
30
+ return detect.hints?.[key] ?? labelText(`detect.hint.${key}`, {}, labels);
31
+ }
32
+ const host = detect.host?.find(({ id }) => id === key);
33
+ const label = host?.label ?? hit.label ?? key;
34
+ return host?.hint ?? labelText('detect.hint.own', { label }, labels);
35
+ }
36
+ /** The matched text of `hits` a line may quote: each once, the first few, cut to length. */
37
+ function quoted(hits) {
38
+ const matches = hits.flatMap(({ rule, match }) => match && !UNQUOTED.includes(rule) ? [match] : []);
39
+ return [...new Set(matches)]
40
+ .slice(0, MAX_QUOTED)
41
+ .map((match) => JSON.stringify(match.length > MAX_QUOTE ? match.slice(0, MAX_QUOTE) : match));
42
+ }
43
+ /** The rejection a retry carries for the `hits` that stopped a reply, a line for each rule among them. */
44
+ function retryRejection(hits, detect, labels) {
45
+ const byRule = new Map();
46
+ for (const hit of hits)
47
+ byRule.set(hit.rule, [...(byRule.get(hit.rule) ?? []), hit]);
48
+ const lines = [...byRule.values()].map((found) => {
49
+ const hint = hintOf(found[0], detect, labels);
50
+ const matches = quoted(found);
51
+ return matches.length > 0
52
+ ? labelText('egress.rejection_found', { hint, matches: matches.join(', ') }, labels)
53
+ : hint;
54
+ });
55
+ return labelText('egress.rejection', { found: lines.join('\n') }, labels);
56
+ }
57
+ export { retryRejection };
@@ -0,0 +1,14 @@
1
+ import type { GuardrailEvent, GuardrailHit, Severity } from './types.js';
2
+ /** A canary leak. Never carries the live token, only a placeholder. */
3
+ declare const CANARY_HIT: GuardrailHit;
4
+ /** A prompt leak. Never carries the words: they are the private system instruction's. */
5
+ declare const PROMPT_ECHO_HIT: GuardrailHit;
6
+ /** A guardrail hit for a span of the text, with the matched text sliced from it. */
7
+ declare function hitFromSpan(text: string, span: {
8
+ start: number;
9
+ end: number;
10
+ name?: string;
11
+ }, rule: string, severity: Severity): GuardrailHit;
12
+ /** `match` is the caught text itself, so hosts and traces get it only via `observability.include.guardrailMatchPreview`. */
13
+ declare function projectGuardrailEvent(event: GuardrailEvent, includeMatch: boolean): GuardrailEvent;
14
+ export { CANARY_HIT, hitFromSpan, PROMPT_ECHO_HIT, projectGuardrailEvent };
@@ -0,0 +1,30 @@
1
+ import { DETECT_RULES } from './rules.js';
2
+ /** A canary leak. Never carries the live token, only a placeholder. */
3
+ const CANARY_HIT = {
4
+ rule: DETECT_RULES.canary_leak,
5
+ severity: 'high',
6
+ match: '[canary]',
7
+ };
8
+ /** A prompt leak. Never carries the words: they are the private system instruction's. */
9
+ const PROMPT_ECHO_HIT = { rule: DETECT_RULES.prompt_leak, severity: 'high' };
10
+ /** A guardrail hit for a span of the text, with the matched text sliced from it. */
11
+ function hitFromSpan(text, span, rule, severity) {
12
+ return {
13
+ rule,
14
+ severity,
15
+ span: { start: span.start, end: span.end },
16
+ match: text.slice(span.start, span.end),
17
+ ...(span.name === undefined ? {} : { pattern: span.name }),
18
+ };
19
+ }
20
+ /** `match` is the caught text itself, so hosts and traces get it only via `observability.include.guardrailMatchPreview`. */
21
+ function projectGuardrailEvent(event, includeMatch) {
22
+ if (includeMatch) {
23
+ return event;
24
+ }
25
+ return {
26
+ ...event,
27
+ hits: event.hits.map(({ match: _match, ...hit }) => hit),
28
+ };
29
+ }
30
+ export { CANARY_HIT, hitFromSpan, PROMPT_ECHO_HIT, projectGuardrailEvent };