@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,85 @@
1
+ import { describeError, isAbortError, isTimeoutError, TheoremError, } from '../../guardrails/error.js';
2
+ const SECRET_HEADER = /key|auth|cookie|secret|token/i;
3
+ export function tapeHeaderValue(key, value) {
4
+ if (SECRET_HEADER.test(key)) {
5
+ return '[redacted]';
6
+ }
7
+ return value;
8
+ }
9
+ export function tapeHeaders(headers) {
10
+ const out = {};
11
+ for (const [key, value] of new Headers(headers).entries()) {
12
+ out[key] = tapeHeaderValue(key, value);
13
+ }
14
+ return out;
15
+ }
16
+ export function throwRow(err) {
17
+ if (err instanceof Error) {
18
+ return { eventType: 'http_throw', name: err.name, message: err.message };
19
+ }
20
+ return { eventType: 'http_throw', name: 'Error', message: String(err) };
21
+ }
22
+ /** A non-string body is named rather than read, since reading it would consume the stream. */
23
+ function tapeBody(body) {
24
+ if (body === undefined || body === null) {
25
+ return {};
26
+ }
27
+ if (typeof body !== 'string') {
28
+ return { bodyKind: body.constructor.name };
29
+ }
30
+ try {
31
+ return { body: JSON.parse(body) };
32
+ }
33
+ catch {
34
+ return { body };
35
+ }
36
+ }
37
+ export function tapFetch(tap, send = fetch, keySlot) {
38
+ if (!tap) {
39
+ return send;
40
+ }
41
+ return async (url, init) => {
42
+ const method = init?.method ?? 'GET';
43
+ tap({
44
+ eventType: 'http_request',
45
+ method,
46
+ url: String(url),
47
+ headers: tapeHeaders(init?.headers),
48
+ ...(keySlot ? { keySlot } : {}),
49
+ ...tapeBody(init?.body),
50
+ });
51
+ try {
52
+ const res = await send(url, init);
53
+ tap({
54
+ eventType: 'http_response',
55
+ status: res.status,
56
+ headers: tapeHeaders(res.headers),
57
+ });
58
+ if (!res.ok) {
59
+ tap({ eventType: 'http_error_body', body: await res.clone().text() });
60
+ }
61
+ return res;
62
+ }
63
+ catch (err) {
64
+ tap(throwRow(err));
65
+ throw err;
66
+ }
67
+ };
68
+ }
69
+ /** fetch rejects only when no response came back, so any non-abort, non-timeout rejection is `network`. */
70
+ export function networkError(err) {
71
+ if (err instanceof TheoremError || isAbortError(err) || isTimeoutError(err)) {
72
+ return err;
73
+ }
74
+ return new TheoremError('network', describeError(err), { cause: err });
75
+ }
76
+ export function networkFetch(send = fetch) {
77
+ return async (url, init) => {
78
+ try {
79
+ return await send(url, init);
80
+ }
81
+ catch (err) {
82
+ throw networkError(err);
83
+ }
84
+ };
85
+ }
@@ -0,0 +1,6 @@
1
+ export declare function inlineBytesKey(rec: Record<string, unknown>): string | undefined;
2
+ export declare function scrubRecord(rec: Record<string, unknown>): Promise<Record<string, unknown>>;
3
+ export declare function scrubUpstream(value: unknown): Promise<unknown>;
4
+ export declare function removeCanaries(text: string, canaries: readonly string[]): string;
5
+ export declare function redactCanaryInTree(value: unknown, canaries: readonly string[]): unknown;
6
+ export declare function tapeUpstream(value: unknown, canaries: readonly string[]): Promise<unknown>;
@@ -0,0 +1,88 @@
1
+ import { redactCanaryText } from '../../guardrails/canary.js';
2
+ import { sha256, sha256Base64 } from '../../kernel/engine/hash.js';
3
+ import { mapStrings } from '../../kernel/engine/tree.js';
4
+ /*invariant:
5
+ * Inline bytes on a taped row are stored as their sha256, never as bytes.
6
+ * The shapes are the ones every taped transport sends (probes 23/09/2026):
7
+ *
8
+ * - `{ mime_type, data }`: Interactions request parts, stream deltas and
9
+ * buffered steps (image, audio, document); the OpenRouter speech body row.
10
+ * - `{ mimeType, data }`: Theorem's own media parts (a tool's raw output) and
11
+ * Gemini Live `inlineData`.
12
+ * - `{ b64_json, media_type }`: OpenRouter `/images` `data[]` entries.
13
+ * - a `data:<mime>;base64,<bytes>` string: OpenRouter chat
14
+ * `message.images[].image_url.url`.
15
+ *
16
+ * The hash covers the raw bytes, the same hash a trace blob part carries. A
17
+ * record whose bytes were hashed carries `dataKind: 'sha256'`; a hashed data
18
+ * url becomes `data:<mime>;sha256,<hex>`. Inline data that is not base64 is
19
+ * hashed as text and says so: `dataKind: 'text_sha256'`, `data:<mime>;text_sha256,<hex>`.
20
+ */
21
+ const DATA_URL = /^data:([^;,]+);base64,/;
22
+ export function inlineBytesKey(rec) {
23
+ const mime = rec.mime_type ?? rec.mimeType;
24
+ if (typeof mime === 'string' && typeof rec.data === 'string') {
25
+ return 'data';
26
+ }
27
+ if (typeof rec.media_type === 'string' && typeof rec.b64_json === 'string') {
28
+ return 'b64_json';
29
+ }
30
+ return undefined;
31
+ }
32
+ const BYTES_SHA256 = 'sha256';
33
+ const TEXT_SHA256 = 'text_sha256';
34
+ async function inlineHash(base64) {
35
+ const digest = await sha256Base64(base64);
36
+ return digest
37
+ ? { kind: BYTES_SHA256, hash: digest.hash }
38
+ : { kind: TEXT_SHA256, hash: await sha256(base64) };
39
+ }
40
+ async function scrubString(text) {
41
+ const match = DATA_URL.exec(text);
42
+ if (!match) {
43
+ return text;
44
+ }
45
+ const { kind, hash } = await inlineHash(text.slice(match[0].length));
46
+ return `data:${match[1]};${kind},${hash}`;
47
+ }
48
+ export async function scrubRecord(rec) {
49
+ const bytesKey = inlineBytesKey(rec);
50
+ let dataKind;
51
+ const pairs = await Promise.all(Object.entries(rec).map(async ([key, nested]) => {
52
+ if (key === bytesKey && typeof nested === 'string') {
53
+ const { kind, hash } = await inlineHash(nested);
54
+ dataKind = kind;
55
+ return [key, hash];
56
+ }
57
+ return [key, await scrubUpstream(nested)];
58
+ }));
59
+ const out = Object.fromEntries(pairs);
60
+ if (dataKind) {
61
+ out.dataKind = dataKind;
62
+ }
63
+ return out;
64
+ }
65
+ export function scrubUpstream(value) {
66
+ if (typeof value === 'string') {
67
+ return scrubString(value);
68
+ }
69
+ if (Array.isArray(value)) {
70
+ return Promise.all(value.map((item) => scrubUpstream(item)));
71
+ }
72
+ if (value && typeof value === 'object') {
73
+ return scrubRecord(value);
74
+ }
75
+ return Promise.resolve(value);
76
+ }
77
+ export function removeCanaries(text, canaries) {
78
+ return canaries.reduce((out, canary) => redactCanaryText(out, canary), text);
79
+ }
80
+ export function redactCanaryInTree(value, canaries) {
81
+ if (!canaries.some(Boolean)) {
82
+ return value;
83
+ }
84
+ return mapStrings(value, (text) => removeCanaries(text, canaries));
85
+ }
86
+ export async function tapeUpstream(value, canaries) {
87
+ return redactCanaryInTree(await scrubUpstream(value), canaries);
88
+ }
@@ -0,0 +1,8 @@
1
+ import { type Protocol } from '../../kernel/protocols/mod.js';
2
+ /** What a System One binding may set. Both are TypeSafe's opt-in "danger zone" headers. */
3
+ export interface SystemOneOptions {
4
+ images?: boolean;
5
+ longContext?: boolean;
6
+ }
7
+ /** TypeSafe's decision API: questions about a state, answered in one call. */
8
+ export declare const systemOne: Protocol<SystemOneOptions>;
@@ -0,0 +1,93 @@
1
+ import { z } from 'zod';
2
+ import { TheoremError } from '../../guardrails/error.js';
3
+ import { labelText } from '../../guardrails/labels.js';
4
+ import { jsonObjectSchema } from '../../kernel/json.js';
5
+ import { defineProtocol } from '../../kernel/protocols/mod.js';
6
+ const count = z.number().int().nonnegative();
7
+ const reply = z.object({
8
+ model: z.string().min(1),
9
+ answers: z.record(z.string(), z.unknown()),
10
+ usage: z
11
+ .object({
12
+ input_tokens: count,
13
+ output_tokens: count,
14
+ cost: z.number().nonnegative().optional(),
15
+ })
16
+ .optional()
17
+ .catch(undefined),
18
+ });
19
+ const options = z.strictObject({
20
+ images: z.boolean().optional().describe(
21
+ // labels-exempt: builder field description, read by the studio and docs
22
+ 'Let a decision hold images and box questions. TypeSafe calls this experimental, and a request that uses either is refused without it.'),
23
+ longContext: z.boolean().optional().describe(
24
+ // labels-exempt: builder field description, read by the studio and docs
25
+ 'Raise the context window from 64k tokens to 262k. TypeSafe calls this slower and less accurate.'),
26
+ });
27
+ const IMAGES_HEADER = 'TypeSafe-Danger-Zone-Images';
28
+ const LONG_CONTEXT_HEADER = 'TypeSafe-Danger-Zone-Long-Context';
29
+ /** TypeSafe's decision API: questions about a state, answered in one call. */
30
+ export const systemOne = defineProtocol({
31
+ id: 'systemOne',
32
+ name: 'System One',
33
+ description: "TypeSafe's decision API: questions about a state, answered in one call.", // labels-exempt: builder field description, read by the studio and docs
34
+ endpoints: { decision: '/systemone' },
35
+ options,
36
+ create(context) {
37
+ return {
38
+ async decide(request) {
39
+ const asksBox = Object.values(request.questions).some(({ type }) => type === 'box');
40
+ const holdsImages = asksBox || (request.assets && Object.keys(request.assets).length > 0);
41
+ if (holdsImages && !context.options.images)
42
+ throw new TheoremError('unsupported', labelText('provider.decision_images_off'));
43
+ // why: Only a pinned 1.13 is known to refuse a box; aliases such as `jev-latest` move, so they pass.
44
+ if (asksBox && /^jev-1\.13(\.|$)/.test(context.apiId))
45
+ throw new TheoremError('unsupported', labelText('provider.decision_box_model', { apiId: context.apiId }));
46
+ const headers = {};
47
+ if (holdsImages)
48
+ headers[IMAGES_HEADER] = 'true';
49
+ if (context.options.longContext)
50
+ headers[LONG_CONTEXT_HEADER] = 'true';
51
+ const body = jsonObjectSchema.parse({
52
+ model: context.apiId,
53
+ state: request.state,
54
+ questions: request.questions,
55
+ ...(request.assets && Object.keys(request.assets).length
56
+ ? { assets: assetsOnWire(request.assets) }
57
+ : {}),
58
+ });
59
+ for await (const row of context.send(body, { stream: false, headers })) {
60
+ const parsed = reply.safeParse(row);
61
+ if (!parsed.success)
62
+ throw new TheoremError('bad_response', labelText('protocol.reply_shape', {
63
+ protocol: 'systemOne',
64
+ issues: z.prettifyError(parsed.error),
65
+ }));
66
+ const { model, answers, usage } = parsed.data;
67
+ // invariant: The kernel validates every answer against its question before exposing it.
68
+ return {
69
+ model,
70
+ answers: answers,
71
+ ...(usage
72
+ ? {
73
+ usage: {
74
+ inputTokens: usage.input_tokens,
75
+ outputTokens: usage.output_tokens,
76
+ ...(usage.cost === undefined ? {} : { costUsd: usage.cost }),
77
+ },
78
+ }
79
+ : {}),
80
+ };
81
+ }
82
+ throw new TheoremError('bad_response', labelText('provider.decision_failed'));
83
+ },
84
+ };
85
+ },
86
+ });
87
+ const FORMATS = { 'image/png': 'png', 'image/jpeg': 'jpeg' };
88
+ function assetsOnWire(assets) {
89
+ return Object.fromEntries(Object.entries(assets).map(([reference, { mimeType, data }]) => [
90
+ reference,
91
+ { type: 'image', format: FORMATS[mimeType], data_base64: data },
92
+ ]));
93
+ }
@@ -0,0 +1,51 @@
1
+ import type { TheoremError } from '../guardrails/error.js';
2
+ import type { InteractionPart, ModelEvent } from '../kernel/types.js';
3
+ /** Where a live model is in its reply when a frame arrives. */
4
+ export type LiveTurnPhase = 'streaming' | 'complete' | 'abort';
5
+ /** Tape row: the first key was refused for quota, so the call starts again on the fallback slot. */
6
+ export declare const KEY_FALLBACK_ROW = "key_fallback";
7
+ /** The provider's warning before it closed a live socket. */
8
+ export interface LiveGoAway {
9
+ timeLeftMs?: number;
10
+ /** Milliseconds from the last warning to the close. */
11
+ closedAfterMs: number;
12
+ }
13
+ /** One thing a live socket received. `row` is the parsed frame, so the kernel records it beside the events it produced. */
14
+ export type LiveQueueItem = {
15
+ type: 'batch';
16
+ events: ModelEvent[];
17
+ turnPhase: LiveTurnPhase;
18
+ row: Record<string, unknown>;
19
+ } | {
20
+ type: 'row';
21
+ row: Record<string, unknown>;
22
+ } | {
23
+ type: 'error';
24
+ error: Error;
25
+ row?: Record<string, unknown>;
26
+ }
27
+ /** `error` is set when the close was not normal; `goAway` when the provider warned first. */
28
+ | {
29
+ type: 'closed';
30
+ code: number;
31
+ reason: string;
32
+ error?: TheoremError;
33
+ goAway?: LiveGoAway;
34
+ };
35
+ /**
36
+ * An open live socket, in the kernel's terms: the setup the session was opened with, what the
37
+ * session sends the model, `batches` for what it receives, and `close`. A send on a socket that is
38
+ * no longer open is dropped.
39
+ */
40
+ export interface LiveConnection {
41
+ readonly setup: Record<string, unknown>;
42
+ flush?(): Promise<void>;
43
+ /** Text the model reads without it ending the user's turn. */
44
+ sendContext(text: string): void;
45
+ /** Text, audio, or video from the user, as it arrives. */
46
+ sendInput(input: InteractionPart): void;
47
+ /** The result of a tool call the model made. */
48
+ sendToolResponse(callId: string, name: string, output: unknown, parts?: InteractionPart[]): void;
49
+ batches(): AsyncGenerator<LiveQueueItem>;
50
+ close(code?: number, reason?: string): void;
51
+ }
@@ -0,0 +1,2 @@
1
+ /** Tape row: the first key was refused for quota, so the call starts again on the fallback slot. */
2
+ export const KEY_FALLBACK_ROW = 'key_fallback';
@@ -0,0 +1,7 @@
1
+ import { type Provider } from '../../kernel/protocols/provider.js';
2
+ /** What registering `typesafeProvider` takes as `connection`. */
3
+ export interface TypesafeConnection {
4
+ baseUrl?: string;
5
+ }
6
+ /** TypeSafe: System One decisions, at TypeSafe's own API. */
7
+ export declare const typesafeProvider: Provider<TypesafeConnection, string>;
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod';
2
+ import { bearer, defineProvider, endpointUrlSchema, } from '../../kernel/protocols/provider.js';
3
+ import { systemOne } from '../system-one/protocol.js';
4
+ /** TypeSafe: System One decisions, at TypeSafe's own API. */
5
+ export const typesafeProvider = defineProvider({
6
+ id: 'typesafe',
7
+ name: 'TypeSafe',
8
+ description: "System One decisions, at TypeSafe's own API.", // labels-exempt: builder field description, read by the studio and docs
9
+ connection: z
10
+ .strictObject({
11
+ baseUrl: endpointUrlSchema
12
+ .optional()
13
+ .describe('The API, by default https://api.typesafe.ai/v1.'), // labels-exempt: builder field description, read by the studio and docs
14
+ })
15
+ .default({}),
16
+ key: z.string().trim().min(1),
17
+ authorize: bearer(),
18
+ // why: docs.typesafe.ai/models, read 2026-10-19, prices Jev 1.13 and 1.14 alike at $0.042 per million input tokens, output free. The API reports no cost.
19
+ prices: {
20
+ checked: '2026-10-19',
21
+ models: { 'jev-*': { input: 0.042, output: 0 } },
22
+ },
23
+ serves: (at) => [{ protocol: systemOne, baseUrl: at.baseUrl ?? 'https://api.typesafe.ai/v1' }],
24
+ });
@@ -0,0 +1,46 @@
1
+ /** What stands in for a credential's value wherever one is shown. */
2
+ export declare const MASK = "\u2022\u2022\u2022\u2022";
3
+ /** What an agent sees of a secret. */
4
+ export interface SecretCard {
5
+ secret: true;
6
+ set: boolean;
7
+ looksLike?: string;
8
+ /** Mistakes the value shows: whitespace, quotes, a line break, a placeholder. */
9
+ problems: string[];
10
+ /** Other secrets holding the same value. */
11
+ sameAs: string[];
12
+ usedBy: string[];
13
+ }
14
+ /** What an agent sees of a secret instead of its value: whether it is set, what kind it looks like, the mistakes it shows, and the other secrets with the same value and the places that use it. */
15
+ export declare function secretCard(value: unknown, extra?: {
16
+ sameAs?: readonly string[];
17
+ usedBy?: readonly string[];
18
+ }): SecretCard;
19
+ /** Whether a header or query parameter's name says it carries a credential: what `maskHeaders` masks. */
20
+ export declare function isCredentialName(name: string): boolean;
21
+ /**
22
+ * A URL with its credential query parameters and `user:pass@` masked. The rest stays as written:
23
+ * a `{param}` in a tool's path is not encoded.
24
+ */
25
+ export declare function maskUrl(raw: string): string;
26
+ /**
27
+ * A masked URL with each masked credential filled in from `held`, the URL it was masked from.
28
+ * A mask `held` has no value for stays a mask.
29
+ */
30
+ export declare function unmaskUrl(shown: string, held: string): string;
31
+ /**
32
+ * Masked headers with each masked value filled in from `held`, the headers they were masked from.
33
+ * A mask `held` has no header for stays a mask.
34
+ */
35
+ export declare function unmaskHeaders(shown: Record<string, string>, held: Record<string, string> | undefined): Record<string, string>;
36
+ /**
37
+ * Headers as JSON, credential-named values masked. Text that is not a JSON object is
38
+ * told only by its length: a parse error would quote it.
39
+ */
40
+ export declare function maskHeaders(raw: unknown): unknown;
41
+ /** Scrubs text: each known secret value by name, then the kernel's sensitive patterns. */
42
+ export declare function scrubText(text: string, known: readonly [string, string][]): string;
43
+ /** Known secret values worth scrubbing: trimmed, long enough, longest first. */
44
+ export declare function knownSecrets(secrets: Record<string, string>): [string, string][];
45
+ /** Every string in `value` scrubbed and capped; long base64 under `data` told as bytes. */
46
+ export declare function scrubDeep(value: unknown, known: readonly [string, string][]): unknown;
@@ -0,0 +1,178 @@
1
+ import { redactDetectors } from '../guardrails/detect-at.js';
2
+ import { SENSITIVE_GROUPS } from '../guardrails/sensitive-groups.js';
3
+ /** What stands in for a credential's value wherever one is shown. */
4
+ export const MASK = '••••';
5
+ /** Names that carry a credential, in a URL's query or a header. */
6
+ const CREDENTIAL_NAME = /auth|key|token|secret|passw|pwd|cookie|session|signature|^sig$|credential|^code$|appid/i;
7
+ /** Names a query parameter carries a credential under, in a URL too malformed to parse. */
8
+ const QUERY_CREDENTIAL = /auth|key|token|secret|passw|pwd|signature|credential|appid/i;
9
+ /** What a secret's prefix says it is. Nothing else about the value is told. */
10
+ const SECRET_KINDS = [
11
+ [/^AIza/, 'Google API key'],
12
+ [/^sk-or-/, 'OpenRouter key'],
13
+ [/^sk-ant-/, 'Anthropic key'],
14
+ [/^sk-/, 'OpenAI key'],
15
+ [/^(?:ghp_|github_pat_)/, 'GitHub token'],
16
+ [/^xox[baprs]-/, 'Slack token'],
17
+ [/^AKIA/, 'AWS access key id'],
18
+ [/^eyJ[\w-]+\.[\w-]+\./, 'JWT'],
19
+ [/^Bearer\s/i, 'a whole Bearer header, not a bare token'],
20
+ [/^https?:\/\//i, 'a URL, not a key'],
21
+ ];
22
+ /** Below this, a value is told as "short" and is too short to scrub safely. */
23
+ const SHORT = 16;
24
+ const SCRUB_MIN = 6;
25
+ const TEXT_CAP = 2000;
26
+ const BYTES_CAP = 200;
27
+ /** What an agent sees of a secret instead of its value: whether it is set, what kind it looks like, the mistakes it shows, and the other secrets with the same value and the places that use it. */
28
+ export function secretCard(value, extra = {}) {
29
+ const text = typeof value === 'string' ? value : '';
30
+ const core = text.trim();
31
+ const problems = [];
32
+ if (/^(?:<.*>|x{3,}|\.{3}|your[-_ ]?(?:api[-_ ]?)?key|changeme|todo)$/i.test(core)) {
33
+ problems.push('a placeholder, not a real value');
34
+ }
35
+ else {
36
+ if (core && core !== text)
37
+ problems.push('spaces or a line break around it');
38
+ if (/[\r\n]/.test(core))
39
+ problems.push('a line break inside');
40
+ else if (/\s/.test(core))
41
+ problems.push('a space inside');
42
+ if (/^(['"`]).*\1$/.test(core))
43
+ problems.push('wrapped in quotes');
44
+ if (core && core.length < SHORT)
45
+ problems.push('shorter than keys usually are');
46
+ }
47
+ const looksLike = SECRET_KINDS.find(([pattern]) => pattern.test(core))?.[1];
48
+ return {
49
+ secret: true,
50
+ set: core.length > 0,
51
+ ...(looksLike ? { looksLike } : {}),
52
+ problems,
53
+ sameAs: [...(extra.sameAs ?? [])],
54
+ usedBy: [...(extra.usedBy ?? [])],
55
+ };
56
+ }
57
+ /** A URL's `user:pass@`, after its scheme. */
58
+ const USERINFO = /^([a-z][a-z0-9+.-]*:\/\/)([^/?#@]*)@/i;
59
+ /** One `name=value` of a URL, with the separator before it. */
60
+ const PAIR = /([?&;])([^=?&;#\s]*)=([^&;#\s]*)/g;
61
+ /** A `user:pass`, as its two parts. A password keeps its own colons. */
62
+ function userinfo(text) {
63
+ const at = text.indexOf(':');
64
+ return at < 0 ? [text, undefined] : [text.slice(0, at), text.slice(at + 1)];
65
+ }
66
+ function decoded(name) {
67
+ try {
68
+ return decodeURIComponent(name);
69
+ }
70
+ catch {
71
+ return name;
72
+ }
73
+ }
74
+ /** Whether a header or query parameter's name says it carries a credential: what `maskHeaders` masks. */
75
+ export function isCredentialName(name) {
76
+ return CREDENTIAL_NAME.test(name);
77
+ }
78
+ /**
79
+ * A URL with its credential query parameters and `user:pass@` masked. The rest stays as written:
80
+ * a `{param}` in a tool's path is not encoded.
81
+ */
82
+ export function maskUrl(raw) {
83
+ const names = URL.canParse(raw) ? CREDENTIAL_NAME : QUERY_CREDENTIAL;
84
+ return raw
85
+ .replace(USERINFO, (_whole, scheme, info) => {
86
+ const [user, password] = userinfo(info);
87
+ return `${scheme}${user && MASK}${password === undefined ? '' : `:${password && MASK}`}@`;
88
+ })
89
+ .replace(PAIR, (pair, separator, name, value) => value && names.test(decoded(name)) ? `${separator}${name}=${MASK}` : pair);
90
+ }
91
+ /**
92
+ * A masked URL with each masked credential filled in from `held`, the URL it was masked from.
93
+ * A mask `held` has no value for stays a mask.
94
+ */
95
+ export function unmaskUrl(shown, held) {
96
+ const [user, password] = userinfo(USERINFO.exec(held)?.[2] ?? '');
97
+ const values = new Map();
98
+ for (const [, , name = '', value = ''] of held.matchAll(PAIR)) {
99
+ values.set(name, [...(values.get(name) ?? []), value]);
100
+ }
101
+ return shown
102
+ .replace(USERINFO, (_whole, scheme, info) => {
103
+ const [shownUser, shownPassword] = userinfo(info);
104
+ const name = shownUser === MASK && user ? user : shownUser;
105
+ const pass = shownPassword === MASK && password ? password : shownPassword;
106
+ return `${scheme}${name}${pass === undefined ? '' : `:${pass}`}@`;
107
+ })
108
+ .replace(PAIR, (pair, separator, name, value) => {
109
+ const real = value === MASK ? values.get(name)?.shift() : undefined;
110
+ return real ? `${separator}${name}=${real}` : pair;
111
+ });
112
+ }
113
+ /**
114
+ * Masked headers with each masked value filled in from `held`, the headers they were masked from.
115
+ * A mask `held` has no header for stays a mask.
116
+ */
117
+ export function unmaskHeaders(shown, held) {
118
+ return Object.fromEntries(Object.entries(shown).map(([name, value]) => [
119
+ name,
120
+ value === MASK ? (held?.[name] ?? value) : value,
121
+ ]));
122
+ }
123
+ /**
124
+ * Headers as JSON, credential-named values masked. Text that is not a JSON object is
125
+ * told only by its length: a parse error would quote it.
126
+ */
127
+ export function maskHeaders(raw) {
128
+ if (raw === undefined || raw === null || raw === '')
129
+ return raw;
130
+ let headers = raw;
131
+ if (typeof raw === 'string') {
132
+ try {
133
+ headers = JSON.parse(raw);
134
+ }
135
+ catch {
136
+ return `(not a JSON object, ${String(raw.length)} characters)`;
137
+ }
138
+ }
139
+ if (typeof headers !== 'object' || headers === null || Array.isArray(headers)) {
140
+ return '(not a JSON object)';
141
+ }
142
+ const masked = Object.fromEntries(Object.entries(headers).map(([name, value]) => [name, isCredentialName(name) ? MASK : value]));
143
+ return typeof raw === 'string' ? JSON.stringify(masked) : masked;
144
+ }
145
+ /** Scrubs text: each known secret value by name, then the kernel's sensitive patterns. */
146
+ export function scrubText(text, known) {
147
+ let out = text;
148
+ for (const [name, value] of known) {
149
+ if (value.length >= SCRUB_MIN)
150
+ out = out.replaceAll(value, `[secret ${name}]`);
151
+ }
152
+ return redactDetectors(out, SENSITIVE_GROUPS);
153
+ }
154
+ /** Known secret values worth scrubbing: trimmed, long enough, longest first. */
155
+ export function knownSecrets(secrets) {
156
+ return Object.entries(secrets)
157
+ .map(([name, value]) => [name, value.trim()])
158
+ .filter(([, value]) => value.length >= SCRUB_MIN)
159
+ .sort((a, b) => b[1].length - a[1].length);
160
+ }
161
+ /** Every string in `value` scrubbed and capped; long base64 under `data` told as bytes. */
162
+ export function scrubDeep(value, known) {
163
+ if (typeof value === 'string') {
164
+ const text = scrubText(value, known);
165
+ return text.length > TEXT_CAP ? `${text.slice(0, TEXT_CAP)}…(cut)` : text;
166
+ }
167
+ if (Array.isArray(value))
168
+ return value.map((item) => scrubDeep(item, known));
169
+ if (typeof value === 'object' && value !== null) {
170
+ return Object.fromEntries(Object.entries(value).map(([key, inner]) => [
171
+ key,
172
+ key === 'data' && typeof inner === 'string' && inner.length > BYTES_CAP
173
+ ? '(bytes)'
174
+ : scrubDeep(inner, known),
175
+ ]));
176
+ }
177
+ return value;
178
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Surfaces: one protocol for an agent to see and work in a client's screen. A page mounts a
3
+ * surface (nodes with fields and actions); the agent uses two tools, `look` and `act`, and the
4
+ * runtime projects every answer so secrets reach it only as cards.
5
+ *
6
+ * @module
7
+ */
8
+ import "../../_dnt.polyfills.js";
9
+ export type { SecretCard } from './formats.js';
10
+ export { isCredentialName, knownSecrets, MASK, maskHeaders, maskUrl, scrubDeep, scrubText, secretCard, unmaskHeaders, unmaskUrl, } from './formats.js';
11
+ export type { SurfaceLedgerEntry, SurfaceRuntime, SurfaceRuntimeOptions, } from './runtime.js';
12
+ export { createSurfaceRuntime, SURFACE_TOOL_NAMES } from './runtime.js';
13
+ export type { SurfaceToolsOptions } from './tools.js';
14
+ export { SURFACE_PROMPT, surfaceTools } from './tools.js';
15
+ export type { Surface, SurfaceAction, SurfaceActionContext, SurfaceActionOutcome, SurfaceAuthor, SurfaceChange, SurfaceEffect, SurfaceField, SurfaceFieldFormat, SurfaceIssue, SurfaceNode, SurfaceRejection, } from './types.js';
16
+ export { defineAction } from './types.js';
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Surfaces: one protocol for an agent to see and work in a client's screen. A page mounts a
3
+ * surface (nodes with fields and actions); the agent uses two tools, `look` and `act`, and the
4
+ * runtime projects every answer so secrets reach it only as cards.
5
+ *
6
+ * @module
7
+ */
8
+ import "../../_dnt.polyfills.js";
9
+ export { isCredentialName, knownSecrets, MASK, maskHeaders, maskUrl, scrubDeep, scrubText, secretCard, unmaskHeaders, unmaskUrl, } from './formats.js';
10
+ export { createSurfaceRuntime, SURFACE_TOOL_NAMES } from './runtime.js';
11
+ export { SURFACE_PROMPT, surfaceTools } from './tools.js';
12
+ export { defineAction } from './types.js';