@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,134 @@
1
+ import { errorCopyText, isAbortError, TheoremError, throwIfAborted, toErrorEvent, } from '../../../guardrails/error.js';
2
+ import { labelText } from '../../../guardrails/labels.js';
3
+ import { nestedTurnModel, resolveRegisteredTurnModel } from '../../provider-dispatch.js';
4
+ import { agentProfileProblem, agentToolOutputOf, splitHostInput, } from '../../tools/agent.js';
5
+ import { findLast } from '../../util/find-last.js';
6
+ import { sumEventTokens } from '../usage.js';
7
+ /** Errors only the host can fix: a nested turn throws them rather than failing quietly every call. */
8
+ const NESTED_THROWS = new Set(['config', 'request', 'auth', 'internal']);
9
+ function turnError(events) {
10
+ return events.find((e) => e.type === 'error');
11
+ }
12
+ /**
13
+ * Agent tool calls for one turn. `own` is the turn's model binding: its
14
+ * provider runs a called agent on the same provider and protocol, and the
15
+ * host's hook supplies any other. Without `own` (an invoke) the provider is
16
+ * the host's own choice and runs as given.
17
+ */
18
+ function createAgentCaller(args) {
19
+ const calls = new Map();
20
+ const { registry, req } = args;
21
+ return {
22
+ async *run({ tool, callId, input, caller, span, signal }) {
23
+ const labels = caller.labels;
24
+ const settled = (code, kind, message) => ({
25
+ failure: { code, kind, message },
26
+ });
27
+ const made = calls.get(tool.name) ?? 0;
28
+ if (tool.maxCallsPerTurn !== undefined && made >= tool.maxCallsPerTurn) {
29
+ return settled('call_limit', 'declined', labelText('tool.agent_call_limit', { tool: tool.name }, labels));
30
+ }
31
+ calls.set(tool.name, made + 1);
32
+ const profile = registry.profiles.get(tool.profile);
33
+ const problem = agentProfileProblem(profile, (name) => registry.tools.get(name));
34
+ if (problem) {
35
+ throw new TheoremError('config', `Agent tool "${tool.name}" can't run '${tool.profile}': ${problem}`);
36
+ }
37
+ const { sent: modelInput, hostInput } = splitHostInput(tool, input);
38
+ if (hostInput && !req.onAgentCall) {
39
+ throw new TheoremError('config', `Agent tool "${tool.name}" declares host fields, which need the request's onAgentCall`);
40
+ }
41
+ const shaped = await req.onAgentCall?.({
42
+ tool: tool.name,
43
+ callId,
44
+ profile: tool.profile,
45
+ input: modelInput,
46
+ ...(hostInput ? { hostInput } : {}),
47
+ caller: caller.id,
48
+ depth: args.depth + 1,
49
+ ...(req.metadata ? { metadata: req.metadata } : {}),
50
+ ...(signal ? { signal } : {}),
51
+ });
52
+ if (shaped && 'refuse' in shaped) {
53
+ return settled('refused_by_host', 'declined', shaped.refuse);
54
+ }
55
+ const { provider: hostProvider, ...fields } = shaped ?? {};
56
+ const provider = agentProvider(args, profile.id, fields.model, hostProvider);
57
+ if (!span) {
58
+ throw new TheoremError('internal', `Agent tool "${tool.name}" ran without a span`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
59
+ }
60
+ const { speech, ...sent } = modelInput;
61
+ const events = [];
62
+ try {
63
+ for await (const event of args.runNested({
64
+ req: {
65
+ ...(speech ? { speech } : {}),
66
+ ...fields,
67
+ profile: tool.profile,
68
+ execution: req.execution,
69
+ pageExecution: req.pageExecution,
70
+ input: fields.input ?? sent,
71
+ ...(signal ? { signal } : {}),
72
+ ...(req.onAgentCall ? { onAgentCall: req.onAgentCall } : {}),
73
+ },
74
+ provider,
75
+ parent: span,
76
+ agentDepth: args.depth + 1,
77
+ })) {
78
+ events.push(event);
79
+ yield event;
80
+ }
81
+ }
82
+ catch (err) {
83
+ // why: A turn refused before it starts (a file the agent does not take) throws; the caller's model reads it like any other failed call.
84
+ if (!(err instanceof TheoremError) || NESTED_THROWS.has(err.kind) || isAbortError(err)) {
85
+ throw err;
86
+ }
87
+ events.push(toErrorEvent(err));
88
+ }
89
+ throwIfAborted(signal);
90
+ return agentRunOf(events, tool.name, tool.profile, labels);
91
+ },
92
+ };
93
+ }
94
+ /** The provider an agent's turn runs on: the host's for this call, else the caller's, else the registry's. */
95
+ function agentProvider(from, profileId, model, hostProvider) {
96
+ if (hostProvider)
97
+ return resolveRegisteredTurnModel(from.registry, profileId, model, hostProvider);
98
+ if (from.provider)
99
+ return nestedTurnModel(from.provider, profileId, model);
100
+ return resolveRegisteredTurnModel(from.registry, profileId, model, {});
101
+ }
102
+ /** The agent's reply, or why there is none. Errors only the host can fix are thrown. */
103
+ function agentRunOf(events, toolName, profileId, labels) {
104
+ const done = findLast(events, (e) => e.type === 'done');
105
+ const tokens = done?.tokens ?? sumEventTokens(events);
106
+ const usage = tokens ? { tokens } : {};
107
+ const reported = turnError(events);
108
+ if (reported && NESTED_THROWS.has(reported.errorKind)) {
109
+ throw new TheoremError(reported.errorKind, `Agent '${profileId}' failed: ${reported.errorInternal ?? reported.error}`);
110
+ }
111
+ const stop = done?.stop.kind;
112
+ if (stop !== 'completed' || reported) {
113
+ const failed = labelText('tool.agent_failed', { tool: toolName }, labels);
114
+ // why: Reasons the agent's turn named (a file it does not take, a model that is busy) let the caller's model correct the call or say why.
115
+ const reason = reported?.errorCopy
116
+ ? errorCopyText(reported.errorCopy, labels)
117
+ : reported?.error;
118
+ return {
119
+ failure: {
120
+ code: 'agent_failed',
121
+ kind: reported?.errorKind ?? 'failed',
122
+ message: reason ? `${failed}\n${reason}` : failed,
123
+ details: {
124
+ agent: profileId,
125
+ ...(stop ? { stop } : {}),
126
+ ...(reported?.errorCopy ? { reasons: reported.errorCopy } : {}),
127
+ },
128
+ },
129
+ ...usage,
130
+ };
131
+ }
132
+ return { output: agentToolOutputOf(events), ...usage };
133
+ }
134
+ export { createAgentCaller, NESTED_THROWS, turnError };
@@ -0,0 +1,35 @@
1
+ import type { ItemCheckTurn, ProfileItemRule, ProfileValidator } from '../../types.js';
2
+ interface ValidationFailure {
3
+ path: string;
4
+ error: string;
5
+ }
6
+ declare function isAbsent(value: unknown): boolean;
7
+ /**
8
+ * Required vs optional comes only from the JSON Schema; host field validators run for required
9
+ * paths and for optional paths that are present. Throws when the root is not an object schema.
10
+ */
11
+ declare function collectValidationFailures(jsonSchema: Record<string, unknown>, structured: unknown, fields: Record<string, ProfileValidator> | undefined, slots?: Record<string, string>): Promise<ValidationFailure[]>;
12
+ /**
13
+ * Whether a validator keyed by `path` can run against `jsonSchema`: each segment is a
14
+ * property or required key of an object schema, as `collectValidationFailures` walks it.
15
+ */
16
+ declare function schemaReaches(jsonSchema: Record<string, unknown>, path: string): boolean;
17
+ declare function formatValidationFailures(failures: ValidationFailure[]): string;
18
+ /** One list item an item rule refused: where it sat, the item, and why. */
19
+ interface ItemFailure {
20
+ path: string;
21
+ index: number;
22
+ item: unknown;
23
+ reason: string;
24
+ onFail: ProfileItemRule['onFail'];
25
+ }
26
+ /** The value at a dotted path, reached through object properties only. */
27
+ declare function valueAt(structured: unknown, path: string): unknown;
28
+ /** `structured` with the list at `path` replaced; every object on the way is copied. */
29
+ declare function withListAt(structured: unknown, path: string, list: unknown[]): unknown;
30
+ /** Each item an item rule refuses, in the reply's own order. A path with no list has no items. */
31
+ declare function collectItemFailures(structured: unknown, items: Record<string, ProfileItemRule> | undefined, turn: ItemCheckTurn): Promise<ItemFailure[]>;
32
+ /** The schema of one item of the list at `path`, or `undefined` when the path reaches no list with one. */
33
+ declare function itemSchemaAt(jsonSchema: Record<string, unknown>, path: string): Record<string, unknown> | undefined;
34
+ export type { ItemFailure, ValidationFailure };
35
+ export { collectItemFailures, collectValidationFailures, formatValidationFailures, isAbsent, itemSchemaAt, schemaReaches, valueAt, withListAt, };
@@ -0,0 +1,179 @@
1
+ import { TheoremError } from '../../../guardrails/error.js';
2
+ function isAbsent(value) {
3
+ return value === undefined || value === null;
4
+ }
5
+ function asRecord(value) {
6
+ if (isAbsent(value) || typeof value !== 'object' || Array.isArray(value)) {
7
+ return null;
8
+ }
9
+ return value;
10
+ }
11
+ function asObjectSchema(schema) {
12
+ const rec = asRecord(schema);
13
+ if (!rec) {
14
+ return null;
15
+ }
16
+ if (rec.type !== undefined && rec.type !== 'object') {
17
+ return null;
18
+ }
19
+ return rec;
20
+ }
21
+ function requiredKeys(schema) {
22
+ const raw = schema.required;
23
+ if (!Array.isArray(raw)) {
24
+ return [];
25
+ }
26
+ return raw.filter((k) => typeof k === 'string');
27
+ }
28
+ function propertySchemas(schema) {
29
+ const props = schema.properties;
30
+ return asRecord(props) ?? {};
31
+ }
32
+ function joinPath(prefix, key) {
33
+ return prefix ? `${prefix}.${key}` : key;
34
+ }
35
+ function pushMissing(path, failures) {
36
+ failures.push({ path, error: `required field '${path}' is missing` }); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
37
+ }
38
+ async function runFieldValidator(path, value, validator, slots, failures) {
39
+ if (!validator) {
40
+ return;
41
+ }
42
+ const check = await validator(value, slots);
43
+ if (check.isValid) {
44
+ return;
45
+ }
46
+ failures.push({
47
+ path,
48
+ error: check.error || check.finding || `Validation failed for '${path}'`, // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
49
+ });
50
+ }
51
+ async function visitProperty(args) {
52
+ const { path, propSchema, child, isRequired, fields, slots, failures } = args;
53
+ if (isAbsent(child)) {
54
+ if (isRequired) {
55
+ pushMissing(path, failures);
56
+ }
57
+ return;
58
+ }
59
+ await runFieldValidator(path, child, fields?.[path], slots, failures);
60
+ const nested = asObjectSchema(propSchema);
61
+ const nestedValue = nested ? asRecord(child) : null;
62
+ if (nested && nestedValue) {
63
+ await walkObject(nested, nestedValue, path, fields, slots, failures);
64
+ }
65
+ }
66
+ async function walkObject(schema, value, pathPrefix, fields, slots, failures) {
67
+ const props = propertySchemas(schema);
68
+ const required = new Set(requiredKeys(schema));
69
+ const keys = new Set([...Object.keys(props), ...required]);
70
+ const record = asRecord(value);
71
+ for (const key of keys) {
72
+ await visitProperty({
73
+ path: joinPath(pathPrefix, key),
74
+ propSchema: props[key],
75
+ child: record?.[key],
76
+ isRequired: required.has(key),
77
+ fields,
78
+ slots,
79
+ failures,
80
+ });
81
+ }
82
+ }
83
+ /**
84
+ * Required vs optional comes only from the JSON Schema; host field validators run for required
85
+ * paths and for optional paths that are present. Throws when the root is not an object schema.
86
+ */
87
+ async function collectValidationFailures(jsonSchema, structured, fields, slots) {
88
+ const root = asObjectSchema(jsonSchema);
89
+ if (!root) {
90
+ throw new TheoremError('config', 'structured validation requires a JSON Schema object root'); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
91
+ }
92
+ const failures = [];
93
+ if (!asRecord(structured)) {
94
+ for (const key of requiredKeys(root)) {
95
+ pushMissing(key, failures);
96
+ }
97
+ return failures;
98
+ }
99
+ await walkObject(root, structured, '', fields, slots, failures);
100
+ return failures;
101
+ }
102
+ /**
103
+ * Whether a validator keyed by `path` can run against `jsonSchema`: each segment is a
104
+ * property or required key of an object schema, as `collectValidationFailures` walks it.
105
+ */
106
+ function schemaReaches(jsonSchema, path) {
107
+ let schema = jsonSchema;
108
+ for (const key of path.split('.')) {
109
+ const object = asObjectSchema(schema);
110
+ if (!object) {
111
+ return false;
112
+ }
113
+ const props = propertySchemas(object);
114
+ if (!Object.hasOwn(props, key) && !requiredKeys(object).includes(key)) {
115
+ return false;
116
+ }
117
+ schema = props[key];
118
+ }
119
+ return true;
120
+ }
121
+ function formatValidationFailures(failures) {
122
+ return failures.map((f) => f.error).join('; ');
123
+ }
124
+ /** The value at a dotted path, reached through object properties only. */
125
+ function valueAt(structured, path) {
126
+ let value = structured;
127
+ for (const key of path.split('.')) {
128
+ value = asRecord(value)?.[key];
129
+ }
130
+ return value;
131
+ }
132
+ /** `structured` with the list at `path` replaced; every object on the way is copied. */
133
+ function withListAt(structured, path, list) {
134
+ const [key, ...rest] = path.split('.');
135
+ const record = asRecord(structured) ?? {};
136
+ if (key === undefined)
137
+ return structured;
138
+ return {
139
+ ...record,
140
+ [key]: rest.length ? withListAt(record[key], rest.join('.'), list) : list,
141
+ };
142
+ }
143
+ /** Each item an item rule refuses, in the reply's own order. A path with no list has no items. */
144
+ async function collectItemFailures(structured, items, turn) {
145
+ const failures = [];
146
+ for (const [path, rule] of Object.entries(items ?? {})) {
147
+ const list = valueAt(structured, path);
148
+ if (!Array.isArray(list))
149
+ continue;
150
+ for (const [index, item] of list.entries()) {
151
+ const check = await rule.check(item, turn);
152
+ if (check.isValid)
153
+ continue;
154
+ failures.push({
155
+ path,
156
+ index,
157
+ item,
158
+ reason: check.error || check.finding || `Validation failed for '${path}'`, // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
159
+ onFail: rule.onFail,
160
+ });
161
+ }
162
+ }
163
+ return failures;
164
+ }
165
+ /** The schema of one item of the list at `path`, or `undefined` when the path reaches no list with one. */
166
+ function itemSchemaAt(jsonSchema, path) {
167
+ let schema = jsonSchema;
168
+ for (const key of path.split('.')) {
169
+ const object = asObjectSchema(schema);
170
+ if (!object)
171
+ return undefined;
172
+ schema = propertySchemas(object)[key];
173
+ }
174
+ const list = asRecord(schema);
175
+ if (list?.type !== 'array')
176
+ return undefined;
177
+ return asRecord(list.items) ?? undefined;
178
+ }
179
+ export { collectItemFailures, collectValidationFailures, formatValidationFailures, isAbsent, itemSchemaAt, schemaReaches, valueAt, withListAt, };
@@ -0,0 +1,28 @@
1
+ import { type InjectUnit, type StageApplyWarning, type StageCallBag, type StageContext, type StageHandler } from '../../stages.js';
2
+ import type { Profile, ResolvedGeneration, TurnEvent, TurnStage } from '../../types.js';
3
+ import type { StepExecutionState } from './state.js';
4
+ export interface ApplyTurnStageArgs extends StageCallBag {
5
+ profile: Profile;
6
+ generation: ResolvedGeneration;
7
+ state: StepExecutionState;
8
+ stage: StageContext['stage'];
9
+ step: number;
10
+ onStage?: StageHandler;
11
+ signal?: AbortSignal;
12
+ /** Another provider step would exceed maxSteps — reject inject. */
13
+ injectWouldExceedMaxSteps?: boolean;
14
+ host?: unknown;
15
+ }
16
+ export interface ApplyTurnStageResult {
17
+ abort?: boolean | {
18
+ reason?: string;
19
+ };
20
+ injectCount: number;
21
+ warnings: StageApplyWarning[];
22
+ }
23
+ /** Sanitized stage injects extend portable history. */
24
+ export declare function applyStageInjects(state: StepExecutionState, stage: TurnStage, units: readonly InjectUnit[], extra?: {
25
+ callId?: string;
26
+ toolName?: string;
27
+ }): Generator<TurnEvent, number>;
28
+ export declare function applyTurnStage(args: ApplyTurnStageArgs): AsyncGenerator<TurnEvent, ApplyTurnStageResult>;
@@ -0,0 +1,41 @@
1
+ import { throwIfAborted } from '../../../guardrails/error.js';
2
+ import { injectedStageEvent, injectMessages, runStage, } from '../../stages.js';
3
+ import { profileAllowsInject } from '../../stop.js';
4
+ /** Sanitized stage injects extend portable history. */
5
+ export function* applyStageInjects(state, stage, units, extra) {
6
+ const inject = injectMessages(units);
7
+ if (inject.length === 0)
8
+ return 0;
9
+ state.currentHistory.push(...inject);
10
+ const landed = injectedStageEvent(stage, units, extra);
11
+ if (landed) {
12
+ state.allEmittedEvents.push(landed);
13
+ yield landed;
14
+ }
15
+ return inject.length;
16
+ }
17
+ export async function* applyTurnStage(args) {
18
+ const { profile, generation, state, onStage, host, ...call } = args;
19
+ throwIfAborted(call.signal);
20
+ const run = runStage({
21
+ ...call,
22
+ history: state.currentHistory,
23
+ handlers: onStage ? [onStage] : [],
24
+ guardrails: profile.guardrails,
25
+ injectAllowed: profileAllowsInject(profile),
26
+ host: host ?? generation.host,
27
+ span: state.trace.root,
28
+ });
29
+ let next = await run.next();
30
+ while (!next.done) {
31
+ state.allEmittedEvents.push(next.value);
32
+ yield next.value;
33
+ next = await run.next();
34
+ }
35
+ const out = next.value;
36
+ return {
37
+ abort: out.abort,
38
+ injectCount: yield* applyStageInjects(state, call.stage, out.inject),
39
+ warnings: out.warnings,
40
+ };
41
+ }
@@ -0,0 +1,97 @@
1
+ import { type TurnDestinations } from '../../../guardrails/destinations.js';
2
+ import { type GivenUrlSets } from '../../../guardrails/egress-urls.js';
3
+ import type { OwnTools } from '../../../guardrails/tool-leak.js';
4
+ import type { GuardrailHit, TurnTaint } from '../../../guardrails/types.js';
5
+ import type { SpanHandle } from '../../../observability/trace-span.js';
6
+ import type { AgentCaller } from '../../tools/agent.js';
7
+ import type { ToolRegistry } from '../../tools/registry.js';
8
+ import type { InteractionPart, ModelBinding, Profile, ResolvedGeneration, TurnEvent, TurnHistoryMessage, TurnRequest, TurnStop, TurnToolResult } from '../../types.js';
9
+ import type { ItemFailure } from './schema-validation.js';
10
+ import type { CallUsage } from './usage.js';
11
+ interface TurnTraceState {
12
+ /** The turn's `invoke_agent` span; model calls and tools open under it. */
13
+ root: SpanHandle;
14
+ /** Validation / egress attempt the next model call belongs to (0-based). */
15
+ attempt: number;
16
+ calls: number;
17
+ binding: ModelBinding | undefined;
18
+ }
19
+ interface StepExecutionState {
20
+ /** The turn's scope's tools: calls and provider builtins are looked up here. */
21
+ tools: ToolRegistry;
22
+ /** Runs the turn's agent tools; absent where none can run (a compactor's own turn). */
23
+ agents?: AgentCaller;
24
+ trace: TurnTraceState;
25
+ currentHistory: TurnHistoryMessage[];
26
+ stepCount: number;
27
+ /** Model calls sent again this turn under the profile's resumption (`executeResumedStep`). */
28
+ resumes: number;
29
+ allEmittedEvents: TurnEvent[];
30
+ attemptEvents: TurnEvent[];
31
+ /**
32
+ * If the mid-stream window tripped but the final verdict on the whole text passes, nothing was
33
+ * streamed, so the attempt gate must release the buffered text rather than drop it.
34
+ */
35
+ withheldVisible?: boolean;
36
+ /** The reply text the stream's gate released this attempt, as it released it. */
37
+ released: string;
38
+ /** The canary opening the last provider call ended on, read in front of the next call's reply. */
39
+ canaryCarry?: string;
40
+ /** What the last provider call's thoughts ended on, read in front of the next call's thoughts. */
41
+ thoughtCarry?: string;
42
+ /** System-prompt leaks withheld under a host policy; they pin the end-of-attempt verdict to block. */
43
+ promptLeaks?: GuardrailHit[];
44
+ /** Untrusted content read so far, so a later tool call is judged against all the turn ingested. */
45
+ taint?: TurnTaint;
46
+ /** The destinations the turn has read, by who wrote them, so a tool call's own are judged against them. */
47
+ destinations: TurnDestinations;
48
+ /** Every URL the model has been given this turn (`GuardrailContext.givenUrls`). */
49
+ givenUrls: GivenUrlSets;
50
+ /** The names of the profile's tools and of their parameters (`GuardrailContext.ownTools`). */
51
+ ownTools?: OwnTools;
52
+ /** Set once the model is given the canary this turn (`GuardrailContext.canaryGiven`). */
53
+ canaryGiven: boolean;
54
+ /** What the canary scan already read this turn (`requestGivesCanary`). */
55
+ canaryScanned: WeakSet<object>;
56
+ /** Every tool call the turn completed, for the checks on a reply's items (`ItemCheckTurn`). */
57
+ toolResults: TurnToolResult[];
58
+ /** Last provider stop from a discarded provider `done` event. */
59
+ lastStop?: TurnStop;
60
+ providerState?: import('../../checkpoint.js').ProviderCheckpoint;
61
+ /** Usage of the last model call; a continuation's prompt estimate extends it. */
62
+ lastCall?: CallUsage;
63
+ }
64
+ /** A reply waiting on its refused items: the attempt under way is rewriting only those. */
65
+ interface PendingItemFix {
66
+ /** The reply the items were refused in; the rewritten ones go back into it. */
67
+ reply: unknown;
68
+ refused: ItemFailure[];
69
+ /** The profile's own structured schema, put back once the rewrite returns. */
70
+ structured: ResolvedGeneration['structured'];
71
+ }
72
+ interface AttemptFlowState {
73
+ currentAttempt: number;
74
+ currentReq: TurnRequest;
75
+ currentGen: ResolvedGeneration;
76
+ pendingItemFix?: PendingItemFix;
77
+ }
78
+ declare function recordStepEvent(event: TurnEvent, state: StepExecutionState): void;
79
+ /** Append user parts to turn history as one user message (plain text stays a string). */
80
+ declare function appendUserInput(state: StepExecutionState, parts: readonly InteractionPart[]): void;
81
+ /**
82
+ * Step state for one turn. A text turn's history grows inside the turn (tool
83
+ * steps, stage injects, repair retries), so its opening input moves into turn
84
+ * history here and everything later lands after it; `generation.input` is then
85
+ * empty. Image and speech turns are one call that reads only the input, so
86
+ * theirs stays put.
87
+ */
88
+ declare function openTurnState(args: {
89
+ tools: ToolRegistry;
90
+ profile: Profile;
91
+ generation: ResolvedGeneration;
92
+ trace: TurnTraceState;
93
+ allEmittedEvents?: TurnEvent[];
94
+ agents?: AgentCaller;
95
+ }): StepExecutionState;
96
+ export type { AttemptFlowState, PendingItemFix, StepExecutionState, TurnTraceState };
97
+ export { appendUserInput, openTurnState, recordStepEvent };
@@ -0,0 +1,50 @@
1
+ import { turnDestinations } from '../../../guardrails/destinations.js';
2
+ import { givenUrlSets } from '../../../guardrails/egress-urls.js';
3
+ import { ownToolsOf } from '../../tools/project.js';
4
+ function recordStepEvent(event, state) {
5
+ state.allEmittedEvents.push(event);
6
+ state.attemptEvents.push(event);
7
+ }
8
+ /** Append user parts to turn history as one user message (plain text stays a string). */
9
+ function appendUserInput(state, parts) {
10
+ if (parts.length === 0)
11
+ return;
12
+ const textOnly = parts.every((p) => p.type === 'text');
13
+ state.currentHistory.push(textOnly
14
+ ? { role: 'user', content: parts.map((p) => (p.type === 'text' ? p.text : '')).join('') }
15
+ : { role: 'user', parts: [...parts] });
16
+ }
17
+ /**
18
+ * Step state for one turn. A text turn's history grows inside the turn (tool
19
+ * steps, stage injects, repair retries), so its opening input moves into turn
20
+ * history here and everything later lands after it; `generation.input` is then
21
+ * empty. Image and speech turns are one call that reads only the input, so
22
+ * theirs stays put.
23
+ */
24
+ function openTurnState(args) {
25
+ const { profile, generation } = args;
26
+ const ownTools = ownToolsOf(args.tools, profile);
27
+ const state = {
28
+ tools: args.tools,
29
+ trace: args.trace,
30
+ currentHistory: [...(generation.history ?? [])],
31
+ stepCount: 0,
32
+ resumes: 0,
33
+ toolResults: [],
34
+ allEmittedEvents: args.allEmittedEvents ?? [],
35
+ attemptEvents: [],
36
+ released: '',
37
+ givenUrls: givenUrlSets(),
38
+ destinations: turnDestinations(),
39
+ canaryGiven: false,
40
+ canaryScanned: new WeakSet(),
41
+ ...(ownTools ? { ownTools } : {}),
42
+ ...(args.agents ? { agents: args.agents } : {}),
43
+ };
44
+ if (profile.type === 'text') {
45
+ appendUserInput(state, generation.input);
46
+ generation.input = [];
47
+ }
48
+ return state;
49
+ }
50
+ export { appendUserInput, openTurnState, recordStepEvent };
@@ -0,0 +1,27 @@
1
+ import type { StepWait } from '../../tools/stage-run.js';
2
+ import type { TurnEvent } from '../../types.js';
3
+ /** One step's calls: when each may start, and who waits for whom. */
4
+ export interface StepOrder {
5
+ /** Resolves when the call may start: at once side by side, once every call before it settles one at a time. */
6
+ start(callId: string): Promise<void>;
7
+ /** Marks the call settled; what waits for it goes on. */
8
+ settle(callId: string): void;
9
+ wait: StepWait;
10
+ }
11
+ /**
12
+ * The order of a step's calls. Side by side, every call starts at once. One at a time,
13
+ * each starts when every call before it has settled. A call whose `pre_tool` answers `waitFor`
14
+ * is held until those calls settle. A wait on a call outside the step fails; so does a wait
15
+ * that can never end, because the call waited for waits for this one or runs after it. Every
16
+ * call whose own wait closes such a loop fails.
17
+ */
18
+ export declare function stepOrder(callIds: readonly string[], parallel: boolean, signal?: AbortSignal): StepOrder;
19
+ /** Runs a call's body once the step lets it start, and settles it however the body ends. */
20
+ export declare function inStep<T>(order: StepOrder, callId: string, body: () => AsyncGenerator<TurnEvent, T>): AsyncGenerator<TurnEvent, T>;
21
+ /**
22
+ * Runs tools side by side and passes on each event as it comes. Returns each run's
23
+ * settlement by its place in `runs`, `undefined` where there was no run.
24
+ *
25
+ * why: One run that throws ends them all; the rest are closed so none keeps running unseen.
26
+ */
27
+ export declare function runSideBySide<T>(runs: (AsyncGenerator<TurnEvent, T | undefined> | undefined)[]): AsyncGenerator<TurnEvent, (T | undefined)[]>;