@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,31 @@
1
+ import type { ModelId, ModelProfile, Profile, ProfileToolsSpec, ToolId, TurnRequest } from '../types.js';
2
+ import type { ToolRegistry } from './registry.js';
3
+ import type { PromoteLoadedResult, RegisteredTool, ToolFailure, TurnToolSnapshot, WireFunctionTool } from './types.js';
4
+ export declare function pathMatches(catalogPaths?: string[], turnPath?: string): boolean;
5
+ export declare function applyBuiltinMutualExclusions(tools: ToolRegistry, requested: string[]): string[];
6
+ export declare function profileToolAllow(profile: Profile): readonly ToolId[];
7
+ export declare function profileToolsSpec(profile: Profile): ProfileToolsSpec | undefined;
8
+ /** `tools.parallel` as the profile sets it: whether a step's calls run side by side. */
9
+ export declare function profileToolsParallel(profile: Profile): boolean | undefined;
10
+ export declare function resolveAllowedCustomToolIds(tools: ToolRegistry, profile: Profile, req: TurnRequest): ToolId[];
11
+ export declare function resolveModelBuiltinIds(tools: ToolRegistry, profile: ModelProfile, req: TurnRequest, modelId: ModelId): ToolId[];
12
+ export declare function wireForTool(tools: ToolRegistry, name: string): WireFunctionTool | undefined;
13
+ export declare function buildWire(tools: ToolRegistry, visible: ToolId[]): WireFunctionTool[];
14
+ export declare function promoteTool(tools: ToolRegistry, state: TurnToolSnapshot, id: ToolId): void;
15
+ export declare function promoteBuiltin(tools: ToolRegistry, state: TurnToolSnapshot, id: ToolId): void;
16
+ /** Live declarations are fixed at session setup, so every allowed tool there is effectively T0. */
17
+ export declare function initialVisible(tools: ToolRegistry, profile: Profile, gated: ToolId[]): ToolId[];
18
+ export declare function initialBuiltins(tools: ToolRegistry, profile: Profile, gated: ToolId[]): ToolId[];
19
+ export declare function resolveTurnTools(tools: ToolRegistry, profile: Profile, req: TurnRequest, modelId: ModelId | undefined): TurnToolSnapshot;
20
+ /** Resolves the tools a turn may call into a snapshot, then applies the profile's `t1Policy` to it. */
21
+ export declare function prepareTurnToolSnapshot(tools: ToolRegistry, profile: Profile, req: TurnRequest, modelId: ModelId | undefined): Promise<TurnToolSnapshot>;
22
+ /** So concurrent host invokes do not share mutable state. */
23
+ export declare function cloneTurnToolSnapshot(state: TurnToolSnapshot): TurnToolSnapshot;
24
+ export declare function expandT1Policy(tools: ToolRegistry, state: TurnToolSnapshot, profile: Profile, req: TurnRequest): Promise<void>;
25
+ export declare function extractLoadedIds(output: unknown): string[] | undefined;
26
+ export declare function promoteLoadedTools(tools: ToolRegistry, state: TurnToolSnapshot, loaded: string[], profile: Profile): PromoteLoadedResult;
27
+ export declare function promotionTarget(tools: ToolRegistry, id: string, profile: Profile): {
28
+ tool: RegisteredTool;
29
+ } | {
30
+ failure: ToolFailure;
31
+ };
@@ -0,0 +1,267 @@
1
+ import { TheoremError } from '../../guardrails/error.js';
2
+ import { isRecord } from '../util/record.js';
3
+ /** Callable by the host: registered, and not a provider-run builtin. */
4
+ function isExecutable(tools, id) {
5
+ const tool = tools.get(id);
6
+ return tool !== undefined && tool.type !== 'builtin';
7
+ }
8
+ export function pathMatches(catalogPaths, turnPath) {
9
+ if (!catalogPaths || catalogPaths.includes('*')) {
10
+ return true;
11
+ }
12
+ if (!turnPath) {
13
+ return false;
14
+ }
15
+ return catalogPaths.includes(turnPath);
16
+ }
17
+ export function applyBuiltinMutualExclusions(tools, requested) {
18
+ return requested.filter((id) => {
19
+ const tool = tools.get(id);
20
+ if (tool?.type !== 'builtin') {
21
+ return true;
22
+ }
23
+ const conflicts = tool.conflictsWith ?? [];
24
+ return !conflicts.some((other) => requested.includes(other));
25
+ });
26
+ }
27
+ export function profileToolAllow(profile) {
28
+ return 'tools' in profile ? profile.tools.allow : [];
29
+ }
30
+ export function profileToolsSpec(profile) {
31
+ return profile.type === 'text' || profile.type === 'image' ? profile.tools : undefined;
32
+ }
33
+ /** `tools.parallel` as the profile sets it: whether a step's calls run side by side. */
34
+ export function profileToolsParallel(profile) {
35
+ return 'tools' in profile ? profile.tools.parallel : undefined;
36
+ }
37
+ export function resolveAllowedCustomToolIds(tools, profile, req) {
38
+ return profileToolAllow(profile).filter((id) => {
39
+ const tool = tools.get(id);
40
+ if (!tool || tool.type === 'builtin') {
41
+ return false;
42
+ }
43
+ return profile.type === 'host' || pathMatches(tool.paths, req.path);
44
+ });
45
+ }
46
+ export function resolveModelBuiltinIds(tools, profile, req, modelId) {
47
+ const spec = profile.models[modelId];
48
+ if (!spec) {
49
+ return [];
50
+ }
51
+ return (spec.builtInTools ?? []).filter((id) => {
52
+ const tool = tools.get(id);
53
+ if (tool?.type !== 'builtin') {
54
+ return false;
55
+ }
56
+ return pathMatches(tool.paths, req.path);
57
+ });
58
+ }
59
+ export function wireForTool(tools, name) {
60
+ const tool = tools.get(name);
61
+ if (!tool || tool.type === 'builtin') {
62
+ return undefined;
63
+ }
64
+ return {
65
+ type: 'function',
66
+ name: tool.name,
67
+ description: tool.description,
68
+ parameters: tool.inputSchema,
69
+ };
70
+ }
71
+ export function buildWire(tools, visible) {
72
+ const out = [];
73
+ for (const id of visible) {
74
+ const wire = wireForTool(tools, id);
75
+ if (wire) {
76
+ out.push(wire);
77
+ }
78
+ }
79
+ return out;
80
+ }
81
+ export function promoteTool(tools, state, id) {
82
+ if (state.visible.includes(id)) {
83
+ return;
84
+ }
85
+ state.visible.push(id);
86
+ const wire = wireForTool(tools, id);
87
+ if (wire && !state.wire.some((w) => w.name === id)) {
88
+ state.wire.push(wire);
89
+ }
90
+ }
91
+ export function promoteBuiltin(tools, state, id) {
92
+ if (state.builtins.includes(id)) {
93
+ return;
94
+ }
95
+ const tool = tools.get(id);
96
+ if (tool?.type !== 'builtin') {
97
+ return;
98
+ }
99
+ const conflicts = tool.conflictsWith ?? [];
100
+ state.builtins = state.builtins.filter((existing) => {
101
+ if (conflicts.includes(existing)) {
102
+ return false;
103
+ }
104
+ const existingTool = tools.get(existing);
105
+ return !(existingTool?.type === 'builtin' && existingTool.conflictsWith?.includes(id));
106
+ });
107
+ state.builtins.push(id);
108
+ }
109
+ /** Live declarations are fixed at session setup, so every allowed tool there is effectively T0. */
110
+ export function initialVisible(tools, profile, gated) {
111
+ if (profile.type === 'live' || profile.type === 'host') {
112
+ return [...gated];
113
+ }
114
+ return gated.filter((id) => tools.get(id)?.loadTier === 'T0');
115
+ }
116
+ export function initialBuiltins(tools, profile, gated) {
117
+ return applyBuiltinMutualExclusions(tools, gated.filter((id) => {
118
+ const tool = tools.get(id);
119
+ return tool?.type === 'builtin' && (profile.type === 'live' || tool.loadTier === 'T0');
120
+ }));
121
+ }
122
+ export function resolveTurnTools(tools, profile, req, modelId) {
123
+ const customAllowed = resolveAllowedCustomToolIds(tools, profile, req);
124
+ const modelBuiltins = profile.type === 'host' ||
125
+ profile.type === 'decision' ||
126
+ profile.type === 'embedding' ||
127
+ modelId === undefined
128
+ ? []
129
+ : resolveModelBuiltinIds(tools, profile, req, modelId);
130
+ const gated = [...customAllowed, ...modelBuiltins];
131
+ const builtins = initialBuiltins(tools, profile, gated);
132
+ const visible = initialVisible(tools, profile, gated);
133
+ const executable = visible.filter((id) => isExecutable(tools, id));
134
+ return {
135
+ builtins,
136
+ gated,
137
+ visible,
138
+ executable,
139
+ path: req.path,
140
+ sessionPermissions: req.sessionPermissions,
141
+ wire: buildWire(tools, visible),
142
+ };
143
+ }
144
+ /** Resolves the tools a turn may call into a snapshot, then applies the profile's `t1Policy` to it. */
145
+ export async function prepareTurnToolSnapshot(tools, profile, req, modelId) {
146
+ const snapshot = resolveTurnTools(tools, profile, req, modelId);
147
+ await expandT1Policy(tools, snapshot, profile, req);
148
+ return snapshot;
149
+ }
150
+ /** So concurrent host invokes do not share mutable state. */
151
+ export function cloneTurnToolSnapshot(state) {
152
+ return {
153
+ builtins: [...state.builtins],
154
+ gated: [...state.gated],
155
+ visible: [...state.visible],
156
+ executable: [...state.executable],
157
+ path: state.path,
158
+ sessionPermissions: state.sessionPermissions ? [...state.sessionPermissions] : undefined,
159
+ wire: state.wire.map((w) => ({ ...w, parameters: structuredClone(w.parameters) })),
160
+ };
161
+ }
162
+ export async function expandT1Policy(tools, state, profile, req) {
163
+ const t1Policy = profileToolsSpec(profile)?.t1Policy;
164
+ if (!t1Policy) {
165
+ return;
166
+ }
167
+ let selected;
168
+ try {
169
+ selected = await t1Policy({
170
+ profile,
171
+ input: req.input,
172
+ path: req.path,
173
+ sessionPermissions: req.sessionPermissions,
174
+ gated: state.gated,
175
+ host: req.host,
176
+ });
177
+ }
178
+ catch (err) {
179
+ const msg = err instanceof Error ? err.message : String(err);
180
+ throw new TheoremError('config', `Profile '${profile.id}' tools.t1Policy rejected: ${msg}`, {
181
+ cause: err,
182
+ });
183
+ }
184
+ if (!Array.isArray(selected)) {
185
+ throw new TheoremError('config', `Profile '${profile.id}' tools.t1Policy must return ToolId[]`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
186
+ }
187
+ for (const id of selected) {
188
+ if (!state.gated.includes(id)) {
189
+ continue;
190
+ }
191
+ const tool = tools.get(id);
192
+ if (tool?.loadTier !== 'T2') {
193
+ continue;
194
+ }
195
+ if (tool.type === 'builtin') {
196
+ promoteBuiltin(tools, state, id);
197
+ }
198
+ else {
199
+ promoteTool(tools, state, id);
200
+ }
201
+ }
202
+ state.executable = state.visible.filter((id) => isExecutable(tools, id));
203
+ }
204
+ const LOADED_ID_BLOCKLIST = new Set(['__proto__', 'constructor', 'prototype']);
205
+ export function extractLoadedIds(output) {
206
+ if (!isRecord(output)) {
207
+ return undefined;
208
+ }
209
+ const { loaded } = output;
210
+ if (!Array.isArray(loaded) || !loaded.every((id) => typeof id === 'string')) {
211
+ return undefined;
212
+ }
213
+ return loaded;
214
+ }
215
+ export function promoteLoadedTools(tools, state, loaded, profile) {
216
+ if (profile.type === 'live' || profile.type === 'host') {
217
+ return { promoted: [] };
218
+ }
219
+ const toPromote = [];
220
+ for (const id of loaded) {
221
+ if (typeof id !== 'string' || LOADED_ID_BLOCKLIST.has(id)) {
222
+ return {
223
+ promoted: [],
224
+ failure: {
225
+ code: 'invalid_output',
226
+ kind: 'bad_response',
227
+ message: 'tools.t2Loader loaded ids must be plain strings', // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
228
+ },
229
+ };
230
+ }
231
+ const target = promotionTarget(tools, id, profile);
232
+ if ('failure' in target) {
233
+ return { promoted: [], failure: target.failure };
234
+ }
235
+ const { tool } = target;
236
+ if (!pathMatches(tool.paths, state.path) || !state.gated.includes(id)) {
237
+ continue;
238
+ }
239
+ toPromote.push(id);
240
+ }
241
+ const promoted = [];
242
+ for (const id of toPromote) {
243
+ promoteTool(tools, state, id);
244
+ promoted.push(id);
245
+ }
246
+ state.executable = state.visible.filter((id) => isExecutable(tools, id));
247
+ return { promoted };
248
+ }
249
+ function promotionRefused(message) {
250
+ return { failure: { code: 'invalid_output', kind: 'bad_response', message } };
251
+ }
252
+ export function promotionTarget(tools, id, profile) {
253
+ if (!profileToolAllow(profile).includes(id)) {
254
+ return promotionRefused(`tools.t2Loader attempted to promote tool '${id}' outside profile allow`);
255
+ }
256
+ const tool = tools.get(id);
257
+ if (!tool) {
258
+ return promotionRefused(`tools.t2Loader attempted to promote unknown tool '${id}'`);
259
+ }
260
+ if (tool.type === 'builtin') {
261
+ return promotionRefused(`tools.t2Loader attempted to promote builtin '${id}' — only custom tools may be promoted`);
262
+ }
263
+ if (tool.loadTier !== 'T2') {
264
+ return promotionRefused(`tools.t2Loader attempted to promote tool '${id}' with loadTier '${tool.loadTier}' — only T2 tools may be promoted`);
265
+ }
266
+ return { tool };
267
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * A call's end, for a host that wants how a call settled rather than its stream:
3
+ * `settledCall` and `settledCalls` read a started `invokeTool` or `invokeToolStep` and give each
4
+ * call's terminal `tool` event with every event it emitted. `runTool` and `runToolStep` use them.
5
+ */
6
+ import type { ToolPhaseEvent, TurnEvent } from '../turn-events.js';
7
+ import type { StartedInvoke, StartedStep } from './invoke.js';
8
+ /** The phase a call ends on: it completed, a gate held it, or it failed. */
9
+ export type SettledToolCall = Extract<ToolPhaseEvent, {
10
+ phase: 'complete' | 'gate' | 'error';
11
+ }> & {
12
+ /** Kernel-issued identity; a gate's resume carries it. */
13
+ operationId?: string;
14
+ };
15
+ /** A settled call, every event it emitted in order, and the last activity label it ran under. */
16
+ export type ToolCallResult = SettledToolCall & {
17
+ events: TurnEvent[];
18
+ activity?: string;
19
+ };
20
+ /** A step's call, settled: its place in the step's `calls` beside its result. */
21
+ export type ToolStepCallResult = ToolCallResult & {
22
+ index: number;
23
+ };
24
+ /** Run one call to its end. */
25
+ declare function settledCall(started: StartedInvoke): Promise<ToolCallResult>;
26
+ /** Run a step's calls, yielding each one's result as it settles; a call the step never settled comes last. */
27
+ declare function settledCalls(started: StartedStep): AsyncGenerator<ToolStepCallResult>;
28
+ export { settledCall, settledCalls };
@@ -0,0 +1,86 @@
1
+ /**
2
+ * A call's end, for a host that wants how a call settled rather than its stream:
3
+ * `settledCall` and `settledCalls` read a started `invokeTool` or `invokeToolStep` and give each
4
+ * call's terminal `tool` event with every event it emitted. `runTool` and `runToolStep` use them.
5
+ */
6
+ import { labelText } from '../../guardrails/labels.js';
7
+ function isSettled(tool) {
8
+ return tool.phase === 'complete' || tool.phase === 'gate' || tool.phase === 'error';
9
+ }
10
+ function foldTool(fold, tool) {
11
+ if (tool.phase === 'running')
12
+ fold.activity = tool.activity ?? fold.activity;
13
+ if (isSettled(tool))
14
+ fold.settled = tool;
15
+ }
16
+ /** The call's result; a call that never settled failed as the invoke's own error says, else as not run. */
17
+ function settle(fold, invokeError) {
18
+ const settled = fold.settled ?? {
19
+ phase: 'error',
20
+ name: fold.name,
21
+ callId: fold.callId,
22
+ at: Date.now(),
23
+ failure: {
24
+ code: 'invoke_failed',
25
+ kind: invokeError?.errorKind ?? 'internal',
26
+ message: invokeError?.errorInternal ??
27
+ invokeError?.error ??
28
+ labelText('tool.did_not_run', { tool: fold.name }),
29
+ },
30
+ };
31
+ return {
32
+ ...settled,
33
+ events: fold.events,
34
+ ...(fold.activity ? { activity: fold.activity } : {}),
35
+ };
36
+ }
37
+ /** Run one call to its end. */
38
+ async function settledCall(started) {
39
+ const fold = {
40
+ name: started.name,
41
+ callId: started.callId,
42
+ events: [],
43
+ };
44
+ let invokeError;
45
+ for await (const event of started.events) {
46
+ fold.events.push(event);
47
+ if (event.type === 'error')
48
+ invokeError = event;
49
+ if (event.type === 'tool' && event.tool.callId === started.callId) {
50
+ foldTool(fold, event.tool);
51
+ }
52
+ }
53
+ return settle(fold, invokeError);
54
+ }
55
+ /** Run a step's calls, yielding each one's result as it settles; a call the step never settled comes last. */
56
+ async function* settledCalls(started) {
57
+ const folds = started.calls.map(({ name, callId }) => ({
58
+ name,
59
+ callId,
60
+ events: [],
61
+ }));
62
+ const byCallId = new Map(started.calls.map(({ callId }, index) => [callId, index]));
63
+ const yielded = new Set();
64
+ let invokeError;
65
+ for await (const event of started.events) {
66
+ if (event.type === 'error')
67
+ invokeError = event;
68
+ if (event.type !== 'tool')
69
+ continue;
70
+ const index = byCallId.get(event.tool.callId);
71
+ const fold = index === undefined ? undefined : folds[index];
72
+ if (index === undefined || !fold)
73
+ continue;
74
+ fold.events.push(event);
75
+ foldTool(fold, event.tool);
76
+ if (fold.settled && !yielded.has(index)) {
77
+ yielded.add(index);
78
+ yield { ...settle(fold, invokeError), index };
79
+ }
80
+ }
81
+ for (const [index, fold] of folds.entries()) {
82
+ if (!yielded.has(index))
83
+ yield { ...settle(fold, invokeError), index };
84
+ }
85
+ }
86
+ export { settledCall, settledCalls };
@@ -0,0 +1,10 @@
1
+ import { type ZodType } from 'zod';
2
+ export type JsonSchema = Record<string, unknown>;
3
+ /** A structural check only: what a provider accepts is its own API's answer. */
4
+ declare function validateToolSchema(schema: JsonSchema, label: 'input' | 'output'): void;
5
+ declare function jsonSchemaFromZod(schema: ZodType, io?: 'input' | 'output'): JsonSchema;
6
+ export { jsonSchemaFromZod, validateToolSchema };
7
+ /** Strips prototype-pollution keys before validation. */
8
+ export declare function plainToolInput(input: unknown): unknown;
9
+ /** A placeholder in the scheme or authority would let tool input choose where the credential goes. */
10
+ export declare function assertFixedEndpointOrigin(endpoint: string): void;
@@ -0,0 +1,95 @@
1
+ import { z } from 'zod';
2
+ import { TheoremError } from '../../guardrails/error.js';
3
+ function validateSchemaShape(schema, path, errors) {
4
+ if (!schema || typeof schema !== 'object' || Array.isArray(schema)) {
5
+ errors.push(`${path}: schema must be an object`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
6
+ return false;
7
+ }
8
+ const hasType = typeof schema.type === 'string' || Array.isArray(schema.type);
9
+ const hasCombinator = schema.anyOf !== undefined || schema.oneOf !== undefined;
10
+ if (!hasType && !hasCombinator) {
11
+ if (path !== '$') {
12
+ return true;
13
+ }
14
+ errors.push(`${path}: missing type or combinator`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
15
+ }
16
+ if (schema.type === 'array' && schema.items === undefined) {
17
+ errors.push(`${path}: array schema must define items`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
18
+ }
19
+ return true;
20
+ }
21
+ function walkSchemaProperties(props, required, path, errors) {
22
+ const reqList = Array.isArray(required) ? required : [];
23
+ for (const req of reqList) {
24
+ if (typeof req === 'string' && !Object.hasOwn(props, req)) {
25
+ errors.push(`${path}: required key '${req}' missing from properties`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
26
+ }
27
+ }
28
+ for (const [key, child] of Object.entries(props)) {
29
+ if (child && typeof child === 'object') {
30
+ walkSchema(child, `${path}.properties.${key}`, errors);
31
+ }
32
+ }
33
+ }
34
+ function walkSchema(schema, path, errors) {
35
+ if (!validateSchemaShape(schema, path, errors))
36
+ return;
37
+ const props = schema.properties;
38
+ if (props && typeof props === 'object' && !Array.isArray(props)) {
39
+ walkSchemaProperties(props, schema.required, path, errors);
40
+ }
41
+ if (schema.items && typeof schema.items === 'object' && !Array.isArray(schema.items)) {
42
+ walkSchema(schema.items, `${path}.items`, errors);
43
+ }
44
+ for (const combinator of ['anyOf', 'oneOf']) {
45
+ const branch = schema[combinator];
46
+ if (Array.isArray(branch)) {
47
+ branch.forEach((entry, index) => {
48
+ if (entry && typeof entry === 'object') {
49
+ walkSchema(entry, `${path}.${combinator}[${index}]`, errors);
50
+ }
51
+ });
52
+ }
53
+ }
54
+ }
55
+ /** A structural check only: what a provider accepts is its own API's answer. */
56
+ function validateToolSchema(schema, label) {
57
+ const errors = [];
58
+ walkSchema(schema, '$', errors);
59
+ if (errors.length > 0) {
60
+ throw new TheoremError('config', `Invalid tool ${label} schema: ${errors.join('; ')}`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
61
+ }
62
+ }
63
+ function jsonSchemaFromZod(schema, io = 'output') {
64
+ const json = z.toJSONSchema(schema, { target: 'draft-7', io });
65
+ delete json.$schema;
66
+ if (!json.type) {
67
+ json.type = 'object';
68
+ }
69
+ return json;
70
+ }
71
+ export { jsonSchemaFromZod, validateToolSchema };
72
+ /** Strips prototype-pollution keys before validation. */
73
+ export function plainToolInput(input) {
74
+ if (input === null || typeof input !== 'object') {
75
+ return input;
76
+ }
77
+ if (Array.isArray(input)) {
78
+ return input.map(plainToolInput);
79
+ }
80
+ const out = {};
81
+ for (const key of Object.keys(input)) {
82
+ if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
83
+ continue;
84
+ }
85
+ out[key] = plainToolInput(input[key]);
86
+ }
87
+ return out;
88
+ }
89
+ /** A placeholder in the scheme or authority would let tool input choose where the credential goes. */
90
+ export function assertFixedEndpointOrigin(endpoint) {
91
+ const origin = /^[a-z][a-z0-9+.-]*:\/\/[^/?#]*/i.exec(endpoint)?.[0];
92
+ if (!origin || /[{}]/.test(origin)) {
93
+ throw new TheoremError('config', `Endpoint "${endpoint}" must start with a fixed scheme and host; placeholders belong in the path or query`);
94
+ }
95
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The signed-in fetch a function tool with `auth` gets as `ctx.signedInFetch`.
3
+ * The kernel holds the credential; the handler only makes requests that carry it.
4
+ *
5
+ * @module
6
+ */
7
+ import type { RequestChecks } from './events.js';
8
+ import { type CredentialQuery, type CredentialRefusal } from './remote.js';
9
+ import type { SignedInFetch, ToolContext } from './types.js';
10
+ /** Thrown by a signed-in fetch when the service refuses the credential; the kernel settles it. */
11
+ export declare class CredentialRefusedError extends Error {
12
+ readonly refusal: CredentialRefusal;
13
+ constructor(refusal: CredentialRefusal);
14
+ }
15
+ export declare function signedInFetch(prepared: {
16
+ authHeaders: Record<string, string>;
17
+ query?: CredentialQuery;
18
+ audience?: string;
19
+ }, ctx: ToolContext, checks: RequestChecks): SignedInFetch;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * The signed-in fetch a function tool with `auth` gets as `ctx.signedInFetch`.
3
+ * The kernel holds the credential; the handler only makes requests that carry it.
4
+ *
5
+ * @module
6
+ */
7
+ import { fetchGuarded } from '../../guardrails/network.js';
8
+ import { TheoremError } from '../../guardrails/theorem-error.js';
9
+ import { toolNetworkPolicy } from './events.js';
10
+ import { audienceMismatch, credentialRefusal, refusalAsksForSignIn, withCredentialQuery, } from './remote.js';
11
+ /** Thrown by a signed-in fetch when the service refuses the credential; the kernel settles it. */
12
+ export class CredentialRefusedError extends Error {
13
+ refusal;
14
+ constructor(refusal) {
15
+ super(`The service refused the credential (HTTP ${refusal.status}).`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
16
+ this.name = 'CredentialRefusedError';
17
+ this.refusal = refusal;
18
+ }
19
+ }
20
+ export function signedInFetch(prepared, ctx, checks) {
21
+ return async (url, request = {}) => {
22
+ const target = new URL(url);
23
+ const mismatch = audienceMismatch(prepared.audience, target);
24
+ if (mismatch)
25
+ throw new TheoremError('config', mismatch);
26
+ const response = await fetchGuarded(withCredentialQuery(target, prepared.query).href, {
27
+ method: request.method ?? 'GET',
28
+ headers: request.headers,
29
+ body: request.body,
30
+ signal: ctx.signal,
31
+ }, {
32
+ policy: toolNetworkPolicy(ctx),
33
+ followRedirects: true,
34
+ originBoundHeaders: prepared.authHeaders,
35
+ resolveHost: ctx.resolveHost,
36
+ onCheck: checks.onCheck,
37
+ });
38
+ const refusal = credentialRefusal(response);
39
+ if (refusal && refusalAsksForSignIn(refusal)) {
40
+ await response.body?.cancel();
41
+ throw new CredentialRefusedError(refusal);
42
+ }
43
+ return response;
44
+ };
45
+ }