@theoremjs/agents 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +277 -995
  2. package/esm/mod.d.ts +34 -20
  3. package/esm/mod.js +19 -12
  4. package/esm/src/cli/commands/bench.js +36 -14
  5. package/esm/src/cli/commands/detect-compile.d.ts +17 -0
  6. package/esm/src/cli/commands/detect-compile.js +22 -0
  7. package/esm/src/cli/commands/eval.d.ts +3 -3
  8. package/esm/src/cli/commands/fuzz-canary.js +55 -16
  9. package/esm/src/cli/commands/profile.js +4 -4
  10. package/esm/src/cli/commands/run.d.ts +2 -2
  11. package/esm/src/cli/commands/run.js +1 -1
  12. package/esm/src/cli/commands/test.d.ts +4 -3
  13. package/esm/src/cli/commands/test.js +2 -2
  14. package/esm/src/cli/index.js +9 -9
  15. package/esm/src/cli/matrix/fixtures.js +25 -30
  16. package/esm/src/evals/attachments.d.ts +1 -0
  17. package/esm/src/evals/attachments.js +4 -2
  18. package/esm/src/evals/breakdown.d.ts +2 -0
  19. package/esm/src/evals/breakdown.js +1 -0
  20. package/esm/src/evals/graders/answer.d.ts +3 -0
  21. package/esm/src/evals/graders/answer.js +1 -0
  22. package/esm/src/evals/graders/code.d.ts +7 -31
  23. package/esm/src/evals/graders/code.js +4 -25
  24. package/esm/src/evals/graders/judge.d.ts +4 -0
  25. package/esm/src/evals/graders/judge.js +7 -5
  26. package/esm/src/evals/graders/latency.d.ts +1 -0
  27. package/esm/src/evals/graders/latency.js +3 -2
  28. package/esm/src/evals/graders/live.d.ts +3 -0
  29. package/esm/src/evals/graders/live.js +2 -0
  30. package/esm/src/evals/graders/media.js +1 -2
  31. package/esm/src/evals/graders/shared.js +1 -1
  32. package/esm/src/evals/graders/transcript.d.ts +2 -0
  33. package/esm/src/evals/graders/transcript.js +5 -3
  34. package/esm/src/evals/mod.d.ts +1 -9
  35. package/esm/src/evals/mod.js +1 -9
  36. package/esm/src/evals/record.d.ts +6 -0
  37. package/esm/src/evals/record.js +4 -2
  38. package/esm/src/evals/rubrics/mod.d.ts +1 -1
  39. package/esm/src/evals/rubrics/mod.js +1 -1
  40. package/esm/src/evals/rubrics/mustache.js +1 -1
  41. package/esm/src/evals/rubrics/types.js +1 -1
  42. package/esm/src/evals/run.d.ts +9 -52
  43. package/esm/src/evals/run.js +12 -46
  44. package/esm/src/evals/suite.d.ts +12 -3
  45. package/esm/src/evals/suite.js +9 -4
  46. package/esm/src/evals/summary.d.ts +3 -0
  47. package/esm/src/evals/summary.js +1 -0
  48. package/esm/src/evals/trial.d.ts +3 -16
  49. package/esm/src/evals/trial.js +7 -30
  50. package/esm/src/evals/types.d.ts +30 -121
  51. package/esm/src/evals/types.js +3 -16
  52. package/esm/src/evals/verdict.d.ts +5 -0
  53. package/esm/src/evals/verdict.js +4 -1
  54. package/esm/src/guardrails/boundaries.d.ts +41 -0
  55. package/esm/src/guardrails/boundaries.js +103 -0
  56. package/esm/src/guardrails/canary-gate.d.ts +1 -0
  57. package/esm/src/guardrails/canary.d.ts +49 -15
  58. package/esm/src/guardrails/canary.js +103 -30
  59. package/esm/src/guardrails/compile-egress.d.ts +6 -5
  60. package/esm/src/guardrails/compile-egress.js +6 -5
  61. package/esm/src/guardrails/corpus/canary-egress-attacks.d.ts +3 -1
  62. package/esm/src/guardrails/corpus/canary-egress-attacks.js +4 -2
  63. package/esm/src/guardrails/corpus/fuzz-inbound.js +14 -17
  64. package/esm/src/guardrails/corpus/inbound-payloads.d.ts +2 -0
  65. package/esm/src/guardrails/corpus/inbound-payloads.js +4 -2
  66. package/esm/src/guardrails/corpus/live-attacks.d.ts +2 -0
  67. package/esm/src/guardrails/corpus/live-attacks.js +6 -1
  68. package/esm/src/guardrails/corpus/mod.d.ts +1 -1
  69. package/esm/src/guardrails/corpus/secrets.d.ts +3 -3
  70. package/esm/src/guardrails/corpus/secrets.js +2 -2
  71. package/esm/src/guardrails/corpus/strings.d.ts +1 -1
  72. package/esm/src/guardrails/corpus/strings.js +1 -1
  73. package/esm/src/guardrails/corpus/types.d.ts +5 -1
  74. package/esm/src/guardrails/credential-rules.d.ts +36 -0
  75. package/esm/src/guardrails/credential-rules.js +3001 -0
  76. package/esm/src/guardrails/credential-scan.d.ts +45 -0
  77. package/esm/src/guardrails/credential-scan.js +172 -0
  78. package/esm/src/guardrails/destinations.d.ts +45 -0
  79. package/esm/src/guardrails/destinations.js +234 -0
  80. package/esm/src/guardrails/detect-at.d.ts +107 -0
  81. package/esm/src/guardrails/detect-at.js +434 -0
  82. package/esm/src/guardrails/detect-reply.d.ts +61 -0
  83. package/esm/src/guardrails/detect-reply.js +95 -0
  84. package/esm/src/guardrails/detect-stream.d.ts +33 -0
  85. package/esm/src/guardrails/detect-stream.js +77 -0
  86. package/esm/src/guardrails/detectors.d.ts +216 -0
  87. package/esm/src/guardrails/detectors.js +503 -0
  88. package/esm/src/guardrails/egress-automata.d.ts +4 -6
  89. package/esm/src/guardrails/egress-automata.js +24095 -4572
  90. package/esm/src/guardrails/egress-compiler.d.ts +38 -16
  91. package/esm/src/guardrails/egress-compiler.js +254 -60
  92. package/esm/src/guardrails/egress-patterns.d.ts +4 -2
  93. package/esm/src/guardrails/egress-patterns.js +6 -2
  94. package/esm/src/guardrails/egress-stream.d.ts +54 -36
  95. package/esm/src/guardrails/egress-stream.js +253 -124
  96. package/esm/src/guardrails/egress-urls.d.ts +6 -3
  97. package/esm/src/guardrails/egress-urls.js +14 -22
  98. package/esm/src/guardrails/egress.d.ts +26 -86
  99. package/esm/src/guardrails/egress.js +59 -309
  100. package/esm/src/guardrails/error.d.ts +13 -8
  101. package/esm/src/guardrails/error.js +25 -18
  102. package/esm/src/guardrails/event-schemas.d.ts +46 -3
  103. package/esm/src/guardrails/event-schemas.js +12 -5
  104. package/esm/src/guardrails/events.d.ts +5 -1
  105. package/esm/src/guardrails/events.js +4 -1
  106. package/esm/src/guardrails/hints.d.ts +14 -0
  107. package/esm/src/guardrails/hints.js +57 -0
  108. package/esm/src/guardrails/hits.d.ts +7 -1
  109. package/esm/src/guardrails/hits.js +12 -1
  110. package/esm/src/guardrails/host-patterns.d.ts +85 -0
  111. package/esm/src/guardrails/host-patterns.js +173 -0
  112. package/esm/src/guardrails/injection-patterns.d.ts +6 -1
  113. package/esm/src/guardrails/injection-patterns.js +33 -1
  114. package/esm/src/guardrails/injection-reversed.d.ts +9 -0
  115. package/esm/src/guardrails/injection-reversed.js +49 -0
  116. package/esm/src/guardrails/injection.d.ts +17 -1
  117. package/esm/src/guardrails/injection.js +259 -36
  118. package/esm/src/guardrails/labels.d.ts +40 -0
  119. package/esm/src/guardrails/labels.js +881 -0
  120. package/esm/src/guardrails/live-outbound-gate.d.ts +9 -8
  121. package/esm/src/guardrails/live-outbound-gate.js +100 -107
  122. package/esm/src/guardrails/mod.d.ts +30 -22
  123. package/esm/src/guardrails/mod.js +19 -14
  124. package/esm/src/guardrails/network.d.ts +4 -0
  125. package/esm/src/guardrails/network.js +21 -19
  126. package/esm/src/guardrails/normalize.d.ts +15 -1
  127. package/esm/src/guardrails/normalize.js +34 -1
  128. package/esm/src/guardrails/policy.d.ts +2 -17
  129. package/esm/src/guardrails/policy.js +12 -41
  130. package/esm/src/guardrails/progressive-yield.d.ts +65 -24
  131. package/esm/src/guardrails/progressive-yield.js +191 -147
  132. package/esm/src/guardrails/prompt-echo.d.ts +4 -2
  133. package/esm/src/guardrails/prompt-echo.js +87 -6
  134. package/esm/src/guardrails/quota.d.ts +4 -1
  135. package/esm/src/guardrails/quota.js +7 -2
  136. package/esm/src/guardrails/rules.d.ts +20 -29
  137. package/esm/src/guardrails/rules.js +23 -30
  138. package/esm/src/guardrails/sanitize.d.ts +32 -15
  139. package/esm/src/guardrails/sanitize.js +100 -124
  140. package/esm/src/guardrails/sensitive-groups.d.ts +21 -0
  141. package/esm/src/guardrails/sensitive-groups.js +12 -0
  142. package/esm/src/guardrails/sensitive.d.ts +16 -23
  143. package/esm/src/guardrails/sensitive.js +168 -47
  144. package/esm/src/guardrails/serialize.d.ts +1 -0
  145. package/esm/src/guardrails/testing.d.ts +4 -2
  146. package/esm/src/guardrails/testing.js +4 -2
  147. package/esm/src/guardrails/theorem-error.d.ts +5 -2
  148. package/esm/src/guardrails/theorem-error.js +6 -3
  149. package/esm/src/guardrails/thought-guard.d.ts +34 -13
  150. package/esm/src/guardrails/thought-guard.js +264 -64
  151. package/esm/src/guardrails/tool-directives.d.ts +29 -10
  152. package/esm/src/guardrails/tool-directives.js +133 -47
  153. package/esm/src/guardrails/tool-leak.d.ts +26 -0
  154. package/esm/src/guardrails/tool-leak.js +45 -0
  155. package/esm/src/guardrails/tool-result.d.ts +45 -14
  156. package/esm/src/guardrails/tool-result.js +94 -70
  157. package/esm/src/guardrails/types.d.ts +79 -71
  158. package/esm/src/guardrails/types.js +11 -7
  159. package/esm/src/host/client-turn.d.ts +29 -2
  160. package/esm/src/host/client-turn.js +46 -4
  161. package/esm/src/host/mint-trace.d.ts +1 -0
  162. package/esm/src/host/mint-trace.js +3 -2
  163. package/esm/src/host/mod.d.ts +2 -2
  164. package/esm/src/host/mod.js +1 -1
  165. package/esm/src/host/readStreamingJsonStringField.js +2 -43
  166. package/esm/src/host/reply.d.ts +6 -0
  167. package/esm/src/host/reply.js +8 -1
  168. package/esm/src/interface/blocks.d.ts +3 -0
  169. package/esm/src/interface/blocks.js +84 -14
  170. package/esm/src/interface/composer-actions.d.ts +4 -0
  171. package/esm/src/interface/composer-actions.js +5 -3
  172. package/esm/src/interface/draft.d.ts +6 -0
  173. package/esm/src/interface/draft.js +22 -11
  174. package/esm/src/interface/from-profile.d.ts +13 -1
  175. package/esm/src/interface/from-profile.js +66 -31
  176. package/esm/src/interface/history.d.ts +9 -3
  177. package/esm/src/interface/history.js +33 -24
  178. package/esm/src/interface/inputs.d.ts +1 -0
  179. package/esm/src/interface/inputs.js +3 -0
  180. package/esm/src/interface/mod.d.ts +4 -2
  181. package/esm/src/interface/mod.js +3 -2
  182. package/esm/src/interface/models.d.ts +7 -0
  183. package/esm/src/interface/models.js +5 -0
  184. package/esm/src/interface/pending.d.ts +9 -0
  185. package/esm/src/interface/pending.js +9 -3
  186. package/esm/src/interface/profile-interface.js +54 -40
  187. package/esm/src/interface/session.d.ts +12 -5
  188. package/esm/src/interface/session.js +17 -10
  189. package/esm/src/interface/stop.d.ts +13 -0
  190. package/esm/src/interface/stop.js +28 -0
  191. package/esm/src/interface/tool-calls.d.ts +14 -2
  192. package/esm/src/interface/tool-calls.js +64 -10
  193. package/esm/src/interface/tool-invoke.d.ts +2 -0
  194. package/esm/src/interface/tool-invoke.js +3 -1
  195. package/esm/src/interface/tool-media.d.ts +2 -0
  196. package/esm/src/interface/tool-media.js +2 -1
  197. package/esm/src/interface/types.d.ts +105 -40
  198. package/esm/src/interface/types.js +1 -0
  199. package/esm/src/kernel/api-catalog.d.ts +85 -0
  200. package/esm/src/kernel/api-catalog.js +229 -0
  201. package/esm/src/kernel/auth/crypto.d.ts +7 -2
  202. package/esm/src/kernel/auth/crypto.js +12 -10
  203. package/esm/src/kernel/auth/oauth.d.ts +2 -1
  204. package/esm/src/kernel/auth/oauth.js +23 -22
  205. package/esm/src/kernel/auth/typed-secret.js +2 -2
  206. package/esm/src/kernel/auth/types.d.ts +13 -0
  207. package/esm/src/kernel/checkpoint.d.ts +43 -0
  208. package/esm/src/kernel/checkpoint.js +58 -0
  209. package/esm/src/kernel/default-scope.d.ts +43 -5
  210. package/esm/src/kernel/default-scope.js +54 -5
  211. package/esm/src/kernel/engine/call-trace.d.ts +19 -0
  212. package/esm/src/kernel/engine/call-trace.js +29 -0
  213. package/esm/src/kernel/engine/compaction.d.ts +6 -5
  214. package/esm/src/kernel/engine/compaction.js +12 -11
  215. package/esm/src/kernel/engine/decision.d.ts +10 -8
  216. package/esm/src/kernel/engine/decision.js +174 -146
  217. package/esm/src/kernel/engine/embedding.d.ts +8 -0
  218. package/esm/src/kernel/engine/embedding.js +118 -0
  219. package/esm/src/kernel/engine/live-inbound.d.ts +14 -4
  220. package/esm/src/kernel/engine/live-inbound.js +36 -11
  221. package/esm/src/kernel/engine/live-ingress.d.ts +6 -0
  222. package/esm/src/kernel/engine/live-ingress.js +6 -1
  223. package/esm/src/kernel/engine/repair.js +12 -12
  224. package/esm/src/kernel/engine/runner/gates.d.ts +2 -2
  225. package/esm/src/kernel/engine/runner/gates.js +287 -101
  226. package/esm/src/kernel/engine/runner/mod.d.ts +19 -5
  227. package/esm/src/kernel/engine/runner/mod.js +107 -56
  228. package/esm/src/kernel/engine/runner/nested.d.ts +32 -0
  229. package/esm/src/kernel/engine/runner/nested.js +134 -0
  230. package/esm/src/kernel/engine/runner/schema-validation.d.ts +24 -3
  231. package/esm/src/kernel/engine/runner/schema-validation.js +78 -4
  232. package/esm/src/kernel/engine/runner/stages.d.ts +1 -1
  233. package/esm/src/kernel/engine/runner/stages.js +1 -8
  234. package/esm/src/kernel/engine/runner/state.d.ts +33 -12
  235. package/esm/src/kernel/engine/runner/state.js +11 -1
  236. package/esm/src/kernel/engine/runner/step-order.d.ts +27 -0
  237. package/esm/src/kernel/engine/runner/step-order.js +165 -0
  238. package/esm/src/kernel/engine/runner/steps.d.ts +2 -2
  239. package/esm/src/kernel/engine/runner/steps.js +329 -169
  240. package/esm/src/kernel/engine/runner/stream.d.ts +42 -11
  241. package/esm/src/kernel/engine/runner/stream.js +197 -46
  242. package/esm/src/kernel/engine/runner/usage.d.ts +5 -5
  243. package/esm/src/kernel/engine/runner/usage.js +12 -14
  244. package/esm/src/kernel/engine/session/mod.d.ts +8 -6
  245. package/esm/src/kernel/engine/session/mod.js +360 -129
  246. package/esm/src/kernel/engine/session/session-trace.d.ts +10 -10
  247. package/esm/src/kernel/engine/session/session-trace.js +41 -30
  248. package/esm/src/kernel/engine/token-estimate.d.ts +10 -64
  249. package/esm/src/kernel/engine/token-estimate.js +14 -194
  250. package/esm/src/kernel/engine/tool-trace.d.ts +3 -3
  251. package/esm/src/kernel/engine/tool-trace.js +2 -1
  252. package/esm/src/kernel/engine/turn-trace.d.ts +8 -7
  253. package/esm/src/kernel/engine/turn-trace.js +28 -36
  254. package/esm/src/kernel/engine/usage.d.ts +6 -0
  255. package/esm/src/kernel/engine/usage.js +17 -0
  256. package/esm/src/kernel/interaction-parts.d.ts +3 -0
  257. package/esm/src/kernel/interaction-parts.js +18 -0
  258. package/esm/src/kernel/json.d.ts +10 -0
  259. package/esm/src/kernel/json.js +3 -0
  260. package/esm/src/kernel/mod.d.ts +38 -11
  261. package/esm/src/kernel/mod.js +22 -7
  262. package/esm/src/kernel/profile-graph.d.ts +11 -6
  263. package/esm/src/kernel/profile-graph.js +14 -7
  264. package/esm/src/kernel/profile-presence.d.ts +10 -1
  265. package/esm/src/kernel/profile-presence.js +90 -75
  266. package/esm/src/kernel/profile-scope.d.ts +7 -3
  267. package/esm/src/kernel/profile-scope.js +67 -55
  268. package/esm/src/kernel/protocols/binding.d.ts +65 -0
  269. package/esm/src/kernel/protocols/binding.js +125 -0
  270. package/esm/src/kernel/protocols/limits.d.ts +15 -0
  271. package/esm/src/kernel/protocols/limits.js +28 -0
  272. package/esm/src/kernel/protocols/mod.d.ts +5 -0
  273. package/esm/src/kernel/protocols/mod.js +5 -0
  274. package/esm/src/kernel/protocols/prices.d.ts +36 -0
  275. package/esm/src/kernel/protocols/prices.js +37 -0
  276. package/esm/src/kernel/protocols/protocol.d.ts +253 -0
  277. package/esm/src/kernel/protocols/protocol.js +253 -0
  278. package/esm/src/kernel/protocols/provider.d.ts +108 -0
  279. package/esm/src/kernel/protocols/provider.js +143 -0
  280. package/esm/src/kernel/protocols/runtime.d.ts +55 -0
  281. package/esm/src/kernel/protocols/runtime.js +534 -0
  282. package/esm/src/kernel/provider-budget.d.ts +32 -0
  283. package/esm/src/kernel/provider-budget.js +262 -0
  284. package/esm/src/kernel/provider-dispatch.d.ts +13 -0
  285. package/esm/src/kernel/provider-dispatch.js +36 -0
  286. package/esm/src/kernel/provider-live.d.ts +7 -0
  287. package/esm/src/kernel/provider-live.js +189 -0
  288. package/esm/src/kernel/provider-runtime.d.ts +57 -0
  289. package/esm/src/kernel/provider-runtime.js +524 -0
  290. package/esm/src/kernel/registry/attachments.d.ts +15 -4
  291. package/esm/src/kernel/registry/attachments.js +31 -22
  292. package/esm/src/kernel/registry/catalog.d.ts +6 -0
  293. package/esm/src/kernel/registry/catalog.js +9 -2
  294. package/esm/src/kernel/registry/embedding-rules.d.ts +28 -0
  295. package/esm/src/kernel/registry/embedding-rules.js +66 -0
  296. package/esm/src/kernel/registry/ingress.d.ts +6 -2
  297. package/esm/src/kernel/registry/ingress.js +55 -10
  298. package/esm/src/kernel/registry/kernel-registry.d.ts +3 -0
  299. package/esm/src/kernel/registry/kernel-registry.js +9 -2
  300. package/esm/src/kernel/registry/profile-outputs.js +4 -1
  301. package/esm/src/kernel/registry/profiles.d.ts +38 -14
  302. package/esm/src/kernel/registry/profiles.js +280 -205
  303. package/esm/src/kernel/registry/provider-request.d.ts +3 -3
  304. package/esm/src/kernel/registry/provider-request.js +5 -13
  305. package/esm/src/kernel/registry/resolve.d.ts +4 -1
  306. package/esm/src/kernel/registry/resolve.js +59 -58
  307. package/esm/src/kernel/registry/schemas.d.ts +3 -0
  308. package/esm/src/kernel/registry/schemas.js +3 -1
  309. package/esm/src/kernel/registry/slot-fill.d.ts +7 -0
  310. package/esm/src/kernel/registry/slot-fill.js +22 -0
  311. package/esm/src/kernel/registry/system-prompt.js +7 -8
  312. package/esm/src/kernel/registry/vault.d.ts +14 -13
  313. package/esm/src/kernel/registry/vault.js +1 -14
  314. package/esm/src/kernel/schema.d.ts +100 -46
  315. package/esm/src/kernel/schema.js +499 -257
  316. package/esm/src/kernel/scope.d.ts +12 -5
  317. package/esm/src/kernel/scope.js +23 -3
  318. package/esm/src/kernel/stages.d.ts +38 -3
  319. package/esm/src/kernel/stages.js +82 -39
  320. package/esm/src/kernel/stop.d.ts +29 -6
  321. package/esm/src/kernel/stop.js +16 -4
  322. package/esm/src/kernel/system-parts.js +6 -6
  323. package/esm/src/kernel/tools/activity-label.d.ts +12 -6
  324. package/esm/src/kernel/tools/activity-label.js +258 -32
  325. package/esm/src/kernel/tools/agent.d.ts +66 -0
  326. package/esm/src/kernel/tools/agent.js +212 -0
  327. package/esm/src/kernel/tools/coordinate.d.ts +4 -0
  328. package/esm/src/kernel/tools/coordinate.js +165 -0
  329. package/esm/src/kernel/tools/events.d.ts +21 -6
  330. package/esm/src/kernel/tools/events.js +53 -18
  331. package/esm/src/kernel/tools/execute.d.ts +47 -11
  332. package/esm/src/kernel/tools/execute.js +508 -136
  333. package/esm/src/kernel/tools/gate-answer.d.ts +12 -2
  334. package/esm/src/kernel/tools/gate-answer.js +17 -6
  335. package/esm/src/kernel/tools/handler-events.d.ts +45 -0
  336. package/esm/src/kernel/tools/handler-events.js +106 -0
  337. package/esm/src/kernel/tools/harness.d.ts +1 -0
  338. package/esm/src/kernel/tools/harness.js +2 -1
  339. package/esm/src/kernel/tools/http-limit.d.ts +27 -0
  340. package/esm/src/kernel/tools/http-limit.js +85 -0
  341. package/esm/src/kernel/tools/invoke.d.ts +27 -5
  342. package/esm/src/kernel/tools/invoke.js +223 -70
  343. package/esm/src/kernel/tools/mcp-sessions.d.ts +4 -1
  344. package/esm/src/kernel/tools/mcp-sessions.js +13 -8
  345. package/esm/src/kernel/tools/mod.d.ts +4 -3
  346. package/esm/src/kernel/tools/mod.js +3 -2
  347. package/esm/src/kernel/tools/model-text.d.ts +10 -5
  348. package/esm/src/kernel/tools/model-text.js +18 -12
  349. package/esm/src/kernel/tools/operation.d.ts +76 -0
  350. package/esm/src/kernel/tools/operation.js +100 -0
  351. package/esm/src/kernel/tools/page-answer.d.ts +8 -0
  352. package/esm/src/kernel/tools/page-answer.js +19 -0
  353. package/esm/src/kernel/tools/permission.d.ts +11 -2
  354. package/esm/src/kernel/tools/permission.js +12 -12
  355. package/esm/src/kernel/tools/project.d.ts +4 -1
  356. package/esm/src/kernel/tools/project.js +32 -2
  357. package/esm/src/kernel/tools/registry.d.ts +9 -2
  358. package/esm/src/kernel/tools/registry.js +69 -10
  359. package/esm/src/kernel/tools/remote.d.ts +40 -6
  360. package/esm/src/kernel/tools/remote.js +219 -92
  361. package/esm/src/kernel/tools/resolve.d.ts +3 -0
  362. package/esm/src/kernel/tools/resolve.js +12 -4
  363. package/esm/src/kernel/tools/run.d.ts +28 -0
  364. package/esm/src/kernel/tools/run.js +86 -0
  365. package/esm/src/kernel/tools/schema.d.ts +3 -3
  366. package/esm/src/kernel/tools/schema.js +21 -100
  367. package/esm/src/kernel/tools/signed-in-fetch.d.ts +2 -1
  368. package/esm/src/kernel/tools/signed-in-fetch.js +3 -3
  369. package/esm/src/kernel/tools/stage-run.d.ts +27 -4
  370. package/esm/src/kernel/tools/stage-run.js +75 -17
  371. package/esm/src/kernel/tools/types.d.ts +235 -25
  372. package/esm/src/kernel/tools/unchecked-output.d.ts +14 -0
  373. package/esm/src/kernel/tools/unchecked-output.js +18 -0
  374. package/esm/src/kernel/turn-events.d.ts +208 -31
  375. package/esm/src/kernel/turn-events.js +127 -9
  376. package/esm/src/kernel/types.d.ts +302 -161
  377. package/esm/src/kernel/util/base64.d.ts +2 -0
  378. package/esm/src/kernel/util/base64.js +2 -0
  379. package/esm/src/kernel/util/partial-json.d.ts +23 -0
  380. package/esm/src/kernel/util/partial-json.js +128 -0
  381. package/esm/src/kernel/util/record.d.ts +1 -0
  382. package/esm/src/kernel/util/record.js +1 -0
  383. package/esm/src/observability/destinations.d.ts +5 -0
  384. package/esm/src/observability/destinations.js +7 -2
  385. package/esm/src/observability/jsonl.d.ts +2 -2
  386. package/esm/src/observability/jsonl.js +15 -22
  387. package/esm/src/observability/mod.d.ts +3 -3
  388. package/esm/src/observability/mod.js +2 -2
  389. package/esm/src/observability/openinference.d.ts +1 -1
  390. package/esm/src/observability/openinference.js +3 -3
  391. package/esm/src/observability/otlp.d.ts +3 -0
  392. package/esm/src/observability/otlp.js +3 -3
  393. package/esm/src/observability/phoenix.d.ts +1 -0
  394. package/esm/src/observability/policy.d.ts +3 -0
  395. package/esm/src/observability/policy.js +5 -1
  396. package/esm/src/observability/resolve-policy.js +11 -5
  397. package/esm/src/observability/spans.d.ts +8 -2
  398. package/esm/src/observability/spans.js +21 -5
  399. package/esm/src/observability/trace-catalog.d.ts +19 -2
  400. package/esm/src/observability/trace-catalog.js +130 -88
  401. package/esm/src/observability/trace-record.js +22 -17
  402. package/esm/src/observability/trace-schema.d.ts +3 -0
  403. package/esm/src/observability/trace-schema.js +1 -1
  404. package/esm/src/observability/trace-sink.d.ts +1 -0
  405. package/esm/src/observability/trace-sink.js +1 -1
  406. package/esm/src/observability/trace-span.d.ts +7 -1
  407. package/esm/src/observability/trace-span.js +3 -1
  408. package/esm/src/observability/trace.d.ts +2 -0
  409. package/esm/src/observability/trace.js +4 -2
  410. package/esm/src/observability/types.d.ts +35 -11
  411. package/esm/src/observability/types.js +1 -1
  412. package/esm/src/presets/google/speech-voices.d.ts +1 -0
  413. package/esm/src/presets/google-limits.d.ts +1 -0
  414. package/esm/src/presets/google.d.ts +27 -12
  415. package/esm/src/presets/google.js +34 -25
  416. package/esm/src/presets/local.d.ts +26 -0
  417. package/esm/src/presets/local.js +30 -0
  418. package/esm/src/presets/mod.d.ts +5 -4
  419. package/esm/src/presets/mod.js +4 -4
  420. package/esm/src/presets/openrouter.d.ts +14 -1
  421. package/esm/src/presets/openrouter.js +19 -1
  422. package/esm/src/providers/embedding-limits.d.ts +7 -0
  423. package/esm/src/providers/embedding-limits.js +12 -0
  424. package/esm/src/providers/gemini/embedding-protocol.d.ts +8 -0
  425. package/esm/src/providers/gemini/embedding-protocol.js +125 -0
  426. package/esm/src/providers/gemini/interactions-protocol.d.ts +8 -0
  427. package/esm/src/providers/gemini/interactions-protocol.js +102 -0
  428. package/esm/src/providers/gemini/live-protocol.d.ts +3 -0
  429. package/esm/src/providers/gemini/live-protocol.js +191 -0
  430. package/esm/src/providers/gemini/prices.d.ts +3 -0
  431. package/esm/src/providers/gemini/prices.js +63 -0
  432. package/esm/src/providers/gemini/provider.d.ts +7 -0
  433. package/esm/src/providers/gemini/provider.js +39 -0
  434. package/esm/src/providers/google/api-error.d.ts +2 -0
  435. package/esm/src/providers/google/api-error.js +26 -18
  436. package/esm/src/providers/google/builtins.d.ts +14 -0
  437. package/esm/src/providers/google/builtins.js +57 -0
  438. package/esm/src/providers/google/grounding.d.ts +4 -4
  439. package/esm/src/providers/google/interactions/framing.d.ts +20 -8
  440. package/esm/src/providers/google/interactions/framing.js +85 -44
  441. package/esm/src/providers/google/interactions/steps.d.ts +5 -5
  442. package/esm/src/providers/google/interactions/steps.js +4 -4
  443. package/esm/src/providers/google/interactions/stream.d.ts +10 -11
  444. package/esm/src/providers/google/interactions/stream.js +33 -100
  445. package/esm/src/providers/google/live/framing.d.ts +15 -5
  446. package/esm/src/providers/google/live/framing.js +25 -25
  447. package/esm/src/providers/google/live/stream.d.ts +6 -44
  448. package/esm/src/providers/google/live/stream.js +4 -210
  449. package/esm/src/providers/google/urls.d.ts +1 -3
  450. package/esm/src/providers/google/urls.js +1 -3
  451. package/esm/src/providers/google/usage.js +2 -2
  452. package/esm/src/providers/live.d.ts +6 -0
  453. package/esm/src/providers/live.js +6 -0
  454. package/esm/src/providers/local/embedding-protocol.d.ts +7 -0
  455. package/esm/src/providers/local/embedding-protocol.js +60 -0
  456. package/esm/src/providers/local/provider.d.ts +7 -0
  457. package/esm/src/providers/local/provider.js +28 -0
  458. package/esm/src/providers/mod.d.ts +28 -7
  459. package/esm/src/providers/mod.js +19 -3
  460. package/esm/src/providers/open-ai/protocol.d.ts +3 -0
  461. package/esm/src/providers/open-ai/protocol.js +189 -0
  462. package/esm/src/providers/openrouter/embedding-protocol.d.ts +6 -0
  463. package/esm/src/providers/openrouter/embedding-protocol.js +86 -0
  464. package/esm/src/providers/openrouter/image.d.ts +0 -9
  465. package/esm/src/providers/openrouter/image.js +0 -153
  466. package/esm/src/providers/openrouter/images-protocol.d.ts +3 -0
  467. package/esm/src/providers/openrouter/images-protocol.js +82 -0
  468. package/esm/src/providers/openrouter/openai/compat.d.ts +2 -2
  469. package/esm/src/providers/openrouter/openai/compat.js +6 -6
  470. package/esm/src/providers/openrouter/openai/image-payload.d.ts +2 -2
  471. package/esm/src/providers/openrouter/openai/reasoning-state.d.ts +2 -0
  472. package/esm/src/providers/openrouter/openai/reasoning-state.js +31 -0
  473. package/esm/src/providers/openrouter/protocol.d.ts +8 -0
  474. package/esm/src/providers/openrouter/protocol.js +171 -0
  475. package/esm/src/providers/openrouter/provider.d.ts +10 -0
  476. package/esm/src/providers/openrouter/provider.js +50 -0
  477. package/esm/src/providers/shared/carried-tool-files.d.ts +7 -0
  478. package/esm/src/providers/shared/carried-tool-files.js +43 -0
  479. package/esm/src/providers/shared/pcm.js +2 -2
  480. package/esm/src/providers/shared/protocol-events.d.ts +8 -0
  481. package/esm/src/providers/shared/protocol-events.js +20 -0
  482. package/esm/src/providers/shared/response-identity.d.ts +2 -2
  483. package/esm/src/providers/shared/retry.d.ts +18 -0
  484. package/esm/src/providers/shared/retry.js +89 -0
  485. package/esm/src/providers/shared/sse.d.ts +0 -4
  486. package/esm/src/providers/shared/sse.js +50 -36
  487. package/esm/src/providers/shared/tool-args.d.ts +6 -7
  488. package/esm/src/providers/shared/tool-args.js +10 -6
  489. package/esm/src/providers/shared/tool-draft.d.ts +16 -0
  490. package/esm/src/providers/shared/tool-draft.js +14 -0
  491. package/esm/src/providers/shared/upstream-tap.d.ts +2 -2
  492. package/esm/src/providers/shared/upstream-tape.js +1 -1
  493. package/esm/src/providers/system-one/protocol.d.ts +8 -0
  494. package/esm/src/providers/system-one/protocol.js +93 -0
  495. package/esm/src/providers/types.d.ts +48 -16
  496. package/esm/src/providers/types.js +2 -1
  497. package/esm/src/providers/typesafe/provider.d.ts +7 -0
  498. package/esm/src/providers/typesafe/provider.js +24 -0
  499. package/esm/src/surface/formats.d.ts +19 -1
  500. package/esm/src/surface/formats.js +68 -29
  501. package/esm/src/surface/mod.d.ts +4 -2
  502. package/esm/src/surface/mod.js +4 -2
  503. package/esm/src/surface/runtime.d.ts +4 -0
  504. package/esm/src/surface/runtime.js +2 -0
  505. package/esm/src/surface/tools.d.ts +2 -8
  506. package/esm/src/surface/tools.js +4 -22
  507. package/esm/src/surface/types.d.ts +6 -0
  508. package/package.json +5 -13
  509. package/esm/src/cli/commands/egress-compile.d.ts +0 -17
  510. package/esm/src/cli/commands/egress-compile.js +0 -25
  511. package/esm/src/guardrails/egress-policy.d.ts +0 -27
  512. package/esm/src/guardrails/egress-policy.js +0 -76
  513. package/esm/src/guardrails/egress-rules.d.ts +0 -54
  514. package/esm/src/guardrails/egress-rules.js +0 -49
  515. package/esm/src/guardrails/lexicon.d.ts +0 -30
  516. package/esm/src/guardrails/lexicon.js +0 -478
  517. package/esm/src/kernel/engine/media-probe/audio.d.ts +0 -7
  518. package/esm/src/kernel/engine/media-probe/audio.js +0 -342
  519. package/esm/src/kernel/engine/media-probe/bytes.d.ts +0 -6
  520. package/esm/src/kernel/engine/media-probe/bytes.js +0 -26
  521. package/esm/src/kernel/engine/media-probe/image.d.ts +0 -5
  522. package/esm/src/kernel/engine/media-probe/image.js +0 -171
  523. package/esm/src/kernel/engine/media-probe/iso-bmff.d.ts +0 -19
  524. package/esm/src/kernel/engine/media-probe/iso-bmff.js +0 -48
  525. package/esm/src/kernel/engine/media-probe/matroska.d.ts +0 -35
  526. package/esm/src/kernel/engine/media-probe/matroska.js +0 -226
  527. package/esm/src/kernel/engine/media-probe/mp4.d.ts +0 -22
  528. package/esm/src/kernel/engine/media-probe/mp4.js +0 -279
  529. package/esm/src/kernel/engine/media-probe/opus.d.ts +0 -4
  530. package/esm/src/kernel/engine/media-probe/opus.js +0 -23
  531. package/esm/src/kernel/engine/media-probe/pdf.d.ts +0 -5
  532. package/esm/src/kernel/engine/media-probe/pdf.js +0 -117
  533. package/esm/src/kernel/engine/media-probe/video.d.ts +0 -15
  534. package/esm/src/kernel/engine/media-probe/video.js +0 -49
  535. package/esm/src/presets/typesafe.d.ts +0 -2
  536. package/esm/src/presets/typesafe.js +0 -2
  537. package/esm/src/providers/create-provider.d.ts +0 -21
  538. package/esm/src/providers/create-provider.js +0 -90
  539. package/esm/src/providers/decision/usage.d.ts +0 -3
  540. package/esm/src/providers/decision/usage.js +0 -25
  541. package/esm/src/providers/google/interactions/mod.d.ts +0 -2
  542. package/esm/src/providers/google/interactions/mod.js +0 -2
  543. package/esm/src/providers/google/keys.d.ts +0 -20
  544. package/esm/src/providers/google/keys.js +0 -87
  545. package/esm/src/providers/google/live/mod.d.ts +0 -7
  546. package/esm/src/providers/google/live/mod.js +0 -7
  547. package/esm/src/providers/google/live/openapi-schema.d.ts +0 -1
  548. package/esm/src/providers/google/live/openapi-schema.js +0 -42
  549. package/esm/src/providers/google/live/session.d.ts +0 -14
  550. package/esm/src/providers/google/live/session.js +0 -150
  551. package/esm/src/providers/local/local.d.ts +0 -12
  552. package/esm/src/providers/local/local.js +0 -186
  553. package/esm/src/providers/local/mod.d.ts +0 -8
  554. package/esm/src/providers/local/mod.js +0 -8
  555. package/esm/src/providers/openrouter/cache-control.d.ts +0 -5
  556. package/esm/src/providers/openrouter/cache-control.js +0 -4
  557. package/esm/src/providers/openrouter/chat.d.ts +0 -64
  558. package/esm/src/providers/openrouter/chat.js +0 -490
  559. package/esm/src/providers/openrouter/openai/sdk-messages.d.ts +0 -10
  560. package/esm/src/providers/openrouter/openai/sdk-messages.js +0 -99
  561. package/esm/src/providers/openrouter/resolve-api-key.d.ts +0 -3
  562. package/esm/src/providers/openrouter/resolve-api-key.js +0 -8
  563. package/esm/src/providers/openrouter/speech.d.ts +0 -18
  564. package/esm/src/providers/openrouter/speech.js +0 -109
  565. package/esm/src/providers/probe.d.ts +0 -5
  566. package/esm/src/providers/probe.js +0 -15
  567. package/esm/src/providers/shared/builtin-wire.d.ts +0 -4
  568. package/esm/src/providers/shared/builtin-wire.js +0 -9
  569. package/esm/src/providers/shared/vault.d.ts +0 -13
  570. package/esm/src/providers/shared/vault.js +0 -41
@@ -1,2 +1,4 @@
1
+ /** Decodes a base64 string to bytes. */
1
2
  export declare function base64ToBytes(data: string): Uint8Array<ArrayBuffer>;
3
+ /** Encodes bytes as a base64 string. */
2
4
  export declare function bytesToBase64(bytes: Uint8Array): string;
@@ -1,3 +1,4 @@
1
+ /** Decodes a base64 string to bytes. */
1
2
  export function base64ToBytes(data) {
2
3
  const bin = atob(data);
3
4
  const out = new Uint8Array(bin.length);
@@ -5,6 +6,7 @@ export function base64ToBytes(data) {
5
6
  out[i] = bin.charCodeAt(i);
6
7
  return out;
7
8
  }
9
+ /** Encodes bytes as a base64 string. */
8
10
  export function bytesToBase64(bytes) {
9
11
  let bin = '';
10
12
  for (let i = 0; i < bytes.length; i++)
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Reads JSON text the model is still writing: what is whole so far, and the string it is in the
3
+ * middle of. For previews only; the text once whole is parsed as JSON.
4
+ */
5
+ /** A JSON string read from its opening quote: its text so far, and where it closed, if it has. */
6
+ interface StringRead {
7
+ text: string;
8
+ /** The index just past the closing quote; none while the string is still open. */
9
+ end?: number;
10
+ }
11
+ /**
12
+ * The string whose opening quote is at `at`, unescaped as far as `text` goes. An escape cut off at
13
+ * the end is left out rather than shown wrong; an escape JSON does not have reads as its letter.
14
+ */
15
+ declare function readJsonString(text: string, at: number): StringRead;
16
+ /**
17
+ * The top-level fields of a JSON object the model is still writing: each field whose value is
18
+ * whole, and the string being written, as far as it goes. A number, object, or array still being
19
+ * written is left out: it is not its value yet.
20
+ */
21
+ declare function partialJsonObject(text: string): Record<string, unknown>;
22
+ export type { StringRead };
23
+ export { partialJsonObject, readJsonString };
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Reads JSON text the model is still writing: what is whole so far, and the string it is in the
3
+ * middle of. For previews only; the text once whole is parsed as JSON.
4
+ */
5
+ const ESCAPES = {
6
+ '"': '"',
7
+ '\\': '\\',
8
+ '/': '/',
9
+ b: '\b',
10
+ f: '\f',
11
+ n: '\n',
12
+ r: '\r',
13
+ t: '\t',
14
+ };
15
+ /**
16
+ * The string whose opening quote is at `at`, unescaped as far as `text` goes. An escape cut off at
17
+ * the end is left out rather than shown wrong; an escape JSON does not have reads as its letter.
18
+ */
19
+ function readJsonString(text, at) {
20
+ let out = '';
21
+ let i = at + 1;
22
+ while (i < text.length) {
23
+ const ch = text.charAt(i);
24
+ if (ch === '"')
25
+ return { text: out, end: i + 1 };
26
+ if (ch !== '\\') {
27
+ out += ch;
28
+ i++;
29
+ continue;
30
+ }
31
+ if (i + 1 >= text.length)
32
+ break;
33
+ const code = text.charAt(i + 1);
34
+ if (code === 'u') {
35
+ const hex = text.slice(i + 2, i + 6);
36
+ if (hex.length < 4)
37
+ break;
38
+ if (/^[0-9a-fA-F]{4}$/.test(hex)) {
39
+ out += String.fromCharCode(Number.parseInt(hex, 16));
40
+ i += 6;
41
+ continue;
42
+ }
43
+ }
44
+ out += ESCAPES[code] ?? code;
45
+ i += 2;
46
+ }
47
+ return { text: out };
48
+ }
49
+ function skipSpace(text, i) {
50
+ let at = i;
51
+ while (/\s/.test(text.charAt(at)))
52
+ at++;
53
+ return at;
54
+ }
55
+ /** The JSON value at `at` in `text` and the index past it, or none while `text` ends before it does. */
56
+ function wholeJsonValueAt(text, at) {
57
+ if (text.charAt(at) === '"') {
58
+ const read = readJsonString(text, at);
59
+ return read.end === undefined ? undefined : parsedSlice(text, at, read.end);
60
+ }
61
+ let depth = 0;
62
+ for (let i = at; i < text.length; i++) {
63
+ const ch = text.charAt(i);
64
+ if (ch === '"') {
65
+ const end = readJsonString(text, i).end;
66
+ if (end === undefined)
67
+ return undefined;
68
+ i = end - 1;
69
+ }
70
+ else if (ch === '{' || ch === '[')
71
+ depth++;
72
+ else if (ch === '}' || ch === ']') {
73
+ if (depth === 0)
74
+ return parsedSlice(text, at, i);
75
+ depth--;
76
+ if (depth === 0)
77
+ return parsedSlice(text, at, i + 1);
78
+ }
79
+ else if (ch === ',' && depth === 0)
80
+ return parsedSlice(text, at, i);
81
+ }
82
+ return undefined;
83
+ }
84
+ function parsedSlice(text, from, to) {
85
+ try {
86
+ return { value: JSON.parse(text.slice(from, to)), end: to };
87
+ }
88
+ catch {
89
+ return undefined;
90
+ }
91
+ }
92
+ /**
93
+ * The top-level fields of a JSON object the model is still writing: each field whose value is
94
+ * whole, and the string being written, as far as it goes. A number, object, or array still being
95
+ * written is left out: it is not its value yet.
96
+ */
97
+ function partialJsonObject(text) {
98
+ const fields = {};
99
+ let i = skipSpace(text, 0);
100
+ if (text.charAt(i) !== '{')
101
+ return fields;
102
+ i++;
103
+ for (;;) {
104
+ i = skipSpace(text, i);
105
+ if (text.charAt(i) === ',')
106
+ i = skipSpace(text, i + 1);
107
+ if (text.charAt(i) !== '"')
108
+ return fields;
109
+ const key = readJsonString(text, i);
110
+ if (key.end === undefined)
111
+ return fields;
112
+ i = skipSpace(text, key.end);
113
+ if (text.charAt(i) !== ':')
114
+ return fields;
115
+ i = skipSpace(text, i + 1);
116
+ if (i >= text.length)
117
+ return fields;
118
+ const value = wholeJsonValueAt(text, i);
119
+ if (!value) {
120
+ if (text.charAt(i) === '"')
121
+ fields[key.text] = readJsonString(text, i).text;
122
+ return fields;
123
+ }
124
+ fields[key.text] = value.value;
125
+ i = value.end;
126
+ }
127
+ }
128
+ export { partialJsonObject, readJsonString };
@@ -1 +1,2 @@
1
+ /** True for a non-null object that is not an array. */
1
2
  export declare function isRecord(value: unknown): value is Record<string, unknown>;
@@ -1,3 +1,4 @@
1
+ /** True for a non-null object that is not an array. */
1
2
  export function isRecord(value) {
2
3
  return typeof value === 'object' && value !== null && !Array.isArray(value);
3
4
  }
@@ -1,8 +1,13 @@
1
1
  import type { TraceSink } from './trace-sink.js';
2
+ /** True when the value is a trace sink. */
2
3
  declare function isTraceSink(value: unknown): value is TraceSink;
4
+ /** Register a trace sink under an id; throws when the id is empty. */
3
5
  declare function registerTraceDestination(id: string, destination: TraceSink): void;
6
+ /** The sink registered under the id, or `undefined`. */
4
7
  declare function getTraceDestination(id: string): TraceSink | undefined;
8
+ /** The sink registered under the id; throws when there is none. */
5
9
  declare function requireTraceDestination(id: string): TraceSink;
10
+ /** The registered destination ids, sorted. */
6
11
  declare function listTraceDestinationIds(): string[];
7
12
  /** For tests. */
8
13
  declare function clearTraceDestinations(): void;
@@ -1,26 +1,30 @@
1
- // THEOREM does not invent filesystem roots: hosts register a named destination once per process.
1
+ // invariant: THEOREM does not invent filesystem roots: hosts register a named destination once per process.
2
2
  import { TheoremError } from '../guardrails/error.js';
3
3
  const destinations = new Map();
4
+ /** True when the value is a trace sink. */
4
5
  function isTraceSink(value) {
5
6
  return (typeof value === 'object' &&
6
7
  value !== null &&
7
8
  'write' in value &&
8
9
  typeof value.write === 'function');
9
10
  }
11
+ /** Register a trace sink under an id; throws when the id is empty. */
10
12
  function registerTraceDestination(id, destination) {
11
13
  const key = id.trim();
12
14
  if (!key) {
13
15
  throw new TheoremError('config', 'registerTraceDestination requires a non-empty id');
14
16
  }
15
- // Hosts may call from plain JS: the registry holds only writers.
17
+ // why: Hosts may call from plain JS: the registry holds only writers.
16
18
  if (!isTraceSink(destination)) {
17
19
  throw new TheoremError('config', `Trace destination '${key}' must be a TraceSink`);
18
20
  }
19
21
  destinations.set(key, destination);
20
22
  }
23
+ /** The sink registered under the id, or `undefined`. */
21
24
  function getTraceDestination(id) {
22
25
  return destinations.get(id);
23
26
  }
27
+ /** The sink registered under the id; throws when there is none. */
24
28
  function requireTraceDestination(id) {
25
29
  const found = getTraceDestination(id);
26
30
  if (!found) {
@@ -28,6 +32,7 @@ function requireTraceDestination(id) {
28
32
  }
29
33
  return found;
30
34
  }
35
+ /** The registered destination ids, sorted. */
31
36
  function listTraceDestinationIds() {
32
37
  return [...destinations.keys()].sort();
33
38
  }
@@ -12,7 +12,7 @@ export interface JsonlSinkOptions {
12
12
  }
13
13
  /**
14
14
  * Daily rotating JSONL files under an absolute, host-chosen `dir`. Each write removes day files
15
- * older than the record's retention (`<= 0` keeps every file) and starts a new file once the
16
- * day's reaches the profile's `rotateAfterMiB`.
15
+ * older than the record's retention (`<= 0` keeps every file) and appends to the day's newest file
16
+ * until it reaches the profile's `rotateAfterMiB`, then starts another.
17
17
  */
18
18
  export declare function jsonlSink(dir: string, options?: JsonlSinkOptions): TraceSink;
@@ -8,7 +8,6 @@ import "../../_dnt.polyfills.js";
8
8
  import { appendFile, mkdir, readdir, rm, stat } from 'node:fs/promises';
9
9
  import { cwd } from 'node:process';
10
10
  import { TheoremError } from '../guardrails/error.js';
11
- import { isRecord } from '../kernel/util/record.js';
12
11
  const HOURS_PER_DAY = 24;
13
12
  const MIN_PER_HOUR = 60;
14
13
  const SEC_PER_MIN = 60;
@@ -17,12 +16,12 @@ const KIB = 1024;
17
16
  const OWNER_ONLY_DIR = 0o700;
18
17
  const OWNER_ONLY_FILE = 0o600;
19
18
  const MIB = KIB * KIB;
20
- const FILE_DAY = /^turns-(\d{4}-\d{2}-\d{2})(?:-\d+)?\.jsonl$/;
19
+ const FILE_PART = /^turns-(\d{4}-\d{2}-\d{2})(?:-(\d+))?\.jsonl$/;
21
20
  function dayStamp(ms) {
22
21
  return new Date(ms).toISOString().slice(0, 10);
23
22
  }
24
23
  function fileDay(name) {
25
- return FILE_DAY.exec(name)?.[1];
24
+ return FILE_PART.exec(name)?.[1];
26
25
  }
27
26
  /** Remove day files older than `retainForDays`; `<= 0` keeps every file. */
28
27
  async function pruneTraces(dir, now, retainForDays) {
@@ -38,29 +37,23 @@ async function pruneTraces(dir, now, retainForDays) {
38
37
  }
39
38
  }
40
39
  }
41
- function isMissing(err) {
42
- return isRecord(err) && err.code === 'ENOENT';
43
- }
40
+ /** The day's newest file while it has room, else a new one stamped `now`. */
44
41
  async function pickFile(dir, now, rotateBytes) {
45
42
  const day = dayStamp(now);
46
- const base = `${dir}/turns-${day}.jsonl`;
47
- try {
48
- if ((await stat(base)).size < rotateBytes) {
49
- return base;
50
- }
51
- }
52
- catch (err) {
53
- if (isMissing(err)) {
54
- return base;
55
- }
56
- throw err;
57
- }
58
- return `${dir}/turns-${day}-${now}.jsonl`;
43
+ const newest = (await readdir(dir))
44
+ .map((name) => ({ name, part: FILE_PART.exec(name) }))
45
+ .filter(({ part }) => part?.[1] === day)
46
+ .map(({ name, part }) => ({ name, stamp: Number(part?.[2] ?? 0) }))
47
+ .reduce((latest, file) => (latest && latest.stamp >= file.stamp ? latest : file), undefined);
48
+ if (!newest)
49
+ return `${dir}/turns-${day}.jsonl`;
50
+ const path = `${dir}/${newest.name}`;
51
+ return (await stat(path)).size < rotateBytes ? path : `${dir}/turns-${day}-${now}.jsonl`;
59
52
  }
60
53
  /**
61
54
  * Daily rotating JSONL files under an absolute, host-chosen `dir`. Each write removes day files
62
- * older than the record's retention (`<= 0` keeps every file) and starts a new file once the
63
- * day's reaches the profile's `rotateAfterMiB`.
55
+ * older than the record's retention (`<= 0` keeps every file) and appends to the day's newest file
56
+ * until it reaches the profile's `rotateAfterMiB`, then starts another.
64
57
  */
65
58
  export function jsonlSink(dir, options = {}) {
66
59
  const safeDir = validateTraceDir(dir);
@@ -68,7 +61,7 @@ export function jsonlSink(dir, options = {}) {
68
61
  return {
69
62
  write: async (record, context) => {
70
63
  const at = now();
71
- // Records hold conversation content: readable by the host's user only.
64
+ // why: Records hold conversation content: readable by the host's user only.
72
65
  await mkdir(safeDir, { recursive: true, mode: OWNER_ONLY_DIR });
73
66
  await pruneTraces(safeDir, at, context.retainForDays);
74
67
  const path = await pickFile(safeDir, at, context.rotateAfterMiB * MIB);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Trace sinks, the destination registry, observability policy, the span builder and the trace
2
+ * Trace sinks, the destination registry, observability policy, the span builder, and the trace
3
3
  * catalog. THEOREM owns no database: hosts register destinations or pass a sink into `runTurn`.
4
4
  *
5
5
  * @module
@@ -12,11 +12,11 @@ export { resolveTraceWriter } from './policy.js';
12
12
  export { resolveObservabilityPolicy } from './resolve-policy.js';
13
13
  export { memorySink, noopSink, writeTrace, } from './trace.js';
14
14
  export type { TraceAttributeGroup, TraceAttributeMeta, TraceEventMeta, TraceOptionMeta, TraceSpanMeta, TraceSpanType, TraceValueFormat, } from './trace-catalog.js';
15
- export { TRACE_ATTRIBUTE_GROUPS, TRACE_FIELDS, TRACE_SPAN_TYPES, TRACE_STATUS, traceAttributeMeta, traceEventAttributeMeta, traceEventMeta, traceSpanMeta, } from './trace-catalog.js';
15
+ export { TRACE_ATTRIBUTE_GROUPS, TRACE_FIELDS, TRACE_SPAN_TYPES, TRACE_STATUS, traceAttributeMeta, traceCatalogRows, traceEventAttributeMeta, traceEventMeta, traceSpanMeta, } from './trace-catalog.js';
16
16
  export type { TraceRecord } from './trace-record.js';
17
17
  export { buildRecord, contentOf, inlineContent } from './trace-record.js';
18
18
  export { traceRecordSchema } from './trace-schema.js';
19
19
  export type { TraceSink, TraceWriteContext } from './trace-sink.js';
20
20
  export type { SpanHandle, SpanLinkInput, SpanOptions, TraceAttributes, TraceAttributeValue, TraceBytes, TraceClock, TraceContent, TraceJson, TraceSpan, TraceSpanEvent, TraceSpanKind, TraceSpanLink, TraceSpanStatus, TraceTree, } from './trace-span.js';
21
21
  export { readTraceparent, startTrace, traceBytes, traceContent, traceJson, } from './trace-span.js';
22
- export type { ProfileObservabilitySpec, ResolvedObservabilityPolicy, ResolvedTraceInclude, ResolvedTraceScrub, TraceIncludeSpec, TraceScrubSpec, } from './types.js';
22
+ export type { ProfileObservabilitySpec, ResolvedObservabilityPolicy, ResolvedScrubSwitch, ResolvedTraceInclude, ResolvedTraceScrub, ScrubSwitch, TraceIncludeSpec, TraceScrubSpec, } from './types.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Trace sinks, the destination registry, observability policy, the span builder and the trace
2
+ * Trace sinks, the destination registry, observability policy, the span builder, and the trace
3
3
  * catalog. THEOREM owns no database: hosts register destinations or pass a sink into `runTurn`.
4
4
  *
5
5
  * @module
@@ -10,7 +10,7 @@ export { toOtlpJson } from './otlp.js';
10
10
  export { resolveTraceWriter } from './policy.js';
11
11
  export { resolveObservabilityPolicy } from './resolve-policy.js';
12
12
  export { memorySink, noopSink, writeTrace, } from './trace.js';
13
- export { TRACE_ATTRIBUTE_GROUPS, TRACE_FIELDS, TRACE_SPAN_TYPES, TRACE_STATUS, traceAttributeMeta, traceEventAttributeMeta, traceEventMeta, traceSpanMeta, } from './trace-catalog.js';
13
+ export { TRACE_ATTRIBUTE_GROUPS, TRACE_FIELDS, TRACE_SPAN_TYPES, TRACE_STATUS, traceAttributeMeta, traceCatalogRows, traceEventAttributeMeta, traceEventMeta, traceSpanMeta, } from './trace-catalog.js';
14
14
  export { buildRecord, contentOf, inlineContent } from './trace-record.js';
15
15
  export { traceRecordSchema } from './trace-schema.js';
16
16
  export { readTraceparent, startTrace, traceBytes, traceContent, traceJson, } from './trace-span.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * OpenInference attributes for Phoenix, whose message views, reasoning tokens and cost read only
2
+ * OpenInference attributes for Phoenix, whose message views, reasoning tokens, and cost read only
3
3
  * OpenInference names; they are copied beside the semconv names so `toOtlpJson` stays neutral.
4
4
  *
5
5
  * @module
@@ -1,5 +1,5 @@
1
1
  /**
2
- * OpenInference attributes for Phoenix, whose message views, reasoning tokens and cost read only
2
+ * OpenInference attributes for Phoenix, whose message views, reasoning tokens, and cost read only
3
3
  * OpenInference names; they are copied beside the semconv names so `toOtlpJson` stays neutral.
4
4
  *
5
5
  * @module
@@ -24,7 +24,7 @@ function openInferenceUsage(attributes) {
24
24
  ...(typeof reasoning === 'number'
25
25
  ? { 'llm.token_count.completion_details.reasoning': reasoning }
26
26
  : {}),
27
- // A partial cost would read as the call's total; it keeps only its theorem.* name.
27
+ // why: A partial cost would read as the call's total; it keeps only its theorem.* name.
28
28
  ...(typeof cost === 'number' && attributes['theorem.usage.cost_partial'] !== true
29
29
  ? { 'llm.cost.total': cost }
30
30
  : {}),
@@ -142,7 +142,7 @@ function jsonValue(record, side, value) {
142
142
  }
143
143
  /**
144
144
  * Phoenix derives no kind for an operation semconv does not name, and has no price for Jev, so
145
- * the kind, model, tokens and cost are stated. It has no messages, so Phoenix cannot replay it.
145
+ * the kind, model, tokens, and cost are stated. It has no messages, so Phoenix cannot replay it.
146
146
  */
147
147
  function openInferenceDecision(record, span) {
148
148
  const { attributes } = span;
@@ -1,4 +1,5 @@
1
1
  import { type TraceRecord } from './trace-record.js';
2
+ /** An OTLP/JSON attribute value. */
2
3
  type OtlpAnyValue = {
3
4
  stringValue: string;
4
5
  } | {
@@ -16,10 +17,12 @@ type OtlpAnyValue = {
16
17
  values: OtlpKeyValue[];
17
18
  };
18
19
  };
20
+ /** An OTLP/JSON attribute: a key and its value. */
19
21
  interface OtlpKeyValue {
20
22
  key: string;
21
23
  value: OtlpAnyValue;
22
24
  }
25
+ /** A span as OTLP/JSON carries it. */
23
26
  interface OtlpSpan {
24
27
  traceId: string;
25
28
  spanId: string;
@@ -1,4 +1,4 @@
1
- // OTLP has no record-level slot for `TraceRecord.metadata` (the resource is the service's
1
+ // why: OTLP has no record-level slot for `TraceRecord.metadata` (the resource is the service's
2
2
  // identity), so each key lands on the record's top spans as `theorem.metadata.<key>`.
3
3
  import { inlineContent } from './trace-record.js';
4
4
  const SCOPE_NAME = '@theoremjs/agents';
@@ -12,7 +12,7 @@ function anyValue(value) {
12
12
  return { boolValue: value };
13
13
  }
14
14
  if (typeof value === 'number') {
15
- // int64 is a decimal string in OTLP/JSON.
15
+ // why: int64 is a decimal string in OTLP/JSON.
16
16
  return Number.isInteger(value) ? { intValue: String(value) } : { doubleValue: value };
17
17
  }
18
18
  if (Array.isArray(value)) {
@@ -21,7 +21,7 @@ function anyValue(value) {
21
21
  if (value && typeof value === 'object') {
22
22
  return { kvlistValue: { values: keyValues(value) } };
23
23
  }
24
- // null / undefined: OTLP has no empty value, so the key is left out.
24
+ // why: null / undefined: OTLP has no empty value, so the key is left out.
25
25
  return undefined;
26
26
  }
27
27
  function keyValues(fields) {
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import "../../_dnt.polyfills.js";
8
8
  import { type TraceRecord } from './trace-record.js';
9
+ /** A Phoenix annotation on a judged trial span: its name, whether an LLM judge or a code grader produced it, the result, and metadata. */
9
10
  interface PhoenixSpanAnnotation {
10
11
  /** The judged root span, as OTLP hex. */
11
12
  span_id: string;
@@ -1,3 +1,4 @@
1
+ import type { ProfileGuardrailsSpec } from '../guardrails/types.js';
1
2
  import type { TraceSink } from './trace-sink.js';
2
3
  import type { ProfileObservabilitySpec, ResolvedObservabilityPolicy } from './types.js';
3
4
  /**
@@ -7,6 +8,8 @@ import type { ProfileObservabilitySpec, ResolvedObservabilityPolicy } from './ty
7
8
  declare function resolveTraceWriter(args: {
8
9
  override?: TraceSink;
9
10
  observability?: ProfileObservabilitySpec;
11
+ /** The profile's guardrails: the patterns a host gave its detectors clean the record too. */
12
+ guardrails?: ProfileGuardrailsSpec;
10
13
  }): {
11
14
  sink: TraceSink;
12
15
  policy: ResolvedObservabilityPolicy;
@@ -1,3 +1,4 @@
1
+ import { resolveGuardrailPolicy } from '../guardrails/policy.js';
1
2
  import { requireTraceDestination } from './destinations.js';
2
3
  import { resolveObservabilityPolicy } from './resolve-policy.js';
3
4
  import { noopSink } from './trace.js';
@@ -51,7 +52,10 @@ function sinkFromWriteTo(writeTo, policy) {
51
52
  * override always records, ignoring `sampleRate`, so tests and one-off capture are deterministic.
52
53
  */
53
54
  function resolveTraceWriter(args) {
54
- const policy = resolveObservabilityPolicy(args.observability);
55
+ const policy = {
56
+ ...resolveObservabilityPolicy(args.observability),
57
+ detect: resolveGuardrailPolicy(args.guardrails).detect,
58
+ };
55
59
  if (args.override) {
56
60
  return {
57
61
  policy,
@@ -1,4 +1,4 @@
1
- // Pure, with no sinks or file system, so kernel type consumers never pull the JSONL sink into their
1
+ // why: Pure, with no sinks or file system, so kernel type consumers never pull the JSONL sink into their
2
2
  // graph.
3
3
  import { TheoremError } from '../guardrails/error.js';
4
4
  /** Default record retention in days; `<= 0` keeps records forever. */
@@ -6,7 +6,7 @@ const DEFAULT_RETAIN_DAYS = 14;
6
6
  /** Default JSONL file size, in MiB, before the writer rotates to a new file. */
7
7
  const DEFAULT_ROTATE_MIB = 32;
8
8
  function resolveInclude(spec) {
9
- // No authored block records only through an explicit capture sink (tests,
9
+ // why: No authored block records only through an explicit capture sink (tests,
10
10
  // `runTurn(..., sink)`), which keeps wire and raw evidence. Authored blocks
11
11
  // default those two off.
12
12
  const authored = spec !== undefined;
@@ -19,11 +19,17 @@ function resolveInclude(spec) {
19
19
  guardrailMatchPreview: spec?.include?.guardrailMatchPreview ?? false,
20
20
  };
21
21
  }
22
+ function resolveSwitch(spec) {
23
+ if (spec === undefined || typeof spec === 'boolean')
24
+ return spec ?? true;
25
+ const sides = { theorem: spec.theorem ?? true, host: spec.host ?? true };
26
+ return (sides.theorem || sides.host) && sides;
27
+ }
22
28
  function resolveScrub(spec) {
23
29
  return {
24
- sensitive: spec?.scrub?.sensitive ?? true,
25
- injection: spec?.scrub?.injection ?? true,
26
- canary: spec?.scrub?.canary ?? true,
30
+ sensitive: resolveSwitch(spec?.scrub?.sensitive),
31
+ injection: resolveSwitch(spec?.scrub?.injection),
32
+ canary: resolveSwitch(spec?.scrub?.canary),
27
33
  };
28
34
  }
29
35
  function clampSampleRate(value) {
@@ -1,16 +1,22 @@
1
1
  declare const OMIT_INJECTION = "[omitted - injection]";
2
2
  declare const OMIT_SENSITIVE = "[omitted -sensitive]";
3
- type RedactKind = 'injection' | 'sensitive';
3
+ declare const OMIT_CANARY = "[omitted - canary]";
4
+ type RedactKind = 'injection' | 'sensitive' | 'canary' | 'prompt' | 'image' | 'link' | 'tool' | 'directive' | 'host';
4
5
  interface RedactSpan {
5
6
  start: number;
6
7
  end: number;
7
8
  kind: RedactKind;
9
+ /** The name of the host's pattern that matched; unset for a match of Theorem's own. */
10
+ name?: string;
11
+ /** What about the match makes it one, for a detector that finds more than one thing. */
12
+ signal?: string;
8
13
  }
9
14
  declare function blobAt(match: RegExpMatchArray): {
10
15
  blob: string;
11
16
  index: number;
12
17
  } | undefined;
18
+ declare function mergeSpans(spans: RedactSpan[]): RedactSpan[];
13
19
  declare function applySpans(text: string, spans: RedactSpan[]): string;
14
20
  declare function spansFromPatterns(text: string, patterns: RegExp[], kind: RedactKind): RedactSpan[];
15
21
  export type { RedactKind, RedactSpan };
16
- export { applySpans, blobAt, OMIT_INJECTION, OMIT_SENSITIVE, spansFromPatterns };
22
+ export { applySpans, blobAt, mergeSpans, OMIT_CANARY, OMIT_INJECTION, OMIT_SENSITIVE, spansFromPatterns, };
@@ -1,10 +1,26 @@
1
1
  const OMIT_INJECTION = '[omitted - injection]';
2
2
  const OMIT_SENSITIVE = '[omitted -sensitive]';
3
+ const OMIT_CANARY = '[omitted - canary]';
4
+ const OMIT_PROMPT = '[omitted - instructions]';
5
+ const OMIT_IMAGE = '[omitted - image]';
6
+ const OMIT_LINK = '[omitted - link]';
7
+ const OMIT_TOOL = '[omitted - tool]';
8
+ const OMIT_DIRECTIVE = '[omitted - directive]';
9
+ /** A match of a detector of the host's own: it says nothing of what was there. */
10
+ const OMIT_HOST = '[omitted]';
11
+ const OMIT = {
12
+ injection: OMIT_INJECTION,
13
+ sensitive: OMIT_SENSITIVE,
14
+ canary: OMIT_CANARY,
15
+ prompt: OMIT_PROMPT,
16
+ image: OMIT_IMAGE,
17
+ link: OMIT_LINK,
18
+ tool: OMIT_TOOL,
19
+ directive: OMIT_DIRECTIVE,
20
+ host: OMIT_HOST,
21
+ };
3
22
  function tokenFor(kind) {
4
- if (kind === 'injection') {
5
- return OMIT_INJECTION;
6
- }
7
- return OMIT_SENSITIVE;
23
+ return OMIT[kind];
8
24
  }
9
25
  function blobAt(match) {
10
26
  const [blob] = match;
@@ -53,4 +69,4 @@ function spansFromPatterns(text, patterns, kind) {
53
69
  }
54
70
  return spans;
55
71
  }
56
- export { applySpans, blobAt, OMIT_INJECTION, OMIT_SENSITIVE, spansFromPatterns };
72
+ export { applySpans, blobAt, mergeSpans, OMIT_CANARY, OMIT_INJECTION, OMIT_SENSITIVE, spansFromPatterns, };
@@ -15,11 +15,14 @@ type TraceValueFormat = 'text'
15
15
  | 'parts'
16
16
  /** A unix-nanosecond timestamp string. */
17
17
  | 'time';
18
+ /** The groups the attribute catalog sorts attributes into. */
18
19
  type TraceAttributeGroup = 'agent' | 'request' | 'response' | 'messages' | 'usage' | 'tool' | 'http' | 'error' | 'record' | 'part' | 'decision' | 'evaluation';
20
+ /** A label and description for one option in a catalog. */
19
21
  interface TraceOptionMeta {
20
22
  label: string;
21
23
  doc: string;
22
24
  }
25
+ /** What the catalog says about a span attribute: its label, description, and format. */
23
26
  interface TraceAttributeMeta {
24
27
  label: string;
25
28
  doc: string;
@@ -31,6 +34,7 @@ interface TraceAttributeMeta {
31
34
  /** For an `object`: what its keys mean (for a list of objects, each item's keys). */
32
35
  fields?: Readonly<Record<string, TraceAttributeMeta>>;
33
36
  }
37
+ /** What the catalog says about a span event: its label, description, and keys. */
34
38
  interface TraceEventMeta {
35
39
  label: string;
36
40
  doc: string;
@@ -39,14 +43,16 @@ interface TraceEventMeta {
39
43
  }
40
44
  /** The kinds of span THEOREM writes, plus `host` for a span the host recorded itself. */
41
45
  type TraceSpanType = 'turn' | 'session' | 'call' | 'response' | 'tool' | 'http' | 'cutout' | 'decision' | 'evaluation' | 'host';
42
- /** `subject` is the thing the span acted on (the model, tool or agent), when it names one. */
46
+ /** `subject` is the thing the span acted on (the model, tool, or agent), when it names one. */
43
47
  interface TraceSpanMeta {
44
48
  type: TraceSpanType;
45
49
  label: string;
46
50
  doc: string;
47
51
  subject?: string;
48
52
  }
53
+ /** Labels and descriptions for each attribute group. */
49
54
  declare const TRACE_ATTRIBUTE_GROUPS: Readonly<Record<TraceAttributeGroup, TraceOptionMeta>>;
55
+ /** Labels and descriptions for each span status. */
50
56
  declare const TRACE_STATUS: Readonly<Record<TraceSpan['status']['code'], TraceOptionMeta>>;
51
57
  /** A record's and a span's own fields, beside their attributes. */
52
58
  declare const TRACE_FIELDS: {
@@ -105,7 +111,18 @@ declare function traceAttributeMeta(key: string): TraceAttributeMeta | undefined
105
111
  declare function traceEventMeta(name: string): TraceEventMeta | undefined;
106
112
  /** The event's own entry, else the span attribute of that key. */
107
113
  declare function traceEventAttributeMeta(event: string, key: string): TraceAttributeMeta | undefined;
114
+ /** Labels and descriptions for each span type. */
108
115
  declare const TRACE_SPAN_TYPES: Readonly<Record<TraceSpanType, TraceOptionMeta>>;
116
+ /**
117
+ * Every trace field and span type, named by the record they belong to: `trace.resource`, and a
118
+ * span type by the field it fills, `trace.type.turn`.
119
+ */
120
+ declare function traceCatalogRows(): readonly {
121
+ name: string;
122
+ label: string;
123
+ doc: string;
124
+ }[];
125
+ /** The label, subject, and description to show for a span. */
109
126
  declare function traceSpanMeta(span: TraceSpan): TraceSpanMeta;
110
127
  export type { TraceAttributeGroup, TraceAttributeMeta, TraceEventMeta, TraceOptionMeta, TraceSpanMeta, TraceSpanType, TraceValueFormat, };
111
- export { TRACE_ATTRIBUTE_GROUPS, TRACE_FIELDS, TRACE_SPAN_TYPES, TRACE_STATUS, traceAttributeMeta, traceEventAttributeMeta, traceEventMeta, traceSpanMeta, };
128
+ export { TRACE_ATTRIBUTE_GROUPS, TRACE_FIELDS, TRACE_SPAN_TYPES, TRACE_STATUS, traceAttributeMeta, traceCatalogRows, traceEventAttributeMeta, traceEventMeta, traceSpanMeta, };