@vellumai/vellum-gateway 0.6.5 → 0.7.0

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 (455) hide show
  1. package/ARCHITECTURE.md +5 -5
  2. package/Dockerfile +9 -8
  3. package/bun.lock +93 -70
  4. package/knip.json +5 -1
  5. package/package.json +7 -4
  6. package/scripts/test.sh +1 -1
  7. package/src/__tests__/auto-approve-conversation-thresholds.test.ts +190 -0
  8. package/src/__tests__/auto-approve-thresholds.test.ts +228 -0
  9. package/src/__tests__/bash-risk-classifier.test.ts +221 -0
  10. package/src/__tests__/contacts-control-plane-proxy.test.ts +60 -0
  11. package/src/__tests__/credential-watcher-managed-bootstrap.test.ts +0 -54
  12. package/src/__tests__/guardian-channel-actor-lookup.test.ts +47 -0
  13. package/src/__tests__/guardian-init-lockfile.test.ts +467 -291
  14. package/src/__tests__/ipc-contact-routes.test.ts +17 -4
  15. package/src/__tests__/ipc-server-multi-client.test.ts +129 -0
  16. package/src/__tests__/ipc-socket-path.test.ts +43 -34
  17. package/src/__tests__/live-voice-websocket.test.ts +454 -0
  18. package/src/__tests__/migration-teleport-gcs-proxy.test.ts +220 -0
  19. package/src/__tests__/nonbash-trust-rule-overrides.test.ts +501 -0
  20. package/src/__tests__/push-schema-no-prompt.test.ts +76 -0
  21. package/src/__tests__/remote-feature-flag-sync.test.ts +7 -27
  22. package/src/__tests__/route-schema-guard.test.ts +3 -3
  23. package/src/__tests__/runtime-client.test.ts +103 -0
  24. package/src/__tests__/schema.test.ts +0 -26
  25. package/src/__tests__/seed-trust-rules.test.ts +150 -0
  26. package/src/__tests__/telegram-webhook-manager.test.ts +7 -13
  27. package/src/__tests__/trust-rule-cache.test.ts +398 -0
  28. package/src/__tests__/trust-rule-store.test.ts +601 -0
  29. package/src/__tests__/trust-rules-routes.test.ts +373 -228
  30. package/src/__tests__/upstream-transport.test.ts +319 -0
  31. package/src/auth/capability-tokens.ts +248 -0
  32. package/src/auth/guardian-bootstrap.ts +575 -0
  33. package/src/auth/guardian-refresh.ts +300 -0
  34. package/src/auth/token-exchange.ts +38 -0
  35. package/src/channels/types.ts +25 -2
  36. package/src/credential-reader.ts +5 -38
  37. package/src/credential-watcher.ts +9 -21
  38. package/src/db/assistant-db-proxy.ts +68 -0
  39. package/src/db/connection.ts +72 -11
  40. package/src/db/data-migrations/index.ts +6 -4
  41. package/src/db/data-migrations/m0002-actor-token-tables-to-gateway.ts +183 -0
  42. package/src/db/denial-reply-rate-limiter.ts +126 -0
  43. package/src/db/schema.ts +133 -1
  44. package/src/db/seed-trust-rules.ts +92 -0
  45. package/src/db/trust-rule-store.ts +339 -0
  46. package/src/email/register-callback.test.ts +6 -4
  47. package/src/email/register-callback.ts +1 -4
  48. package/src/feature-flag-registry.json +25 -17
  49. package/src/feature-flag-remote-store.ts +33 -2
  50. package/src/http/middleware/rate-limit.ts +0 -3
  51. package/src/http/routes/auto-approve-thresholds.ts +281 -0
  52. package/src/http/routes/brain-graph-proxy.ts +51 -60
  53. package/src/http/routes/browser-extension-pair.ts +455 -0
  54. package/src/http/routes/browser-relay-websocket.ts +18 -19
  55. package/src/http/routes/channel-readiness-proxy.ts +21 -65
  56. package/src/http/routes/channel-verification-session-proxy.test.ts +245 -0
  57. package/src/http/routes/channel-verification-session-proxy.ts +267 -134
  58. package/src/http/routes/contacts-control-plane-proxy.ts +39 -81
  59. package/src/http/routes/inbound-register.ts +197 -0
  60. package/src/http/routes/ipc-runtime-proxy.test.ts +320 -0
  61. package/src/http/routes/ipc-runtime-proxy.ts +199 -0
  62. package/src/http/routes/live-voice-websocket.ts +194 -0
  63. package/src/http/routes/log-export.test.ts +55 -44
  64. package/src/http/routes/log-export.ts +9 -43
  65. package/src/http/routes/mailgun-identity.ts +70 -0
  66. package/src/http/routes/mailgun-webhook.ts +474 -0
  67. package/src/http/routes/migration-proxy.ts +197 -133
  68. package/src/http/routes/migration-rollback-proxy.ts +15 -57
  69. package/src/http/routes/oauth-apps-proxy.ts +21 -65
  70. package/src/http/routes/oauth-providers-proxy.ts +21 -65
  71. package/src/http/routes/ps.ts +77 -0
  72. package/src/http/routes/resend-identity.ts +51 -0
  73. package/src/http/routes/resend-webhook.ts +555 -0
  74. package/src/http/routes/runtime-health-proxy.ts +20 -55
  75. package/src/http/routes/runtime-proxy.ts +32 -23
  76. package/src/http/routes/slack-control-plane-proxy.ts +21 -65
  77. package/src/http/routes/stt-stream-websocket.ts +12 -14
  78. package/src/http/routes/telegram-control-plane-proxy.ts +33 -71
  79. package/src/http/routes/telegram-webhook.ts +41 -22
  80. package/src/http/routes/trust-rules.suggest.test.ts +235 -0
  81. package/src/http/routes/trust-rules.ts +238 -189
  82. package/src/http/routes/twilio-control-plane-proxy.ts +35 -77
  83. package/src/http/routes/twilio-media-websocket.ts +9 -5
  84. package/src/http/routes/twilio-relay-websocket.ts +9 -5
  85. package/src/http/routes/upgrade-broadcast-proxy.ts +15 -57
  86. package/src/http/routes/vercel-control-plane-proxy.ts +31 -69
  87. package/src/http/routes/workspace-commit-proxy.ts +15 -57
  88. package/src/index.ts +296 -105
  89. package/src/ipc/assistant-client.test.ts +290 -0
  90. package/src/ipc/assistant-client.ts +354 -0
  91. package/src/ipc/capability-token-handlers.ts +30 -0
  92. package/src/ipc/risk-classification-handlers.test.ts +646 -0
  93. package/src/ipc/risk-classification-handlers.ts +542 -0
  94. package/src/ipc/route-schema-cache.ts +162 -0
  95. package/src/ipc/server.ts +28 -35
  96. package/src/ipc/socket-path.ts +50 -48
  97. package/src/ipc/threshold-handlers.ts +94 -0
  98. package/src/pairing/approved-devices-store.ts +110 -0
  99. package/src/pairing/pairing-routes.ts +379 -0
  100. package/src/pairing/pairing-store.ts +218 -0
  101. package/src/post-assistant-ready.ts +72 -0
  102. package/src/remote-feature-flag-sync.ts +11 -16
  103. package/src/risk/arg-parser.test.ts +161 -0
  104. package/src/risk/arg-parser.ts +141 -0
  105. package/src/risk/bash-risk-classifier.test.ts +1741 -0
  106. package/src/risk/bash-risk-classifier.ts +1001 -0
  107. package/src/risk/command-registry/AGENTS.md +62 -0
  108. package/src/risk/command-registry/commands/7z.ts +9 -0
  109. package/src/risk/command-registry/commands/7za.ts +9 -0
  110. package/src/risk/command-registry/commands/R.ts +8 -0
  111. package/src/risk/command-registry/commands/Rscript.ts +8 -0
  112. package/src/risk/command-registry/commands/ack.ts +19 -0
  113. package/src/risk/command-registry/commands/adduser.ts +8 -0
  114. package/src/risk/command-registry/commands/ag.ts +19 -0
  115. package/src/risk/command-registry/commands/alias.ts +7 -0
  116. package/src/risk/command-registry/commands/ant.ts +8 -0
  117. package/src/risk/command-registry/commands/apk.ts +8 -0
  118. package/src/risk/command-registry/commands/apt-get.ts +8 -0
  119. package/src/risk/command-registry/commands/apt.ts +8 -0
  120. package/src/risk/command-registry/commands/assistant.ts +513 -0
  121. package/src/risk/command-registry/commands/at.ts +8 -0
  122. package/src/risk/command-registry/commands/awk.ts +20 -0
  123. package/src/risk/command-registry/commands/aws.ts +8 -0
  124. package/src/risk/command-registry/commands/az.ts +8 -0
  125. package/src/risk/command-registry/commands/b2sum.ts +8 -0
  126. package/src/risk/command-registry/commands/base64.ts +8 -0
  127. package/src/risk/command-registry/commands/basename.ts +9 -0
  128. package/src/risk/command-registry/commands/bash.ts +9 -0
  129. package/src/risk/command-registry/commands/bazel.ts +8 -0
  130. package/src/risk/command-registry/commands/brew.ts +30 -0
  131. package/src/risk/command-registry/commands/bun.ts +26 -0
  132. package/src/risk/command-registry/commands/bunx.ts +8 -0
  133. package/src/risk/command-registry/commands/bunzip2.ts +9 -0
  134. package/src/risk/command-registry/commands/bzip2.ts +9 -0
  135. package/src/risk/command-registry/commands/cal.ts +7 -0
  136. package/src/risk/command-registry/commands/cargo.ts +29 -0
  137. package/src/risk/command-registry/commands/cat.ts +18 -0
  138. package/src/risk/command-registry/commands/cd.ts +7 -0
  139. package/src/risk/command-registry/commands/chgrp.ts +10 -0
  140. package/src/risk/command-registry/commands/chmod.ts +11 -0
  141. package/src/risk/command-registry/commands/chown.ts +11 -0
  142. package/src/risk/command-registry/commands/chroot.ts +8 -0
  143. package/src/risk/command-registry/commands/cksum.ts +8 -0
  144. package/src/risk/command-registry/commands/cmake.ts +8 -0
  145. package/src/risk/command-registry/commands/cmp.ts +9 -0
  146. package/src/risk/command-registry/commands/column.ts +9 -0
  147. package/src/risk/command-registry/commands/comm.ts +9 -0
  148. package/src/risk/command-registry/commands/command.ts +17 -0
  149. package/src/risk/command-registry/commands/composer.ts +25 -0
  150. package/src/risk/command-registry/commands/cp.ts +24 -0
  151. package/src/risk/command-registry/commands/crontab.ts +8 -0
  152. package/src/risk/command-registry/commands/csplit.ts +9 -0
  153. package/src/risk/command-registry/commands/curl.ts +69 -0
  154. package/src/risk/command-registry/commands/cut.ts +9 -0
  155. package/src/risk/command-registry/commands/dash.ts +9 -0
  156. package/src/risk/command-registry/commands/date.ts +7 -0
  157. package/src/risk/command-registry/commands/dd.ts +8 -0
  158. package/src/risk/command-registry/commands/declare.ts +8 -0
  159. package/src/risk/command-registry/commands/defaults.ts +8 -0
  160. package/src/risk/command-registry/commands/deluser.ts +8 -0
  161. package/src/risk/command-registry/commands/deno.ts +8 -0
  162. package/src/risk/command-registry/commands/df.ts +10 -0
  163. package/src/risk/command-registry/commands/diff.ts +10 -0
  164. package/src/risk/command-registry/commands/dig.ts +7 -0
  165. package/src/risk/command-registry/commands/dir.ts +9 -0
  166. package/src/risk/command-registry/commands/dirname.ts +9 -0
  167. package/src/risk/command-registry/commands/dmesg.ts +15 -0
  168. package/src/risk/command-registry/commands/dnf.ts +8 -0
  169. package/src/risk/command-registry/commands/doas.ts +9 -0
  170. package/src/risk/command-registry/commands/docker.ts +215 -0
  171. package/src/risk/command-registry/commands/dos2unix.ts +9 -0
  172. package/src/risk/command-registry/commands/du.ts +10 -0
  173. package/src/risk/command-registry/commands/echo.ts +11 -0
  174. package/src/risk/command-registry/commands/egrep.ts +19 -0
  175. package/src/risk/command-registry/commands/env.ts +8 -0
  176. package/src/risk/command-registry/commands/eval.ts +8 -0
  177. package/src/risk/command-registry/commands/exec.ts +9 -0
  178. package/src/risk/command-registry/commands/expand.ts +9 -0
  179. package/src/risk/command-registry/commands/export.ts +7 -0
  180. package/src/risk/command-registry/commands/fd.ts +9 -0
  181. package/src/risk/command-registry/commands/fdisk.ts +8 -0
  182. package/src/risk/command-registry/commands/fgrep.ts +19 -0
  183. package/src/risk/command-registry/commands/file.ts +10 -0
  184. package/src/risk/command-registry/commands/find.ts +40 -0
  185. package/src/risk/command-registry/commands/firewall-cmd.ts +8 -0
  186. package/src/risk/command-registry/commands/fish.ts +9 -0
  187. package/src/risk/command-registry/commands/fmt.ts +9 -0
  188. package/src/risk/command-registry/commands/fold.ts +9 -0
  189. package/src/risk/command-registry/commands/free.ts +7 -0
  190. package/src/risk/command-registry/commands/ftp.ts +8 -0
  191. package/src/risk/command-registry/commands/gcloud.ts +8 -0
  192. package/src/risk/command-registry/commands/gem.ts +21 -0
  193. package/src/risk/command-registry/commands/gh.ts +65 -0
  194. package/src/risk/command-registry/commands/git.ts +249 -0
  195. package/src/risk/command-registry/commands/go.ts +38 -0
  196. package/src/risk/command-registry/commands/gradle.ts +8 -0
  197. package/src/risk/command-registry/commands/grep.ts +20 -0
  198. package/src/risk/command-registry/commands/groupadd.ts +8 -0
  199. package/src/risk/command-registry/commands/groupdel.ts +8 -0
  200. package/src/risk/command-registry/commands/groupmod.ts +8 -0
  201. package/src/risk/command-registry/commands/groups.ts +7 -0
  202. package/src/risk/command-registry/commands/gunzip.ts +10 -0
  203. package/src/risk/command-registry/commands/gzip.ts +10 -0
  204. package/src/risk/command-registry/commands/halt.ts +8 -0
  205. package/src/risk/command-registry/commands/head.ts +10 -0
  206. package/src/risk/command-registry/commands/helm.ts +40 -0
  207. package/src/risk/command-registry/commands/help.ts +7 -0
  208. package/src/risk/command-registry/commands/hexdump.ts +7 -0
  209. package/src/risk/command-registry/commands/hg.ts +33 -0
  210. package/src/risk/command-registry/commands/history.ts +7 -0
  211. package/src/risk/command-registry/commands/host.ts +7 -0
  212. package/src/risk/command-registry/commands/hostname.ts +7 -0
  213. package/src/risk/command-registry/commands/htop.ts +7 -0
  214. package/src/risk/command-registry/commands/http.ts +7 -0
  215. package/src/risk/command-registry/commands/iconv.ts +8 -0
  216. package/src/risk/command-registry/commands/id.ts +7 -0
  217. package/src/risk/command-registry/commands/ifconfig.ts +8 -0
  218. package/src/risk/command-registry/commands/info.ts +7 -0
  219. package/src/risk/command-registry/commands/install.ts +23 -0
  220. package/src/risk/command-registry/commands/ionice.ts +8 -0
  221. package/src/risk/command-registry/commands/iostat.ts +7 -0
  222. package/src/risk/command-registry/commands/ip.ts +8 -0
  223. package/src/risk/command-registry/commands/ip6tables.ts +8 -0
  224. package/src/risk/command-registry/commands/iptables.ts +8 -0
  225. package/src/risk/command-registry/commands/java.ts +16 -0
  226. package/src/risk/command-registry/commands/javac.ts +8 -0
  227. package/src/risk/command-registry/commands/join.ts +9 -0
  228. package/src/risk/command-registry/commands/jq.ts +9 -0
  229. package/src/risk/command-registry/commands/kill.ts +8 -0
  230. package/src/risk/command-registry/commands/killall.ts +8 -0
  231. package/src/risk/command-registry/commands/ksh.ts +9 -0
  232. package/src/risk/command-registry/commands/kubectl.ts +66 -0
  233. package/src/risk/command-registry/commands/last.ts +7 -0
  234. package/src/risk/command-registry/commands/launchctl.ts +8 -0
  235. package/src/risk/command-registry/commands/less.ts +10 -0
  236. package/src/risk/command-registry/commands/ln.ts +16 -0
  237. package/src/risk/command-registry/commands/locate.ts +7 -0
  238. package/src/risk/command-registry/commands/loginctl.ts +8 -0
  239. package/src/risk/command-registry/commands/ls.ts +10 -0
  240. package/src/risk/command-registry/commands/lsof.ts +7 -0
  241. package/src/risk/command-registry/commands/ltrace.ts +9 -0
  242. package/src/risk/command-registry/commands/lua.ts +16 -0
  243. package/src/risk/command-registry/commands/make.ts +8 -0
  244. package/src/risk/command-registry/commands/man.ts +7 -0
  245. package/src/risk/command-registry/commands/md5.ts +8 -0
  246. package/src/risk/command-registry/commands/md5sum.ts +8 -0
  247. package/src/risk/command-registry/commands/meson.ts +8 -0
  248. package/src/risk/command-registry/commands/mkdir.ts +10 -0
  249. package/src/risk/command-registry/commands/mkfs.ts +8 -0
  250. package/src/risk/command-registry/commands/mktemp.ts +9 -0
  251. package/src/risk/command-registry/commands/more.ts +10 -0
  252. package/src/risk/command-registry/commands/mount.ts +8 -0
  253. package/src/risk/command-registry/commands/mtr.ts +7 -0
  254. package/src/risk/command-registry/commands/mv.ts +18 -0
  255. package/src/risk/command-registry/commands/mvn.ts +8 -0
  256. package/src/risk/command-registry/commands/nc.ts +8 -0
  257. package/src/risk/command-registry/commands/netcat.ts +8 -0
  258. package/src/risk/command-registry/commands/netstat.ts +7 -0
  259. package/src/risk/command-registry/commands/networksetup.ts +8 -0
  260. package/src/risk/command-registry/commands/nft.ts +8 -0
  261. package/src/risk/command-registry/commands/nice.ts +8 -0
  262. package/src/risk/command-registry/commands/ninja.ts +8 -0
  263. package/src/risk/command-registry/commands/nl.ts +9 -0
  264. package/src/risk/command-registry/commands/nmap.ts +8 -0
  265. package/src/risk/command-registry/commands/nmcli.ts +8 -0
  266. package/src/risk/command-registry/commands/node.ts +22 -0
  267. package/src/risk/command-registry/commands/nohup.ts +8 -0
  268. package/src/risk/command-registry/commands/npm.ts +54 -0
  269. package/src/risk/command-registry/commands/npx.ts +8 -0
  270. package/src/risk/command-registry/commands/nslookup.ts +7 -0
  271. package/src/risk/command-registry/commands/od.ts +9 -0
  272. package/src/risk/command-registry/commands/openssl.ts +8 -0
  273. package/src/risk/command-registry/commands/pacman.ts +8 -0
  274. package/src/risk/command-registry/commands/parted.ts +8 -0
  275. package/src/risk/command-registry/commands/passwd.ts +8 -0
  276. package/src/risk/command-registry/commands/paste.ts +9 -0
  277. package/src/risk/command-registry/commands/perl.ts +16 -0
  278. package/src/risk/command-registry/commands/pgrep.ts +7 -0
  279. package/src/risk/command-registry/commands/php.ts +16 -0
  280. package/src/risk/command-registry/commands/ping.ts +7 -0
  281. package/src/risk/command-registry/commands/pip.ts +24 -0
  282. package/src/risk/command-registry/commands/pip3.ts +24 -0
  283. package/src/risk/command-registry/commands/pipx.ts +22 -0
  284. package/src/risk/command-registry/commands/pkill.ts +8 -0
  285. package/src/risk/command-registry/commands/plocate.ts +7 -0
  286. package/src/risk/command-registry/commands/pnpm.ts +37 -0
  287. package/src/risk/command-registry/commands/pnpx.ts +8 -0
  288. package/src/risk/command-registry/commands/poetry.ts +25 -0
  289. package/src/risk/command-registry/commands/popd.ts +7 -0
  290. package/src/risk/command-registry/commands/port.ts +8 -0
  291. package/src/risk/command-registry/commands/poweroff.ts +8 -0
  292. package/src/risk/command-registry/commands/powershell.ts +8 -0
  293. package/src/risk/command-registry/commands/pr.ts +9 -0
  294. package/src/risk/command-registry/commands/printenv.ts +7 -0
  295. package/src/risk/command-registry/commands/printf.ts +11 -0
  296. package/src/risk/command-registry/commands/ps.ts +7 -0
  297. package/src/risk/command-registry/commands/pstree.ts +7 -0
  298. package/src/risk/command-registry/commands/pushd.ts +7 -0
  299. package/src/risk/command-registry/commands/pwd.ts +11 -0
  300. package/src/risk/command-registry/commands/pwsh.ts +8 -0
  301. package/src/risk/command-registry/commands/python.ts +16 -0
  302. package/src/risk/command-registry/commands/python3.ts +16 -0
  303. package/src/risk/command-registry/commands/readlink.ts +10 -0
  304. package/src/risk/command-registry/commands/readonly.ts +8 -0
  305. package/src/risk/command-registry/commands/realpath.ts +9 -0
  306. package/src/risk/command-registry/commands/reboot.ts +8 -0
  307. package/src/risk/command-registry/commands/renice.ts +8 -0
  308. package/src/risk/command-registry/commands/rev.ts +8 -0
  309. package/src/risk/command-registry/commands/rg.ts +19 -0
  310. package/src/risk/command-registry/commands/rm.ts +42 -0
  311. package/src/risk/command-registry/commands/rmdir.ts +10 -0
  312. package/src/risk/command-registry/commands/route.ts +8 -0
  313. package/src/risk/command-registry/commands/rsync.ts +8 -0
  314. package/src/risk/command-registry/commands/ruby.ts +8 -0
  315. package/src/risk/command-registry/commands/scp.ts +8 -0
  316. package/src/risk/command-registry/commands/screen.ts +8 -0
  317. package/src/risk/command-registry/commands/sed.ts +29 -0
  318. package/src/risk/command-registry/commands/seq.ts +10 -0
  319. package/src/risk/command-registry/commands/service.ts +8 -0
  320. package/src/risk/command-registry/commands/set.ts +8 -0
  321. package/src/risk/command-registry/commands/sftp.ts +8 -0
  322. package/src/risk/command-registry/commands/sh.ts +9 -0
  323. package/src/risk/command-registry/commands/sha1sum.ts +8 -0
  324. package/src/risk/command-registry/commands/sha256sum.ts +8 -0
  325. package/src/risk/command-registry/commands/sha512sum.ts +8 -0
  326. package/src/risk/command-registry/commands/shred.ts +9 -0
  327. package/src/risk/command-registry/commands/shuf.ts +8 -0
  328. package/src/risk/command-registry/commands/shutdown.ts +8 -0
  329. package/src/risk/command-registry/commands/sleep.ts +10 -0
  330. package/src/risk/command-registry/commands/sort.ts +31 -0
  331. package/src/risk/command-registry/commands/source.ts +8 -0
  332. package/src/risk/command-registry/commands/split.ts +9 -0
  333. package/src/risk/command-registry/commands/ss.ts +7 -0
  334. package/src/risk/command-registry/commands/ssh-add.ts +8 -0
  335. package/src/risk/command-registry/commands/ssh-copy-id.ts +8 -0
  336. package/src/risk/command-registry/commands/ssh-keygen.ts +10 -0
  337. package/src/risk/command-registry/commands/ssh.ts +8 -0
  338. package/src/risk/command-registry/commands/stat.ts +10 -0
  339. package/src/risk/command-registry/commands/strace.ts +9 -0
  340. package/src/risk/command-registry/commands/strings.ts +9 -0
  341. package/src/risk/command-registry/commands/su.ts +8 -0
  342. package/src/risk/command-registry/commands/sudo.ts +9 -0
  343. package/src/risk/command-registry/commands/svn.ts +33 -0
  344. package/src/risk/command-registry/commands/sw_vers.ts +7 -0
  345. package/src/risk/command-registry/commands/swift.ts +23 -0
  346. package/src/risk/command-registry/commands/sysctl.ts +24 -0
  347. package/src/risk/command-registry/commands/systemctl.ts +8 -0
  348. package/src/risk/command-registry/commands/tail.ts +10 -0
  349. package/src/risk/command-registry/commands/tar.ts +48 -0
  350. package/src/risk/command-registry/commands/taskset.ts +8 -0
  351. package/src/risk/command-registry/commands/tcsh.ts +9 -0
  352. package/src/risk/command-registry/commands/tee.ts +10 -0
  353. package/src/risk/command-registry/commands/telnet.ts +8 -0
  354. package/src/risk/command-registry/commands/terraform.ts +34 -0
  355. package/src/risk/command-registry/commands/time.ts +8 -0
  356. package/src/risk/command-registry/commands/timeout.ts +9 -0
  357. package/src/risk/command-registry/commands/tmux.ts +8 -0
  358. package/src/risk/command-registry/commands/top.ts +7 -0
  359. package/src/risk/command-registry/commands/touch.ts +10 -0
  360. package/src/risk/command-registry/commands/tr.ts +11 -0
  361. package/src/risk/command-registry/commands/tracepath.ts +7 -0
  362. package/src/risk/command-registry/commands/traceroute.ts +7 -0
  363. package/src/risk/command-registry/commands/tree.ts +10 -0
  364. package/src/risk/command-registry/commands/truncate.ts +9 -0
  365. package/src/risk/command-registry/commands/ts-node.ts +8 -0
  366. package/src/risk/command-registry/commands/tsx.ts +8 -0
  367. package/src/risk/command-registry/commands/type.ts +7 -0
  368. package/src/risk/command-registry/commands/typeset.ts +8 -0
  369. package/src/risk/command-registry/commands/ufw.ts +8 -0
  370. package/src/risk/command-registry/commands/umask.ts +8 -0
  371. package/src/risk/command-registry/commands/umount.ts +8 -0
  372. package/src/risk/command-registry/commands/uname.ts +7 -0
  373. package/src/risk/command-registry/commands/unexpand.ts +9 -0
  374. package/src/risk/command-registry/commands/uniq.ts +9 -0
  375. package/src/risk/command-registry/commands/unix2dos.ts +9 -0
  376. package/src/risk/command-registry/commands/unlink.ts +9 -0
  377. package/src/risk/command-registry/commands/unset.ts +7 -0
  378. package/src/risk/command-registry/commands/unxz.ts +9 -0
  379. package/src/risk/command-registry/commands/unzip.ts +10 -0
  380. package/src/risk/command-registry/commands/unzstd.ts +9 -0
  381. package/src/risk/command-registry/commands/uptime.ts +7 -0
  382. package/src/risk/command-registry/commands/useradd.ts +8 -0
  383. package/src/risk/command-registry/commands/userdel.ts +8 -0
  384. package/src/risk/command-registry/commands/usermod.ts +8 -0
  385. package/src/risk/command-registry/commands/users.ts +7 -0
  386. package/src/risk/command-registry/commands/uv.ts +31 -0
  387. package/src/risk/command-registry/commands/vdir.ts +9 -0
  388. package/src/risk/command-registry/commands/visudo.ts +8 -0
  389. package/src/risk/command-registry/commands/vmstat.ts +7 -0
  390. package/src/risk/command-registry/commands/w.ts +7 -0
  391. package/src/risk/command-registry/commands/watch.ts +8 -0
  392. package/src/risk/command-registry/commands/wc.ts +10 -0
  393. package/src/risk/command-registry/commands/wget.ts +41 -0
  394. package/src/risk/command-registry/commands/where.ts +7 -0
  395. package/src/risk/command-registry/commands/whereis.ts +7 -0
  396. package/src/risk/command-registry/commands/which.ts +7 -0
  397. package/src/risk/command-registry/commands/who.ts +7 -0
  398. package/src/risk/command-registry/commands/whoami.ts +7 -0
  399. package/src/risk/command-registry/commands/wipefs.ts +8 -0
  400. package/src/risk/command-registry/commands/xargs.ts +9 -0
  401. package/src/risk/command-registry/commands/xxd.ts +7 -0
  402. package/src/risk/command-registry/commands/xz.ts +9 -0
  403. package/src/risk/command-registry/commands/yarn.ts +39 -0
  404. package/src/risk/command-registry/commands/yes.ts +10 -0
  405. package/src/risk/command-registry/commands/yq.ts +9 -0
  406. package/src/risk/command-registry/commands/yum.ts +8 -0
  407. package/src/risk/command-registry/commands/zip.ts +10 -0
  408. package/src/risk/command-registry/commands/zsh.ts +9 -0
  409. package/src/risk/command-registry/commands/zstd.ts +9 -0
  410. package/src/risk/command-registry/commands/zypper.ts +8 -0
  411. package/src/risk/command-registry/index.ts +617 -0
  412. package/src/risk/command-registry.test.ts +907 -0
  413. package/src/risk/directory-scope.test.ts +527 -0
  414. package/src/risk/directory-scope.ts +208 -0
  415. package/src/risk/file-risk-classifier.test.ts +600 -0
  416. package/src/risk/file-risk-classifier.ts +386 -0
  417. package/src/risk/project-boundary.test.ts +88 -0
  418. package/src/risk/project-boundary.ts +38 -0
  419. package/src/risk/risk-classifier-parity.test.ts +199 -0
  420. package/src/risk/risk-types.ts +350 -0
  421. package/src/risk/schedule-risk-classifier.test.ts +129 -0
  422. package/src/risk/schedule-risk-classifier.ts +115 -0
  423. package/src/risk/shell-identity.test.ts +235 -0
  424. package/src/risk/shell-identity.ts +296 -0
  425. package/src/risk/shell-parser-fuzz.test.ts +629 -0
  426. package/src/risk/shell-parser-property.test.ts +652 -0
  427. package/src/risk/shell-parser.test.ts +595 -0
  428. package/src/risk/shell-parser.ts +634 -0
  429. package/src/risk/skill-risk-classifier.test.ts +238 -0
  430. package/src/risk/skill-risk-classifier.ts +252 -0
  431. package/src/risk/trust-rule-cache.ts +138 -0
  432. package/src/risk/web-risk-classifier.test.ts +170 -0
  433. package/src/risk/web-risk-classifier.ts +124 -0
  434. package/src/runtime/client.ts +191 -95
  435. package/src/schema.ts +922 -382
  436. package/src/slack/socket-mode.ts +8 -0
  437. package/src/telegram/send.test.ts +1 -1
  438. package/src/telegram/send.ts +11 -1
  439. package/src/telegram/webhook-manager.ts +1 -4
  440. package/src/whatsapp/send.ts +11 -1
  441. package/src/__tests__/cloud-oauth-token.test.ts +0 -206
  442. package/src/__tests__/slack-deliver-ratelimit.test.ts +0 -234
  443. package/src/__tests__/slack-deliver.test.ts +0 -1422
  444. package/src/__tests__/telegram-deliver-auth.test.ts +0 -508
  445. package/src/__tests__/trust-store.test.ts +0 -810
  446. package/src/http/middleware/deliver-auth.ts +0 -45
  447. package/src/http/routes/cloud-oauth-token.ts +0 -130
  448. package/src/http/routes/pairing-proxy.ts +0 -151
  449. package/src/http/routes/slack-deliver.ts +0 -1030
  450. package/src/http/routes/telegram-deliver.test.ts +0 -602
  451. package/src/http/routes/telegram-deliver.ts +0 -218
  452. package/src/http/routes/whatsapp-deliver.test.ts +0 -292
  453. package/src/http/routes/whatsapp-deliver.ts +0 -217
  454. package/src/trust-store.ts +0 -556
  455. package/src/util/strip-hop-by-hop.ts +0 -34
package/ARCHITECTURE.md CHANGED
@@ -332,7 +332,7 @@ The `/deliver/telegram` endpoint requires bearer auth unconditionally (fail-clos
332
332
 
333
333
  ### Channel Approval Flow
334
334
 
335
- When the assistant requires tool-use confirmation during a channel session (e.g., Telegram), the approval flow intercepts the run and surfaces an interactive prompt to the user. This approval-aware path is always active when orchestrator + callback context are available. Guardian enforcement (fail-closed denial for unknown actors, `forceStrictSideEffects`, guardian-routed approval prompts) applies consistently to non-guardian/unverified actors.
335
+ When the assistant requires tool-use confirmation during a channel session (e.g., Telegram), the approval flow intercepts the run and surfaces an interactive prompt to the user. This approval-aware path is always active when orchestrator + callback context are available. Guardian enforcement (fail-closed denial for unknown actors, explicit approval prompts for side effects, guardian-routed approval prompts) applies consistently to non-guardian/unverified actors.
336
336
 
337
337
  **State machine:**
338
338
 
@@ -367,7 +367,7 @@ Runtime detects needs_confirmation
367
367
 
368
368
  **Conversational approval turn:** When a text message arrives while an approval is pending (e.g., non-Telegram channels or user typing a reply instead of clicking a button), a **conversational approval turn** is run via `runApprovalConversationTurn()` from `approval-conversation-turn.ts`. The conversational engine uses LLM structured output (native `tool_use`) to classify user intent as: `keep_pending` (reply without deciding), `approve_once`, `approve_always`, or `reject`. Non-decision messages receive a natural assistant reply and the run stays pending — no reminder spam. The engine fails closed: any model failure returns `keep_pending` with a deterministic fallback asking the user to try again. Callback/button handling remains deterministic and unchanged. The `channelSupportsRichApprovalUI()` function determines whether to send the structured `promptText` (for rich channels like Telegram) or the `plainTextFallback` string (for all other channels). Currently only `telegram` is classified as a rich channel.
369
369
 
370
- **Guardian-aware routing:** When a guardian binding exists for the channel, the approval flow resolves the sender's actor role (`guardian` vs `non-guardian`). Non-guardian actors have `forceStrictSideEffects` set on the session so all side-effect tools trigger approval prompts regardless of existing allow rules. Approval prompts for non-guardian actions are routed to the guardian's delivery chat (not the requester's chat), and a `channelGuardianApprovalRequest` record is created. When the guardian approves or denies, the decision is applied to the underlying run and the requester's chat is notified of the outcome. Guardian actors follow the standard approval flow. Guardian approval follow-ups also use the conversational engine with role-specific context; `approve_always` is downgraded to `approve_once` for guardian approvals since permanent allow-rules require guardian authority. All guardian state (bindings, challenges, approval requests) is scoped to the `(assistantId, channel)` pair -- the `assistantId` parameter flows through `handleChannelInbound`, `validateAndConsumeVerification`, `isGuardian`, `getGuardianBinding`, and `createApprovalRequest`.
370
+ **Guardian-aware routing:** When a guardian binding exists for the channel, the approval flow resolves the sender's actor role (`guardian` vs `non-guardian`). Non-guardian actors have `forcePromptSideEffects` set on the session so all side-effect tools trigger approval prompts regardless of existing allow rules. Approval prompts for non-guardian actions are routed to the guardian's delivery chat (not the requester's chat), and a `channelGuardianApprovalRequest` record is created. When the guardian approves or denies, the decision is applied to the underlying run and the requester's chat is notified of the outcome. Guardian actors follow the standard approval flow. Guardian approval follow-ups also use the conversational engine with role-specific context; `approve_always` is downgraded to `approve_once` for guardian approvals since permanent allow-rules require guardian authority. All guardian state (bindings, challenges, approval requests) is scoped to the `(assistantId, channel)` pair -- the `assistantId` parameter flows through `handleChannelInbound`, `validateAndConsumeVerification`, `isGuardian`, `getGuardianBinding`, and `createApprovalRequest`.
371
371
 
372
372
  **Proactive expiry sweep:** The runtime runs a periodic sweep every 60 seconds (`sweepExpiredGuardianApprovals`) that finds guardian approval requests past the 30-minute TTL, auto-denies the underlying runs, and notifies both the requester and guardian via the gateway's per-channel `/deliver/<channel>` endpoint. This ensures expired approvals are closed without waiting for follow-up traffic from either party. The sweep is started automatically whenever a run orchestrator is available.
373
373
 
@@ -489,10 +489,10 @@ This ordering ensures that ingress ACL decisions are finalized before any agent
489
489
 
490
490
  #### Actor Role Resolution
491
491
 
492
- When a message arrives on a channel, the runtime resolves the sender's role. Role _classification_ runs unconditionally. Guardian enforcement (`forceStrictSideEffects`, fail-closed denial, guardian approval routing) applies to non-guardian/unverified actors whenever orchestrator + callback context are available:
492
+ When a message arrives on a channel, the runtime resolves the sender's role. Role _classification_ runs unconditionally. Guardian enforcement (`forcePromptSideEffects`, fail-closed denial, guardian approval routing) applies to non-guardian/unverified actors whenever orchestrator + callback context are available:
493
493
 
494
494
  - **Guardian**: `actorExternalId` matches the binding's `guardianExternalUserId` (DB column) for the `(assistantId, channel)` pair. Self-approval is handled through the same approval-aware channel flow.
495
- - **Non-guardian**: A known sender who is not the guardian. Side-effect tools are forced through the confirmation flow (`forceStrictSideEffects`), and approval prompts are routed to the guardian's chat instead of the requester's chat.
495
+ - **Non-guardian**: A known sender who is not the guardian. Side-effect tools are forced through the confirmation flow (`forcePromptSideEffects`), and approval prompts are routed to the guardian's chat instead of the requester's chat.
496
496
  - **Unverified channel**: No guardian binding exists for the channel, or `actorExternalId` is absent. Sensitive actions are auto-denied immediately (fail-closed). This prevents unverified senders from self-approving actions or bypassing guardian enforcement by omitting identity data.
497
497
 
498
498
  #### Sensitive Action Gating (Non-Guardian Approval)
@@ -510,7 +510,7 @@ sequenceDiagram
510
510
  NG->>TG: Message triggers tool use
511
511
  TG->>GW: POST /webhooks/telegram
512
512
  GW->>Daemon: POST /v1/channels/inbound (JWT auth)
513
- Daemon->>Daemon: Detect non-guardian, set forceStrictSideEffects
513
+ Daemon->>Daemon: Detect non-guardian, set forcePromptSideEffects
514
514
  Daemon->>Daemon: Tool needs confirmation → create GuardianApprovalRequest
515
515
  Daemon->>GW: POST /deliver/telegram (approval prompt + inline keyboard)
516
516
  GW->>Guardian: sendMessage (approval prompt)
package/Dockerfile CHANGED
@@ -9,7 +9,12 @@ WORKDIR /app
9
9
  COPY --from=bun /usr/local/bin/bun /usr/local/bin/bun
10
10
 
11
11
  # Copy shared packages needed by gateway's repo-local dependencies
12
- COPY packages/ces-contracts ./packages/ces-contracts
12
+ COPY packages/assistant-client ./packages/assistant-client
13
+ COPY packages/ces-client ./packages/ces-client
14
+ COPY packages/service-contracts ./packages/service-contracts
15
+
16
+ # Install deps for shared packages that have their own file: dependencies.
17
+ RUN cd /app/packages/ces-client && bun install --frozen-lockfile
13
18
 
14
19
  # Install gateway dependencies first for cache reuse
15
20
  COPY gateway/package.json gateway/bun.lock ./gateway/
@@ -36,13 +41,9 @@ RUN groupadd --system --gid 1001 gateway && \
36
41
  useradd --system --uid 1001 --gid gateway --create-home gateway
37
42
 
38
43
  COPY --from=builder --chown=gateway:gateway /app/gateway /app
39
- # `bun install` materializes `file:../packages/ces-contracts` as a
40
- # `node_modules/@vellumai/ces-contracts/` directory whose files are symlinks
41
- # pointing at absolute `/app/packages/ces-contracts/...` source paths in
42
- # the builder. Those absolute targets have to exist in the runner too, or
43
- # every `@vellumai/ces-contracts[/…]` import resolves to a dangling link
44
- # and the gateway crashes with "Cannot find module ..." at first use.
45
- # Copy the sibling package into the runner so the symlinks resolve.
44
+ # `bun install` materializes repo-local file: dependencies as symlinks in
45
+ # node_modules pointing at absolute paths in the builder stage.
46
+ # Copy the sibling packages into the runner so the symlinks resolve.
46
47
  COPY --from=builder --chown=gateway:gateway /app/packages /app/packages
47
48
 
48
49
  RUN mkdir -p /gateway-security && chown gateway:gateway /gateway-security
package/bun.lock CHANGED
@@ -3,21 +3,24 @@
3
3
  "configVersion": 1,
4
4
  "workspaces": {
5
5
  "": {
6
- "name": "vellum-gateway",
6
+ "name": "@vellumai/vellum-gateway",
7
7
  "dependencies": {
8
- "@vellumai/ces-contracts": "file:../packages/ces-contracts",
8
+ "@vellumai/assistant-client": "file:../packages/assistant-client",
9
+ "@vellumai/ces-client": "file:../packages/ces-client",
10
+ "@vellumai/service-contracts": "file:../packages/service-contracts",
9
11
  "drizzle-kit": "0.30.6",
10
12
  "drizzle-orm": "0.45.2",
11
13
  "file-type": "21.3.0",
12
- "minimatch": "10.2.4",
13
14
  "pino": "9.14.0",
14
15
  "pino-pretty": "13.1.3",
15
- "uuid": "13.0.0",
16
+ "tree-sitter-bash": "0.25.1",
17
+ "web-tree-sitter": "0.26.5",
16
18
  "zod": "4.3.6",
17
19
  },
18
20
  "devDependencies": {
19
21
  "@types/bun": "1.3.9",
20
22
  "eslint": "10.0.0",
23
+ "fast-check": "4.7.0",
21
24
  "knip": "5.83.1",
22
25
  "prettier": "3.8.1",
23
26
  "typescript": "5.9.3",
@@ -26,15 +29,15 @@
26
29
  },
27
30
  },
28
31
  "packages": {
29
- "@borewit/text-codec": ["@borewit/text-codec@0.2.1", "", {}, "sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw=="],
32
+ "@borewit/text-codec": ["@borewit/text-codec@0.2.2", "", {}, "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ=="],
30
33
 
31
34
  "@drizzle-team/brocli": ["@drizzle-team/brocli@0.10.2", "", {}, "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w=="],
32
35
 
33
- "@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="],
36
+ "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="],
34
37
 
35
- "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="],
38
+ "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="],
36
39
 
37
- "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="],
40
+ "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="],
38
41
 
39
42
  "@esbuild-kit/core-utils": ["@esbuild-kit/core-utils@3.3.2", "", { "dependencies": { "esbuild": "~0.18.20", "source-map-support": "^0.5.21" } }, "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ=="],
40
43
 
@@ -90,27 +93,27 @@
90
93
 
91
94
  "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="],
92
95
 
93
- "@eslint/config-array": ["@eslint/config-array@0.23.1", "", { "dependencies": { "@eslint/object-schema": "^3.0.1", "debug": "^4.3.1", "minimatch": "^10.1.1" } }, "sha512-uVSdg/V4dfQmTjJzR0szNczjOH/J+FyUMMjYtr07xFRXR7EDf9i1qdxrD0VusZH9knj1/ecxzCQQxyic5NzAiA=="],
96
+ "@eslint/config-array": ["@eslint/config-array@0.23.5", "", { "dependencies": { "@eslint/object-schema": "^3.0.5", "debug": "^4.3.1", "minimatch": "^10.2.4" } }, "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA=="],
94
97
 
95
- "@eslint/config-helpers": ["@eslint/config-helpers@0.5.2", "", { "dependencies": { "@eslint/core": "^1.1.0" } }, "sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ=="],
98
+ "@eslint/config-helpers": ["@eslint/config-helpers@0.5.5", "", { "dependencies": { "@eslint/core": "^1.2.1" } }, "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w=="],
96
99
 
97
- "@eslint/core": ["@eslint/core@1.1.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw=="],
100
+ "@eslint/core": ["@eslint/core@1.2.1", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ=="],
98
101
 
99
- "@eslint/object-schema": ["@eslint/object-schema@3.0.1", "", {}, "sha512-P9cq2dpr+LU8j3qbLygLcSZrl2/ds/pUpfnHNNuk5HW7mnngHs+6WSq5C9mO3rqRX8A1poxqLTC9cu0KOyJlBg=="],
102
+ "@eslint/object-schema": ["@eslint/object-schema@3.0.5", "", {}, "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw=="],
100
103
 
101
- "@eslint/plugin-kit": ["@eslint/plugin-kit@0.6.0", "", { "dependencies": { "@eslint/core": "^1.1.0", "levn": "^0.4.1" } }, "sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ=="],
104
+ "@eslint/plugin-kit": ["@eslint/plugin-kit@0.6.1", "", { "dependencies": { "@eslint/core": "^1.1.1", "levn": "^0.4.1" } }, "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ=="],
102
105
 
103
- "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="],
106
+ "@humanfs/core": ["@humanfs/core@0.19.2", "", { "dependencies": { "@humanfs/types": "^0.15.0" } }, "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA=="],
104
107
 
105
- "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="],
108
+ "@humanfs/node": ["@humanfs/node@0.16.8", "", { "dependencies": { "@humanfs/core": "^0.19.2", "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ=="],
109
+
110
+ "@humanfs/types": ["@humanfs/types@0.15.0", "", {}, "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q=="],
106
111
 
107
112
  "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="],
108
113
 
109
114
  "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="],
110
115
 
111
- "@isaacs/cliui": ["@isaacs/cliui@9.0.0", "", {}, "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg=="],
112
-
113
- "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" } }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="],
116
+ "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="],
114
117
 
115
118
  "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="],
116
119
 
@@ -118,45 +121,45 @@
118
121
 
119
122
  "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
120
123
 
121
- "@oxc-resolver/binding-android-arm-eabi": ["@oxc-resolver/binding-android-arm-eabi@11.17.1", "", { "os": "android", "cpu": "arm" }, "sha512-+VuZyMYYaap5uDAU1xDU3Kul0FekLqpBS8kI5JozlWfYQKnc/HsZg2gHPkQrj0SC9lt74WMNCfOzZZJlYXSdEQ=="],
124
+ "@oxc-resolver/binding-android-arm-eabi": ["@oxc-resolver/binding-android-arm-eabi@11.19.1", "", { "os": "android", "cpu": "arm" }, "sha512-aUs47y+xyXHUKlbhqHUjBABjvycq6YSD7bpxSW7vplUmdzAlJ93yXY6ZR0c1o1x5A/QKbENCvs3+NlY8IpIVzg=="],
122
125
 
123
- "@oxc-resolver/binding-android-arm64": ["@oxc-resolver/binding-android-arm64@11.17.1", "", { "os": "android", "cpu": "arm64" }, "sha512-YlDDTjvOEKhom/cRSVsXsMVeXVIAM9PJ/x2mfe08rfuS0iIEfJd8PngKbEIhG72WPxleUa+vkEZj9ncmC14z3Q=="],
126
+ "@oxc-resolver/binding-android-arm64": ["@oxc-resolver/binding-android-arm64@11.19.1", "", { "os": "android", "cpu": "arm64" }, "sha512-oolbkRX+m7Pq2LNjr/kKgYeC7bRDMVTWPgxBGMjSpZi/+UskVo4jsMU3MLheZV55jL6c3rNelPl4oD60ggYmqA=="],
124
127
 
125
- "@oxc-resolver/binding-darwin-arm64": ["@oxc-resolver/binding-darwin-arm64@11.17.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HOYYLSY4JDk14YkXaz/ApgJYhgDP4KsG8EZpgpOxdszGW9HmIMMY/vXqVKYW74dSH+GQkIXYxBrEh3nv+XODVg=="],
128
+ "@oxc-resolver/binding-darwin-arm64": ["@oxc-resolver/binding-darwin-arm64@11.19.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-nUC6d2i3R5B12sUW4O646qD5cnMXf2oBGPLIIeaRfU9doJRORAbE2SGv4eW6rMqhD+G7nf2Y8TTJTLiiO3Q/dQ=="],
126
129
 
127
- "@oxc-resolver/binding-darwin-x64": ["@oxc-resolver/binding-darwin-x64@11.17.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-JHPJbsa5HvPq2/RIdtGlqfaG9zV2WmgvHrKTYmlW0L5esqtKCBuetFudXTBzkNcyD69kSZLzH92AzTr6vFHMFg=="],
130
+ "@oxc-resolver/binding-darwin-x64": ["@oxc-resolver/binding-darwin-x64@11.19.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-cV50vE5+uAgNcFa3QY1JOeKDSkM/9ReIcc/9wn4TavhW/itkDGrXhw9jaKnkQnGbjJ198Yh5nbX/Gr2mr4Z5jQ=="],
128
131
 
129
- "@oxc-resolver/binding-freebsd-x64": ["@oxc-resolver/binding-freebsd-x64@11.17.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-UD1FRC8j8xZstFXYsXwQkNmmg7vUbee006IqxokwDUUA+xEgKZDpLhBEiVKM08Urb+bn7Q0gn6M1pyNR0ng5mg=="],
132
+ "@oxc-resolver/binding-freebsd-x64": ["@oxc-resolver/binding-freebsd-x64@11.19.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-xZOQiYGFxtk48PBKff+Zwoym7ScPAIVp4c14lfLxizO2LTTTJe5sx9vQNGrBymrf/vatSPNMD4FgsaaRigPkqw=="],
130
133
 
131
- "@oxc-resolver/binding-linux-arm-gnueabihf": ["@oxc-resolver/binding-linux-arm-gnueabihf@11.17.1", "", { "os": "linux", "cpu": "arm" }, "sha512-wFWC1wyf2ROFWTxK5x0Enm++DSof3EBQ/ypyAesMDLiYxOOASDoMOZG1ylWUnlKaCt5W7eNOWOzABpdfFf/ssA=="],
134
+ "@oxc-resolver/binding-linux-arm-gnueabihf": ["@oxc-resolver/binding-linux-arm-gnueabihf@11.19.1", "", { "os": "linux", "cpu": "arm" }, "sha512-lXZYWAC6kaGe/ky2su94e9jN9t6M0/6c+GrSlCqL//XO1cxi5lpAhnJYdyrKfm0ZEr/c7RNyAx3P7FSBcBd5+A=="],
132
135
 
133
- "@oxc-resolver/binding-linux-arm-musleabihf": ["@oxc-resolver/binding-linux-arm-musleabihf@11.17.1", "", { "os": "linux", "cpu": "arm" }, "sha512-k/hUif0GEBk/csSqCfTPXb8AAVs1NNWCa/skBghvNbTtORcWfOVqJ3mM+2pE189+enRm4UnryLREu5ysI0kXEQ=="],
136
+ "@oxc-resolver/binding-linux-arm-musleabihf": ["@oxc-resolver/binding-linux-arm-musleabihf@11.19.1", "", { "os": "linux", "cpu": "arm" }, "sha512-veG1kKsuK5+t2IsO9q0DErYVSw2azvCVvWHnfTOS73WE0STdLLB7Q1bB9WR+yHPQM76ASkFyRbogWo1GR1+WbQ=="],
134
137
 
135
- "@oxc-resolver/binding-linux-arm64-gnu": ["@oxc-resolver/binding-linux-arm64-gnu@11.17.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Cwm6A071ww60QouJ9LoHAwBgEoZzHQ0Qaqk2E7WLfBdiQN9mLXIDhnrpn04hlRElRPhLiu/dtg+o5PPLvaINXQ=="],
138
+ "@oxc-resolver/binding-linux-arm64-gnu": ["@oxc-resolver/binding-linux-arm64-gnu@11.19.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-heV2+jmXyYnUrpUXSPugqWDRpnsQcDm2AX4wzTuvgdlZfoNYO0O3W2AVpJYaDn9AG4JdM6Kxom8+foE7/BcSig=="],
136
139
 
137
- "@oxc-resolver/binding-linux-arm64-musl": ["@oxc-resolver/binding-linux-arm64-musl@11.17.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-+hwlE2v3m0r3sk93SchJL1uyaKcPjf+NGO/TD2DZUDo+chXx7FfaEj0nUMewigSt7oZ2sQN9Z4NJOtUa75HE5Q=="],
140
+ "@oxc-resolver/binding-linux-arm64-musl": ["@oxc-resolver/binding-linux-arm64-musl@11.19.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jvo2Pjs1c9KPxMuMPIeQsgu0mOJF9rEb3y3TdpsrqwxRM+AN6/nDDwv45n5ZrUnQMsdBy5gIabioMKnQfWo9ew=="],
138
141
 
139
- "@oxc-resolver/binding-linux-ppc64-gnu": ["@oxc-resolver/binding-linux-ppc64-gnu@11.17.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-bO+rsaE5Ox8cFyeL5Ct5tzot1TnQpFa/Wmu5k+hqBYSH2dNVDGoi0NizBN5QV8kOIC6O5MZr81UG4yW/2FyDTA=="],
142
+ "@oxc-resolver/binding-linux-ppc64-gnu": ["@oxc-resolver/binding-linux-ppc64-gnu@11.19.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-vLmdNxWCdN7Uo5suays6A/+ywBby2PWBBPXctWPg5V0+eVuzsJxgAn6MMB4mPlshskYbppjpN2Zg83ArHze9gQ=="],
140
143
 
141
- "@oxc-resolver/binding-linux-riscv64-gnu": ["@oxc-resolver/binding-linux-riscv64-gnu@11.17.1", "", { "os": "linux", "cpu": "none" }, "sha512-B/P+hxKQ1oX4YstI9Lyh4PGzqB87Ddqj/A4iyRBbPdXTcxa+WW3oRLx1CsJKLmHPdDk461Hmbghq1Bm3pl+8Aw=="],
144
+ "@oxc-resolver/binding-linux-riscv64-gnu": ["@oxc-resolver/binding-linux-riscv64-gnu@11.19.1", "", { "os": "linux", "cpu": "none" }, "sha512-/b+WgR+VTSBxzgOhDO7TlMXC1ufPIMR6Vj1zN+/x+MnyXGW7prTLzU9eW85Aj7Th7CCEG9ArCbTeqxCzFWdg2w=="],
142
145
 
143
- "@oxc-resolver/binding-linux-riscv64-musl": ["@oxc-resolver/binding-linux-riscv64-musl@11.17.1", "", { "os": "linux", "cpu": "none" }, "sha512-ulp2H3bFXzd/th2maH+QNKj5qgOhJ3v9Yspdf1svTw3CDOuuTl6sRKsWQ7MUw0vnkSNvQndtflBwVXgzZvURsQ=="],
146
+ "@oxc-resolver/binding-linux-riscv64-musl": ["@oxc-resolver/binding-linux-riscv64-musl@11.19.1", "", { "os": "linux", "cpu": "none" }, "sha512-YlRdeWb9j42p29ROh+h4eg/OQ3dTJlpHSa+84pUM9+p6i3djtPz1q55yLJhgW9XfDch7FN1pQ/Vd6YP+xfRIuw=="],
144
147
 
145
- "@oxc-resolver/binding-linux-s390x-gnu": ["@oxc-resolver/binding-linux-s390x-gnu@11.17.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-LAXYVe3rKk09Zo9YKF2ZLBcH8sz8Oj+JIyiUxiHtq0hiYLMsN6dOpCf2hzQEjPAmsSEA/hdC1PVKeXo+oma8mQ=="],
148
+ "@oxc-resolver/binding-linux-s390x-gnu": ["@oxc-resolver/binding-linux-s390x-gnu@11.19.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-EDpafVOQWF8/MJynsjOGFThcqhRHy417sRyLfQmeiamJ8qVhSKAn2Dn2VVKUGCjVB9C46VGjhNo7nOPUi1x6uA=="],
146
149
 
147
- "@oxc-resolver/binding-linux-x64-gnu": ["@oxc-resolver/binding-linux-x64-gnu@11.17.1", "", { "os": "linux", "cpu": "x64" }, "sha512-3RAhxipMKE8RCSPn7O//sj440i+cYTgYbapLeOoDvQEt6R1QcJjTsFgI4iz99FhVj3YbPxlZmcLB5VW+ipyRTA=="],
150
+ "@oxc-resolver/binding-linux-x64-gnu": ["@oxc-resolver/binding-linux-x64-gnu@11.19.1", "", { "os": "linux", "cpu": "x64" }, "sha512-NxjZe+rqWhr+RT8/Ik+5ptA3oz7tUw361Wa5RWQXKnfqwSSHdHyrw6IdcTfYuml9dM856AlKWZIUXDmA9kkiBQ=="],
148
151
 
149
- "@oxc-resolver/binding-linux-x64-musl": ["@oxc-resolver/binding-linux-x64-musl@11.17.1", "", { "os": "linux", "cpu": "x64" }, "sha512-wpjMEubGU8r9VjZTLdZR3aPHaBqTl8Jl8F4DBbgNoZ+yhkhQD1/MGvY70v2TLnAI6kAHSvcqgfvaqKDa2iWsPQ=="],
152
+ "@oxc-resolver/binding-linux-x64-musl": ["@oxc-resolver/binding-linux-x64-musl@11.19.1", "", { "os": "linux", "cpu": "x64" }, "sha512-cM/hQwsO3ReJg5kR+SpI69DMfvNCp+A/eVR4b4YClE5bVZwz8rh2Nh05InhwI5HR/9cArbEkzMjcKgTHS6UaNw=="],
150
153
 
151
- "@oxc-resolver/binding-openharmony-arm64": ["@oxc-resolver/binding-openharmony-arm64@11.17.1", "", { "os": "none", "cpu": "arm64" }, "sha512-XIE4w17RYAVIgx+9Gs3deTREq5tsmalbatYOOBGNdH7n0DfTE600c7wYXsp7ANc3BPDXsInnOzXDEPCvO1F6cg=="],
154
+ "@oxc-resolver/binding-openharmony-arm64": ["@oxc-resolver/binding-openharmony-arm64@11.19.1", "", { "os": "none", "cpu": "arm64" }, "sha512-QF080IowFB0+9Rh6RcD19bdgh49BpQHUW5TajG1qvWHvmrQznTZZjYlgE2ltLXyKY+qs4F/v5xuX1XS7Is+3qA=="],
152
155
 
153
- "@oxc-resolver/binding-wasm32-wasi": ["@oxc-resolver/binding-wasm32-wasi@11.17.1", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-Lqi5BlHX3zS4bpSOkIbOKVf7DIk6Gvmdifr2OuOI58eUUyP944M8/OyaB09cNpPy9Vukj7nmmhOzj8pwLgAkIg=="],
156
+ "@oxc-resolver/binding-wasm32-wasi": ["@oxc-resolver/binding-wasm32-wasi@11.19.1", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-w8UCKhX826cP/ZLokXDS6+milN8y4X7zidsAttEdWlVoamTNf6lhBJldaWr3ukTDiye7s4HRcuPEPOXNC432Vg=="],
154
157
 
155
- "@oxc-resolver/binding-win32-arm64-msvc": ["@oxc-resolver/binding-win32-arm64-msvc@11.17.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-l6lTcLBQVj1HNquFpXSsrkCIM8X5Hlng5YNQJrg00z/KyovvDV5l3OFhoRyZ+aLBQ74zUnMRaJZC7xcBnHyeNg=="],
158
+ "@oxc-resolver/binding-win32-arm64-msvc": ["@oxc-resolver/binding-win32-arm64-msvc@11.19.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-nJ4AsUVZrVKwnU/QRdzPCCrO0TrabBqgJ8pJhXITdZGYOV28TIYystV1VFLbQ7DtAcaBHpocT5/ZJnF78YJPtQ=="],
156
159
 
157
- "@oxc-resolver/binding-win32-ia32-msvc": ["@oxc-resolver/binding-win32-ia32-msvc@11.17.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-VTzVtfnCCsU/6GgvursWoyZrhe3Gj/RyXzDWmh4/U1Y3IW0u1FZbp+hCIlBL16pRPbDc5YvXVtCOnA41QOrOoQ=="],
160
+ "@oxc-resolver/binding-win32-ia32-msvc": ["@oxc-resolver/binding-win32-ia32-msvc@11.19.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-EW+ND5q2Tl+a3pH81l1QbfgbF3HmqgwLfDfVithRFheac8OTcnbXt/JxqD2GbDkb7xYEqy1zNaVFRr3oeG8npA=="],
158
161
 
159
- "@oxc-resolver/binding-win32-x64-msvc": ["@oxc-resolver/binding-win32-x64-msvc@11.17.1", "", { "os": "win32", "cpu": "x64" }, "sha512-jRPVU+6/12baj87q2+UGRh30FBVBzqKdJ7rP/mSqiL1kpNQB9yZ1j0+m3sru1m+C8hiFK7lBFwjUtYUBI7+UpQ=="],
162
+ "@oxc-resolver/binding-win32-x64-msvc": ["@oxc-resolver/binding-win32-x64-msvc@11.19.1", "", { "os": "win32", "cpu": "x64" }, "sha512-6hIU3RQu45B+VNTY4Ru8ppFwjVS/S5qwYyGhBotmjxfEKk41I2DlGtRfGJndZ5+6lneE2pwloqunlOyZuX/XAw=="],
160
163
 
161
164
  "@petamoriken/float16": ["@petamoriken/float16@3.9.3", "", {}, "sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g=="],
162
165
 
@@ -176,7 +179,7 @@
176
179
 
177
180
  "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
178
181
 
179
- "@types/node": ["@types/node@25.2.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ=="],
182
+ "@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="],
180
183
 
181
184
  "@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="],
182
185
 
@@ -200,21 +203,25 @@
200
203
 
201
204
  "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.56.0", "", { "dependencies": { "@typescript-eslint/types": "8.56.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg=="],
202
205
 
203
- "@vellumai/ces-contracts": ["@vellumai/ces-contracts@file:../packages/ces-contracts", { "dependencies": { "zod": "4.3.6" }, "devDependencies": { "@types/bun": "1.2.4", "typescript": "5.7.3" } }],
206
+ "@vellumai/assistant-client": ["@vellumai/assistant-client@file:../packages/assistant-client", { "devDependencies": { "@types/bun": "1.3.10", "typescript": "5.9.3" } }],
207
+
208
+ "@vellumai/ces-client": ["@vellumai/ces-client@file:../packages/ces-client", { "dependencies": { "@vellumai/service-contracts": "file:../service-contracts" }, "devDependencies": { "@types/bun": "1.2.4", "typescript": "5.7.3" } }],
204
209
 
205
- "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="],
210
+ "@vellumai/service-contracts": ["@vellumai/service-contracts@file:../packages/service-contracts", { "dependencies": { "zod": "4.3.6" }, "devDependencies": { "@types/bun": "1.2.4", "typescript": "5.7.3" } }],
211
+
212
+ "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="],
206
213
 
207
214
  "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="],
208
215
 
209
- "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="],
216
+ "ajv": ["ajv@6.15.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw=="],
210
217
 
211
218
  "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
212
219
 
213
220
  "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="],
214
221
 
215
- "balanced-match": ["balanced-match@4.0.2", "", { "dependencies": { "jackspeak": "^4.2.3" } }, "sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg=="],
222
+ "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="],
216
223
 
217
- "brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="],
224
+ "brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="],
218
225
 
219
226
  "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
220
227
 
@@ -248,11 +255,11 @@
248
255
 
249
256
  "eslint": ["eslint@10.0.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.0", "@eslint/config-helpers": "^0.5.2", "@eslint/core": "^1.1.0", "@eslint/plugin-kit": "^0.6.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.0", "eslint-visitor-keys": "^5.0.0", "espree": "^11.1.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.1.1", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-O0piBKY36YSJhlFSG8p9VUdPV/SxxS4FYDWVpr/9GJuMaepzwlf4J8I4ov1b+ySQfDTPhc3DtLaxcT1fN0yqCg=="],
250
257
 
251
- "eslint-scope": ["eslint-scope@9.1.0", "", { "dependencies": { "@types/esrecurse": "^4.3.1", "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-CkWE42hOJsNj9FJRaoMX9waUFYhqY4jmyLFdAdzZr6VaCg3ynLYx4WnOdkaIifGfH4gsUcBTn4OZbHXkpLD0FQ=="],
258
+ "eslint-scope": ["eslint-scope@9.1.2", "", { "dependencies": { "@types/esrecurse": "^4.3.1", "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ=="],
252
259
 
253
- "eslint-visitor-keys": ["eslint-visitor-keys@5.0.0", "", {}, "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q=="],
260
+ "eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="],
254
261
 
255
- "espree": ["espree@11.1.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^5.0.0" } }, "sha512-WFWYhO1fV4iYkqOOvq8FbqIhr2pYfoDY0kCotMkDeNtGpiGGkZ1iov2u8ydjtgM8yF8rzK7oaTbw2NAzbAbehw=="],
262
+ "espree": ["espree@11.2.0", "", { "dependencies": { "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^5.0.1" } }, "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw=="],
256
263
 
257
264
  "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="],
258
265
 
@@ -262,7 +269,9 @@
262
269
 
263
270
  "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="],
264
271
 
265
- "fast-copy": ["fast-copy@4.0.2", "", {}, "sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw=="],
272
+ "fast-check": ["fast-check@4.7.0", "", { "dependencies": { "pure-rand": "^8.0.0" } }, "sha512-NsZRtqvSSoCP0HbNjUD+r1JH8zqZalyp6gLY9e7OYs7NK9b6AHOs2baBFeBG7bVNsuoukh89x2Yg3rPsul8ziQ=="],
273
+
274
+ "fast-copy": ["fast-copy@4.0.3", "", {}, "sha512-58apWr0GUiDFM8+3afrO6eYwJBn9ZAhDOzG3L+/9llab/haCARS2UIfffmOurYLwbgDRs8n0rfr6qAAPEAuAQw=="],
266
275
 
267
276
  "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="],
268
277
 
@@ -290,7 +299,7 @@
290
299
 
291
300
  "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="],
292
301
 
293
- "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="],
302
+ "flatted": ["flatted@3.4.2", "", {}, "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA=="],
294
303
 
295
304
  "formatly": ["formatly@0.3.0", "", { "dependencies": { "fd-package-json": "^2.0.0" }, "bin": { "formatly": "bin/index.mjs" } }, "sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w=="],
296
305
 
@@ -316,8 +325,6 @@
316
325
 
317
326
  "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
318
327
 
319
- "jackspeak": ["jackspeak@4.2.3", "", { "dependencies": { "@isaacs/cliui": "^9.0.0" } }, "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg=="],
320
-
321
328
  "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="],
322
329
 
323
330
  "joycon": ["joycon@3.1.1", "", {}, "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="],
@@ -350,13 +357,17 @@
350
357
 
351
358
  "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="],
352
359
 
360
+ "node-addon-api": ["node-addon-api@8.7.0", "", {}, "sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA=="],
361
+
362
+ "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="],
363
+
353
364
  "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="],
354
365
 
355
366
  "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
356
367
 
357
368
  "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="],
358
369
 
359
- "oxc-resolver": ["oxc-resolver@11.17.1", "", { "optionalDependencies": { "@oxc-resolver/binding-android-arm-eabi": "11.17.1", "@oxc-resolver/binding-android-arm64": "11.17.1", "@oxc-resolver/binding-darwin-arm64": "11.17.1", "@oxc-resolver/binding-darwin-x64": "11.17.1", "@oxc-resolver/binding-freebsd-x64": "11.17.1", "@oxc-resolver/binding-linux-arm-gnueabihf": "11.17.1", "@oxc-resolver/binding-linux-arm-musleabihf": "11.17.1", "@oxc-resolver/binding-linux-arm64-gnu": "11.17.1", "@oxc-resolver/binding-linux-arm64-musl": "11.17.1", "@oxc-resolver/binding-linux-ppc64-gnu": "11.17.1", "@oxc-resolver/binding-linux-riscv64-gnu": "11.17.1", "@oxc-resolver/binding-linux-riscv64-musl": "11.17.1", "@oxc-resolver/binding-linux-s390x-gnu": "11.17.1", "@oxc-resolver/binding-linux-x64-gnu": "11.17.1", "@oxc-resolver/binding-linux-x64-musl": "11.17.1", "@oxc-resolver/binding-openharmony-arm64": "11.17.1", "@oxc-resolver/binding-wasm32-wasi": "11.17.1", "@oxc-resolver/binding-win32-arm64-msvc": "11.17.1", "@oxc-resolver/binding-win32-ia32-msvc": "11.17.1", "@oxc-resolver/binding-win32-x64-msvc": "11.17.1" } }, "sha512-pyRXK9kH81zKlirHufkFhOFBZRks8iAMLwPH8gU7lvKFiuzUH9L8MxDEllazwOb8fjXMcWjY1PMDfMJ2/yh5cw=="],
370
+ "oxc-resolver": ["oxc-resolver@11.19.1", "", { "optionalDependencies": { "@oxc-resolver/binding-android-arm-eabi": "11.19.1", "@oxc-resolver/binding-android-arm64": "11.19.1", "@oxc-resolver/binding-darwin-arm64": "11.19.1", "@oxc-resolver/binding-darwin-x64": "11.19.1", "@oxc-resolver/binding-freebsd-x64": "11.19.1", "@oxc-resolver/binding-linux-arm-gnueabihf": "11.19.1", "@oxc-resolver/binding-linux-arm-musleabihf": "11.19.1", "@oxc-resolver/binding-linux-arm64-gnu": "11.19.1", "@oxc-resolver/binding-linux-arm64-musl": "11.19.1", "@oxc-resolver/binding-linux-ppc64-gnu": "11.19.1", "@oxc-resolver/binding-linux-riscv64-gnu": "11.19.1", "@oxc-resolver/binding-linux-riscv64-musl": "11.19.1", "@oxc-resolver/binding-linux-s390x-gnu": "11.19.1", "@oxc-resolver/binding-linux-x64-gnu": "11.19.1", "@oxc-resolver/binding-linux-x64-musl": "11.19.1", "@oxc-resolver/binding-openharmony-arm64": "11.19.1", "@oxc-resolver/binding-wasm32-wasi": "11.19.1", "@oxc-resolver/binding-win32-arm64-msvc": "11.19.1", "@oxc-resolver/binding-win32-ia32-msvc": "11.19.1", "@oxc-resolver/binding-win32-x64-msvc": "11.19.1" } }, "sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg=="],
360
371
 
361
372
  "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
362
373
 
@@ -368,7 +379,7 @@
368
379
 
369
380
  "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
370
381
 
371
- "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="],
382
+ "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="],
372
383
 
373
384
  "pino": ["pino@9.14.0", "", { "dependencies": { "@pinojs/redact": "^0.4.0", "atomic-sleep": "^1.0.0", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w=="],
374
385
 
@@ -384,10 +395,12 @@
384
395
 
385
396
  "process-warning": ["process-warning@5.0.0", "", {}, "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="],
386
397
 
387
- "pump": ["pump@3.0.3", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="],
398
+ "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="],
388
399
 
389
400
  "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
390
401
 
402
+ "pure-rand": ["pure-rand@8.4.0", "", {}, "sha512-IoM8YF/jY0hiugFo/wOWqfmarlE6J0wc6fDK1PhftMk7MGhVZl88sZimmqBBFomLOCSmcCCpsfj7wXASCpvK9A=="],
403
+
391
404
  "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
392
405
 
393
406
  "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="],
@@ -412,7 +425,7 @@
412
425
 
413
426
  "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="],
414
427
 
415
- "smol-toml": ["smol-toml@1.6.0", "", {}, "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw=="],
428
+ "smol-toml": ["smol-toml@1.6.1", "", {}, "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg=="],
416
429
 
417
430
  "sonic-boom": ["sonic-boom@4.2.1", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q=="],
418
431
 
@@ -424,17 +437,19 @@
424
437
 
425
438
  "strip-json-comments": ["strip-json-comments@5.0.3", "", {}, "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw=="],
426
439
 
427
- "strtok3": ["strtok3@10.3.4", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg=="],
440
+ "strtok3": ["strtok3@10.3.5", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA=="],
428
441
 
429
442
  "thread-stream": ["thread-stream@3.1.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A=="],
430
443
 
431
- "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="],
444
+ "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="],
432
445
 
433
446
  "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
434
447
 
435
448
  "token-types": ["token-types@6.1.2", "", { "dependencies": { "@borewit/text-codec": "^0.2.1", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww=="],
436
449
 
437
- "ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="],
450
+ "tree-sitter-bash": ["tree-sitter-bash@0.25.1", "", { "dependencies": { "node-addon-api": "^8.2.1", "node-gyp-build": "^4.8.2" }, "peerDependencies": { "tree-sitter": "^0.25.0" }, "optionalPeers": ["tree-sitter"] }, "sha512-7hMytuYIMoXOq24yRulgIxthE9YmggZIOHCyPTTuJcu6EU54tYD+4G39cUb28kxC6jMf/AbPfWGLQtgPTdh3xw=="],
451
+
452
+ "ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="],
438
453
 
439
454
  "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
440
455
 
@@ -446,14 +461,14 @@
446
461
 
447
462
  "uint8array-extras": ["uint8array-extras@1.5.0", "", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="],
448
463
 
449
- "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
464
+ "undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="],
450
465
 
451
466
  "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="],
452
467
 
453
- "uuid": ["uuid@13.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w=="],
454
-
455
468
  "walk-up-path": ["walk-up-path@4.0.0", "", {}, "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A=="],
456
469
 
470
+ "web-tree-sitter": ["web-tree-sitter@0.26.5", "", {}, "sha512-u9sl+q21VSKX2T8dhpQw8bMGGqNfwaIyuoYE3kdOQGVDrOqrmcS9GmaQoCS602iaFnuokn3WCHW374c7GAnuaQ=="],
471
+
457
472
  "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
458
473
 
459
474
  "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="],
@@ -468,23 +483,27 @@
468
483
 
469
484
  "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="],
470
485
 
471
- "@eslint/config-array/minimatch": ["minimatch@10.2.0", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w=="],
472
-
473
486
  "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
474
487
 
475
- "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
488
+ "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="],
489
+
490
+ "@vellumai/assistant-client/@types/bun": ["@types/bun@1.3.10", "", { "dependencies": { "bun-types": "1.3.10" } }, "sha512-0+rlrUrOrTSskibryHbvQkDOWRJwJZqZlxrUs1u4oOoTln8+WIXBPmAuCF35SWB2z4Zl3E84Nl/D0P7803nigQ=="],
476
491
 
477
- "@vellumai/ces-contracts/@types/bun": ["@types/bun@1.2.4", "", { "dependencies": { "bun-types": "1.2.4" } }, "sha512-QtuV5OMR8/rdKJs213iwXDpfVvnskPXY/S0ZiFbsTjQZycuqPbMW8Gf/XhLfwE5njW8sxI2WjISURXPlHypMFA=="],
492
+ "@vellumai/ces-client/@types/bun": ["@types/bun@1.2.4", "", { "dependencies": { "bun-types": "1.2.4" } }, "sha512-QtuV5OMR8/rdKJs213iwXDpfVvnskPXY/S0ZiFbsTjQZycuqPbMW8Gf/XhLfwE5njW8sxI2WjISURXPlHypMFA=="],
478
493
 
479
- "@vellumai/ces-contracts/typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="],
494
+ "@vellumai/ces-client/@vellumai/service-contracts": ["@vellumai/service-contracts@file:../packages/service-contracts", { "dependencies": { "zod": "4.3.6" }, "devDependencies": { "@types/bun": "1.2.4", "typescript": "5.7.3" } }],
480
495
 
481
- "eslint/minimatch": ["minimatch@10.2.0", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w=="],
496
+ "@vellumai/ces-client/typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="],
497
+
498
+ "@vellumai/service-contracts/@types/bun": ["@types/bun@1.2.4", "", { "dependencies": { "bun-types": "1.2.4" } }, "sha512-QtuV5OMR8/rdKJs213iwXDpfVvnskPXY/S0ZiFbsTjQZycuqPbMW8Gf/XhLfwE5njW8sxI2WjISURXPlHypMFA=="],
499
+
500
+ "@vellumai/service-contracts/typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="],
482
501
 
483
502
  "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
484
503
 
485
504
  "gel/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="],
486
505
 
487
- "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
506
+ "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="],
488
507
 
489
508
  "pino-pretty/pino-abstract-transport": ["pino-abstract-transport@3.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg=="],
490
509
 
@@ -532,9 +551,13 @@
532
551
 
533
552
  "@esbuild-kit/core-utils/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.18.20", "", { "os": "win32", "cpu": "x64" }, "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="],
534
553
 
535
- "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="],
554
+ "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.1.0", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w=="],
555
+
556
+ "@vellumai/assistant-client/@types/bun/bun-types": ["bun-types@1.3.10", "", { "dependencies": { "@types/node": "*" } }, "sha512-tcpfCCl6XWo6nCVnpcVrxQ+9AYN1iqMIzgrSKYMB/fjLtV2eyAVEg7AxQJuCq/26R6HpKWykQXuSOq/21RYcbg=="],
557
+
558
+ "@vellumai/ces-client/@types/bun/bun-types": ["bun-types@1.2.4", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-nDPymR207ZZEoWD4AavvEaa/KZe/qlrbMSchqpQwovPZCKc7pwMoENjEtHgMKaAjJhy+x6vfqSBA1QU3bJgs0Q=="],
536
559
 
537
- "@vellumai/ces-contracts/@types/bun/bun-types": ["bun-types@1.2.4", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-nDPymR207ZZEoWD4AavvEaa/KZe/qlrbMSchqpQwovPZCKc7pwMoENjEtHgMKaAjJhy+x6vfqSBA1QU3bJgs0Q=="],
560
+ "@vellumai/service-contracts/@types/bun/bun-types": ["bun-types@1.2.4", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-nDPymR207ZZEoWD4AavvEaa/KZe/qlrbMSchqpQwovPZCKc7pwMoENjEtHgMKaAjJhy+x6vfqSBA1QU3bJgs0Q=="],
538
561
 
539
562
  "gel/which/isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="],
540
563
 
package/knip.json CHANGED
@@ -1,5 +1,9 @@
1
1
  {
2
2
  "entry": ["src/**/*.test.ts", "src/**/__tests__/**/*.ts"],
3
3
  "project": ["src/**/*.ts"],
4
- "ignoreDependencies": ["@vellumai/ces-contracts"]
4
+ "ignoreDependencies": [
5
+ "@vellumai/assistant-client",
6
+ "@vellumai/ces-client",
7
+ "@vellumai/service-contracts"
8
+ ]
5
9
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellumai/vellum-gateway",
3
- "version": "0.6.5",
3
+ "version": "0.7.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -24,19 +24,22 @@
24
24
  "postinstall": "cd .. && (git config core.hooksPath || git config core.hooksPath .githooks 2>/dev/null || true) && ([ -f meta/feature-flags/sync-bundled-copies.ts ] && bun run meta/feature-flags/sync-bundled-copies.ts 2>/dev/null || true)"
25
25
  },
26
26
  "dependencies": {
27
- "@vellumai/ces-contracts": "file:../packages/ces-contracts",
27
+ "@vellumai/assistant-client": "file:../packages/assistant-client",
28
+ "@vellumai/ces-client": "file:../packages/ces-client",
29
+ "@vellumai/service-contracts": "file:../packages/service-contracts",
28
30
  "drizzle-kit": "0.30.6",
29
31
  "drizzle-orm": "0.45.2",
30
32
  "file-type": "21.3.0",
31
- "minimatch": "10.2.4",
32
33
  "pino": "9.14.0",
33
34
  "pino-pretty": "13.1.3",
34
- "uuid": "13.0.0",
35
+ "tree-sitter-bash": "0.25.1",
36
+ "web-tree-sitter": "0.26.5",
35
37
  "zod": "4.3.6"
36
38
  },
37
39
  "devDependencies": {
38
40
  "@types/bun": "1.3.9",
39
41
  "eslint": "10.0.0",
42
+ "fast-check": "4.7.0",
40
43
  "knip": "5.83.1",
41
44
  "prettier": "3.8.1",
42
45
  "typescript": "5.9.3",
package/scripts/test.sh CHANGED
@@ -41,7 +41,7 @@ printf '%s\n' "${test_files[@]}" | xargs -P "${WORKERS}" -I {} bash -c '
41
41
 
42
42
  start_ms=$(perl -MTime::HiRes=time -e "printf \"%d\", time*1000")
43
43
 
44
- bun test "${test_file}" > "${out_file}" 2>&1
44
+ bun test --timeout 15000 "${test_file}" > "${out_file}" 2>&1
45
45
  exit_code=$?
46
46
 
47
47
  end_ms=$(perl -MTime::HiRes=time -e "printf \"%d\", time*1000")