@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,625 @@
1
+ import { canaryNote, contextNote, profileCanary, userDataNote, } from '../../../guardrails/canary.js';
2
+ import { isAbortError, TheoremError, throwIfAborted, withPublicLabels, } from '../../../guardrails/error.js';
3
+ import { projectGuardrailTurnEvent } from '../../../guardrails/events.js';
4
+ import { labelText } from '../../../guardrails/labels.js';
5
+ import { sanitizeTurnRequestWithEvents } from '../../../guardrails/sanitize.js';
6
+ import { resolveTraceWriter } from '../../../observability/policy.js';
7
+ import { resolveObservabilityPolicy } from '../../../observability/resolve-policy.js';
8
+ import { writeTrace } from '../../../observability/trace.js';
9
+ import { buildRecord } from '../../../observability/trace-record.js';
10
+ import { startTrace, traceContent, } from '../../../observability/trace-span.js';
11
+ import { profileTypesForField } from '../../profile-scope.js';
12
+ import { hostAgentModel, nestedTurnModel } from '../../provider-dispatch.js';
13
+ import { profileInputs, requireModelBinding } from '../../registry/catalog.js';
14
+ import { resolveTurnInRegistry } from '../../registry/resolve.js';
15
+ import { bindSystem } from '../../system-parts.js';
16
+ import { cloneTurnToolSnapshot, expandT1Policy } from '../../tools/resolve.js';
17
+ import { keptReply, turnDoneOf } from '../../turn-events.js';
18
+ import { findLast } from '../../util/find-last.js';
19
+ import { compactionMeter, compactionResult, compactorHistory, resolveCompactionTokens, shouldCompact, splitForCompaction, } from '../compaction.js';
20
+ import { endThrownSpan, endTurnSpan, guardrailAttributes, guardrailCheckAttributes, OutputFold, turnSpanOptions, } from '../turn-trace.js';
21
+ import { sumEventTokens, sumTurnTokens } from '../usage.js';
22
+ import { runAttemptsWithValidation } from './gates.js';
23
+ import { createAgentCaller, NESTED_THROWS, turnError } from './nested.js';
24
+ import { applyTurnStage } from './stages.js';
25
+ import { openTurnState } from './state.js';
26
+ import { shouldSkipStreamEvent } from './stream.js';
27
+ function projectForObs(event, policy) {
28
+ return projectGuardrailTurnEvent(event, policy?.include.guardrailMatchPreview ?? false);
29
+ }
30
+ const MS_PER_S = 1000;
31
+ /**
32
+ * Record an event as delivered to the host; every yield to the host passes
33
+ * through here, so it is where an error gets the user's wording.
34
+ */
35
+ function deliver(ctx, event) {
36
+ const out = withPublicLabels(event, ctx.known?.labels);
37
+ if ((out.type === 'text' || out.type === 'structured_draft') && !ctx.shownText) {
38
+ ctx.shownText = true;
39
+ ctx.root.set({ 'theorem.turn.time_to_first_text': ctx.root.msSinceStart() / MS_PER_S });
40
+ }
41
+ ctx.seen.push(out);
42
+ ctx.delivered.add(out, ctx.root.nowUnixNano());
43
+ return out;
44
+ }
45
+ function* emitObservedStage(ctx, stageEv, profile) {
46
+ const stageOut = projectForObs(stageEv, ctx.observability);
47
+ if (shouldSkipStreamEvent(stageOut, profile))
48
+ return;
49
+ yield deliver(ctx, stageOut);
50
+ }
51
+ function getCompactionSpec(profile, modelId) {
52
+ return profile.models[modelId]?.compaction;
53
+ }
54
+ /** A turn's tools when it offers none: an agent summarising its own history. */
55
+ function noTools() {
56
+ return { builtins: [], gated: [], visible: [], executable: [], wire: [] };
57
+ }
58
+ /**
59
+ * Run `req` as a turn under `parent`: its spans join that record, it writes
60
+ * none of its own, and it shares the record's canaries. A compactor's turn and
61
+ * an agent tool's call both run here.
62
+ */
63
+ function runNestedTurn(args) {
64
+ const ctx = newTraceCtx(args.registry, args.req, args.parent.child(`invoke_agent ${args.req.profile}`, turnSpanOptions(args.req)), args.canaries);
65
+ ctx.agentDepth = args.agentDepth;
66
+ if (args.compacting)
67
+ ctx.compacting = args.compacting;
68
+ ctx.observability = resolveObservabilityPolicy(ctx.known?.observability);
69
+ return runTracedTurn(ctx, nestedTurnModel(args.provider, args.req.profile, args.req.model, args.req));
70
+ }
71
+ /**
72
+ * Run the compaction profile as a turn under `span`: its spans join that
73
+ * record and it writes none of its own. Anything short of a completed,
74
+ * non-empty summary is a failure; the host's abort and `NESTED_THROWS`
75
+ * errors are thrown. With no `spec.profile` the owner compacts itself, on the
76
+ * model it is compacting for and with no tools.
77
+ */
78
+ async function runCompactor(args) {
79
+ const self = args.spec.profile === undefined;
80
+ const compactorId = args.spec.profile ?? args.owner;
81
+ const compactor = args.registry.profiles.get(compactorId);
82
+ const { history, droppedMedia } = compactorHistory(args.toCompact, compactor);
83
+ if (history.length === 0)
84
+ return { droppedMedia, failure: { unreadable: true } };
85
+ const req = {
86
+ profile: compactorId,
87
+ // why: The turn already passed model selection; its default needs no naming.
88
+ ...(self && args.model !== compactor.defaultModel ? { model: args.model } : {}),
89
+ input: { text: labelText('compaction.request', {}, compactor.labels), history },
90
+ signal: args.signal,
91
+ };
92
+ const events = [];
93
+ try {
94
+ for await (const event of runNestedTurn({
95
+ registry: args.registry,
96
+ req,
97
+ provider: args.provider,
98
+ parent: args.parent,
99
+ canaries: args.canaries,
100
+ agentDepth: 0,
101
+ compacting: self ? 'self' : 'other',
102
+ })) {
103
+ events.push(event);
104
+ }
105
+ }
106
+ catch (err) {
107
+ throwIfAborted(args.signal);
108
+ const error = err instanceof TheoremError ? err.kind : 'internal';
109
+ if (NESTED_THROWS.has(error))
110
+ throw err;
111
+ return { droppedMedia, failure: { error } };
112
+ }
113
+ throwIfAborted(args.signal);
114
+ const tokens = sumEventTokens(events);
115
+ const usage = tokens ? { tokens } : {};
116
+ const stop = findLast(events, (e) => e.type === 'done')?.stop.kind;
117
+ const reported = turnError(events);
118
+ if (reported && NESTED_THROWS.has(reported.errorKind)) {
119
+ throw new TheoremError(reported.errorKind, `Compactor '${compactorId}' failed: ${reported.errorInternal ?? reported.error}`);
120
+ }
121
+ const error = reported?.errorKind;
122
+ if (stop !== 'completed' || error) {
123
+ return {
124
+ droppedMedia,
125
+ failure: { ...(stop ? { stop } : {}), ...(error ? { error } : {}) },
126
+ ...usage,
127
+ };
128
+ }
129
+ const reply = keptReply(events);
130
+ const structured = findLast(reply, (e) => e.type === 'structured')?.structured;
131
+ const summary = structured === undefined
132
+ ? reply.flatMap((e) => (e.type === 'text' ? [e.text] : [])).join('')
133
+ : JSON.stringify(structured);
134
+ if (!summary.trim()) {
135
+ return { droppedMedia, failure: { stop, empty: true }, ...usage };
136
+ }
137
+ return { summary, droppedMedia, ...usage };
138
+ }
139
+ function lastTokensFromEvents(events) {
140
+ return findLast(events, (e) => e.type === 'tokens')?.tokens;
141
+ }
142
+ /**
143
+ * One compaction decision as `theorem.compaction` attributes. The metered count
144
+ * is absent when it is unknown (meter `input` with no count to read).
145
+ */
146
+ function compactionDecision(spec, decision, needed) {
147
+ return {
148
+ timing: spec.timing,
149
+ meter: compactionMeter(spec),
150
+ budget: spec.maxTokens,
151
+ threshold: spec.compactAt,
152
+ ...(spec.trigger ? { trigger: 'custom' } : {}),
153
+ ...(decision ? { tokens_before: decision.tokens, unknown_media: decision.unknownMedia } : {}),
154
+ needed,
155
+ };
156
+ }
157
+ /** A compaction that ran, as `theorem.compaction` attributes beside its decision. */
158
+ function compactionOutcome(result, messagesBefore) {
159
+ return {
160
+ outcome: result.outcome,
161
+ messages_before: messagesBefore,
162
+ messages_after: result.history.length,
163
+ dropped_media: result.droppedMedia,
164
+ ...(result.failure?.stop ? { failure_stop: result.failure.stop } : {}),
165
+ ...(result.failure?.error ? { failure_error: result.failure.error } : {}),
166
+ ...(result.failure?.empty ? { failure_empty: true } : {}),
167
+ ...(result.failure?.unreadable ? { failure_unreadable: true } : {}),
168
+ ...(result.summary === undefined ? {} : { summary: traceContent(result.summary) }),
169
+ };
170
+ }
171
+ async function compactHistoryBeforeTurn(args) {
172
+ const decision = await resolveCompactionTokens({
173
+ spec: args.spec,
174
+ input: args.input,
175
+ });
176
+ const needed = decision !== undefined && (await shouldCompact(decision, args.spec));
177
+ const attributes = compactionDecision(args.spec, decision, needed);
178
+ if (!(needed && decision)) {
179
+ args.parent.event('theorem.compaction', attributes);
180
+ return undefined;
181
+ }
182
+ const split = await splitForCompaction(args.history, args.spec);
183
+ if (split.toCompact.length === 0) {
184
+ args.parent.event('theorem.compaction', attributes);
185
+ return undefined;
186
+ }
187
+ const run = await runCompactor({ ...args, toCompact: split.toCompact });
188
+ const { toCompact: _compacted, ...result } = compactionResult(split, run, decision.tokens, args.spec);
189
+ args.parent.event('theorem.compaction', {
190
+ ...attributes,
191
+ ...compactionOutcome(result, args.history.length),
192
+ });
193
+ return {
194
+ type: 'compaction',
195
+ timing: 'before',
196
+ meter: decision.meter,
197
+ tokensBefore: decision.tokens,
198
+ unknownMedia: decision.unknownMedia,
199
+ messagesBefore: args.history.length,
200
+ messagesAfter: result.history.length,
201
+ ...result,
202
+ };
203
+ }
204
+ async function attachAfterCompaction(event, args) {
205
+ if (args.history.length === 0)
206
+ return event;
207
+ const prompt = lastTokensFromEvents(args.seen);
208
+ const decision = await resolveCompactionTokens({
209
+ spec: args.spec,
210
+ input: args.input,
211
+ prompt,
212
+ });
213
+ const needed = decision !== undefined && (await shouldCompact(decision, args.spec));
214
+ args.span.event('theorem.compaction', compactionDecision(args.spec, decision, needed));
215
+ if (!(needed && decision))
216
+ return event;
217
+ const signal = {
218
+ needed: true,
219
+ meter: decision.meter,
220
+ tokens: decision.tokens,
221
+ unknownMedia: decision.unknownMedia,
222
+ history: args.history,
223
+ };
224
+ if (prompt && prompt.input > 0) {
225
+ signal.promptTokens = prompt.input;
226
+ if (prompt.estimated?.includes('input'))
227
+ signal.promptTokensEstimated = true;
228
+ }
229
+ return { ...event, compaction: signal };
230
+ }
231
+ async function* emitTurn(args) {
232
+ const { safe, profile, generation, system, provider } = args;
233
+ const state = openTurnState({
234
+ tools: args.registry.tools,
235
+ profile,
236
+ generation,
237
+ trace: args.trace,
238
+ ...(args.agents ? { agents: args.agents } : {}),
239
+ });
240
+ args.outState.state = state;
241
+ const pre = yield* applyTurnStage({
242
+ profile,
243
+ generation,
244
+ state,
245
+ stage: 'pre_turn',
246
+ step: 1,
247
+ onStage: safe.onStage,
248
+ signal: safe.signal,
249
+ host: generation.host,
250
+ });
251
+ if (pre.abort) {
252
+ const stop = {
253
+ kind: 'cancelled',
254
+ ...(typeof pre.abort === 'object' && pre.abort.reason ? { native: pre.abort.reason } : {}),
255
+ };
256
+ const done = { type: 'done', stop, traceparent: state.trace.root.traceparent() };
257
+ state.allEmittedEvents.push(done);
258
+ yield done;
259
+ yield* applyTurnStage({
260
+ profile,
261
+ generation,
262
+ state,
263
+ stage: 'post_turn',
264
+ step: 1,
265
+ onStage: safe.onStage,
266
+ signal: safe.signal,
267
+ stop,
268
+ host: generation.host,
269
+ });
270
+ return;
271
+ }
272
+ yield* runAttemptsWithValidation(safe, profile, generation, system, provider, state);
273
+ const tokens = sumTurnTokens(state.allEmittedEvents);
274
+ const done = turnDoneOf({
275
+ stop: state.lastStop ?? { kind: 'completed' },
276
+ ...(state.providerState &&
277
+ !('providerContinuation' in profile && profile.providerContinuation?.history === 'stateless') &&
278
+ (!state.lastStop || ['completed', 'tool', 'gate'].includes(state.lastStop.kind))
279
+ ? { providerState: state.providerState }
280
+ : {}),
281
+ traceparent: state.trace.root.traceparent(),
282
+ ...(tokens ? { tokens } : {}),
283
+ }, cloneTurnToolSnapshot(generation.tools));
284
+ state.allEmittedEvents.push(done);
285
+ yield done;
286
+ }
287
+ async function* streamTurnEvents(ctx, profile, gen, provider, compactionSpec) {
288
+ if (!ctx.safe || ctx.system === undefined || !ctx.trace)
289
+ return;
290
+ for await (const event of emitTurn({
291
+ registry: ctx.registry,
292
+ safe: ctx.safe,
293
+ profile,
294
+ generation: gen,
295
+ system: ctx.system,
296
+ provider,
297
+ trace: ctx.trace,
298
+ agents: ctx.agents,
299
+ outState: ctx,
300
+ })) {
301
+ const attached = await maybeAttachAfter(event, ctx, gen, compactionSpec);
302
+ const out = projectForObs(attached, ctx.observability);
303
+ if (!shouldSkipStreamEvent(out, profile))
304
+ yield deliver(ctx, out);
305
+ if (out.type === 'done' && ctx.state) {
306
+ // why: Skip duplicate post_turn when pre_turn abort already emitted it inside emitTurn.
307
+ const alreadyPost = ctx.state.allEmittedEvents.some((e) => e.type === 'stage' && e.stage === 'post_turn');
308
+ if (!alreadyPost) {
309
+ for await (const stageEv of applyTurnStage({
310
+ profile,
311
+ generation: gen,
312
+ state: ctx.state,
313
+ stage: 'post_turn',
314
+ step: Math.max(ctx.state.stepCount, 1),
315
+ onStage: ctx.safe.onStage,
316
+ signal: ctx.safe.signal,
317
+ stop: out.stop,
318
+ host: gen.host,
319
+ })) {
320
+ yield* emitObservedStage(ctx, stageEv, profile);
321
+ }
322
+ }
323
+ }
324
+ }
325
+ }
326
+ function newTraceCtx(registry, req, root, canaries) {
327
+ return {
328
+ registry,
329
+ req,
330
+ known: registry.profiles.find(req.profile),
331
+ seen: [],
332
+ delivered: new OutputFold(),
333
+ root,
334
+ compacting: false,
335
+ agentDepth: 0,
336
+ canary: '',
337
+ canaries,
338
+ };
339
+ }
340
+ function endTurn(ctx, thrown) {
341
+ const calls = ctx.trace?.calls ?? 0;
342
+ endTurnSpan(ctx.root, {
343
+ seen: ctx.seen,
344
+ delivered: ctx.delivered,
345
+ attempts: calls > 0 ? (ctx.trace?.attempt ?? 0) + 1 : 0,
346
+ calls,
347
+ ...(thrown === undefined ? {} : { thrown }),
348
+ });
349
+ }
350
+ /** Run a turn under `ctx.root` and close it; an abort ends as a cancelled `done`. */
351
+ async function* runTracedTurn(ctx, provider) {
352
+ try {
353
+ yield* runTurnBody(ctx, provider);
354
+ }
355
+ catch (err) {
356
+ if (isAbortError(err)) {
357
+ yield* emitCancelledDoneAfterAbort(ctx);
358
+ endTurn(ctx);
359
+ return;
360
+ }
361
+ endTurn(ctx, err);
362
+ throw err;
363
+ }
364
+ endTurn(ctx);
365
+ }
366
+ /**
367
+ * The trace record is written however the turn ends, including when the host stops reading early;
368
+ * spans still open then close as `ERROR` / `unclosed`.
369
+ */
370
+ async function* runTurnInRegistry(registry, req, provider, sinkOverride) {
371
+ const tree = startTrace(`invoke_agent ${req.profile}`, {
372
+ ...turnSpanOptions(req),
373
+ ...(req.traceparent ? { traceparent: req.traceparent } : {}),
374
+ });
375
+ const ctx = newTraceCtx(registry, req, tree.root, []);
376
+ const { sink, policy } = resolveTraceWriter({
377
+ override: sinkOverride,
378
+ observability: ctx.known?.observability,
379
+ guardrails: ctx.known?.guardrails,
380
+ });
381
+ ctx.observability = policy;
382
+ try {
383
+ yield* runTracedTurn(ctx, provider);
384
+ }
385
+ finally {
386
+ await writeTrace(sink, buildRecord({
387
+ spans: tree.collect(),
388
+ policy,
389
+ canaries: ctx.canaries,
390
+ ...(req.metadata ? { metadata: req.metadata } : {}),
391
+ }), policy);
392
+ }
393
+ }
394
+ /** A host abort ends with a cancelled `done` + `post_turn`, not a bare throw. */
395
+ async function* emitCancelledDoneAfterAbort(ctx) {
396
+ if (ctx.seen.some((e) => e.type === 'done'))
397
+ return;
398
+ const stop = { kind: 'cancelled' };
399
+ const done = { type: 'done', stop, traceparent: ctx.root.traceparent() };
400
+ const outDone = projectForObs(done, ctx.observability);
401
+ yield deliver(ctx, outDone);
402
+ const profile = ctx.known;
403
+ const gen = ctx.generation;
404
+ if (!(profile && gen && ctx.safe && ctx.trace))
405
+ return;
406
+ // why: The turn's own state when it got that far, so post_turn sees the history the model saw.
407
+ const state = ctx.state ??
408
+ openTurnState({
409
+ tools: ctx.registry.tools,
410
+ profile,
411
+ generation: gen,
412
+ trace: ctx.trace,
413
+ allEmittedEvents: [...ctx.seen],
414
+ });
415
+ for await (const stageEv of applyTurnStage({
416
+ profile,
417
+ generation: gen,
418
+ state,
419
+ stage: 'post_turn',
420
+ step: Math.max(state.stepCount, 1),
421
+ onStage: ctx.safe.onStage,
422
+ stop,
423
+ host: gen.host,
424
+ })) {
425
+ yield* emitObservedStage(ctx, stageEv, profile);
426
+ }
427
+ }
428
+ async function* runTurnBody(ctx, provider) {
429
+ const checkStart = performance.now();
430
+ const sanitized = sanitizeTurnRequestWithEvents(ctx.req, ctx.registry.profiles.get(ctx.req.profile));
431
+ const checkMs = performance.now() - checkStart;
432
+ ctx.safe = sanitized.request;
433
+ const hits = sanitized.events.filter((event) => event.type === 'guardrail');
434
+ // why: The check's time rides on its last decision, or on a pass when it found nothing.
435
+ if (hits.length === 0) {
436
+ ctx.root.event('theorem.guardrail', guardrailCheckAttributes('input', checkMs, undefined, { stage: 'input', trust: 'untrusted' }));
437
+ }
438
+ for (const event of sanitized.events) {
439
+ if (event.type === 'guardrail') {
440
+ ctx.root.event('theorem.guardrail', event === hits.at(-1)
441
+ ? guardrailCheckAttributes('input', checkMs, event.guardrail, event.guardrail)
442
+ : guardrailAttributes(event.guardrail));
443
+ }
444
+ yield deliver(ctx, projectForObs(event, ctx.observability));
445
+ }
446
+ if (sanitized.refusal)
447
+ throw sanitized.refusal;
448
+ const { profile, generation: gen } = resolveTurnInRegistry(ctx.registry, ctx.safe);
449
+ await expandT1Policy(ctx.registry.tools, gen.tools, profile, ctx.safe);
450
+ if (ctx.compacting === 'self')
451
+ gen.tools = noTools();
452
+ gen.builtins = gen.tools.builtins;
453
+ if (gen.canary)
454
+ gen.canary = await profileCanary(profile.id, gen.resolvedSystem);
455
+ ctx.generation = gen;
456
+ ctx.canary = gen.canary;
457
+ ctx.canaries.push(gen.canary);
458
+ const binding = profile.models[gen.model];
459
+ ctx.trace = { root: ctx.root, attempt: 0, calls: 0, binding };
460
+ if (!ctx.compacting)
461
+ ctx.agents = agentCallerFor(ctx, provider, binding);
462
+ throwIfAborted(ctx.safe.signal);
463
+ const compactionSpec = ctx.compacting ? undefined : getCompactionSpec(profile, gen.model);
464
+ const compaction = await maybeCompactBefore(ctx, profile, gen, compactionSpec, provider);
465
+ if (compaction)
466
+ yield deliver(ctx, projectForObs(compaction, ctx.observability));
467
+ ctx.system = bindSystem(gen.resolvedSystem, [
468
+ canaryNote(ctx.canary, profile.labels),
469
+ profileTypesForField('identity.system').includes(profile.type)
470
+ ? userDataNote(profile.labels)
471
+ : '',
472
+ profileInputs(profile)?.context ? contextNote(profile.labels) : '',
473
+ ]);
474
+ yield* streamTurnEvents(ctx, profile, gen, provider, compactionSpec);
475
+ }
476
+ /** The turn's agent tool calls: each runs nested under its tool's span, in this record. */
477
+ function agentCallerFor(ctx, provider, own) {
478
+ return createAgentCaller({
479
+ registry: ctx.registry,
480
+ req: ctx.safe ?? ctx.req,
481
+ provider,
482
+ own,
483
+ depth: ctx.agentDepth,
484
+ runNested: (nested) => runNestedTurn({ ...nested, registry: ctx.registry, canaries: ctx.canaries }),
485
+ });
486
+ }
487
+ /**
488
+ * A host's own call's agent tools: the host's provider, or the one `onAgentCall`
489
+ * returns, runs each. Its nested turns bind their canaries into `canaries`.
490
+ */
491
+ function invokeAgentCaller(registry, request, canaries) {
492
+ return createAgentCaller({
493
+ registry,
494
+ req: request,
495
+ provider: request.provider ? hostAgentModel(registry, request.provider) : undefined,
496
+ own: undefined,
497
+ depth: 0,
498
+ runNested: (nested) => runNestedTurn({ ...nested, registry, canaries }),
499
+ });
500
+ }
501
+ /**
502
+ * A live session's agent tools: the session's own provider options, or those
503
+ * `onAgentCall` returns, run each. Its nested turns bind their canaries into
504
+ * `canaries`.
505
+ */
506
+ function sessionAgentCaller(registry, req, options, canaries) {
507
+ return createAgentCaller({
508
+ registry,
509
+ req: { ...req, execution: options.execution },
510
+ provider: hostAgentModel(registry, options),
511
+ own: undefined,
512
+ depth: 0,
513
+ runNested: (nested) => runNestedTurn({ ...nested, registry, canaries }),
514
+ });
515
+ }
516
+ /**
517
+ * The turn's provider runs the compactor only when it is the one the compactor
518
+ * would get: a text profile on the same protocol and provider.
519
+ */
520
+ function compactorProvider(ctx, profile, spec, provider) {
521
+ return nestedTurnModel(provider, spec.profile ?? profile.id, spec.profile ? undefined : ctx.req.model);
522
+ }
523
+ async function maybeCompactBefore(ctx, profile, gen, compactionSpec, provider) {
524
+ if (!(compactionSpec?.timing === 'before' && ctx.safe))
525
+ return undefined;
526
+ const compactor = compactorProvider(ctx, profile, compactionSpec, provider);
527
+ if (!gen.history?.length)
528
+ return undefined;
529
+ const compaction = await compactHistoryBeforeTurn({
530
+ registry: ctx.registry,
531
+ owner: profile.id,
532
+ model: gen.model,
533
+ spec: compactionSpec,
534
+ history: gen.history,
535
+ input: ctx.safe.input,
536
+ provider: compactor,
537
+ parent: ctx.root,
538
+ canaries: ctx.canaries,
539
+ signal: ctx.safe.signal,
540
+ });
541
+ if (compaction)
542
+ gen.history = compaction.history;
543
+ return compaction;
544
+ }
545
+ async function maybeAttachAfter(event, ctx, gen, compactionSpec) {
546
+ if (!(event.type === 'done' && compactionSpec?.timing === 'after' && ctx.safe)) {
547
+ return event;
548
+ }
549
+ return await attachAfterCompaction(event, {
550
+ spec: compactionSpec,
551
+ history: gen.history ?? [],
552
+ input: ctx.safe.input,
553
+ seen: ctx.seen,
554
+ span: ctx.root,
555
+ });
556
+ }
557
+ /**
558
+ * `timing: 'after'`: run the compactor on the history `done.compaction` carried,
559
+ * with the same split, failure rules, and trace as `before`. `provider` runs the
560
+ * compactor. `undefined` when the split leaves nothing to compact.
561
+ */
562
+ async function compactHistoryInRegistry(registry, req, provider, sinkOverride) {
563
+ const profile = registry.profiles.get(req.profile);
564
+ const model = req.model ?? profile.defaultModel;
565
+ const binding = requireModelBinding(profile, model);
566
+ const spec = binding.compaction;
567
+ if (!spec) {
568
+ throw new TheoremError('config', `Profile ${profile.id} model '${model}' has no compaction`);
569
+ }
570
+ const split = await splitForCompaction(req.history, spec);
571
+ if (split.toCompact.length === 0)
572
+ return undefined;
573
+ const turnReq = {
574
+ profile: req.profile,
575
+ input: {},
576
+ ...(req.conversationId ? { conversationId: req.conversationId } : {}),
577
+ };
578
+ const tree = startTrace(`invoke_agent ${req.profile}`, {
579
+ ...turnSpanOptions(turnReq),
580
+ ...(req.traceparent ? { traceparent: req.traceparent } : {}),
581
+ });
582
+ const { sink, policy } = resolveTraceWriter({
583
+ override: sinkOverride,
584
+ observability: profile.observability,
585
+ guardrails: profile.guardrails,
586
+ });
587
+ const canaries = [];
588
+ try {
589
+ const run = await runCompactor({
590
+ registry,
591
+ owner: profile.id,
592
+ model,
593
+ toCompact: split.toCompact,
594
+ spec,
595
+ provider,
596
+ parent: tree.root,
597
+ canaries,
598
+ ...(req.signal ? { signal: req.signal } : {}),
599
+ });
600
+ const result = compactionResult(split, run, req.tokens, spec);
601
+ tree.root.event('theorem.compaction', {
602
+ timing: spec.timing,
603
+ meter: compactionMeter(spec),
604
+ budget: spec.maxTokens,
605
+ threshold: spec.compactAt,
606
+ tokens_before: req.tokens,
607
+ ...compactionOutcome(result, req.history.length),
608
+ });
609
+ tree.root.end();
610
+ return result;
611
+ }
612
+ catch (err) {
613
+ endThrownSpan(tree.root, err);
614
+ throw err;
615
+ }
616
+ finally {
617
+ await writeTrace(sink, buildRecord({
618
+ spans: tree.collect(),
619
+ policy,
620
+ canaries,
621
+ ...(req.metadata ? { metadata: req.metadata } : {}),
622
+ }), policy);
623
+ }
624
+ }
625
+ export { compactHistoryInRegistry, invokeAgentCaller, runTurnInRegistry, sessionAgentCaller };
@@ -0,0 +1,32 @@
1
+ import type { ErrorKind } from '../../../guardrails/error.js';
2
+ import type { SpanHandle } from '../../../observability/trace-span.js';
3
+ import type { KernelRegistry } from '../../registry/kernel-registry.js';
4
+ import { type AgentCaller } from '../../tools/agent.js';
5
+ import type { ModelBinding, TurnEvent, TurnEventOf, TurnModel, TurnRequest } from '../../types.js';
6
+ /** Errors only the host can fix: a nested turn throws them rather than failing quietly every call. */
7
+ declare const NESTED_THROWS: ReadonlySet<ErrorKind>;
8
+ declare function turnError(events: readonly TurnEvent[]): TurnEventOf<'error'> | undefined;
9
+ /** Runs one turn of a profile under a parent span, sharing the parent's record and canaries. */
10
+ type RunNestedTurn = (args: {
11
+ req: TurnRequest;
12
+ provider: TurnModel;
13
+ parent: SpanHandle;
14
+ agentDepth: number;
15
+ }) => AsyncGenerator<TurnEvent>;
16
+ /**
17
+ * Agent tool calls for one turn. `own` is the turn's model binding: its
18
+ * provider runs a called agent on the same provider and protocol, and the
19
+ * host's hook supplies any other. Without `own` (an invoke) the provider is
20
+ * the host's own choice and runs as given.
21
+ */
22
+ declare function createAgentCaller(args: {
23
+ registry: KernelRegistry;
24
+ req: Pick<TurnRequest, 'onAgentCall' | 'metadata' | 'execution' | 'pageExecution'>;
25
+ provider: TurnModel | undefined;
26
+ own: ModelBinding | undefined;
27
+ /** 0 for the host's own turn or invoke. */
28
+ depth: number;
29
+ runNested: RunNestedTurn;
30
+ }): AgentCaller;
31
+ export type { RunNestedTurn };
32
+ export { createAgentCaller, NESTED_THROWS, turnError };