@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,127 @@
1
+ // invariant: The model's raw call is the one owner of a call's arguments. The transcript, the interface
2
+ // session and history read calls through this fold only.
3
+ import { TheoremError } from '../guardrails/error.js';
4
+ import { labelText } from '../guardrails/labels.js';
5
+ import { partialJsonObject } from '../kernel/util/partial-json.js';
6
+ /**
7
+ * The raw call comes first for every call (`turnEventSchema`); a phase for a call never made is a
8
+ * broken stream.
9
+ */
10
+ function applyToolEvent(call, tool) {
11
+ if (tool.phase === undefined) {
12
+ return {
13
+ name: tool.name,
14
+ callId: tool.callId,
15
+ ...(tool.operationId ? { operationId: tool.operationId } : {}),
16
+ arguments: tool.arguments,
17
+ ...(tool.reasoning ? { reasoning: tool.reasoning } : {}),
18
+ ...(tool.stepId ? { stepId: tool.stepId } : {}),
19
+ artifacts: [],
20
+ };
21
+ }
22
+ if (call === undefined) {
23
+ throw new TheoremError('bad_response', `Tool event '${tool.phase}' for call '${tool.callId}' arrived before the call.`);
24
+ }
25
+ if (call.callId !== tool.callId || call.name !== tool.name) {
26
+ throw new TheoremError('bad_response', labelText('error.bad_response'));
27
+ }
28
+ switch (tool.phase) {
29
+ case 'running': {
30
+ // why: A resumed call runs again: it is open until its next settle.
31
+ const { endedAt: _settled, outputDraft: _drafted, ...open } = call;
32
+ return {
33
+ ...open,
34
+ state: tool,
35
+ startedAt: tool.at,
36
+ ...(tool.edited ? { edited: tool.edited } : {}),
37
+ ...(tool.activity ? { activity: tool.activity } : {}),
38
+ };
39
+ }
40
+ case 'complete':
41
+ return {
42
+ ...settled(call),
43
+ state: tool,
44
+ endedAt: tool.at,
45
+ ...(tool.activityPast ? { activityPast: tool.activityPast } : {}),
46
+ };
47
+ case 'error':
48
+ return {
49
+ ...settled(call),
50
+ state: tool,
51
+ endedAt: tool.at,
52
+ ...(tool.activityPast ? { activityPast: tool.activityPast } : {}),
53
+ };
54
+ case 'cancel':
55
+ case 'gate':
56
+ return { ...settled(call), state: tool, endedAt: tool.at };
57
+ case 'draft':
58
+ return { ...call, outputDraft: (call.outputDraft ?? '') + tool.text };
59
+ case 'artifact':
60
+ return { ...call, artifacts: [...call.artifacts, tool.artifact] };
61
+ case 'dispatch':
62
+ case 'progress':
63
+ case 'trace':
64
+ case 'warning':
65
+ return call;
66
+ }
67
+ }
68
+ /** `call` without the preview of its output: it settled, and its output is whole. */
69
+ function settled(call) {
70
+ const { outputDraft: _drafted, ...rest } = call;
71
+ return rest;
72
+ }
73
+ /**
74
+ * A call the model is still writing, with the next piece of its draft added. The call that arrives
75
+ * whole replaces it (`applyToolEvent` builds the call from the request alone).
76
+ */
77
+ function applyToolDraft(call, draft) {
78
+ return {
79
+ arguments: {},
80
+ artifacts: [],
81
+ ...call,
82
+ name: draft.name,
83
+ callId: draft.callId,
84
+ draft: (call?.draft ?? '') + draft.text,
85
+ };
86
+ }
87
+ /** Every call in `events`, in the order the model made them. */
88
+ function toolCallsOf(events) {
89
+ const calls = new Map();
90
+ for (const event of events) {
91
+ if (event.type === 'tool_draft') {
92
+ calls.set(event.callId, applyToolDraft(calls.get(event.callId), event));
93
+ continue;
94
+ }
95
+ if (event.type !== 'tool')
96
+ continue;
97
+ const { tool } = event;
98
+ const key = tool.operationId ?? tool.callId;
99
+ // why: The draft is keyed by the model's callId; the call that replaces it may carry an operation ID.
100
+ if (tool.phase === undefined && calls.get(tool.callId)?.draft !== undefined) {
101
+ calls.delete(tool.callId);
102
+ }
103
+ calls.set(key, applyToolEvent(calls.get(key), tool));
104
+ }
105
+ return [...calls.values()];
106
+ }
107
+ /** The arguments shown for approval, or the user's edit, or the model's original call. */
108
+ function toolCallRanWith(call) {
109
+ return ((call.state?.phase === 'gate' ? call.state.gate.preparedArguments : undefined) ??
110
+ call.edited?.to ??
111
+ call.arguments);
112
+ }
113
+ /** True when the event is the complete or error event of the tool call with this id. */
114
+ function settlesToolCall(event, callId) {
115
+ if (event.type !== 'tool' || event.tool.callId !== callId)
116
+ return false;
117
+ return event.tool.phase === 'complete' || event.tool.phase === 'error';
118
+ }
119
+ /**
120
+ * A call's arguments as far as the model has written them: the whole arguments once the call has
121
+ * arrived, else what `partialJsonObject` reads of its draft. For a preview: a field still being
122
+ * written is not its final value.
123
+ */
124
+ function argumentsSoFar(call) {
125
+ return call.draft === undefined ? call.arguments : partialJsonObject(call.draft);
126
+ }
127
+ export { applyToolDraft, applyToolEvent, argumentsSoFar, settlesToolCall, toolCallRanWith, toolCallsOf, };
@@ -0,0 +1,6 @@
1
+ import type { ToolId, TurnEvent, TurnToolSnapshot } from '../kernel/types.js';
2
+ /** The ids of the tools a turn loaded, read from the loaded ids in its completed tool events. */
3
+ declare function promotedToolIdsFromEvents(events: readonly TurnEvent[]): ToolId[];
4
+ /** The tool snapshot on the last `done` event that carries one, which only a turn stopped on a tool or gate does. */
5
+ declare function toolSnapshotFromEvents(events: readonly TurnEvent[]): TurnToolSnapshot | undefined;
6
+ export { promotedToolIdsFromEvents, toolSnapshotFromEvents };
@@ -0,0 +1,22 @@
1
+ import { extractLoadedIds } from '../kernel/tools/resolve.js';
2
+ import { findLast } from '../kernel/util/find-last.js';
3
+ /** The ids of the tools a turn loaded, read from the loaded ids in its completed tool events. */
4
+ function promotedToolIdsFromEvents(events) {
5
+ const ids = new Set();
6
+ for (const event of events) {
7
+ if (event.type !== 'tool' || event.tool.phase !== 'complete') {
8
+ continue;
9
+ }
10
+ for (const id of extractLoadedIds(event.tool.output) ?? []) {
11
+ ids.add(id);
12
+ }
13
+ }
14
+ return [...ids];
15
+ }
16
+ /** The tool snapshot on the last `done` event that carries one, which only a turn stopped on a tool or gate does. */
17
+ function toolSnapshotFromEvents(events) {
18
+ // why: Only a `done` that stopped on `tool` or `gate` carries one (`DoneEvent`).
19
+ const done = findLast(events, (event) => event.type === 'done' && event.tools !== undefined);
20
+ return done?.type === 'done' ? done.tools : undefined;
21
+ }
22
+ export { promotedToolIdsFromEvents, toolSnapshotFromEvents };
@@ -0,0 +1,11 @@
1
+ /** A media file a tool's output points to: its URL, MIME type and, when the output carried one, a smaller preview URL. */
2
+ export type PromotedToolMedia = {
3
+ url: string;
4
+ mimeType: string;
5
+ /** A smaller copy of the same file, when the output also carried one. */
6
+ previewUrl?: string;
7
+ };
8
+ /** Reads an http(s) URL string as promoted media, with the MIME type taken from its file extension; returns undefined for an empty or invalid string, another scheme, or an extension it does not know. */
9
+ export declare function promotedMediaFromUrlString(raw: string): PromotedToolMedia | undefined;
10
+ /** One file at several sizes is promoted once: `url` its largest copy, `previewUrl` its smallest. */
11
+ export declare function collectPromotedMediaFromToolOutput(output: unknown): PromotedToolMedia[];
@@ -0,0 +1,113 @@
1
+ const EXT_MIME = {
2
+ avif: 'image/avif',
3
+ gif: 'image/gif',
4
+ heic: 'image/heic',
5
+ heif: 'image/heif',
6
+ jpeg: 'image/jpeg',
7
+ jpg: 'image/jpeg',
8
+ png: 'image/png',
9
+ svg: 'image/svg+xml',
10
+ webp: 'image/webp',
11
+ mp4: 'video/mp4',
12
+ webm: 'video/webm',
13
+ mov: 'video/quicktime',
14
+ ogv: 'video/ogg',
15
+ mp3: 'audio/mpeg',
16
+ m4a: 'audio/mp4',
17
+ ogg: 'audio/ogg',
18
+ wav: 'audio/wav',
19
+ };
20
+ function mimeForPathname(pathname) {
21
+ const base = pathname.split('/').pop() ?? pathname;
22
+ const dot = base.lastIndexOf('.');
23
+ if (dot <= 0 || dot === base.length - 1)
24
+ return undefined;
25
+ const ext = base.slice(dot + 1).toLowerCase();
26
+ return EXT_MIME[ext];
27
+ }
28
+ /** Reads an http(s) URL string as promoted media, with the MIME type taken from its file extension; returns undefined for an empty or invalid string, another scheme, or an extension it does not know. */
29
+ export function promotedMediaFromUrlString(raw) {
30
+ const trimmed = raw.trim();
31
+ if (trimmed.length === 0)
32
+ return undefined;
33
+ let parsed;
34
+ try {
35
+ parsed = new URL(trimmed);
36
+ }
37
+ catch {
38
+ return undefined;
39
+ }
40
+ if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:')
41
+ return undefined;
42
+ const mimeType = mimeForPathname(parsed.pathname);
43
+ if (!mimeType)
44
+ return undefined;
45
+ return { url: parsed.href, mimeType };
46
+ }
47
+ /** MediaWiki resizes: `…/thumb/<a>/<ab>/<File>/<N>px-<File>` is `<N>` wide; the original is `…/<a>/<ab>/<File>`. */
48
+ const MEDIAWIKI_THUMB = /^(.*)\/thumb(\/.+\/([^/]+))\/(\d+)px-\3(?:\.[a-z0-9]+)?$/i;
49
+ /**
50
+ * The underlying file, so one picture at several sizes counts once (Wikipedia
51
+ * summaries carry `thumbnail` and `originalimage`, sometimes on different
52
+ * wikimedia.org hosts). `width` ranks copies; the original ranks highest.
53
+ */
54
+ function mediaAsset(url) {
55
+ const parsed = new URL(url);
56
+ const site = parsed.hostname.split('.').slice(-2).join('.');
57
+ // why: Tracking parameters never change the file; other query parameters may.
58
+ for (const name of [...parsed.searchParams.keys()]) {
59
+ if (name.startsWith('utm_'))
60
+ parsed.searchParams.delete(name);
61
+ }
62
+ const thumb = MEDIAWIKI_THUMB.exec(parsed.pathname);
63
+ const pathname = thumb ? `${thumb[1]}${thumb[2]}` : parsed.pathname;
64
+ return {
65
+ key: `${site}${pathname}${parsed.search}`,
66
+ width: thumb ? Number(thumb[4]) : Number.POSITIVE_INFINITY,
67
+ };
68
+ }
69
+ /** One file at several sizes is promoted once: `url` its largest copy, `previewUrl` its smallest. */
70
+ export function collectPromotedMediaFromToolOutput(output) {
71
+ const seen = new Map();
72
+ const out = [];
73
+ const visit = (value) => {
74
+ if (typeof value === 'string') {
75
+ const media = promotedMediaFromUrlString(value);
76
+ if (!media)
77
+ return;
78
+ const asset = mediaAsset(media.url);
79
+ const prior = seen.get(asset.key);
80
+ if (!prior) {
81
+ seen.set(asset.key, { index: out.length, largest: asset.width, smallest: asset.width });
82
+ out.push(media);
83
+ return;
84
+ }
85
+ const current = out[prior.index];
86
+ if (asset.width > prior.largest) {
87
+ prior.largest = asset.width;
88
+ out[prior.index] = {
89
+ ...current,
90
+ url: media.url,
91
+ previewUrl: current.previewUrl ?? current.url,
92
+ };
93
+ }
94
+ else if (asset.width < prior.smallest) {
95
+ prior.smallest = asset.width;
96
+ out[prior.index] = { ...current, previewUrl: media.url };
97
+ }
98
+ return;
99
+ }
100
+ if (Array.isArray(value)) {
101
+ for (const item of value)
102
+ visit(item);
103
+ return;
104
+ }
105
+ if (value !== null && typeof value === 'object') {
106
+ for (const nested of Object.values(value)) {
107
+ visit(nested);
108
+ }
109
+ }
110
+ };
111
+ visit(output);
112
+ return out;
113
+ }
@@ -0,0 +1,278 @@
1
+ import type { Boundary } from '../guardrails/boundaries.js';
2
+ import type { DetectAction, DetectMatrix, Detector, UrlDetector } from '../guardrails/detectors.js';
3
+ import type { GuardrailEvent } from '../guardrails/event-schemas.js';
4
+ import type { LabelOverrides } from '../guardrails/labels.js';
5
+ import type { ResolvedGuardrailPolicy } from '../guardrails/types.js';
6
+ import type { ProfileToolsSpec, ToolCallEdit, ToolPhaseEvent } from '../kernel/tools/types.js';
7
+ import type { ReasoningPart } from '../kernel/turn-events.js';
8
+ import type { AttachmentValidationIssue, CompactionSpec, GroundingEvent, ImageProfile, LiveProfile, ModelBinding, ModelId, ProfileContextSpec, ProfileOutputsSpec, ProviderEvidence, Source, SpeechProfile, TextProfile, TurnStop, TurnTokens } from '../kernel/types.js';
9
+ import type { ResolvedObservabilityPolicy } from '../observability/types.js';
10
+ /** What a URL detector lets through besides the given URLs, with its defaults applied. */
11
+ export interface UrlAllowView {
12
+ hosts: string[];
13
+ fromTools: boolean;
14
+ }
15
+ /** Whose patterns one detector reads with: the host's are named, never shown. */
16
+ export interface DetectorPatternsView {
17
+ /** Whether Theorem's own patterns run. */
18
+ theorem: boolean;
19
+ /** The names of the host's patterns. */
20
+ names: string[];
21
+ }
22
+ /** A detector of the host's own: what it is called and where it applies, never what it matches. */
23
+ export interface HostDetectorView {
24
+ /** Its key in `guardrails.detect`, as in `acme.record`. Its rule is `detect.<id>`. */
25
+ id: string;
26
+ label: string;
27
+ /** Its action at every boundary. */
28
+ actions: Record<Boundary, DetectAction>;
29
+ /** The names of its patterns. */
30
+ names: string[];
31
+ /** Whether it also reads with a function of the host's. */
32
+ find: boolean;
33
+ }
34
+ /** Guardrails visible to UI — a host detector's `find` is told of, not sent. */
35
+ export type ProfileGuardrailsView = Pick<ResolvedGuardrailPolicy, 'quota' | 'blockedReply'> & {
36
+ /** Every detector's action at every boundary. */
37
+ detect: DetectMatrix;
38
+ /** Whose patterns a detector reads with, for each one the profile changed it for. */
39
+ patterns?: Partial<Record<Detector, DetectorPatternsView>>;
40
+ /** The host's own detectors, in the order the profile lists them. The kernel reads with them. */
41
+ host?: HostDetectorView[];
42
+ /** What `ungiven_images` and `ungiven_links` let through. */
43
+ allow: Record<UrlDetector, UrlAllowView>;
44
+ };
45
+ /** Observability visible to UI — TraceSink / onWriteError functions are omitted. */
46
+ export type ProfileObservabilityView = Pick<ResolvedObservabilityPolicy, 'record' | 'sampleRate' | 'include' | 'scrub' | 'resource' | 'retainForDays' | 'rotateAfterMiB'> & {
47
+ /** false | registered id | 'custom' when writeTo is an inline TraceSink; absent when unset. */
48
+ writeTo?: false | string;
49
+ hasOnWriteError: boolean;
50
+ };
51
+ /** Resolved `inputs` — `ProfileInputsSpec` plus `acceptAttr` for file pickers. */
52
+ export interface ProfileInputsInterface {
53
+ text: boolean;
54
+ attachments: {
55
+ accept: string[];
56
+ acceptAttr: string;
57
+ } | null;
58
+ voice: {
59
+ accept: string[];
60
+ } | null;
61
+ maxFiles?: number;
62
+ maxBytes?: number;
63
+ maxTurnBytes?: number;
64
+ limitsByMime?: Record<string, number>;
65
+ slots?: Record<string, string[]>;
66
+ context?: ProfileContextSpec;
67
+ }
68
+ /**
69
+ * A tool's definition (handler, schemas, endpoint, headers) stays on the host; `t1Policy` too.
70
+ * `page` names the tools the page answers (`answeredBy: 'page'`): the page needs a function for each.
71
+ */
72
+ export type ProfileToolsView = Pick<ProfileToolsSpec, 'allow' | 't2Loader' | 'parallel'> & {
73
+ page: string[];
74
+ };
75
+ /** A model binding as the interface carries it: a compaction `trigger` is a host function. */
76
+ export type ModelBindingView = Omit<ModelBinding, 'compaction'> & {
77
+ compaction?: Omit<CompactionSpec, 'trigger'>;
78
+ };
79
+ /** `profile.outputs` as the interface carries it: validators are host functions. */
80
+ export type ProfileOutputsView = Omit<ProfileOutputsSpec, 'validation'>;
81
+ /** What the text, image, and speech interfaces carry in place of their profile's own fields. */
82
+ export type ComposerInterfaceFields = {
83
+ models: Record<ModelId, ModelBindingView>;
84
+ outputs?: ProfileOutputsView;
85
+ /** Client keys' overrides (`CLIENT_LABEL_KEYS`), resolved on the host; pass to `labelText`. */
86
+ labels: LabelOverrides;
87
+ inputs: ProfileInputsInterface;
88
+ guardrails?: ProfileGuardrailsView;
89
+ observability?: ProfileObservabilityView;
90
+ /** Always true — composer turns cancel via `TurnRequest.signal`. */
91
+ canStop: true;
92
+ };
93
+ /** A text profile as a client sees it, without its server-only fields. */
94
+ export type TextProfileInterface = Omit<TextProfile, 'inputs' | 'tools' | 'guardrails' | 'observability' | 'labels' | 'models' | 'outputs'> & ComposerInterfaceFields & {
95
+ tools: ProfileToolsView;
96
+ /** From `turnBehaviour.allowSteering` (default true on text). */
97
+ allowSteering: boolean;
98
+ };
99
+ /** An image profile as a client sees it, without its server-only fields. */
100
+ export type ImageProfileInterface = Omit<ImageProfile, 'inputs' | 'tools' | 'guardrails' | 'observability' | 'labels' | 'models' | 'outputs'> & ComposerInterfaceFields & {
101
+ tools: ProfileToolsView;
102
+ };
103
+ /** A speech profile as a client sees it, without its server-only fields. */
104
+ export type SpeechProfileInterface = Omit<SpeechProfile, 'guardrails' | 'observability' | 'labels' | 'models' | 'outputs'> & ComposerInterfaceFields;
105
+ /** A live profile as a client sees it, without its server-only fields. */
106
+ export type LiveProfileInterface = Omit<LiveProfile, 'tools' | 'guardrails' | 'observability' | 'labels' | 'models' | 'live'> & {
107
+ /** Without `greeting` and `resumed`: the prompts stay on the host. */
108
+ live: Omit<LiveProfile['live'], 'greeting' | 'resumed'>;
109
+ models: Record<ModelId, ModelBindingView>;
110
+ /** Client keys' overrides (`CLIENT_LABEL_KEYS`), resolved on the host; pass to `labelText`. */
111
+ labels: LabelOverrides;
112
+ tools: Pick<ProfileToolsView, 'allow' | 'page'>;
113
+ guardrails?: ProfileGuardrailsView;
114
+ observability?: ProfileObservabilityView;
115
+ };
116
+ /** Any profile as a client sees it. */
117
+ export type ProfileInterface = TextProfileInterface | ImageProfileInterface | SpeechProfileInterface | LiveProfileInterface;
118
+ /** Turn/chat composer profiles — excludes live (realtime streams, no turn inputs block). */
119
+ export type ComposerProfileInterface = Exclude<ProfileInterface, LiveProfileInterface>;
120
+ /** The kinds of block a transcript holds. */
121
+ export type TranscriptBlockKind = 'user-text' | 'user-attachment' | 'user-voice' | 'thought' | 'text' | 'tool' | 'structured' | 'media' | 'grounding' | 'citation' | 'evidence' | 'guardrail' | 'error' | 'turn-done';
122
+ export interface TranscriptBlockBase {
123
+ id: string;
124
+ kind: TranscriptBlockKind;
125
+ }
126
+ export interface UserTextBlock extends TranscriptBlockBase {
127
+ kind: 'user-text';
128
+ text: string;
129
+ }
130
+ export interface UserAttachmentBlock extends TranscriptBlockBase {
131
+ kind: 'user-attachment' | 'user-voice';
132
+ name: string;
133
+ mimeType: string;
134
+ sizeBytes: number;
135
+ /** Optional base64 payload for inline image/audio preview in the host UI. */
136
+ data?: string;
137
+ }
138
+ export interface ThoughtBlock extends TranscriptBlockBase {
139
+ kind: 'thought';
140
+ text: string;
141
+ }
142
+ export interface TextBlock extends TranscriptBlockBase {
143
+ kind: 'text';
144
+ text: string;
145
+ }
146
+ /** Where a call stands: the latest phase that changes its status. */
147
+ export type ToolCallState = Extract<ToolPhaseEvent, {
148
+ phase: 'running' | 'gate' | 'complete' | 'error' | 'cancel';
149
+ }>;
150
+ /** invariant: An issued operation joins its request and phases; historical calls use callId. */
151
+ export interface ToolCall {
152
+ operationId?: string;
153
+ name: string;
154
+ callId: string;
155
+ /** What the model proposed. `{}` while the model is still writing the call (`draft`). */
156
+ arguments: Record<string, unknown>;
157
+ /**
158
+ * While the model is still writing the call: its arguments' JSON text so far, from its
159
+ * `tool_draft` events. Gone once the call arrives whole; `argumentsSoFar` reads it.
160
+ */
161
+ draft?: string;
162
+ /** The call's `ToolCallRequest.reasoning`: history replays the call with it. */
163
+ reasoning?: ReasoningPart[];
164
+ /** The call's `ToolCallRequest.stepId`: calls sharing it replay as one assistant message. */
165
+ stepId?: string;
166
+ /** The user's edit on approval; `to` is what ran. */
167
+ edited?: ToolCallEdit;
168
+ /** What the call is doing, in the tool's words, from its last `running` phase. */
169
+ activity?: string;
170
+ /** What the call did, from its `complete` phase, or that it failed, from its `error` phase. */
171
+ activityPast?: string;
172
+ /**
173
+ * While the call runs: what the tool has written of its output so far, from its `draft` phases
174
+ * (an agent tool's: its agent's reply). Gone once the call settles; `state` has the output.
175
+ */
176
+ outputDraft?: string;
177
+ /** Absent while the call has only been made. */
178
+ state?: ToolCallState;
179
+ /** When it last started running (epoch ms). */
180
+ startedAt?: number;
181
+ /** When it last settled: complete, failed, cancelled, or gated (epoch ms). */
182
+ endedAt?: number;
183
+ artifacts: unknown[];
184
+ }
185
+ export interface ToolBlock extends TranscriptBlockBase {
186
+ kind: 'tool';
187
+ tool: ToolCall;
188
+ }
189
+ export interface StructuredBlock extends TranscriptBlockBase {
190
+ kind: 'structured';
191
+ /** The reply; while `draft` is set, what of it the model has written so far (`partialJsonObject`). */
192
+ value: unknown;
193
+ /**
194
+ * The JSON the model has written so far, from `structured_draft` events. Gone once the
195
+ * `structured` event arrives, which owns the reply.
196
+ */
197
+ draft?: string;
198
+ }
199
+ export interface MediaBlock extends TranscriptBlockBase {
200
+ kind: 'media';
201
+ mimeType: string;
202
+ /** Base64 for model-generated or attached media. Absent when `url` is set. */
203
+ data?: string;
204
+ /** Remote http(s) URL promoted from completed tool output. Absent when `data` is set. */
205
+ url?: string;
206
+ /** A smaller copy of `url` for previews, when the tool output offered one. */
207
+ previewUrl?: string;
208
+ }
209
+ export interface GroundingBlock extends TranscriptBlockBase {
210
+ kind: 'grounding';
211
+ grounding: GroundingEvent;
212
+ }
213
+ /** Sources a provider or a tool cited; `callId` names the tool call when a tool did. */
214
+ export interface CitationBlock extends TranscriptBlockBase {
215
+ kind: 'citation';
216
+ sources: Source[];
217
+ callId?: string;
218
+ }
219
+ export interface EvidenceBlock extends TranscriptBlockBase {
220
+ kind: 'evidence';
221
+ evidence: ProviderEvidence;
222
+ }
223
+ /**
224
+ * A guardrail's decision on the turn: a flag, a redaction, or a block. It names the rule and where
225
+ * it matched (`hits[].span`), never the matched text. It comes before the text it was read from.
226
+ * Theorem's own transcript shows nothing for it; a host reads it to show its own notice.
227
+ */
228
+ export interface GuardrailBlock extends TranscriptBlockBase {
229
+ kind: 'guardrail';
230
+ guardrail: GuardrailEvent;
231
+ }
232
+ export interface ErrorBlock extends TranscriptBlockBase {
233
+ kind: 'error';
234
+ message: string;
235
+ }
236
+ export interface TurnDoneBlock extends TranscriptBlockBase {
237
+ kind: 'turn-done';
238
+ stop?: TurnStop;
239
+ tokens?: TurnTokens;
240
+ interactionId?: string;
241
+ compaction?: boolean;
242
+ /**
243
+ * How long the reply has worked so far (ms), approval waits excluded. The host
244
+ * client stamps it when a run ends, so the time travels with the transcript.
245
+ */
246
+ workedMs?: number;
247
+ /** When the reply last stopped (epoch ms), stamped with `workedMs`. */
248
+ endedAt?: number;
249
+ }
250
+ /** One block of a transcript: a message, an attachment, a thought, a tool call, or a notice. */
251
+ export type TranscriptBlock = UserTextBlock | UserAttachmentBlock | ThoughtBlock | TextBlock | ToolBlock | StructuredBlock | MediaBlock | GroundingBlock | CitationBlock | EvidenceBlock | GuardrailBlock | ErrorBlock | TurnDoneBlock;
252
+ /** A file the user has picked but not yet sent. */
253
+ export interface PendingAttachment {
254
+ name: string;
255
+ mimeType: string;
256
+ sizeBytes: number;
257
+ /** Optional base64 payload copied onto the transcript block for UI preview. */
258
+ data?: string;
259
+ }
260
+ /** Whether the pending attachments pass the profile's limits, and the issues if not. */
261
+ export interface AttachmentValidationResult {
262
+ ok: boolean;
263
+ issues: AttachmentValidationIssue[];
264
+ }
265
+ /** What the user has composed and not yet sent. */
266
+ export interface UserTurnDraft {
267
+ text?: string;
268
+ attachments?: PendingAttachment[];
269
+ voice?: PendingAttachment[];
270
+ }
271
+ /** Options for folding turn events into transcript blocks. */
272
+ export interface FoldTurnEventsOptions {
273
+ showThoughts?: boolean;
274
+ idPrefix?: string;
275
+ }
276
+ /** True unless the profile turns thought streaming off. */
277
+ declare function streamThoughtsEnabled(outputs?: ProfileOutputsSpec): boolean;
278
+ export { streamThoughtsEnabled };
@@ -0,0 +1,5 @@
1
+ /** True unless the profile turns thought streaming off. */
2
+ function streamThoughtsEnabled(outputs) {
3
+ return outputs?.streaming?.streamThoughts !== false;
4
+ }
5
+ export { streamThoughtsEnabled };
@@ -0,0 +1,85 @@
1
+ /** labels-exempt-file: authoring request-field and export meta — not runtime user or model copy (P2) */
2
+ import type { FieldMeta } from './schema.js';
3
+ import type { TurnInput, TurnRequest } from './types.js';
4
+ /** The catalog of the fields a `runTurn` request takes, keyed `runTurn.<field>`. */
5
+ export declare const REQUEST_FIELDS: Record<`runTurn.${keyof TurnRequest | `input.${keyof TurnInput}`}`, FieldMeta>;
6
+ /** What the catalog records about one export: what it is and what it does. */
7
+ export type ApiExportMeta = {
8
+ kind: 'function' | 'class';
9
+ doc: string;
10
+ };
11
+ /** The catalog of the exports a builder calls by name, keyed by that name. */
12
+ export declare const API_EXPORTS: {
13
+ readonly defineProfile: {
14
+ readonly kind: "function";
15
+ readonly doc: "Checks a profile and returns it; a field the profile type cannot take is a config error.";
16
+ };
17
+ readonly registerProfile: {
18
+ readonly kind: "function";
19
+ readonly doc: "Stores a profile under its id, so that a request can name it.";
20
+ };
21
+ readonly registerTool: {
22
+ readonly kind: "function";
23
+ readonly doc: "Stores a tool under its name, so that a profile can list it in tools.allow.";
24
+ };
25
+ readonly registerStructured: {
26
+ readonly kind: "function";
27
+ readonly doc: "Stores a JSON Schema under an id, so that a profile can name it in outputs.structured.";
28
+ };
29
+ readonly registerTraceDestination: {
30
+ readonly kind: "function";
31
+ readonly doc: "Stores a place to write traces under an id, so that a profile can name it in observability.";
32
+ };
33
+ readonly defineProvider: {
34
+ readonly kind: "function";
35
+ readonly doc: "Validates a provider definition and supplies its typed model helper.";
36
+ };
37
+ readonly registerProvider: {
38
+ readonly kind: "function";
39
+ readonly doc: "Registers a provider instance before profiles reference its ID.";
40
+ };
41
+ readonly runTurn: {
42
+ readonly kind: "function";
43
+ readonly doc: "Runs one turn of a text, image, or speech profile and yields its events.";
44
+ };
45
+ readonly runSession: {
46
+ readonly kind: "function";
47
+ readonly doc: "Runs a realtime voice or video session of a live profile.";
48
+ };
49
+ readonly runDecision: {
50
+ readonly kind: "function";
51
+ readonly doc: "Asks a decision profile its questions about your JSON state and returns checked answers.";
52
+ };
53
+ readonly invokeTool: {
54
+ readonly kind: "function";
55
+ readonly doc: "Runs one registered tool through a profile, with no model.";
56
+ };
57
+ readonly runTool: {
58
+ readonly kind: "function";
59
+ readonly doc: "Runs one registered tool through a profile, with no model, and returns how the call settled.";
60
+ };
61
+ readonly compactHistory: {
62
+ readonly kind: "function";
63
+ readonly doc: "Shortens a conversation history with the compaction the profile sets.";
64
+ };
65
+ readonly takeSlot: {
66
+ readonly kind: "function";
67
+ readonly doc: "Takes a client's turn slot on a profile; it answers ok, busy, quota, or not_configured.";
68
+ };
69
+ readonly releaseSlot: {
70
+ readonly kind: "function";
71
+ readonly doc: "Frees the turn slot that takeSlot gave.";
72
+ };
73
+ readonly overrideLabels: {
74
+ readonly kind: "function";
75
+ readonly doc: "Replaces status lines for every profile in the process; a profile's own labels wins.";
76
+ };
77
+ readonly resetLabels: {
78
+ readonly kind: "function";
79
+ readonly doc: "Removes every replacement that overrideLabels made.";
80
+ };
81
+ readonly TheoremError: {
82
+ readonly kind: "class";
83
+ readonly doc: "The error Theorem throws; its kind tells your host which status and wording to use.";
84
+ };
85
+ };