@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,6 @@
1
+ import type { ToolRegistry } from '../tools/registry.js';
2
+ import type { BuiltInArgs, BuiltinToolId, ModelRequest, ProviderBuiltin, ResolvedGeneration } from '../types.js';
3
+ declare function providerBuiltins(tools: ToolRegistry, ids: readonly BuiltinToolId[], args?: BuiltInArgs): ProviderBuiltin[];
4
+ /** Shared by execution and tracing. */
5
+ declare function providerCompleteRequest(tools: ToolRegistry, generation: ResolvedGeneration, system: string): ModelRequest;
6
+ export { providerBuiltins, providerCompleteRequest };
@@ -0,0 +1,34 @@
1
+ import { TheoremError } from '../../guardrails/error.js';
2
+ function providerBuiltins(tools, ids, args = {}) {
3
+ return ids.map((id) => {
4
+ const tool = tools.get(id);
5
+ if (tool?.type !== 'builtin') {
6
+ throw new TheoremError('config', `Builtin '${id}' is not registered`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
7
+ }
8
+ const given = args[id];
9
+ return given ? { id, args: given } : { id };
10
+ });
11
+ }
12
+ /** Shared by execution and tracing. */
13
+ function providerCompleteRequest(tools, generation, system) {
14
+ return {
15
+ model: generation.model,
16
+ apiId: generation.apiId,
17
+ stream: generation.stream,
18
+ thinking: generation.thinking,
19
+ summaries: generation.summaries,
20
+ maxOutputTokens: generation.maxOutputTokens,
21
+ temperature: generation.temperature,
22
+ builtins: providerBuiltins(tools, generation.builtins, generation.builtInArgs),
23
+ sessionId: generation.sessionId,
24
+ system,
25
+ input: generation.input,
26
+ history: generation.history,
27
+ wireTools: generation.tools.wire,
28
+ structured: generation.structured,
29
+ image: generation.image,
30
+ speech: generation.speech,
31
+ live: generation.live,
32
+ };
33
+ }
34
+ export { providerBuiltins, providerCompleteRequest };
@@ -0,0 +1,17 @@
1
+ import type { ToolRegistry } from '../tools/registry.js';
2
+ import type { ModelId, ModelProfile, Profile, ProjectedProfile, ResolvedGeneration, TurnRequest } from '../types.js';
3
+ import type { KernelRegistry } from './kernel-registry.js';
4
+ declare function isModelProfile(profile: Profile): profile is ModelProfile;
5
+ /** Returns the profile when it runs a model; throws a request error naming `door` for a host or decision profile. */
6
+ declare function requireModelProfile(profile: Profile, door: string): ModelProfile;
7
+ /** A request is honored only when selection is allowed; registration guarantees the default. */
8
+ declare function pickModel(profile: ModelProfile, requested?: string): ModelId;
9
+ /** `model` names the binding to resolve, past the profile's own selection rule. */
10
+ declare function resolveTurnInRegistry(registry: KernelRegistry, req: TurnRequest, model?: ModelId): {
11
+ profile: ModelProfile;
12
+ generation: ResolvedGeneration;
13
+ };
14
+ /** Projects a profile into the plain object a host reads: its id, type, handle, models, inputs, outputs, and the tools it can use. Throws for a host or decision profile. */
15
+ declare function projectProfileObject(tools: ToolRegistry, input: Profile): ProjectedProfile;
16
+ declare function projectProfileInRegistry(registry: KernelRegistry, id: Profile['id']): ProjectedProfile;
17
+ export { isModelProfile, pickModel, projectProfileInRegistry, projectProfileObject, requireModelProfile, resolveTurnInRegistry, };
@@ -0,0 +1,238 @@
1
+ import { mintCanary } from '../../guardrails/canary.js';
2
+ import { detects } from '../../guardrails/detectors.js';
3
+ import { TheoremError } from '../../guardrails/error.js';
4
+ import { resolveGuardrailPolicy } from '../../guardrails/policy.js';
5
+ import { replyIsJudged } from '../../guardrails/progressive-yield.js';
6
+ import { sanitizeTurnRequest } from '../../guardrails/sanitize.js';
7
+ import { DEFAULT_MAX_STEPS } from '../profile-presence.js';
8
+ import { profileTurnResumption } from '../stop.js';
9
+ import { projectTools } from '../tools/project.js';
10
+ import { resolveTurnTools } from '../tools/resolve.js';
11
+ import { profileInputs, requireModelBinding } from './catalog.js';
12
+ import { assertOutputMode, assertSpeechRole, assertTurnContext, assertTurnSlots, resolveImageFormat, resolveInputParts, resolveSpeech, } from './ingress.js';
13
+ import { resolveTurnSystemPrompt } from './system-prompt.js';
14
+ function isModelProfile(profile) {
15
+ return profile.type !== 'host' && profile.type !== 'decision' && profile.type !== 'embedding';
16
+ }
17
+ /** Returns the profile when it runs a model; throws a request error naming `door` for a host or decision profile. */
18
+ function requireModelProfile(profile, door) {
19
+ if (isModelProfile(profile))
20
+ return profile;
21
+ if (profile.type === 'host') {
22
+ throw new TheoremError('request', `Profile ${profile.id}: type 'host' never runs a model — ${door} is not supported; execute tools with invokeTool`);
23
+ }
24
+ if (profile.type === 'embedding') {
25
+ throw new TheoremError('request', `Profile ${profile.id}: type 'embedding' runs through runEmbedding — ${door} is not supported`);
26
+ }
27
+ throw new TheoremError('request', `Profile ${profile.id}: type 'decision' runs through runDecision — ${door} is not supported`);
28
+ }
29
+ /** A request is honored only when selection is allowed; registration guarantees the default. */
30
+ function pickModel(profile, requested) {
31
+ if (requested) {
32
+ if (!profile.allowModelSelect) {
33
+ throw new TheoremError('request', `Profile ${profile.id} does not allow model selection`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
34
+ }
35
+ if (!profile.models[requested]) {
36
+ throw new TheoremError('request', `Unknown model '${requested}' for ${profile.id}`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
37
+ }
38
+ return requested;
39
+ }
40
+ return profile.defaultModel;
41
+ }
42
+ function resolveEffort(profile, binding, modelId, requested) {
43
+ const efforts = binding.efforts;
44
+ if (!efforts || Object.keys(efforts).length === 0) {
45
+ if (requested) {
46
+ throw new TheoremError('request', `Profile ${profile.id} model '${modelId}' has no selectable efforts`);
47
+ }
48
+ return undefined;
49
+ }
50
+ const keys = Object.keys(efforts);
51
+ if (requested) {
52
+ if (!binding.allowEffortSelect) {
53
+ throw new TheoremError('request', `Profile ${profile.id} model '${modelId}' does not allow effort selection`);
54
+ }
55
+ const level = efforts[requested];
56
+ if (!level) {
57
+ throw new TheoremError('request', `Unknown effort '${requested}' for ${profile.id} model '${modelId}'`);
58
+ }
59
+ return level;
60
+ }
61
+ // why: Registration requires a default whenever more than one effort is declared.
62
+ return efforts[binding.defaultEffort ?? keys[0]];
63
+ }
64
+ function resolveSummaries(binding) {
65
+ if (binding.summaries === true) {
66
+ return 'auto';
67
+ }
68
+ if (binding.summaries === false) {
69
+ return 'none';
70
+ }
71
+ return undefined;
72
+ }
73
+ function resolveStructured(profile, slots) {
74
+ if (profile.type === 'live') {
75
+ return null;
76
+ }
77
+ const structured = profile.outputs?.structured;
78
+ if (!structured) {
79
+ return null;
80
+ }
81
+ if (typeof structured === 'string') {
82
+ return structured;
83
+ }
84
+ const value = slots?.[structured.by];
85
+ if (value) {
86
+ const mapped = structured.map[value];
87
+ if (mapped) {
88
+ return mapped;
89
+ }
90
+ }
91
+ return structured.fallback;
92
+ }
93
+ function resolveStreamFlag(profile) {
94
+ if (profile.type === 'live') {
95
+ return true;
96
+ }
97
+ return profile.outputs?.streaming?.mode !== 'buffered';
98
+ }
99
+ function resolveTransport(profile, _binding) {
100
+ return profile.type === 'live' ? 'live' : 'turn';
101
+ }
102
+ function assertTurnResumption(profile, req) {
103
+ if (!req.continueFrom) {
104
+ return;
105
+ }
106
+ if (profile.type === 'live') {
107
+ throw new TheoremError('request', `Profile ${profile.id}: type 'live' uses live.sessionResumption, not turnBehaviour.resumption/continueFrom`);
108
+ }
109
+ const policy = profileTurnResumption(profile);
110
+ const max = policy?.maxContinues;
111
+ if (max === undefined) {
112
+ return;
113
+ }
114
+ const attempt = req.continuation;
115
+ if (attempt === undefined) {
116
+ throw new TheoremError('request', `Profile ${profile.id}: continueFrom requires TurnRequest.continuation when turnBehaviour.resumption.maxContinues is set`);
117
+ }
118
+ if (attempt < 1) {
119
+ throw new TheoremError('request', `Profile ${profile.id}: continuation must be >= 1`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
120
+ }
121
+ if (attempt > max) {
122
+ throw new TheoremError('request', `Profile ${profile.id}: continuation ${attempt} exceeds turnBehaviour.resumption.maxContinues (${max})`);
123
+ }
124
+ }
125
+ /**
126
+ * A guarded Live profile (a detector reading `live_reply`) always transcribes its own speech: the outbound gate can only check audio
127
+ * through its transcript.
128
+ */
129
+ function resolveLiveSpec(live, guardrails) {
130
+ if (!replyIsJudged(resolveGuardrailPolicy(guardrails), ['live_reply'])) {
131
+ return live;
132
+ }
133
+ return { ...live, transcription: { ...live?.transcription, output: true } };
134
+ }
135
+ /**
136
+ * A canary for the turn while `canary_leak` reads somewhere, else none. Speech
137
+ * has no system prompt to plant one in.
138
+ */
139
+ function plantedCanary(profile) {
140
+ const { detect } = resolveGuardrailPolicy(profile.guardrails);
141
+ return profile.type !== 'speech' && detects(detect, 'canary_leak') ? mintCanary() : '';
142
+ }
143
+ /**
144
+ * The request's `builtInArgs`. Args must name a tool the chosen model lists; the protocol that
145
+ * writes the tool parses them.
146
+ */
147
+ function resolveBuiltInArgs(profile, model, binding, args) {
148
+ if (!args) {
149
+ return undefined;
150
+ }
151
+ const resolved = {};
152
+ for (const [id, value] of Object.entries(args)) {
153
+ if (!binding.builtInTools?.includes(id)) {
154
+ throw new TheoremError('request', `Profile ${profile.id}: builtInArgs names '${id}', which model '${model}' does not list in builtInTools`);
155
+ }
156
+ resolved[id] = value;
157
+ }
158
+ return resolved;
159
+ }
160
+ /** `model` names the binding to resolve, past the profile's own selection rule. */
161
+ function resolveTurnInRegistry(registry, req, model) {
162
+ const profile = requireModelProfile(registry.profiles.get(req.profile), 'resolveTurn');
163
+ assertTurnSlots(profile, req);
164
+ assertTurnContext(profile, req);
165
+ const safe = sanitizeTurnRequest(req, profile);
166
+ const input = safe.input ?? {};
167
+ assertTurnResumption(profile, safe);
168
+ const picked = model ?? pickModel(profile, safe.model);
169
+ const binding = requireModelBinding(profile, picked);
170
+ const toolSnapshot = resolveTurnTools(registry.tools, profile, safe, picked);
171
+ const builtins = toolSnapshot.builtins;
172
+ const structuredId = resolveStructured(profile, input.slots);
173
+ assertOutputMode(profile, structuredId);
174
+ assertSpeechRole(profile, safe);
175
+ const builtInArgs = resolveBuiltInArgs(profile, picked, binding, safe.builtInArgs);
176
+ const transport = resolveTransport(profile, binding);
177
+ return {
178
+ profile,
179
+ generation: {
180
+ model: picked,
181
+ apiId: binding.apiId,
182
+ transport,
183
+ stream: resolveStreamFlag(profile),
184
+ thinking: resolveEffort(profile, binding, picked, safe.effort),
185
+ summaries: resolveSummaries(binding),
186
+ maxOutputTokens: binding.maxOutputTokens,
187
+ temperature: binding.temperature,
188
+ builtins,
189
+ builtInArgs,
190
+ sessionId: safe.sessionId,
191
+ tools: toolSnapshot,
192
+ sessionPermissions: safe.sessionPermissions,
193
+ execution: safe.execution,
194
+ pageExecution: safe.pageExecution,
195
+ history: input.history,
196
+ maxSteps: profile.maxSteps ?? DEFAULT_MAX_STEPS,
197
+ structured: structuredId
198
+ ? { id: structuredId, jsonSchema: registry.schemas.get(structuredId).jsonSchema }
199
+ : null,
200
+ image: resolveImageFormat(profile),
201
+ speech: resolveSpeech(profile, safe),
202
+ live: profile.type === 'live' ? resolveLiveSpec(profile.live, profile.guardrails) : undefined,
203
+ input: resolveInputParts(profile, safe),
204
+ canary: plantedCanary(profile),
205
+ resolvedSystem: resolveTurnSystemPrompt(profile, safe),
206
+ host: safe.host,
207
+ },
208
+ };
209
+ }
210
+ function primaryImageSpec(profile) {
211
+ return profile.type === 'image' ? profile.image : null;
212
+ }
213
+ /** Projects a profile into the plain object a host reads: its id, type, handle, models, inputs, outputs, and the tools it can use. Throws for a host or decision profile. */
214
+ function projectProfileObject(tools, input) {
215
+ const profile = requireModelProfile(input, 'projectProfile');
216
+ const { identity } = profile;
217
+ const inputs = profileInputs(profile) ?? null;
218
+ const outputs = profile.type === 'live' ? null : (profile.outputs ?? null);
219
+ return {
220
+ id: profile.id,
221
+ type: profile.type,
222
+ handle: identity.handle,
223
+ models: profile.models,
224
+ defaultModel: profile.defaultModel,
225
+ allowModelSelect: profile.allowModelSelect,
226
+ maxSteps: profile.maxSteps,
227
+ tools: projectTools(tools, profile),
228
+ inputs,
229
+ outputs,
230
+ image: primaryImageSpec(profile),
231
+ speech: profile.type === 'speech' ? profile.speech : null,
232
+ live: profile.type === 'live' ? profile.live : null,
233
+ };
234
+ }
235
+ function projectProfileInRegistry(registry, id) {
236
+ return projectProfileObject(registry.tools, registry.profiles.get(id));
237
+ }
238
+ export { isModelProfile, pickModel, projectProfileInRegistry, projectProfileObject, requireModelProfile, resolveTurnInRegistry, };
@@ -0,0 +1,12 @@
1
+ import type { StructuredSpec } from '../types.js';
2
+ /** The structured-output schemas a registry holds, by id: `register`, `get` (throws when there is none) and `find`. */
3
+ interface SchemaRegistry {
4
+ register(id: string, spec: StructuredSpec): void;
5
+ /** Throws when there is none. */
6
+ get(id: string): StructuredSpec;
7
+ find(id: string): StructuredSpec | undefined;
8
+ }
9
+ /** Creates an empty schema registry; `register` rejects a spec that still carries the removed `enforced` field. */
10
+ declare function createSchemaRegistry(): SchemaRegistry;
11
+ export type { SchemaRegistry };
12
+ export { createSchemaRegistry };
@@ -0,0 +1,27 @@
1
+ import { TheoremError } from '../../guardrails/error.js';
2
+ /** Creates an empty schema registry; `register` rejects a spec that still carries the removed `enforced` field. */
3
+ function createSchemaRegistry() {
4
+ const schemas = new Map();
5
+ return {
6
+ register(id, spec) {
7
+ if ('enforced' in spec) {
8
+ throw new TheoremError('config', `registerStructured '${id}': enforced was removed; every structured schema is sent to the model as its response format`);
9
+ }
10
+ if (!spec.jsonSchema ||
11
+ typeof spec.jsonSchema !== 'object' ||
12
+ Array.isArray(spec.jsonSchema)) {
13
+ throw new TheoremError('config', `registerStructured '${id}': jsonSchema must be a JSON Schema object`);
14
+ }
15
+ schemas.set(id, spec);
16
+ },
17
+ get(id) {
18
+ const spec = schemas.get(id);
19
+ if (!spec) {
20
+ throw new TheoremError('config', `Unknown structured schema '${id}'`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
21
+ }
22
+ return spec;
23
+ },
24
+ find: (id) => schemas.get(id),
25
+ };
26
+ }
27
+ export { createSchemaRegistry };
@@ -0,0 +1,7 @@
1
+ import type { Profile } from '../types.js';
2
+ /**
3
+ * Replaces each `{name}` that names one of the profile's slots with the value the request chose.
4
+ * A `{name}` that is no slot stays as written. A prompt that uses a slot the request left
5
+ * unfilled is a request error. Every value is one the profile lists, so no free text is written.
6
+ */
7
+ export declare function fillSlots(profile: Profile, text: string, slots: Record<string, string> | undefined, where: string): string;
@@ -0,0 +1,22 @@
1
+ import { TheoremError } from '../../guardrails/error.js';
2
+ import { profileInputs } from './catalog.js';
3
+ const SLOT_REF = /\{([A-Za-z_][\w-]*)\}/g;
4
+ /**
5
+ * Replaces each `{name}` that names one of the profile's slots with the value the request chose.
6
+ * A `{name}` that is no slot stays as written. A prompt that uses a slot the request left
7
+ * unfilled is a request error. Every value is one the profile lists, so no free text is written.
8
+ */
9
+ export function fillSlots(profile, text, slots, where) {
10
+ const declared = profileInputs(profile)?.slots;
11
+ if (!declared)
12
+ return text;
13
+ return text.replace(SLOT_REF, (whole, name) => {
14
+ if (!Object.hasOwn(declared, name))
15
+ return whole;
16
+ const value = slots && Object.hasOwn(slots, name) ? slots[name] : undefined;
17
+ if (value === undefined) {
18
+ throw new TheoremError('request', `Profile ${profile.id}: ${where} uses slot '${name}', and the request chose no value for it`);
19
+ }
20
+ return value;
21
+ });
22
+ }
@@ -0,0 +1,2 @@
1
+ import type { ModelId } from '../types.js';
2
+ export declare function soleModelId(models: Record<ModelId, unknown>): ModelId | undefined;
@@ -0,0 +1,4 @@
1
+ export function soleModelId(models) {
2
+ const ids = Object.keys(models);
3
+ return ids.length === 1 ? ids[0] : undefined;
4
+ }
@@ -0,0 +1,8 @@
1
+ import type { ModelProfile, SystemPiece, TurnRequest } from '../types.js';
2
+ /**
3
+ * Synchronous: snapshotted in `resolveTurn` before any async work. Each source
4
+ * keeps its own marks: a `{ private }` part in `req.system` leaves the
5
+ * profile's prompt as private as it was written.
6
+ */
7
+ declare function resolveTurnSystemPrompt(profile: ModelProfile, req: TurnRequest): SystemPiece[];
8
+ export { resolveTurnSystemPrompt };
@@ -0,0 +1,32 @@
1
+ import { joinSystemPieces, mapSystemPrompt, systemPieces } from '../system-parts.js';
2
+ import { fillSlots } from './slot-fill.js';
3
+ import { pickSystemRole } from './system-role.js';
4
+ /**
5
+ * `identity.system` is trusted author-time copy and crosses no boundary: no detector reads it.
6
+ * A `{slot}` in it becomes the value the request chose, which is one the profile lists.
7
+ * `req.system` is `assembled` per turn and is read at the `system` boundary.
8
+ */
9
+ function systemFromProfile(profile, role, slots) {
10
+ if (profile.type === 'speech') {
11
+ return [];
12
+ }
13
+ const { systemByRole, system } = profile.identity;
14
+ const prompt = systemByRole?.[role] || system || '';
15
+ if (!prompt) {
16
+ return [];
17
+ }
18
+ return systemPieces(mapSystemPrompt(prompt, `Profile ${profile.id} identity.system`, (text) => fillSlots(profile, text, slots, 'identity.system')));
19
+ }
20
+ /**
21
+ * Synchronous: snapshotted in `resolveTurn` before any async work. Each source
22
+ * keeps its own marks: a `{ private }` part in `req.system` leaves the
23
+ * profile's prompt as private as it was written.
24
+ */
25
+ function resolveTurnSystemPrompt(profile, req) {
26
+ const role = pickSystemRole(profile, req.input?.role);
27
+ return joinSystemPieces([
28
+ systemFromProfile(profile, role, req.input?.slots),
29
+ req.system === undefined ? [] : systemPieces(req.system),
30
+ ]);
31
+ }
32
+ export { resolveTurnSystemPrompt };
@@ -0,0 +1,3 @@
1
+ import type { ModelProfile } from '../types.js';
2
+ declare function pickSystemRole(profile: ModelProfile, requested?: string): string;
3
+ export { pickSystemRole };
@@ -0,0 +1,9 @@
1
+ function pickSystemRole(profile, requested) {
2
+ const { handle } = profile.identity;
3
+ const systemByRole = profile.type === 'speech' ? undefined : profile.identity.systemByRole;
4
+ if (requested && systemByRole && Object.hasOwn(systemByRole, requested)) {
5
+ return requested;
6
+ }
7
+ return handle;
8
+ }
9
+ export { pickSystemRole };
@@ -0,0 +1,14 @@
1
+ import type { JsonObject } from '../json.js';
2
+ import type { KeySlot } from '../types.js';
3
+ /** A key as the vault holds it: a string, or an object for a provider that signs in with several fields. */
4
+ export type KeyCredential = string | JsonObject;
5
+ export interface CredentialContext {
6
+ providerId: string;
7
+ apiId: string;
8
+ keySlot: KeySlot;
9
+ signal?: AbortSignal;
10
+ }
11
+ /** Reads a key when a call needs it, e.g. from a secret manager. */
12
+ export type CredentialResolver = (context: CredentialContext) => KeyCredential | Promise<KeyCredential>;
13
+ /** The host's keys, by slot. The kernel reads a slot only for the call that names it. */
14
+ export type KeyVault = Readonly<Record<KeySlot, KeyCredential | CredentialResolver | undefined>>;
@@ -0,0 +1 @@
1
+ export {};