@theoremjs/agents 0.3.0 → 0.3.2

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 (570) hide show
  1. package/README.md +277 -995
  2. package/esm/mod.d.ts +34 -20
  3. package/esm/mod.js +19 -12
  4. package/esm/src/cli/commands/bench.js +36 -14
  5. package/esm/src/cli/commands/detect-compile.d.ts +17 -0
  6. package/esm/src/cli/commands/detect-compile.js +22 -0
  7. package/esm/src/cli/commands/eval.d.ts +3 -3
  8. package/esm/src/cli/commands/fuzz-canary.js +55 -16
  9. package/esm/src/cli/commands/profile.js +4 -4
  10. package/esm/src/cli/commands/run.d.ts +2 -2
  11. package/esm/src/cli/commands/run.js +1 -1
  12. package/esm/src/cli/commands/test.d.ts +4 -3
  13. package/esm/src/cli/commands/test.js +2 -2
  14. package/esm/src/cli/index.js +9 -9
  15. package/esm/src/cli/matrix/fixtures.js +25 -30
  16. package/esm/src/evals/attachments.d.ts +1 -0
  17. package/esm/src/evals/attachments.js +4 -2
  18. package/esm/src/evals/breakdown.d.ts +2 -0
  19. package/esm/src/evals/breakdown.js +1 -0
  20. package/esm/src/evals/graders/answer.d.ts +3 -0
  21. package/esm/src/evals/graders/answer.js +1 -0
  22. package/esm/src/evals/graders/code.d.ts +7 -31
  23. package/esm/src/evals/graders/code.js +4 -25
  24. package/esm/src/evals/graders/judge.d.ts +4 -0
  25. package/esm/src/evals/graders/judge.js +7 -5
  26. package/esm/src/evals/graders/latency.d.ts +1 -0
  27. package/esm/src/evals/graders/latency.js +3 -2
  28. package/esm/src/evals/graders/live.d.ts +3 -0
  29. package/esm/src/evals/graders/live.js +2 -0
  30. package/esm/src/evals/graders/media.js +1 -2
  31. package/esm/src/evals/graders/shared.js +1 -1
  32. package/esm/src/evals/graders/transcript.d.ts +2 -0
  33. package/esm/src/evals/graders/transcript.js +5 -3
  34. package/esm/src/evals/mod.d.ts +1 -9
  35. package/esm/src/evals/mod.js +1 -9
  36. package/esm/src/evals/record.d.ts +6 -0
  37. package/esm/src/evals/record.js +4 -2
  38. package/esm/src/evals/rubrics/mod.d.ts +1 -1
  39. package/esm/src/evals/rubrics/mod.js +1 -1
  40. package/esm/src/evals/rubrics/mustache.js +1 -1
  41. package/esm/src/evals/rubrics/types.js +1 -1
  42. package/esm/src/evals/run.d.ts +9 -52
  43. package/esm/src/evals/run.js +12 -46
  44. package/esm/src/evals/suite.d.ts +12 -3
  45. package/esm/src/evals/suite.js +9 -4
  46. package/esm/src/evals/summary.d.ts +3 -0
  47. package/esm/src/evals/summary.js +1 -0
  48. package/esm/src/evals/trial.d.ts +3 -16
  49. package/esm/src/evals/trial.js +7 -30
  50. package/esm/src/evals/types.d.ts +30 -121
  51. package/esm/src/evals/types.js +3 -16
  52. package/esm/src/evals/verdict.d.ts +5 -0
  53. package/esm/src/evals/verdict.js +4 -1
  54. package/esm/src/guardrails/boundaries.d.ts +41 -0
  55. package/esm/src/guardrails/boundaries.js +103 -0
  56. package/esm/src/guardrails/canary-gate.d.ts +1 -0
  57. package/esm/src/guardrails/canary.d.ts +49 -15
  58. package/esm/src/guardrails/canary.js +103 -30
  59. package/esm/src/guardrails/compile-egress.d.ts +6 -5
  60. package/esm/src/guardrails/compile-egress.js +6 -5
  61. package/esm/src/guardrails/corpus/canary-egress-attacks.d.ts +3 -1
  62. package/esm/src/guardrails/corpus/canary-egress-attacks.js +4 -2
  63. package/esm/src/guardrails/corpus/fuzz-inbound.js +14 -17
  64. package/esm/src/guardrails/corpus/inbound-payloads.d.ts +2 -0
  65. package/esm/src/guardrails/corpus/inbound-payloads.js +4 -2
  66. package/esm/src/guardrails/corpus/live-attacks.d.ts +2 -0
  67. package/esm/src/guardrails/corpus/live-attacks.js +6 -1
  68. package/esm/src/guardrails/corpus/mod.d.ts +1 -1
  69. package/esm/src/guardrails/corpus/secrets.d.ts +3 -3
  70. package/esm/src/guardrails/corpus/secrets.js +2 -2
  71. package/esm/src/guardrails/corpus/strings.d.ts +1 -1
  72. package/esm/src/guardrails/corpus/strings.js +1 -1
  73. package/esm/src/guardrails/corpus/types.d.ts +5 -1
  74. package/esm/src/guardrails/credential-rules.d.ts +36 -0
  75. package/esm/src/guardrails/credential-rules.js +3001 -0
  76. package/esm/src/guardrails/credential-scan.d.ts +45 -0
  77. package/esm/src/guardrails/credential-scan.js +172 -0
  78. package/esm/src/guardrails/destinations.d.ts +45 -0
  79. package/esm/src/guardrails/destinations.js +234 -0
  80. package/esm/src/guardrails/detect-at.d.ts +107 -0
  81. package/esm/src/guardrails/detect-at.js +434 -0
  82. package/esm/src/guardrails/detect-reply.d.ts +61 -0
  83. package/esm/src/guardrails/detect-reply.js +95 -0
  84. package/esm/src/guardrails/detect-stream.d.ts +33 -0
  85. package/esm/src/guardrails/detect-stream.js +77 -0
  86. package/esm/src/guardrails/detectors.d.ts +216 -0
  87. package/esm/src/guardrails/detectors.js +503 -0
  88. package/esm/src/guardrails/egress-automata.d.ts +4 -6
  89. package/esm/src/guardrails/egress-automata.js +24095 -4572
  90. package/esm/src/guardrails/egress-compiler.d.ts +38 -16
  91. package/esm/src/guardrails/egress-compiler.js +254 -60
  92. package/esm/src/guardrails/egress-patterns.d.ts +4 -2
  93. package/esm/src/guardrails/egress-patterns.js +6 -2
  94. package/esm/src/guardrails/egress-stream.d.ts +54 -36
  95. package/esm/src/guardrails/egress-stream.js +253 -124
  96. package/esm/src/guardrails/egress-urls.d.ts +6 -3
  97. package/esm/src/guardrails/egress-urls.js +14 -22
  98. package/esm/src/guardrails/egress.d.ts +26 -86
  99. package/esm/src/guardrails/egress.js +59 -309
  100. package/esm/src/guardrails/error.d.ts +13 -8
  101. package/esm/src/guardrails/error.js +25 -18
  102. package/esm/src/guardrails/event-schemas.d.ts +46 -3
  103. package/esm/src/guardrails/event-schemas.js +12 -5
  104. package/esm/src/guardrails/events.d.ts +5 -1
  105. package/esm/src/guardrails/events.js +4 -1
  106. package/esm/src/guardrails/hints.d.ts +14 -0
  107. package/esm/src/guardrails/hints.js +57 -0
  108. package/esm/src/guardrails/hits.d.ts +7 -1
  109. package/esm/src/guardrails/hits.js +12 -1
  110. package/esm/src/guardrails/host-patterns.d.ts +85 -0
  111. package/esm/src/guardrails/host-patterns.js +173 -0
  112. package/esm/src/guardrails/injection-patterns.d.ts +6 -1
  113. package/esm/src/guardrails/injection-patterns.js +33 -1
  114. package/esm/src/guardrails/injection-reversed.d.ts +9 -0
  115. package/esm/src/guardrails/injection-reversed.js +49 -0
  116. package/esm/src/guardrails/injection.d.ts +17 -1
  117. package/esm/src/guardrails/injection.js +259 -36
  118. package/esm/src/guardrails/labels.d.ts +40 -0
  119. package/esm/src/guardrails/labels.js +881 -0
  120. package/esm/src/guardrails/live-outbound-gate.d.ts +9 -8
  121. package/esm/src/guardrails/live-outbound-gate.js +100 -107
  122. package/esm/src/guardrails/mod.d.ts +30 -22
  123. package/esm/src/guardrails/mod.js +19 -14
  124. package/esm/src/guardrails/network.d.ts +4 -0
  125. package/esm/src/guardrails/network.js +21 -19
  126. package/esm/src/guardrails/normalize.d.ts +15 -1
  127. package/esm/src/guardrails/normalize.js +34 -1
  128. package/esm/src/guardrails/policy.d.ts +2 -17
  129. package/esm/src/guardrails/policy.js +12 -41
  130. package/esm/src/guardrails/progressive-yield.d.ts +65 -24
  131. package/esm/src/guardrails/progressive-yield.js +191 -147
  132. package/esm/src/guardrails/prompt-echo.d.ts +4 -2
  133. package/esm/src/guardrails/prompt-echo.js +87 -6
  134. package/esm/src/guardrails/quota.d.ts +4 -1
  135. package/esm/src/guardrails/quota.js +7 -2
  136. package/esm/src/guardrails/rules.d.ts +20 -29
  137. package/esm/src/guardrails/rules.js +23 -30
  138. package/esm/src/guardrails/sanitize.d.ts +32 -15
  139. package/esm/src/guardrails/sanitize.js +100 -124
  140. package/esm/src/guardrails/sensitive-groups.d.ts +21 -0
  141. package/esm/src/guardrails/sensitive-groups.js +12 -0
  142. package/esm/src/guardrails/sensitive.d.ts +16 -23
  143. package/esm/src/guardrails/sensitive.js +168 -47
  144. package/esm/src/guardrails/serialize.d.ts +1 -0
  145. package/esm/src/guardrails/testing.d.ts +4 -2
  146. package/esm/src/guardrails/testing.js +4 -2
  147. package/esm/src/guardrails/theorem-error.d.ts +5 -2
  148. package/esm/src/guardrails/theorem-error.js +6 -3
  149. package/esm/src/guardrails/thought-guard.d.ts +34 -13
  150. package/esm/src/guardrails/thought-guard.js +264 -64
  151. package/esm/src/guardrails/tool-directives.d.ts +29 -10
  152. package/esm/src/guardrails/tool-directives.js +133 -47
  153. package/esm/src/guardrails/tool-leak.d.ts +26 -0
  154. package/esm/src/guardrails/tool-leak.js +45 -0
  155. package/esm/src/guardrails/tool-result.d.ts +45 -14
  156. package/esm/src/guardrails/tool-result.js +94 -70
  157. package/esm/src/guardrails/types.d.ts +79 -71
  158. package/esm/src/guardrails/types.js +11 -7
  159. package/esm/src/host/client-turn.d.ts +29 -2
  160. package/esm/src/host/client-turn.js +46 -4
  161. package/esm/src/host/mint-trace.d.ts +1 -0
  162. package/esm/src/host/mint-trace.js +3 -2
  163. package/esm/src/host/mod.d.ts +2 -2
  164. package/esm/src/host/mod.js +1 -1
  165. package/esm/src/host/readStreamingJsonStringField.js +2 -43
  166. package/esm/src/host/reply.d.ts +6 -0
  167. package/esm/src/host/reply.js +8 -1
  168. package/esm/src/interface/blocks.d.ts +3 -0
  169. package/esm/src/interface/blocks.js +84 -14
  170. package/esm/src/interface/composer-actions.d.ts +4 -0
  171. package/esm/src/interface/composer-actions.js +5 -3
  172. package/esm/src/interface/draft.d.ts +6 -0
  173. package/esm/src/interface/draft.js +22 -11
  174. package/esm/src/interface/from-profile.d.ts +13 -1
  175. package/esm/src/interface/from-profile.js +66 -31
  176. package/esm/src/interface/history.d.ts +9 -3
  177. package/esm/src/interface/history.js +33 -24
  178. package/esm/src/interface/inputs.d.ts +1 -0
  179. package/esm/src/interface/inputs.js +3 -0
  180. package/esm/src/interface/mod.d.ts +4 -2
  181. package/esm/src/interface/mod.js +3 -2
  182. package/esm/src/interface/models.d.ts +7 -0
  183. package/esm/src/interface/models.js +5 -0
  184. package/esm/src/interface/pending.d.ts +9 -0
  185. package/esm/src/interface/pending.js +9 -3
  186. package/esm/src/interface/profile-interface.js +54 -40
  187. package/esm/src/interface/session.d.ts +12 -5
  188. package/esm/src/interface/session.js +17 -10
  189. package/esm/src/interface/stop.d.ts +13 -0
  190. package/esm/src/interface/stop.js +28 -0
  191. package/esm/src/interface/tool-calls.d.ts +14 -2
  192. package/esm/src/interface/tool-calls.js +64 -10
  193. package/esm/src/interface/tool-invoke.d.ts +2 -0
  194. package/esm/src/interface/tool-invoke.js +3 -1
  195. package/esm/src/interface/tool-media.d.ts +2 -0
  196. package/esm/src/interface/tool-media.js +2 -1
  197. package/esm/src/interface/types.d.ts +105 -40
  198. package/esm/src/interface/types.js +1 -0
  199. package/esm/src/kernel/api-catalog.d.ts +85 -0
  200. package/esm/src/kernel/api-catalog.js +229 -0
  201. package/esm/src/kernel/auth/crypto.d.ts +7 -2
  202. package/esm/src/kernel/auth/crypto.js +12 -10
  203. package/esm/src/kernel/auth/oauth.d.ts +2 -1
  204. package/esm/src/kernel/auth/oauth.js +23 -22
  205. package/esm/src/kernel/auth/typed-secret.js +2 -2
  206. package/esm/src/kernel/auth/types.d.ts +13 -0
  207. package/esm/src/kernel/checkpoint.d.ts +43 -0
  208. package/esm/src/kernel/checkpoint.js +58 -0
  209. package/esm/src/kernel/default-scope.d.ts +43 -5
  210. package/esm/src/kernel/default-scope.js +54 -5
  211. package/esm/src/kernel/engine/call-trace.d.ts +19 -0
  212. package/esm/src/kernel/engine/call-trace.js +29 -0
  213. package/esm/src/kernel/engine/compaction.d.ts +6 -5
  214. package/esm/src/kernel/engine/compaction.js +12 -11
  215. package/esm/src/kernel/engine/decision.d.ts +10 -8
  216. package/esm/src/kernel/engine/decision.js +174 -146
  217. package/esm/src/kernel/engine/embedding.d.ts +8 -0
  218. package/esm/src/kernel/engine/embedding.js +118 -0
  219. package/esm/src/kernel/engine/live-inbound.d.ts +14 -4
  220. package/esm/src/kernel/engine/live-inbound.js +36 -11
  221. package/esm/src/kernel/engine/live-ingress.d.ts +6 -0
  222. package/esm/src/kernel/engine/live-ingress.js +6 -1
  223. package/esm/src/kernel/engine/repair.js +12 -12
  224. package/esm/src/kernel/engine/runner/gates.d.ts +2 -2
  225. package/esm/src/kernel/engine/runner/gates.js +287 -101
  226. package/esm/src/kernel/engine/runner/mod.d.ts +19 -5
  227. package/esm/src/kernel/engine/runner/mod.js +107 -56
  228. package/esm/src/kernel/engine/runner/nested.d.ts +32 -0
  229. package/esm/src/kernel/engine/runner/nested.js +134 -0
  230. package/esm/src/kernel/engine/runner/schema-validation.d.ts +24 -3
  231. package/esm/src/kernel/engine/runner/schema-validation.js +78 -4
  232. package/esm/src/kernel/engine/runner/stages.d.ts +1 -1
  233. package/esm/src/kernel/engine/runner/stages.js +1 -8
  234. package/esm/src/kernel/engine/runner/state.d.ts +33 -12
  235. package/esm/src/kernel/engine/runner/state.js +11 -1
  236. package/esm/src/kernel/engine/runner/step-order.d.ts +27 -0
  237. package/esm/src/kernel/engine/runner/step-order.js +165 -0
  238. package/esm/src/kernel/engine/runner/steps.d.ts +2 -2
  239. package/esm/src/kernel/engine/runner/steps.js +329 -169
  240. package/esm/src/kernel/engine/runner/stream.d.ts +42 -11
  241. package/esm/src/kernel/engine/runner/stream.js +197 -46
  242. package/esm/src/kernel/engine/runner/usage.d.ts +5 -5
  243. package/esm/src/kernel/engine/runner/usage.js +12 -14
  244. package/esm/src/kernel/engine/session/mod.d.ts +8 -6
  245. package/esm/src/kernel/engine/session/mod.js +360 -129
  246. package/esm/src/kernel/engine/session/session-trace.d.ts +10 -10
  247. package/esm/src/kernel/engine/session/session-trace.js +41 -30
  248. package/esm/src/kernel/engine/token-estimate.d.ts +10 -64
  249. package/esm/src/kernel/engine/token-estimate.js +14 -194
  250. package/esm/src/kernel/engine/tool-trace.d.ts +3 -3
  251. package/esm/src/kernel/engine/tool-trace.js +2 -1
  252. package/esm/src/kernel/engine/turn-trace.d.ts +8 -7
  253. package/esm/src/kernel/engine/turn-trace.js +28 -36
  254. package/esm/src/kernel/engine/usage.d.ts +6 -0
  255. package/esm/src/kernel/engine/usage.js +17 -0
  256. package/esm/src/kernel/interaction-parts.d.ts +3 -0
  257. package/esm/src/kernel/interaction-parts.js +18 -0
  258. package/esm/src/kernel/json.d.ts +10 -0
  259. package/esm/src/kernel/json.js +3 -0
  260. package/esm/src/kernel/mod.d.ts +38 -11
  261. package/esm/src/kernel/mod.js +22 -7
  262. package/esm/src/kernel/profile-graph.d.ts +11 -6
  263. package/esm/src/kernel/profile-graph.js +14 -7
  264. package/esm/src/kernel/profile-presence.d.ts +10 -1
  265. package/esm/src/kernel/profile-presence.js +90 -75
  266. package/esm/src/kernel/profile-scope.d.ts +7 -3
  267. package/esm/src/kernel/profile-scope.js +67 -55
  268. package/esm/src/kernel/protocols/binding.d.ts +65 -0
  269. package/esm/src/kernel/protocols/binding.js +125 -0
  270. package/esm/src/kernel/protocols/limits.d.ts +15 -0
  271. package/esm/src/kernel/protocols/limits.js +28 -0
  272. package/esm/src/kernel/protocols/mod.d.ts +5 -0
  273. package/esm/src/kernel/protocols/mod.js +5 -0
  274. package/esm/src/kernel/protocols/prices.d.ts +36 -0
  275. package/esm/src/kernel/protocols/prices.js +37 -0
  276. package/esm/src/kernel/protocols/protocol.d.ts +253 -0
  277. package/esm/src/kernel/protocols/protocol.js +253 -0
  278. package/esm/src/kernel/protocols/provider.d.ts +108 -0
  279. package/esm/src/kernel/protocols/provider.js +143 -0
  280. package/esm/src/kernel/protocols/runtime.d.ts +55 -0
  281. package/esm/src/kernel/protocols/runtime.js +534 -0
  282. package/esm/src/kernel/provider-budget.d.ts +32 -0
  283. package/esm/src/kernel/provider-budget.js +262 -0
  284. package/esm/src/kernel/provider-dispatch.d.ts +13 -0
  285. package/esm/src/kernel/provider-dispatch.js +36 -0
  286. package/esm/src/kernel/provider-live.d.ts +7 -0
  287. package/esm/src/kernel/provider-live.js +189 -0
  288. package/esm/src/kernel/provider-runtime.d.ts +57 -0
  289. package/esm/src/kernel/provider-runtime.js +524 -0
  290. package/esm/src/kernel/registry/attachments.d.ts +15 -4
  291. package/esm/src/kernel/registry/attachments.js +31 -22
  292. package/esm/src/kernel/registry/catalog.d.ts +6 -0
  293. package/esm/src/kernel/registry/catalog.js +9 -2
  294. package/esm/src/kernel/registry/embedding-rules.d.ts +28 -0
  295. package/esm/src/kernel/registry/embedding-rules.js +66 -0
  296. package/esm/src/kernel/registry/ingress.d.ts +6 -2
  297. package/esm/src/kernel/registry/ingress.js +55 -10
  298. package/esm/src/kernel/registry/kernel-registry.d.ts +3 -0
  299. package/esm/src/kernel/registry/kernel-registry.js +9 -2
  300. package/esm/src/kernel/registry/profile-outputs.js +4 -1
  301. package/esm/src/kernel/registry/profiles.d.ts +38 -14
  302. package/esm/src/kernel/registry/profiles.js +280 -205
  303. package/esm/src/kernel/registry/provider-request.d.ts +3 -3
  304. package/esm/src/kernel/registry/provider-request.js +5 -13
  305. package/esm/src/kernel/registry/resolve.d.ts +4 -1
  306. package/esm/src/kernel/registry/resolve.js +59 -58
  307. package/esm/src/kernel/registry/schemas.d.ts +3 -0
  308. package/esm/src/kernel/registry/schemas.js +3 -1
  309. package/esm/src/kernel/registry/slot-fill.d.ts +7 -0
  310. package/esm/src/kernel/registry/slot-fill.js +22 -0
  311. package/esm/src/kernel/registry/system-prompt.js +7 -8
  312. package/esm/src/kernel/registry/vault.d.ts +14 -13
  313. package/esm/src/kernel/registry/vault.js +1 -14
  314. package/esm/src/kernel/schema.d.ts +100 -46
  315. package/esm/src/kernel/schema.js +499 -257
  316. package/esm/src/kernel/scope.d.ts +12 -5
  317. package/esm/src/kernel/scope.js +23 -3
  318. package/esm/src/kernel/stages.d.ts +38 -3
  319. package/esm/src/kernel/stages.js +82 -39
  320. package/esm/src/kernel/stop.d.ts +29 -6
  321. package/esm/src/kernel/stop.js +16 -4
  322. package/esm/src/kernel/system-parts.js +6 -6
  323. package/esm/src/kernel/tools/activity-label.d.ts +12 -6
  324. package/esm/src/kernel/tools/activity-label.js +258 -32
  325. package/esm/src/kernel/tools/agent.d.ts +66 -0
  326. package/esm/src/kernel/tools/agent.js +212 -0
  327. package/esm/src/kernel/tools/coordinate.d.ts +4 -0
  328. package/esm/src/kernel/tools/coordinate.js +165 -0
  329. package/esm/src/kernel/tools/events.d.ts +21 -6
  330. package/esm/src/kernel/tools/events.js +53 -18
  331. package/esm/src/kernel/tools/execute.d.ts +47 -11
  332. package/esm/src/kernel/tools/execute.js +508 -136
  333. package/esm/src/kernel/tools/gate-answer.d.ts +12 -2
  334. package/esm/src/kernel/tools/gate-answer.js +17 -6
  335. package/esm/src/kernel/tools/handler-events.d.ts +45 -0
  336. package/esm/src/kernel/tools/handler-events.js +106 -0
  337. package/esm/src/kernel/tools/harness.d.ts +1 -0
  338. package/esm/src/kernel/tools/harness.js +2 -1
  339. package/esm/src/kernel/tools/http-limit.d.ts +27 -0
  340. package/esm/src/kernel/tools/http-limit.js +85 -0
  341. package/esm/src/kernel/tools/invoke.d.ts +27 -5
  342. package/esm/src/kernel/tools/invoke.js +223 -70
  343. package/esm/src/kernel/tools/mcp-sessions.d.ts +4 -1
  344. package/esm/src/kernel/tools/mcp-sessions.js +13 -8
  345. package/esm/src/kernel/tools/mod.d.ts +4 -3
  346. package/esm/src/kernel/tools/mod.js +3 -2
  347. package/esm/src/kernel/tools/model-text.d.ts +10 -5
  348. package/esm/src/kernel/tools/model-text.js +18 -12
  349. package/esm/src/kernel/tools/operation.d.ts +76 -0
  350. package/esm/src/kernel/tools/operation.js +100 -0
  351. package/esm/src/kernel/tools/page-answer.d.ts +8 -0
  352. package/esm/src/kernel/tools/page-answer.js +19 -0
  353. package/esm/src/kernel/tools/permission.d.ts +11 -2
  354. package/esm/src/kernel/tools/permission.js +12 -12
  355. package/esm/src/kernel/tools/project.d.ts +4 -1
  356. package/esm/src/kernel/tools/project.js +32 -2
  357. package/esm/src/kernel/tools/registry.d.ts +9 -2
  358. package/esm/src/kernel/tools/registry.js +69 -10
  359. package/esm/src/kernel/tools/remote.d.ts +40 -6
  360. package/esm/src/kernel/tools/remote.js +219 -92
  361. package/esm/src/kernel/tools/resolve.d.ts +3 -0
  362. package/esm/src/kernel/tools/resolve.js +12 -4
  363. package/esm/src/kernel/tools/run.d.ts +28 -0
  364. package/esm/src/kernel/tools/run.js +86 -0
  365. package/esm/src/kernel/tools/schema.d.ts +3 -3
  366. package/esm/src/kernel/tools/schema.js +21 -100
  367. package/esm/src/kernel/tools/signed-in-fetch.d.ts +2 -1
  368. package/esm/src/kernel/tools/signed-in-fetch.js +3 -3
  369. package/esm/src/kernel/tools/stage-run.d.ts +27 -4
  370. package/esm/src/kernel/tools/stage-run.js +75 -17
  371. package/esm/src/kernel/tools/types.d.ts +235 -25
  372. package/esm/src/kernel/tools/unchecked-output.d.ts +14 -0
  373. package/esm/src/kernel/tools/unchecked-output.js +18 -0
  374. package/esm/src/kernel/turn-events.d.ts +208 -31
  375. package/esm/src/kernel/turn-events.js +127 -9
  376. package/esm/src/kernel/types.d.ts +302 -161
  377. package/esm/src/kernel/util/base64.d.ts +2 -0
  378. package/esm/src/kernel/util/base64.js +2 -0
  379. package/esm/src/kernel/util/partial-json.d.ts +23 -0
  380. package/esm/src/kernel/util/partial-json.js +128 -0
  381. package/esm/src/kernel/util/record.d.ts +1 -0
  382. package/esm/src/kernel/util/record.js +1 -0
  383. package/esm/src/observability/destinations.d.ts +5 -0
  384. package/esm/src/observability/destinations.js +7 -2
  385. package/esm/src/observability/jsonl.d.ts +2 -2
  386. package/esm/src/observability/jsonl.js +15 -22
  387. package/esm/src/observability/mod.d.ts +3 -3
  388. package/esm/src/observability/mod.js +2 -2
  389. package/esm/src/observability/openinference.d.ts +1 -1
  390. package/esm/src/observability/openinference.js +3 -3
  391. package/esm/src/observability/otlp.d.ts +3 -0
  392. package/esm/src/observability/otlp.js +3 -3
  393. package/esm/src/observability/phoenix.d.ts +1 -0
  394. package/esm/src/observability/policy.d.ts +3 -0
  395. package/esm/src/observability/policy.js +5 -1
  396. package/esm/src/observability/resolve-policy.js +11 -5
  397. package/esm/src/observability/spans.d.ts +8 -2
  398. package/esm/src/observability/spans.js +21 -5
  399. package/esm/src/observability/trace-catalog.d.ts +19 -2
  400. package/esm/src/observability/trace-catalog.js +130 -88
  401. package/esm/src/observability/trace-record.js +22 -17
  402. package/esm/src/observability/trace-schema.d.ts +3 -0
  403. package/esm/src/observability/trace-schema.js +1 -1
  404. package/esm/src/observability/trace-sink.d.ts +1 -0
  405. package/esm/src/observability/trace-sink.js +1 -1
  406. package/esm/src/observability/trace-span.d.ts +7 -1
  407. package/esm/src/observability/trace-span.js +3 -1
  408. package/esm/src/observability/trace.d.ts +2 -0
  409. package/esm/src/observability/trace.js +4 -2
  410. package/esm/src/observability/types.d.ts +35 -11
  411. package/esm/src/observability/types.js +1 -1
  412. package/esm/src/presets/google/speech-voices.d.ts +1 -0
  413. package/esm/src/presets/google-limits.d.ts +1 -0
  414. package/esm/src/presets/google.d.ts +27 -12
  415. package/esm/src/presets/google.js +34 -25
  416. package/esm/src/presets/local.d.ts +26 -0
  417. package/esm/src/presets/local.js +30 -0
  418. package/esm/src/presets/mod.d.ts +5 -4
  419. package/esm/src/presets/mod.js +4 -4
  420. package/esm/src/presets/openrouter.d.ts +14 -1
  421. package/esm/src/presets/openrouter.js +19 -1
  422. package/esm/src/providers/embedding-limits.d.ts +7 -0
  423. package/esm/src/providers/embedding-limits.js +12 -0
  424. package/esm/src/providers/gemini/embedding-protocol.d.ts +8 -0
  425. package/esm/src/providers/gemini/embedding-protocol.js +125 -0
  426. package/esm/src/providers/gemini/interactions-protocol.d.ts +8 -0
  427. package/esm/src/providers/gemini/interactions-protocol.js +102 -0
  428. package/esm/src/providers/gemini/live-protocol.d.ts +3 -0
  429. package/esm/src/providers/gemini/live-protocol.js +191 -0
  430. package/esm/src/providers/gemini/prices.d.ts +3 -0
  431. package/esm/src/providers/gemini/prices.js +63 -0
  432. package/esm/src/providers/gemini/provider.d.ts +7 -0
  433. package/esm/src/providers/gemini/provider.js +39 -0
  434. package/esm/src/providers/google/api-error.d.ts +2 -0
  435. package/esm/src/providers/google/api-error.js +26 -18
  436. package/esm/src/providers/google/builtins.d.ts +14 -0
  437. package/esm/src/providers/google/builtins.js +57 -0
  438. package/esm/src/providers/google/grounding.d.ts +4 -4
  439. package/esm/src/providers/google/interactions/framing.d.ts +20 -8
  440. package/esm/src/providers/google/interactions/framing.js +85 -44
  441. package/esm/src/providers/google/interactions/steps.d.ts +5 -5
  442. package/esm/src/providers/google/interactions/steps.js +4 -4
  443. package/esm/src/providers/google/interactions/stream.d.ts +10 -11
  444. package/esm/src/providers/google/interactions/stream.js +33 -100
  445. package/esm/src/providers/google/live/framing.d.ts +15 -5
  446. package/esm/src/providers/google/live/framing.js +25 -25
  447. package/esm/src/providers/google/live/stream.d.ts +6 -44
  448. package/esm/src/providers/google/live/stream.js +4 -210
  449. package/esm/src/providers/google/urls.d.ts +1 -3
  450. package/esm/src/providers/google/urls.js +1 -3
  451. package/esm/src/providers/google/usage.js +2 -2
  452. package/esm/src/providers/live.d.ts +6 -0
  453. package/esm/src/providers/live.js +6 -0
  454. package/esm/src/providers/local/embedding-protocol.d.ts +7 -0
  455. package/esm/src/providers/local/embedding-protocol.js +60 -0
  456. package/esm/src/providers/local/provider.d.ts +7 -0
  457. package/esm/src/providers/local/provider.js +28 -0
  458. package/esm/src/providers/mod.d.ts +28 -7
  459. package/esm/src/providers/mod.js +19 -3
  460. package/esm/src/providers/open-ai/protocol.d.ts +3 -0
  461. package/esm/src/providers/open-ai/protocol.js +189 -0
  462. package/esm/src/providers/openrouter/embedding-protocol.d.ts +6 -0
  463. package/esm/src/providers/openrouter/embedding-protocol.js +86 -0
  464. package/esm/src/providers/openrouter/image.d.ts +0 -9
  465. package/esm/src/providers/openrouter/image.js +0 -153
  466. package/esm/src/providers/openrouter/images-protocol.d.ts +3 -0
  467. package/esm/src/providers/openrouter/images-protocol.js +82 -0
  468. package/esm/src/providers/openrouter/openai/compat.d.ts +2 -2
  469. package/esm/src/providers/openrouter/openai/compat.js +6 -6
  470. package/esm/src/providers/openrouter/openai/image-payload.d.ts +2 -2
  471. package/esm/src/providers/openrouter/openai/reasoning-state.d.ts +2 -0
  472. package/esm/src/providers/openrouter/openai/reasoning-state.js +31 -0
  473. package/esm/src/providers/openrouter/protocol.d.ts +8 -0
  474. package/esm/src/providers/openrouter/protocol.js +171 -0
  475. package/esm/src/providers/openrouter/provider.d.ts +10 -0
  476. package/esm/src/providers/openrouter/provider.js +50 -0
  477. package/esm/src/providers/shared/carried-tool-files.d.ts +7 -0
  478. package/esm/src/providers/shared/carried-tool-files.js +43 -0
  479. package/esm/src/providers/shared/pcm.js +2 -2
  480. package/esm/src/providers/shared/protocol-events.d.ts +8 -0
  481. package/esm/src/providers/shared/protocol-events.js +20 -0
  482. package/esm/src/providers/shared/response-identity.d.ts +2 -2
  483. package/esm/src/providers/shared/retry.d.ts +18 -0
  484. package/esm/src/providers/shared/retry.js +89 -0
  485. package/esm/src/providers/shared/sse.d.ts +0 -4
  486. package/esm/src/providers/shared/sse.js +50 -36
  487. package/esm/src/providers/shared/tool-args.d.ts +6 -7
  488. package/esm/src/providers/shared/tool-args.js +10 -6
  489. package/esm/src/providers/shared/tool-draft.d.ts +16 -0
  490. package/esm/src/providers/shared/tool-draft.js +14 -0
  491. package/esm/src/providers/shared/upstream-tap.d.ts +2 -2
  492. package/esm/src/providers/shared/upstream-tape.js +1 -1
  493. package/esm/src/providers/system-one/protocol.d.ts +8 -0
  494. package/esm/src/providers/system-one/protocol.js +93 -0
  495. package/esm/src/providers/types.d.ts +48 -16
  496. package/esm/src/providers/types.js +2 -1
  497. package/esm/src/providers/typesafe/provider.d.ts +7 -0
  498. package/esm/src/providers/typesafe/provider.js +24 -0
  499. package/esm/src/surface/formats.d.ts +19 -1
  500. package/esm/src/surface/formats.js +68 -29
  501. package/esm/src/surface/mod.d.ts +4 -2
  502. package/esm/src/surface/mod.js +4 -2
  503. package/esm/src/surface/runtime.d.ts +4 -0
  504. package/esm/src/surface/runtime.js +2 -0
  505. package/esm/src/surface/tools.d.ts +2 -8
  506. package/esm/src/surface/tools.js +4 -22
  507. package/esm/src/surface/types.d.ts +6 -0
  508. package/package.json +5 -13
  509. package/esm/src/cli/commands/egress-compile.d.ts +0 -17
  510. package/esm/src/cli/commands/egress-compile.js +0 -25
  511. package/esm/src/guardrails/egress-policy.d.ts +0 -27
  512. package/esm/src/guardrails/egress-policy.js +0 -76
  513. package/esm/src/guardrails/egress-rules.d.ts +0 -54
  514. package/esm/src/guardrails/egress-rules.js +0 -49
  515. package/esm/src/guardrails/lexicon.d.ts +0 -30
  516. package/esm/src/guardrails/lexicon.js +0 -478
  517. package/esm/src/kernel/engine/media-probe/audio.d.ts +0 -7
  518. package/esm/src/kernel/engine/media-probe/audio.js +0 -342
  519. package/esm/src/kernel/engine/media-probe/bytes.d.ts +0 -6
  520. package/esm/src/kernel/engine/media-probe/bytes.js +0 -26
  521. package/esm/src/kernel/engine/media-probe/image.d.ts +0 -5
  522. package/esm/src/kernel/engine/media-probe/image.js +0 -171
  523. package/esm/src/kernel/engine/media-probe/iso-bmff.d.ts +0 -19
  524. package/esm/src/kernel/engine/media-probe/iso-bmff.js +0 -48
  525. package/esm/src/kernel/engine/media-probe/matroska.d.ts +0 -35
  526. package/esm/src/kernel/engine/media-probe/matroska.js +0 -226
  527. package/esm/src/kernel/engine/media-probe/mp4.d.ts +0 -22
  528. package/esm/src/kernel/engine/media-probe/mp4.js +0 -279
  529. package/esm/src/kernel/engine/media-probe/opus.d.ts +0 -4
  530. package/esm/src/kernel/engine/media-probe/opus.js +0 -23
  531. package/esm/src/kernel/engine/media-probe/pdf.d.ts +0 -5
  532. package/esm/src/kernel/engine/media-probe/pdf.js +0 -117
  533. package/esm/src/kernel/engine/media-probe/video.d.ts +0 -15
  534. package/esm/src/kernel/engine/media-probe/video.js +0 -49
  535. package/esm/src/presets/typesafe.d.ts +0 -2
  536. package/esm/src/presets/typesafe.js +0 -2
  537. package/esm/src/providers/create-provider.d.ts +0 -21
  538. package/esm/src/providers/create-provider.js +0 -90
  539. package/esm/src/providers/decision/usage.d.ts +0 -3
  540. package/esm/src/providers/decision/usage.js +0 -25
  541. package/esm/src/providers/google/interactions/mod.d.ts +0 -2
  542. package/esm/src/providers/google/interactions/mod.js +0 -2
  543. package/esm/src/providers/google/keys.d.ts +0 -20
  544. package/esm/src/providers/google/keys.js +0 -87
  545. package/esm/src/providers/google/live/mod.d.ts +0 -7
  546. package/esm/src/providers/google/live/mod.js +0 -7
  547. package/esm/src/providers/google/live/openapi-schema.d.ts +0 -1
  548. package/esm/src/providers/google/live/openapi-schema.js +0 -42
  549. package/esm/src/providers/google/live/session.d.ts +0 -14
  550. package/esm/src/providers/google/live/session.js +0 -150
  551. package/esm/src/providers/local/local.d.ts +0 -12
  552. package/esm/src/providers/local/local.js +0 -186
  553. package/esm/src/providers/local/mod.d.ts +0 -8
  554. package/esm/src/providers/local/mod.js +0 -8
  555. package/esm/src/providers/openrouter/cache-control.d.ts +0 -5
  556. package/esm/src/providers/openrouter/cache-control.js +0 -4
  557. package/esm/src/providers/openrouter/chat.d.ts +0 -64
  558. package/esm/src/providers/openrouter/chat.js +0 -490
  559. package/esm/src/providers/openrouter/openai/sdk-messages.d.ts +0 -10
  560. package/esm/src/providers/openrouter/openai/sdk-messages.js +0 -99
  561. package/esm/src/providers/openrouter/resolve-api-key.d.ts +0 -3
  562. package/esm/src/providers/openrouter/resolve-api-key.js +0 -8
  563. package/esm/src/providers/openrouter/speech.d.ts +0 -18
  564. package/esm/src/providers/openrouter/speech.js +0 -109
  565. package/esm/src/providers/probe.d.ts +0 -5
  566. package/esm/src/providers/probe.js +0 -15
  567. package/esm/src/providers/shared/builtin-wire.d.ts +0 -4
  568. package/esm/src/providers/shared/builtin-wire.js +0 -9
  569. package/esm/src/providers/shared/vault.d.ts +0 -13
  570. package/esm/src/providers/shared/vault.js +0 -41
@@ -1,11 +1,17 @@
1
1
  import { z } from 'zod';
2
- import { LEXICON_KEYS } from '../guardrails/lexicon.js';
3
- import { CACHE_MODES, CACHE_TTLS, COMPACTION_METERS, COMPACTION_TIMINGS, CONTINUE_STOP_KINDS, KEY_SLOT_NAME, LIVE_ACTIVITY_HANDLINGS, LIVE_END_SENSITIVITIES, LIVE_START_SENSITIVITIES, PROTOCOLS, PROVIDERS, SPEECH_AUDIO_FORMATS, STREAM_MODES, THINKING_LEVELS, } from '../kernel/schema.js';
2
+ import { BOUNDARIES, recordOf } from '../guardrails/boundaries.js';
3
+ import { DETECT_ACTIONS, DETECTORS } from '../guardrails/detectors.js';
4
+ import { LABEL_KEYS } from '../guardrails/labels.js';
5
+ import { BLOCKED_REPLY_ON_BLOCK } from '../guardrails/types.js';
6
+ import { COMPACTION_METERS, COMPACTION_TIMINGS, CONTEXT_SENDERS, CONTINUE_STOP_KINDS, LIVE_ACTIVITY_HANDLINGS, LIVE_END_SENSITIVITIES, LIVE_START_SENSITIVITIES, SPEECH_AUDIO_FORMATS, STEP_LIMIT_MODES, STREAM_MODES, THINKING_LEVELS, } from '../kernel/schema.js';
4
7
  import { traceAttributesSchema } from '../observability/trace-schema.js';
5
8
  const modelBinding = z.object({
6
- protocol: z.enum(PROTOCOLS),
7
- provider: z.enum(PROVIDERS),
9
+ protocol: z.string(),
10
+ provider: z.string(),
8
11
  apiId: z.string(),
12
+ options: z.record(z.string(), z.json()).optional(),
13
+ keySlot: z.string().optional(),
14
+ fallbackKeySlot: z.string().optional(),
9
15
  efforts: z.record(z.string(), z.enum(THINKING_LEVELS)).optional(),
10
16
  defaultEffort: z.string().optional(),
11
17
  allowEffortSelect: z.boolean().optional(),
@@ -13,8 +19,6 @@ const modelBinding = z.object({
13
19
  maxOutputTokens: z.number().optional(),
14
20
  temperature: z.number().optional(),
15
21
  builtInTools: z.array(z.string()).optional(),
16
- key: z.string().regex(KEY_SLOT_NAME).optional(),
17
- fallbackKey: z.string().regex(KEY_SLOT_NAME).optional(),
18
22
  compaction: z
19
23
  .object({
20
24
  maxTokens: z.number(),
@@ -25,10 +29,6 @@ const modelBinding = z.object({
25
29
  meter: z.enum(COMPACTION_METERS).optional(),
26
30
  })
27
31
  .optional(),
28
- cache: z.object({ mode: z.enum(CACHE_MODES), ttl: z.enum(CACHE_TTLS).optional() }).optional(),
29
- store: z.boolean().optional(),
30
- persistViaInteractionId: z.boolean().optional(),
31
- server: z.string().optional(),
32
32
  });
33
33
  const outputs = z.object({
34
34
  structured: z
@@ -39,35 +39,33 @@ const outputs = z.object({
39
39
  ])
40
40
  .optional(),
41
41
  streaming: z
42
- .object({ mode: z.enum(STREAM_MODES).optional(), streamThoughts: z.boolean().optional() })
42
+ .object({
43
+ mode: z.enum(STREAM_MODES).optional(),
44
+ streamThoughts: z.boolean().optional(),
45
+ })
43
46
  .optional(),
44
47
  });
45
- const sensitiveGroups = z.object({
46
- ids: z.boolean(),
47
- financial: z.boolean(),
48
- network: z.boolean(),
49
- credentials: z.boolean(),
48
+ const actions = z.object(recordOf(BOUNDARIES, () => z.enum(DETECT_ACTIONS)));
49
+ const detect = z.object(recordOf(DETECTORS, () => actions));
50
+ const hostDetector = z.object({
51
+ id: z.string(),
52
+ label: z.string(),
53
+ actions,
54
+ names: z.array(z.string()),
55
+ find: z.boolean(),
50
56
  });
51
- const urlCheck = z.union([
52
- z.literal(false),
53
- z.object({ hosts: z.array(z.string()), fromTools: z.boolean() }),
54
- ]);
57
+ const urlAllow = z.object({ hosts: z.array(z.string()), fromTools: z.boolean() });
55
58
  const guardrails = z.object({
56
59
  quota: z.object({ perDay: z.number() }).optional(),
57
- canary: z.boolean(),
58
- sanitizeInput: z.boolean(),
59
- redactSensitive: sensitiveGroups,
60
- hasEgress: z.boolean(),
61
- egressChecks: z
62
- .object({
63
- sensitive: sensitiveGroups,
64
- boundary: z.boolean(),
65
- injection: z.boolean(),
66
- images: urlCheck,
67
- links: urlCheck,
68
- })
69
- .nullable(),
60
+ detect,
61
+ patterns: z
62
+ .partialRecord(z.enum(DETECTORS), z.object({ theorem: z.boolean(), names: z.array(z.string()) }))
63
+ .optional(),
64
+ host: z.array(hostDetector).optional(),
65
+ allow: z.object({ ungiven_images: urlAllow, ungiven_links: urlAllow }),
66
+ blockedReply: z.object({ onBlock: z.enum(BLOCKED_REPLY_ON_BLOCK), maxRetries: z.number() }),
70
67
  });
68
+ const scrubSwitch = z.union([z.boolean(), z.object({ theorem: z.boolean(), host: z.boolean() })]);
71
69
  const observability = z.object({
72
70
  record: z.boolean(),
73
71
  writeTo: z.union([z.literal(false), z.string()]).optional(),
@@ -80,7 +78,7 @@ const observability = z.object({
80
78
  guardrailDecisions: z.boolean(),
81
79
  guardrailMatchPreview: z.boolean(),
82
80
  }),
83
- scrub: z.object({ sensitive: z.boolean(), injection: z.boolean(), canary: z.boolean() }),
81
+ scrub: z.object({ sensitive: scrubSwitch, injection: scrubSwitch, canary: scrubSwitch }),
84
82
  resource: traceAttributesSchema,
85
83
  retainForDays: z.number(),
86
84
  rotateAfterMiB: z.number(),
@@ -95,6 +93,7 @@ const inputs = z.object({
95
93
  maxTurnBytes: z.number().optional(),
96
94
  limitsByMime: z.record(z.string(), z.number()).optional(),
97
95
  slots: z.record(z.string(), z.array(z.string())).optional(),
96
+ context: z.object({ from: z.array(z.enum(CONTEXT_SENDERS)), maxChars: z.number() }).optional(),
98
97
  });
99
98
  const resumption = z.object({
100
99
  allowContinue: z.array(z.enum(CONTINUE_STOP_KINDS)).optional(),
@@ -102,16 +101,24 @@ const resumption = z.object({
102
101
  maxContinues: z.number().optional(),
103
102
  });
104
103
  const mediaTurnBehaviour = z.object({ resumption: resumption.optional() });
105
- const tools = z.object({ allow: z.array(z.string()), t2Loader: z.string().optional() });
104
+ const tools = z.object({
105
+ allow: z.array(z.string()),
106
+ page: z.array(z.string()),
107
+ t2Loader: z.string().optional(),
108
+ parallel: z.boolean().optional(),
109
+ });
106
110
  const common = {
111
+ providerContinuation: z
112
+ .object({
113
+ history: z.enum(['host', 'stateless', 'provider']).optional(),
114
+ })
115
+ .optional(),
107
116
  id: z.string(),
108
117
  models: z.record(z.string(), modelBinding),
109
118
  defaultModel: z.string(),
110
119
  allowModelSelect: z.boolean().optional(),
111
120
  maxSteps: z.number().optional(),
112
- key: z.string().regex(KEY_SLOT_NAME).optional(),
113
- fallbackKey: z.string().regex(KEY_SLOT_NAME).optional(),
114
- lexicon: z.partialRecord(z.enum(LEXICON_KEYS), z.string()),
121
+ labels: z.partialRecord(z.enum(LABEL_KEYS), z.string()),
115
122
  guardrails: guardrails.optional(),
116
123
  observability: observability.optional(),
117
124
  };
@@ -136,7 +143,11 @@ const profileInterface = z.discriminatedUnion('type', [
136
143
  inputs,
137
144
  tools,
138
145
  turnBehaviour: z
139
- .object({ resumption: resumption.optional(), allowSteering: z.boolean().optional() })
146
+ .object({
147
+ resumption: resumption.optional(),
148
+ allowSteering: z.boolean().optional(),
149
+ atStepLimit: z.enum(STEP_LIMIT_MODES).optional(),
150
+ })
140
151
  .optional(),
141
152
  canStop: z.literal(true),
142
153
  allowSteering: z.boolean(),
@@ -175,6 +186,8 @@ const profileInterface = z.discriminatedUnion('type', [
175
186
  outputs: outputs.optional(),
176
187
  speech: z.object({
177
188
  voice: z.string().optional(),
189
+ style: z.string().optional(),
190
+ speed: z.number().optional(),
178
191
  format: z.enum(SPEECH_AUDIO_FORMATS).optional(),
179
192
  }),
180
193
  inputs,
@@ -185,6 +198,7 @@ const profileInterface = z.discriminatedUnion('type', [
185
198
  ...common,
186
199
  type: z.literal('live'),
187
200
  identity,
201
+ inputs: inputs.pick({ slots: true, context: true }).optional(),
188
202
  live: z.object({
189
203
  ingress: z
190
204
  .object({
@@ -214,7 +228,7 @@ const profileInterface = z.discriminatedUnion('type', [
214
228
  .object({ input: z.boolean().optional(), output: z.boolean().optional() })
215
229
  .optional(),
216
230
  }),
217
- tools: z.object({ allow: z.array(z.string()) }),
231
+ tools: tools.pick({ allow: true, page: true }),
218
232
  turnBehaviour: z.object({ allowSteering: z.boolean().optional() }).optional(),
219
233
  }),
220
234
  ]);
@@ -1,20 +1,24 @@
1
1
  import type { ToolGateAuth } from '../kernel/tools/gate-answer.js';
2
2
  import type { ToolGate, TurnToolSnapshot } from '../kernel/tools/types.js';
3
+ import { type ReasoningPart } from '../kernel/turn-events.js';
3
4
  import type { ModelId, ToolId, TurnEvent, TurnHistoryMessage } from '../kernel/types.js';
4
5
  import type { TranscriptBlock, UserTurnDraft } from './types.js';
5
6
  export type { ToolGateAuth };
7
+ /** A tool call held at a gate: the tool, its call id, and arguments. */
6
8
  export type GatedToolContext = {
9
+ operationId?: string;
7
10
  name: string;
8
11
  callId: string;
9
12
  arguments: Record<string, unknown>;
10
- /** The call's `ToolCallRequest.thoughtSignature`, for recording the call in history. */
11
- thoughtSignature?: string;
13
+ /** The call's `ToolCallRequest.reasoning`, for recording the call in history. */
14
+ reasoning?: ReasoningPart[];
12
15
  gateKind: ToolGate['kind'];
13
16
  permission?: ToolGate['permission'];
14
17
  summary?: string;
15
18
  /** Set on a sign-in gate. */
16
19
  auth?: ToolGateAuth;
17
20
  };
21
+ /** A tool call that paused the turn to ask the user: the tool, its call id, and arguments. */
18
22
  export type AwaitingToolContext = {
19
23
  name: string;
20
24
  callId: string;
@@ -23,10 +27,10 @@ export type AwaitingToolContext = {
23
27
  prompt: string;
24
28
  options?: string[];
25
29
  };
30
+ /** The state a client keeps between turns: portable history, native checkpoint, and permissions. */
26
31
  export type InterfaceTurnSession = {
27
32
  history: TurnHistoryMessage[];
28
- /** Google Interactions id for server-side continuity; cleared on branch. */
29
- previousInteractionId?: string;
33
+ providerState?: import('../kernel/checkpoint.js').ProviderCheckpoint;
30
34
  sessionPermissions: string[];
31
35
  /** Last turn `tokens.input` for compaction meter `timing: 'before'`. */
32
36
  inputTokens?: number;
@@ -49,6 +53,7 @@ export type InterfaceTurnSession = {
49
53
  /** Selected effort alias when the active model has `allowEffortSelect`. */
50
54
  selectedEffort?: string;
51
55
  };
56
+ /** A session with no history and no permissions. */
52
57
  declare function emptyInterfaceTurnSession(): InterfaceTurnSession;
53
58
  /**
54
59
  * Every call still waiting on its gate, in the order the model made them. One
@@ -57,8 +62,10 @@ declare function emptyInterfaceTurnSession(): InterfaceTurnSession;
57
62
  declare function gatedToolsFromEvents(events: readonly TurnEvent[]): GatedToolContext[];
58
63
  /** The gate the user answers next: the first call still waiting. */
59
64
  declare function gatedToolFromEvents(events: readonly TurnEvent[]): GatedToolContext | null;
65
+ /** The tool call a turn paused on to ask the user, or `null`. */
60
66
  declare function awaitingFromEvents(events: readonly TurnEvent[]): AwaitingToolContext | null;
67
+ /** The session after the turn events are applied to it. */
61
68
  declare function applyTurnEventsToSession(session: InterfaceTurnSession, events: readonly TurnEvent[]): InterfaceTurnSession;
62
- /** Drops `previousInteractionId` so the next turn sends the rebuilt history, not a stale handle. */
69
+ /** Drops native provider state so the next turn sends the rebuilt history, not a stale handle. */
63
70
  declare function branchInterfaceTurnSession(session: InterfaceTurnSession, blocks: readonly TranscriptBlock[]): InterfaceTurnSession;
64
71
  export { applyTurnEventsToSession, awaitingFromEvents, branchInterfaceTurnSession, emptyInterfaceTurnSession, gatedToolFromEvents, gatedToolsFromEvents, };
@@ -1,8 +1,9 @@
1
- import { isAwaitingUserInput } from '../kernel/stages.js';
1
+ import { isAwaitingUserInput } from '../kernel/turn-events.js';
2
2
  import { findLast } from '../kernel/util/find-last.js';
3
3
  import { historyFromTranscriptBlocks } from './history.js';
4
4
  import { toolCallsOf } from './tool-calls.js';
5
5
  import { promotedToolIdsFromEvents, toolSnapshotFromEvents } from './tool-invoke.js';
6
+ /** A session with no history and no permissions. */
6
7
  function emptyInterfaceTurnSession() {
7
8
  return {
8
9
  history: [],
@@ -30,8 +31,9 @@ function gatedToolsFromEvents(events) {
30
31
  {
31
32
  name: call.name,
32
33
  callId: call.callId,
33
- arguments: call.arguments,
34
- ...(call.thoughtSignature ? { thoughtSignature: call.thoughtSignature } : {}),
34
+ ...(call.operationId ? { operationId: call.operationId } : {}),
35
+ arguments: gate.preparedArguments ?? call.arguments,
36
+ ...(call.reasoning ? { reasoning: call.reasoning } : {}),
35
37
  gateKind: gate.kind,
36
38
  permission: gate.permission,
37
39
  summary: gate.summary,
@@ -52,6 +54,7 @@ function gatedToolsFromEvents(events) {
52
54
  function gatedToolFromEvents(events) {
53
55
  return gatedToolsFromEvents(events)[0] ?? null;
54
56
  }
57
+ /** The tool call a turn paused on to ask the user, or `null`. */
55
58
  function awaitingFromEvents(events) {
56
59
  const call = findLast(toolCallsOf(events), (c) => c.state?.phase === 'complete');
57
60
  if (call?.state?.phase !== 'complete')
@@ -68,17 +71,21 @@ function awaitingFromEvents(events) {
68
71
  options: output.options,
69
72
  };
70
73
  }
74
+ /** The session after the turn events are applied to it. */
71
75
  function applyTurnEventsToSession(session, events) {
72
- let previousInteractionId = session.previousInteractionId;
76
+ let providerState = session.providerState;
73
77
  let inputTokens = session.inputTokens;
74
78
  let historyTokens = session.historyTokens;
75
79
  let toolSnapshot = session.toolSnapshot;
76
80
  let promotedToolIds = session.promotedToolIds;
77
81
  for (const event of events) {
78
- if ((event.type === 'tokens' || event.type === 'done') && event.interactionId) {
79
- previousInteractionId = event.interactionId;
80
- }
81
- // A call's own input size, not the turn's sum (`done.tokens`).
82
+ if (event.type === 'provider_checkpoint')
83
+ providerState = event.providerState;
84
+ if (event.type === 'done' && event.providerState)
85
+ providerState = event.providerState;
86
+ if (event.type === 'provider_warning')
87
+ providerState = undefined;
88
+ // why: A call's own input size, not the turn's sum (`done.tokens`).
82
89
  if (event.type === 'tokens' && event.tokens.input) {
83
90
  inputTokens = event.tokens.input;
84
91
  }
@@ -97,7 +104,7 @@ function applyTurnEventsToSession(session, events) {
97
104
  const gated = gatedToolFromEvents(events);
98
105
  return {
99
106
  ...session,
100
- previousInteractionId,
107
+ providerState,
101
108
  inputTokens,
102
109
  historyTokens,
103
110
  gatedTool: gated,
@@ -106,7 +113,7 @@ function applyTurnEventsToSession(session, events) {
106
113
  promotedToolIds,
107
114
  };
108
115
  }
109
- /** Drops `previousInteractionId` so the next turn sends the rebuilt history, not a stale handle. */
116
+ /** Drops native provider state so the next turn sends the rebuilt history, not a stale handle. */
110
117
  function branchInterfaceTurnSession(session, blocks) {
111
118
  return {
112
119
  ...emptyInterfaceTurnSession(),
@@ -0,0 +1,13 @@
1
+ import { type LabelOverrides } from '../guardrails/labels.js';
2
+ import type { TurnStop } from '../kernel/types.js';
3
+ import type { TranscriptBlock } from './types.js';
4
+ /** The stops that end a reply short of a whole answer. Each is worded by its `stop.<kind>` label. */
5
+ export declare const WORDED_STOP_KINDS: readonly ["cancelled", "interrupted", "length", "filtered", "provider_error", "stream_incomplete", "step_limit"];
6
+ /** One of {@linkcode WORDED_STOP_KINDS}. */
7
+ export type WordedStopKind = (typeof WORDED_STOP_KINDS)[number];
8
+ /**
9
+ * Why a turn ended short, in the person's words: its `stop.<kind>` label, the profile's own when it
10
+ * sets one. `undefined` when the turn ended whole, or when an error in `blocks` (the turn's
11
+ * transcript blocks) already says why.
12
+ */
13
+ export declare function stopText(stop: TurnStop | undefined, blocks: readonly TranscriptBlock[], labels?: LabelOverrides): string | undefined;
@@ -0,0 +1,28 @@
1
+ import { labelText } from '../guardrails/labels.js';
2
+ /** The stops that end a reply short of a whole answer. Each is worded by its `stop.<kind>` label. */
3
+ export const WORDED_STOP_KINDS = [
4
+ 'cancelled',
5
+ 'interrupted',
6
+ 'length',
7
+ 'filtered',
8
+ 'provider_error',
9
+ 'stream_incomplete',
10
+ 'step_limit',
11
+ ];
12
+ const WORDED = new Set(WORDED_STOP_KINDS);
13
+ function isWorded(kind) {
14
+ return WORDED.has(kind);
15
+ }
16
+ /**
17
+ * Why a turn ended short, in the person's words: its `stop.<kind>` label, the profile's own when it
18
+ * sets one. `undefined` when the turn ended whole, or when an error in `blocks` (the turn's
19
+ * transcript blocks) already says why.
20
+ */
21
+ export function stopText(stop, blocks, labels) {
22
+ if (!stop || !isWorded(stop.kind))
23
+ return undefined;
24
+ if (blocks.some((block) => block.kind === 'error'))
25
+ return undefined;
26
+ const key = `stop.${stop.kind}`;
27
+ return labelText(key, {}, labels);
28
+ }
@@ -5,9 +5,14 @@ import type { ToolCall } from './types.js';
5
5
  * broken stream.
6
6
  */
7
7
  declare function applyToolEvent(call: ToolCall | undefined, tool: ToolCallEvent): ToolCall;
8
+ /**
9
+ * A call the model is still writing, with the next piece of its draft added. The call that arrives
10
+ * whole replaces it (`applyToolEvent` builds the call from the request alone).
11
+ */
12
+ declare function applyToolDraft(call: ToolCall | undefined, draft: TurnEventOf<'tool_draft'>): ToolCall;
8
13
  /** Every call in `events`, in the order the model made them. */
9
14
  declare function toolCallsOf(events: readonly TurnEvent[]): ToolCall[];
10
- /** The arguments a call ran with: the user's edit, else the model's. */
15
+ /** The arguments shown for approval, or the user's edit, or the model's original call. */
11
16
  declare function toolCallRanWith(call: ToolCall): Record<string, unknown>;
12
17
  /** A tool event that settles its call: the call completed or failed. */
13
18
  type SettledToolCallEvent = TurnEventOf<'tool'> & {
@@ -15,6 +20,13 @@ type SettledToolCallEvent = TurnEventOf<'tool'> & {
15
20
  phase: 'complete' | 'error';
16
21
  }>;
17
22
  };
23
+ /** True when the event is the complete or error event of the tool call with this id. */
18
24
  declare function settlesToolCall(event: TurnEvent, callId: string): event is SettledToolCallEvent;
25
+ /**
26
+ * A call's arguments as far as the model has written them: the whole arguments once the call has
27
+ * arrived, else what `partialJsonObject` reads of its draft. For a preview: a field still being
28
+ * written is not its final value.
29
+ */
30
+ declare function argumentsSoFar(call: ToolCall): Record<string, unknown>;
19
31
  export type { SettledToolCallEvent };
20
- export { applyToolEvent, settlesToolCall, toolCallRanWith, toolCallsOf };
32
+ export { applyToolDraft, applyToolEvent, argumentsSoFar, settlesToolCall, toolCallRanWith, toolCallsOf, };
@@ -1,6 +1,8 @@
1
- // The model's raw call is the one owner of a call's arguments. The transcript, the interface
1
+ // invariant: The model's raw call is the one owner of a call's arguments. The transcript, the interface
2
2
  // session and history read calls through this fold only.
3
3
  import { TheoremError } from '../guardrails/error.js';
4
+ import { labelText } from '../guardrails/labels.js';
5
+ import { partialJsonObject } from '../kernel/util/partial-json.js';
4
6
  /**
5
7
  * The raw call comes first for every call (`turnEventSchema`); a phase for a call never made is a
6
8
  * broken stream.
@@ -10,8 +12,9 @@ function applyToolEvent(call, tool) {
10
12
  return {
11
13
  name: tool.name,
12
14
  callId: tool.callId,
15
+ ...(tool.operationId ? { operationId: tool.operationId } : {}),
13
16
  arguments: tool.arguments,
14
- ...(tool.thoughtSignature ? { thoughtSignature: tool.thoughtSignature } : {}),
17
+ ...(tool.reasoning ? { reasoning: tool.reasoning } : {}),
15
18
  ...(tool.stepId ? { stepId: tool.stepId } : {}),
16
19
  artifacts: [],
17
20
  };
@@ -19,10 +22,13 @@ function applyToolEvent(call, tool) {
19
22
  if (call === undefined) {
20
23
  throw new TheoremError('bad_response', `Tool event '${tool.phase}' for call '${tool.callId}' arrived before the call.`);
21
24
  }
25
+ if (call.callId !== tool.callId || call.name !== tool.name) {
26
+ throw new TheoremError('bad_response', labelText('error.bad_response'));
27
+ }
22
28
  switch (tool.phase) {
23
29
  case 'running': {
24
- // A resumed call runs again: it is open until its next settle.
25
- const { endedAt: _settled, ...open } = call;
30
+ // why: A resumed call runs again: it is open until its next settle.
31
+ const { endedAt: _settled, outputDraft: _drafted, ...open } = call;
26
32
  return {
27
33
  ...open,
28
34
  state: tool,
@@ -33,41 +39,89 @@ function applyToolEvent(call, tool) {
33
39
  }
34
40
  case 'complete':
35
41
  return {
36
- ...call,
42
+ ...settled(call),
37
43
  state: tool,
38
44
  endedAt: tool.at,
39
45
  ...(tool.activityPast ? { activityPast: tool.activityPast } : {}),
40
46
  };
41
47
  case 'error':
48
+ return {
49
+ ...settled(call),
50
+ state: tool,
51
+ endedAt: tool.at,
52
+ ...(tool.activityPast ? { activityPast: tool.activityPast } : {}),
53
+ };
42
54
  case 'cancel':
43
55
  case 'gate':
44
- return { ...call, state: tool, endedAt: tool.at };
56
+ return { ...settled(call), state: tool, endedAt: tool.at };
57
+ case 'draft':
58
+ return { ...call, outputDraft: (call.outputDraft ?? '') + tool.text };
45
59
  case 'artifact':
46
60
  return { ...call, artifacts: [...call.artifacts, tool.artifact] };
61
+ case 'dispatch':
47
62
  case 'progress':
48
63
  case 'trace':
49
64
  case 'warning':
50
65
  return call;
51
66
  }
52
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
+ }
53
87
  /** Every call in `events`, in the order the model made them. */
54
88
  function toolCallsOf(events) {
55
89
  const calls = new Map();
56
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
+ }
57
95
  if (event.type !== 'tool')
58
96
  continue;
59
97
  const { tool } = event;
60
- calls.set(tool.callId, applyToolEvent(calls.get(tool.callId), tool));
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));
61
104
  }
62
105
  return [...calls.values()];
63
106
  }
64
- /** The arguments a call ran with: the user's edit, else the model's. */
107
+ /** The arguments shown for approval, or the user's edit, or the model's original call. */
65
108
  function toolCallRanWith(call) {
66
- return call.edited?.to ?? call.arguments;
109
+ return ((call.state?.phase === 'gate' ? call.state.gate.preparedArguments : undefined) ??
110
+ call.edited?.to ??
111
+ call.arguments);
67
112
  }
113
+ /** True when the event is the complete or error event of the tool call with this id. */
68
114
  function settlesToolCall(event, callId) {
69
115
  if (event.type !== 'tool' || event.tool.callId !== callId)
70
116
  return false;
71
117
  return event.tool.phase === 'complete' || event.tool.phase === 'error';
72
118
  }
73
- export { applyToolEvent, settlesToolCall, toolCallRanWith, toolCallsOf };
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, };
@@ -1,4 +1,6 @@
1
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. */
2
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. */
3
5
  declare function toolSnapshotFromEvents(events: readonly TurnEvent[]): TurnToolSnapshot | undefined;
4
6
  export { promotedToolIdsFromEvents, toolSnapshotFromEvents };
@@ -1,5 +1,6 @@
1
1
  import { extractLoadedIds } from '../kernel/tools/resolve.js';
2
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. */
3
4
  function promotedToolIdsFromEvents(events) {
4
5
  const ids = new Set();
5
6
  for (const event of events) {
@@ -12,8 +13,9 @@ function promotedToolIdsFromEvents(events) {
12
13
  }
13
14
  return [...ids];
14
15
  }
16
+ /** The tool snapshot on the last `done` event that carries one, which only a turn stopped on a tool or gate does. */
15
17
  function toolSnapshotFromEvents(events) {
16
- // Only a `done` that stopped on `tool` or `gate` carries one (`DoneEvent`).
18
+ // why: Only a `done` that stopped on `tool` or `gate` carries one (`DoneEvent`).
17
19
  const done = findLast(events, (event) => event.type === 'done' && event.tools !== undefined);
18
20
  return done?.type === 'done' ? done.tools : undefined;
19
21
  }
@@ -1,9 +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. */
1
2
  export type PromotedToolMedia = {
2
3
  url: string;
3
4
  mimeType: string;
4
5
  /** A smaller copy of the same file, when the output also carried one. */
5
6
  previewUrl?: string;
6
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. */
7
9
  export declare function promotedMediaFromUrlString(raw: string): PromotedToolMedia | undefined;
8
10
  /** One file at several sizes is promoted once: `url` its largest copy, `previewUrl` its smallest. */
9
11
  export declare function collectPromotedMediaFromToolOutput(output: unknown): PromotedToolMedia[];
@@ -25,6 +25,7 @@ function mimeForPathname(pathname) {
25
25
  const ext = base.slice(dot + 1).toLowerCase();
26
26
  return EXT_MIME[ext];
27
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. */
28
29
  export function promotedMediaFromUrlString(raw) {
29
30
  const trimmed = raw.trim();
30
31
  if (trimmed.length === 0)
@@ -53,7 +54,7 @@ const MEDIAWIKI_THUMB = /^(.*)\/thumb(\/.+\/([^/]+))\/(\d+)px-\3(?:\.[a-z0-9]+)?
53
54
  function mediaAsset(url) {
54
55
  const parsed = new URL(url);
55
56
  const site = parsed.hostname.split('.').slice(-2).join('.');
56
- // Tracking parameters never change the file; other query parameters may.
57
+ // why: Tracking parameters never change the file; other query parameters may.
57
58
  for (const name of [...parsed.searchParams.keys()]) {
58
59
  if (name.startsWith('utm_'))
59
60
  parsed.searchParams.delete(name);