@vellumai/credential-executor 0.4.55 → 0.4.56

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 (762) hide show
  1. package/Dockerfile +6 -2
  2. package/node_modules/@vellumai/ces-contracts/bun.lock +29 -0
  3. package/node_modules/@vellumai/ces-contracts/package.json +24 -0
  4. package/node_modules/@vellumai/ces-contracts/src/__tests__/contracts.test.ts +293 -0
  5. package/node_modules/@vellumai/ces-contracts/src/__tests__/grants.test.ts +686 -0
  6. package/node_modules/@vellumai/ces-contracts/src/error.ts +25 -0
  7. package/node_modules/@vellumai/ces-contracts/src/grants.ts +184 -0
  8. package/node_modules/@vellumai/ces-contracts/src/handles.ts +213 -0
  9. package/node_modules/@vellumai/ces-contracts/src/index.ts +147 -0
  10. package/node_modules/@vellumai/ces-contracts/src/rendering.ts +135 -0
  11. package/node_modules/@vellumai/ces-contracts/src/rpc.ts +511 -0
  12. package/node_modules/@vellumai/ces-contracts/tsconfig.json +20 -0
  13. package/node_modules/@vellumai/credential-storage/bun.lock +24 -0
  14. package/node_modules/@vellumai/credential-storage/package.json +17 -0
  15. package/node_modules/@vellumai/credential-storage/src/__tests__/package-boundary.test.ts +151 -0
  16. package/node_modules/@vellumai/credential-storage/src/index.ts +213 -0
  17. package/node_modules/@vellumai/credential-storage/src/oauth-runtime.ts +340 -0
  18. package/node_modules/@vellumai/credential-storage/src/static-credentials.ts +365 -0
  19. package/node_modules/@vellumai/credential-storage/tsconfig.json +20 -0
  20. package/node_modules/@vellumai/egress-proxy/bun.lock +24 -0
  21. package/node_modules/@vellumai/egress-proxy/package.json +17 -0
  22. package/node_modules/@vellumai/egress-proxy/src/__tests__/package-boundary.test.ts +131 -0
  23. package/node_modules/@vellumai/egress-proxy/src/index.ts +54 -0
  24. package/node_modules/@vellumai/egress-proxy/src/session-core.ts +466 -0
  25. package/node_modules/@vellumai/egress-proxy/src/types.ts +227 -0
  26. package/node_modules/@vellumai/egress-proxy/tsconfig.json +20 -0
  27. package/node_modules/zod/LICENSE +21 -0
  28. package/node_modules/zod/README.md +208 -0
  29. package/node_modules/zod/index.cjs +33 -0
  30. package/node_modules/zod/index.d.cts +4 -0
  31. package/node_modules/zod/index.d.ts +4 -0
  32. package/node_modules/zod/index.js +4 -0
  33. package/node_modules/zod/locales/index.cjs +17 -0
  34. package/node_modules/zod/locales/index.d.cts +1 -0
  35. package/node_modules/zod/locales/index.d.ts +1 -0
  36. package/node_modules/zod/locales/index.js +1 -0
  37. package/node_modules/zod/locales/package.json +6 -0
  38. package/node_modules/zod/mini/index.cjs +32 -0
  39. package/node_modules/zod/mini/index.d.cts +3 -0
  40. package/node_modules/zod/mini/index.d.ts +3 -0
  41. package/node_modules/zod/mini/index.js +3 -0
  42. package/node_modules/zod/mini/package.json +6 -0
  43. package/node_modules/zod/package.json +135 -0
  44. package/node_modules/zod/src/index.ts +4 -0
  45. package/node_modules/zod/src/locales/index.ts +1 -0
  46. package/node_modules/zod/src/mini/index.ts +3 -0
  47. package/node_modules/zod/src/v3/ZodError.ts +330 -0
  48. package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
  49. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  50. package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
  51. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
  52. package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
  53. package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
  54. package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
  55. package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
  56. package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
  57. package/node_modules/zod/src/v3/errors.ts +13 -0
  58. package/node_modules/zod/src/v3/external.ts +6 -0
  59. package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
  60. package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
  61. package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
  62. package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
  63. package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
  64. package/node_modules/zod/src/v3/helpers/util.ts +224 -0
  65. package/node_modules/zod/src/v3/index.ts +4 -0
  66. package/node_modules/zod/src/v3/locales/en.ts +124 -0
  67. package/node_modules/zod/src/v3/standard-schema.ts +113 -0
  68. package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
  69. package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
  70. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
  71. package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
  72. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
  73. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
  74. package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
  75. package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
  76. package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
  77. package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
  78. package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
  79. package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
  80. package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
  81. package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
  82. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
  83. package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
  84. package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
  85. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
  86. package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
  87. package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
  88. package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
  89. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  90. package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
  91. package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
  92. package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
  93. package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
  94. package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
  95. package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
  96. package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
  97. package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
  98. package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
  99. package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
  100. package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
  101. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
  102. package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
  103. package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
  104. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
  105. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
  106. package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
  107. package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
  108. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
  109. package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
  110. package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
  111. package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
  112. package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
  113. package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
  114. package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
  115. package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
  116. package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
  117. package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
  118. package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
  119. package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
  120. package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
  121. package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
  122. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
  123. package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
  124. package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
  125. package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
  126. package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
  127. package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
  128. package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
  129. package/node_modules/zod/src/v3/types.ts +5138 -0
  130. package/node_modules/zod/src/v4/classic/checks.ts +32 -0
  131. package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
  132. package/node_modules/zod/src/v4/classic/compat.ts +70 -0
  133. package/node_modules/zod/src/v4/classic/errors.ts +82 -0
  134. package/node_modules/zod/src/v4/classic/external.ts +51 -0
  135. package/node_modules/zod/src/v4/classic/from-json-schema.ts +643 -0
  136. package/node_modules/zod/src/v4/classic/index.ts +5 -0
  137. package/node_modules/zod/src/v4/classic/iso.ts +90 -0
  138. package/node_modules/zod/src/v4/classic/parse.ts +82 -0
  139. package/node_modules/zod/src/v4/classic/schemas.ts +2409 -0
  140. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
  141. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
  142. package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
  143. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +210 -0
  144. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
  145. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
  146. package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
  147. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
  148. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
  149. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +276 -0
  150. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
  151. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
  152. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
  153. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
  154. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
  155. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
  156. package/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
  157. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
  158. package/node_modules/zod/src/v4/classic/tests/default.test.ts +365 -0
  159. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
  160. package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
  161. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +661 -0
  162. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
  163. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +595 -0
  164. package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
  165. package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
  166. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
  167. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
  168. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +734 -0
  169. package/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
  170. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
  171. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
  172. package/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
  173. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
  174. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
  175. package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
  176. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
  177. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
  178. package/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
  179. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
  180. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
  181. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
  182. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
  183. package/node_modules/zod/src/v4/classic/tests/number.test.ts +270 -0
  184. package/node_modules/zod/src/v4/classic/tests/object.test.ts +640 -0
  185. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +223 -0
  186. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +427 -0
  187. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
  188. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
  189. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
  190. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +282 -0
  191. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
  192. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
  193. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
  194. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
  195. package/node_modules/zod/src/v4/classic/tests/record.test.ts +632 -0
  196. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +582 -0
  197. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +570 -0
  198. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
  199. package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
  200. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
  201. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
  202. package/node_modules/zod/src/v4/classic/tests/string.test.ts +1175 -0
  203. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
  204. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
  205. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
  206. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +2990 -0
  207. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +361 -0
  208. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +183 -0
  209. package/node_modules/zod/src/v4/classic/tests/union.test.ts +219 -0
  210. package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
  211. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
  212. package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
  213. package/node_modules/zod/src/v4/core/api.ts +1798 -0
  214. package/node_modules/zod/src/v4/core/checks.ts +1293 -0
  215. package/node_modules/zod/src/v4/core/config.ts +15 -0
  216. package/node_modules/zod/src/v4/core/core.ts +138 -0
  217. package/node_modules/zod/src/v4/core/doc.ts +44 -0
  218. package/node_modules/zod/src/v4/core/errors.ts +448 -0
  219. package/node_modules/zod/src/v4/core/index.ts +16 -0
  220. package/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
  221. package/node_modules/zod/src/v4/core/json-schema-processors.ts +667 -0
  222. package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
  223. package/node_modules/zod/src/v4/core/parse.ts +195 -0
  224. package/node_modules/zod/src/v4/core/regexes.ts +183 -0
  225. package/node_modules/zod/src/v4/core/registries.ts +105 -0
  226. package/node_modules/zod/src/v4/core/schemas.ts +4538 -0
  227. package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
  228. package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
  229. package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
  230. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
  231. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
  232. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
  233. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
  234. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
  235. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
  236. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
  237. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +83 -0
  238. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +67 -0
  239. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
  240. package/node_modules/zod/src/v4/core/to-json-schema.ts +613 -0
  241. package/node_modules/zod/src/v4/core/util.ts +966 -0
  242. package/node_modules/zod/src/v4/core/versions.ts +5 -0
  243. package/node_modules/zod/src/v4/core/zsf.ts +323 -0
  244. package/node_modules/zod/src/v4/index.ts +4 -0
  245. package/node_modules/zod/src/v4/locales/ar.ts +115 -0
  246. package/node_modules/zod/src/v4/locales/az.ts +111 -0
  247. package/node_modules/zod/src/v4/locales/be.ts +176 -0
  248. package/node_modules/zod/src/v4/locales/bg.ts +128 -0
  249. package/node_modules/zod/src/v4/locales/ca.ts +116 -0
  250. package/node_modules/zod/src/v4/locales/cs.ts +118 -0
  251. package/node_modules/zod/src/v4/locales/da.ts +123 -0
  252. package/node_modules/zod/src/v4/locales/de.ts +116 -0
  253. package/node_modules/zod/src/v4/locales/en.ts +119 -0
  254. package/node_modules/zod/src/v4/locales/eo.ts +118 -0
  255. package/node_modules/zod/src/v4/locales/es.ts +141 -0
  256. package/node_modules/zod/src/v4/locales/fa.ts +126 -0
  257. package/node_modules/zod/src/v4/locales/fi.ts +121 -0
  258. package/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
  259. package/node_modules/zod/src/v4/locales/fr.ts +116 -0
  260. package/node_modules/zod/src/v4/locales/he.ts +246 -0
  261. package/node_modules/zod/src/v4/locales/hu.ts +117 -0
  262. package/node_modules/zod/src/v4/locales/hy.ts +164 -0
  263. package/node_modules/zod/src/v4/locales/id.ts +115 -0
  264. package/node_modules/zod/src/v4/locales/index.ts +49 -0
  265. package/node_modules/zod/src/v4/locales/is.ts +119 -0
  266. package/node_modules/zod/src/v4/locales/it.ts +116 -0
  267. package/node_modules/zod/src/v4/locales/ja.ts +114 -0
  268. package/node_modules/zod/src/v4/locales/ka.ts +123 -0
  269. package/node_modules/zod/src/v4/locales/kh.ts +7 -0
  270. package/node_modules/zod/src/v4/locales/km.ts +119 -0
  271. package/node_modules/zod/src/v4/locales/ko.ts +121 -0
  272. package/node_modules/zod/src/v4/locales/lt.ts +239 -0
  273. package/node_modules/zod/src/v4/locales/mk.ts +118 -0
  274. package/node_modules/zod/src/v4/locales/ms.ts +115 -0
  275. package/node_modules/zod/src/v4/locales/nl.ts +121 -0
  276. package/node_modules/zod/src/v4/locales/no.ts +116 -0
  277. package/node_modules/zod/src/v4/locales/ota.ts +117 -0
  278. package/node_modules/zod/src/v4/locales/pl.ts +118 -0
  279. package/node_modules/zod/src/v4/locales/ps.ts +126 -0
  280. package/node_modules/zod/src/v4/locales/pt.ts +116 -0
  281. package/node_modules/zod/src/v4/locales/ru.ts +176 -0
  282. package/node_modules/zod/src/v4/locales/sl.ts +118 -0
  283. package/node_modules/zod/src/v4/locales/sv.ts +119 -0
  284. package/node_modules/zod/src/v4/locales/ta.ts +118 -0
  285. package/node_modules/zod/src/v4/locales/th.ts +119 -0
  286. package/node_modules/zod/src/v4/locales/tr.ts +111 -0
  287. package/node_modules/zod/src/v4/locales/ua.ts +7 -0
  288. package/node_modules/zod/src/v4/locales/uk.ts +117 -0
  289. package/node_modules/zod/src/v4/locales/ur.ts +119 -0
  290. package/node_modules/zod/src/v4/locales/uz.ts +116 -0
  291. package/node_modules/zod/src/v4/locales/vi.ts +117 -0
  292. package/node_modules/zod/src/v4/locales/yo.ts +124 -0
  293. package/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
  294. package/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
  295. package/node_modules/zod/src/v4/mini/checks.ts +32 -0
  296. package/node_modules/zod/src/v4/mini/coerce.ts +27 -0
  297. package/node_modules/zod/src/v4/mini/external.ts +40 -0
  298. package/node_modules/zod/src/v4/mini/index.ts +3 -0
  299. package/node_modules/zod/src/v4/mini/iso.ts +66 -0
  300. package/node_modules/zod/src/v4/mini/parse.ts +14 -0
  301. package/node_modules/zod/src/v4/mini/schemas.ts +1916 -0
  302. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
  303. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
  304. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
  305. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
  306. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
  307. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
  308. package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
  309. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
  310. package/node_modules/zod/src/v4/mini/tests/index.test.ts +963 -0
  311. package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
  312. package/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
  313. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
  314. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +275 -0
  315. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
  316. package/node_modules/zod/src/v4/mini/tests/string.test.ts +347 -0
  317. package/node_modules/zod/src/v4-mini/index.ts +3 -0
  318. package/node_modules/zod/v3/ZodError.cjs +138 -0
  319. package/node_modules/zod/v3/ZodError.d.cts +164 -0
  320. package/node_modules/zod/v3/ZodError.d.ts +164 -0
  321. package/node_modules/zod/v3/ZodError.js +133 -0
  322. package/node_modules/zod/v3/errors.cjs +17 -0
  323. package/node_modules/zod/v3/errors.d.cts +5 -0
  324. package/node_modules/zod/v3/errors.d.ts +5 -0
  325. package/node_modules/zod/v3/errors.js +9 -0
  326. package/node_modules/zod/v3/external.cjs +22 -0
  327. package/node_modules/zod/v3/external.d.cts +6 -0
  328. package/node_modules/zod/v3/external.d.ts +6 -0
  329. package/node_modules/zod/v3/external.js +6 -0
  330. package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
  331. package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
  332. package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
  333. package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
  334. package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
  335. package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
  336. package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
  337. package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  338. package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
  339. package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
  340. package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
  341. package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  342. package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
  343. package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
  344. package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
  345. package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
  346. package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
  347. package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
  348. package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
  349. package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  350. package/node_modules/zod/v3/helpers/util.cjs +137 -0
  351. package/node_modules/zod/v3/helpers/util.d.cts +85 -0
  352. package/node_modules/zod/v3/helpers/util.d.ts +85 -0
  353. package/node_modules/zod/v3/helpers/util.js +133 -0
  354. package/node_modules/zod/v3/index.cjs +33 -0
  355. package/node_modules/zod/v3/index.d.cts +4 -0
  356. package/node_modules/zod/v3/index.d.ts +4 -0
  357. package/node_modules/zod/v3/index.js +4 -0
  358. package/node_modules/zod/v3/locales/en.cjs +112 -0
  359. package/node_modules/zod/v3/locales/en.d.cts +3 -0
  360. package/node_modules/zod/v3/locales/en.d.ts +3 -0
  361. package/node_modules/zod/v3/locales/en.js +109 -0
  362. package/node_modules/zod/v3/package.json +6 -0
  363. package/node_modules/zod/v3/standard-schema.cjs +2 -0
  364. package/node_modules/zod/v3/standard-schema.d.cts +102 -0
  365. package/node_modules/zod/v3/standard-schema.d.ts +102 -0
  366. package/node_modules/zod/v3/standard-schema.js +1 -0
  367. package/node_modules/zod/v3/types.cjs +3777 -0
  368. package/node_modules/zod/v3/types.d.cts +1034 -0
  369. package/node_modules/zod/v3/types.d.ts +1034 -0
  370. package/node_modules/zod/v3/types.js +3695 -0
  371. package/node_modules/zod/v4/classic/checks.cjs +33 -0
  372. package/node_modules/zod/v4/classic/checks.d.cts +1 -0
  373. package/node_modules/zod/v4/classic/checks.d.ts +1 -0
  374. package/node_modules/zod/v4/classic/checks.js +1 -0
  375. package/node_modules/zod/v4/classic/coerce.cjs +47 -0
  376. package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
  377. package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
  378. package/node_modules/zod/v4/classic/coerce.js +17 -0
  379. package/node_modules/zod/v4/classic/compat.cjs +61 -0
  380. package/node_modules/zod/v4/classic/compat.d.cts +50 -0
  381. package/node_modules/zod/v4/classic/compat.d.ts +50 -0
  382. package/node_modules/zod/v4/classic/compat.js +31 -0
  383. package/node_modules/zod/v4/classic/errors.cjs +74 -0
  384. package/node_modules/zod/v4/classic/errors.d.cts +30 -0
  385. package/node_modules/zod/v4/classic/errors.d.ts +30 -0
  386. package/node_modules/zod/v4/classic/errors.js +48 -0
  387. package/node_modules/zod/v4/classic/external.cjs +73 -0
  388. package/node_modules/zod/v4/classic/external.d.cts +15 -0
  389. package/node_modules/zod/v4/classic/external.d.ts +15 -0
  390. package/node_modules/zod/v4/classic/external.js +20 -0
  391. package/node_modules/zod/v4/classic/from-json-schema.cjs +610 -0
  392. package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
  393. package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
  394. package/node_modules/zod/v4/classic/from-json-schema.js +584 -0
  395. package/node_modules/zod/v4/classic/index.cjs +33 -0
  396. package/node_modules/zod/v4/classic/index.d.cts +4 -0
  397. package/node_modules/zod/v4/classic/index.d.ts +4 -0
  398. package/node_modules/zod/v4/classic/index.js +4 -0
  399. package/node_modules/zod/v4/classic/iso.cjs +60 -0
  400. package/node_modules/zod/v4/classic/iso.d.cts +22 -0
  401. package/node_modules/zod/v4/classic/iso.d.ts +22 -0
  402. package/node_modules/zod/v4/classic/iso.js +30 -0
  403. package/node_modules/zod/v4/classic/package.json +6 -0
  404. package/node_modules/zod/v4/classic/parse.cjs +41 -0
  405. package/node_modules/zod/v4/classic/parse.d.cts +31 -0
  406. package/node_modules/zod/v4/classic/parse.d.ts +31 -0
  407. package/node_modules/zod/v4/classic/parse.js +15 -0
  408. package/node_modules/zod/v4/classic/schemas.cjs +1272 -0
  409. package/node_modules/zod/v4/classic/schemas.d.cts +739 -0
  410. package/node_modules/zod/v4/classic/schemas.d.ts +739 -0
  411. package/node_modules/zod/v4/classic/schemas.js +1157 -0
  412. package/node_modules/zod/v4/core/api.cjs +1222 -0
  413. package/node_modules/zod/v4/core/api.d.cts +304 -0
  414. package/node_modules/zod/v4/core/api.d.ts +304 -0
  415. package/node_modules/zod/v4/core/api.js +1082 -0
  416. package/node_modules/zod/v4/core/checks.cjs +601 -0
  417. package/node_modules/zod/v4/core/checks.d.cts +278 -0
  418. package/node_modules/zod/v4/core/checks.d.ts +278 -0
  419. package/node_modules/zod/v4/core/checks.js +575 -0
  420. package/node_modules/zod/v4/core/core.cjs +83 -0
  421. package/node_modules/zod/v4/core/core.d.cts +70 -0
  422. package/node_modules/zod/v4/core/core.d.ts +70 -0
  423. package/node_modules/zod/v4/core/core.js +76 -0
  424. package/node_modules/zod/v4/core/doc.cjs +39 -0
  425. package/node_modules/zod/v4/core/doc.d.cts +14 -0
  426. package/node_modules/zod/v4/core/doc.d.ts +14 -0
  427. package/node_modules/zod/v4/core/doc.js +35 -0
  428. package/node_modules/zod/v4/core/errors.cjs +213 -0
  429. package/node_modules/zod/v4/core/errors.d.cts +220 -0
  430. package/node_modules/zod/v4/core/errors.d.ts +220 -0
  431. package/node_modules/zod/v4/core/errors.js +182 -0
  432. package/node_modules/zod/v4/core/index.cjs +47 -0
  433. package/node_modules/zod/v4/core/index.d.cts +16 -0
  434. package/node_modules/zod/v4/core/index.d.ts +16 -0
  435. package/node_modules/zod/v4/core/index.js +16 -0
  436. package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
  437. package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
  438. package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
  439. package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
  440. package/node_modules/zod/v4/core/json-schema-processors.cjs +648 -0
  441. package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
  442. package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
  443. package/node_modules/zod/v4/core/json-schema-processors.js +605 -0
  444. package/node_modules/zod/v4/core/json-schema.cjs +2 -0
  445. package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
  446. package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
  447. package/node_modules/zod/v4/core/json-schema.js +1 -0
  448. package/node_modules/zod/v4/core/package.json +6 -0
  449. package/node_modules/zod/v4/core/parse.cjs +131 -0
  450. package/node_modules/zod/v4/core/parse.d.cts +49 -0
  451. package/node_modules/zod/v4/core/parse.d.ts +49 -0
  452. package/node_modules/zod/v4/core/parse.js +93 -0
  453. package/node_modules/zod/v4/core/regexes.cjs +166 -0
  454. package/node_modules/zod/v4/core/regexes.d.cts +79 -0
  455. package/node_modules/zod/v4/core/regexes.d.ts +79 -0
  456. package/node_modules/zod/v4/core/regexes.js +133 -0
  457. package/node_modules/zod/v4/core/registries.cjs +56 -0
  458. package/node_modules/zod/v4/core/registries.d.cts +35 -0
  459. package/node_modules/zod/v4/core/registries.d.ts +35 -0
  460. package/node_modules/zod/v4/core/registries.js +51 -0
  461. package/node_modules/zod/v4/core/schemas.cjs +2124 -0
  462. package/node_modules/zod/v4/core/schemas.d.cts +1146 -0
  463. package/node_modules/zod/v4/core/schemas.d.ts +1146 -0
  464. package/node_modules/zod/v4/core/schemas.js +2093 -0
  465. package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
  466. package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
  467. package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
  468. package/node_modules/zod/v4/core/standard-schema.js +1 -0
  469. package/node_modules/zod/v4/core/to-json-schema.cjs +446 -0
  470. package/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
  471. package/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
  472. package/node_modules/zod/v4/core/to-json-schema.js +437 -0
  473. package/node_modules/zod/v4/core/util.cjs +710 -0
  474. package/node_modules/zod/v4/core/util.d.cts +199 -0
  475. package/node_modules/zod/v4/core/util.d.ts +199 -0
  476. package/node_modules/zod/v4/core/util.js +651 -0
  477. package/node_modules/zod/v4/core/versions.cjs +8 -0
  478. package/node_modules/zod/v4/core/versions.d.cts +5 -0
  479. package/node_modules/zod/v4/core/versions.d.ts +5 -0
  480. package/node_modules/zod/v4/core/versions.js +5 -0
  481. package/node_modules/zod/v4/index.cjs +22 -0
  482. package/node_modules/zod/v4/index.d.cts +3 -0
  483. package/node_modules/zod/v4/index.d.ts +3 -0
  484. package/node_modules/zod/v4/index.js +3 -0
  485. package/node_modules/zod/v4/locales/ar.cjs +133 -0
  486. package/node_modules/zod/v4/locales/ar.d.cts +5 -0
  487. package/node_modules/zod/v4/locales/ar.d.ts +4 -0
  488. package/node_modules/zod/v4/locales/ar.js +106 -0
  489. package/node_modules/zod/v4/locales/az.cjs +132 -0
  490. package/node_modules/zod/v4/locales/az.d.cts +5 -0
  491. package/node_modules/zod/v4/locales/az.d.ts +4 -0
  492. package/node_modules/zod/v4/locales/az.js +105 -0
  493. package/node_modules/zod/v4/locales/be.cjs +183 -0
  494. package/node_modules/zod/v4/locales/be.d.cts +5 -0
  495. package/node_modules/zod/v4/locales/be.d.ts +4 -0
  496. package/node_modules/zod/v4/locales/be.js +156 -0
  497. package/node_modules/zod/v4/locales/bg.cjs +147 -0
  498. package/node_modules/zod/v4/locales/bg.d.cts +5 -0
  499. package/node_modules/zod/v4/locales/bg.d.ts +4 -0
  500. package/node_modules/zod/v4/locales/bg.js +120 -0
  501. package/node_modules/zod/v4/locales/ca.cjs +134 -0
  502. package/node_modules/zod/v4/locales/ca.d.cts +5 -0
  503. package/node_modules/zod/v4/locales/ca.d.ts +4 -0
  504. package/node_modules/zod/v4/locales/ca.js +107 -0
  505. package/node_modules/zod/v4/locales/cs.cjs +138 -0
  506. package/node_modules/zod/v4/locales/cs.d.cts +5 -0
  507. package/node_modules/zod/v4/locales/cs.d.ts +4 -0
  508. package/node_modules/zod/v4/locales/cs.js +111 -0
  509. package/node_modules/zod/v4/locales/da.cjs +142 -0
  510. package/node_modules/zod/v4/locales/da.d.cts +5 -0
  511. package/node_modules/zod/v4/locales/da.d.ts +4 -0
  512. package/node_modules/zod/v4/locales/da.js +115 -0
  513. package/node_modules/zod/v4/locales/de.cjs +135 -0
  514. package/node_modules/zod/v4/locales/de.d.cts +5 -0
  515. package/node_modules/zod/v4/locales/de.d.ts +4 -0
  516. package/node_modules/zod/v4/locales/de.js +108 -0
  517. package/node_modules/zod/v4/locales/en.cjs +136 -0
  518. package/node_modules/zod/v4/locales/en.d.cts +5 -0
  519. package/node_modules/zod/v4/locales/en.d.ts +4 -0
  520. package/node_modules/zod/v4/locales/en.js +109 -0
  521. package/node_modules/zod/v4/locales/eo.cjs +136 -0
  522. package/node_modules/zod/v4/locales/eo.d.cts +5 -0
  523. package/node_modules/zod/v4/locales/eo.d.ts +4 -0
  524. package/node_modules/zod/v4/locales/eo.js +109 -0
  525. package/node_modules/zod/v4/locales/es.cjs +159 -0
  526. package/node_modules/zod/v4/locales/es.d.cts +5 -0
  527. package/node_modules/zod/v4/locales/es.d.ts +4 -0
  528. package/node_modules/zod/v4/locales/es.js +132 -0
  529. package/node_modules/zod/v4/locales/fa.cjs +141 -0
  530. package/node_modules/zod/v4/locales/fa.d.cts +5 -0
  531. package/node_modules/zod/v4/locales/fa.d.ts +4 -0
  532. package/node_modules/zod/v4/locales/fa.js +114 -0
  533. package/node_modules/zod/v4/locales/fi.cjs +139 -0
  534. package/node_modules/zod/v4/locales/fi.d.cts +5 -0
  535. package/node_modules/zod/v4/locales/fi.d.ts +4 -0
  536. package/node_modules/zod/v4/locales/fi.js +112 -0
  537. package/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
  538. package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
  539. package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
  540. package/node_modules/zod/v4/locales/fr-CA.js +107 -0
  541. package/node_modules/zod/v4/locales/fr.cjs +135 -0
  542. package/node_modules/zod/v4/locales/fr.d.cts +5 -0
  543. package/node_modules/zod/v4/locales/fr.d.ts +4 -0
  544. package/node_modules/zod/v4/locales/fr.js +108 -0
  545. package/node_modules/zod/v4/locales/he.cjs +241 -0
  546. package/node_modules/zod/v4/locales/he.d.cts +5 -0
  547. package/node_modules/zod/v4/locales/he.d.ts +4 -0
  548. package/node_modules/zod/v4/locales/he.js +214 -0
  549. package/node_modules/zod/v4/locales/hu.cjs +135 -0
  550. package/node_modules/zod/v4/locales/hu.d.cts +5 -0
  551. package/node_modules/zod/v4/locales/hu.d.ts +4 -0
  552. package/node_modules/zod/v4/locales/hu.js +108 -0
  553. package/node_modules/zod/v4/locales/hy.cjs +174 -0
  554. package/node_modules/zod/v4/locales/hy.d.cts +5 -0
  555. package/node_modules/zod/v4/locales/hy.d.ts +4 -0
  556. package/node_modules/zod/v4/locales/hy.js +147 -0
  557. package/node_modules/zod/v4/locales/id.cjs +133 -0
  558. package/node_modules/zod/v4/locales/id.d.cts +5 -0
  559. package/node_modules/zod/v4/locales/id.d.ts +4 -0
  560. package/node_modules/zod/v4/locales/id.js +106 -0
  561. package/node_modules/zod/v4/locales/index.cjs +104 -0
  562. package/node_modules/zod/v4/locales/index.d.cts +49 -0
  563. package/node_modules/zod/v4/locales/index.d.ts +49 -0
  564. package/node_modules/zod/v4/locales/index.js +49 -0
  565. package/node_modules/zod/v4/locales/is.cjs +136 -0
  566. package/node_modules/zod/v4/locales/is.d.cts +5 -0
  567. package/node_modules/zod/v4/locales/is.d.ts +4 -0
  568. package/node_modules/zod/v4/locales/is.js +109 -0
  569. package/node_modules/zod/v4/locales/it.cjs +135 -0
  570. package/node_modules/zod/v4/locales/it.d.cts +5 -0
  571. package/node_modules/zod/v4/locales/it.d.ts +4 -0
  572. package/node_modules/zod/v4/locales/it.js +108 -0
  573. package/node_modules/zod/v4/locales/ja.cjs +134 -0
  574. package/node_modules/zod/v4/locales/ja.d.cts +5 -0
  575. package/node_modules/zod/v4/locales/ja.d.ts +4 -0
  576. package/node_modules/zod/v4/locales/ja.js +107 -0
  577. package/node_modules/zod/v4/locales/ka.cjs +139 -0
  578. package/node_modules/zod/v4/locales/ka.d.cts +5 -0
  579. package/node_modules/zod/v4/locales/ka.d.ts +4 -0
  580. package/node_modules/zod/v4/locales/ka.js +112 -0
  581. package/node_modules/zod/v4/locales/kh.cjs +12 -0
  582. package/node_modules/zod/v4/locales/kh.d.cts +5 -0
  583. package/node_modules/zod/v4/locales/kh.d.ts +5 -0
  584. package/node_modules/zod/v4/locales/kh.js +5 -0
  585. package/node_modules/zod/v4/locales/km.cjs +137 -0
  586. package/node_modules/zod/v4/locales/km.d.cts +5 -0
  587. package/node_modules/zod/v4/locales/km.d.ts +4 -0
  588. package/node_modules/zod/v4/locales/km.js +110 -0
  589. package/node_modules/zod/v4/locales/ko.cjs +138 -0
  590. package/node_modules/zod/v4/locales/ko.d.cts +5 -0
  591. package/node_modules/zod/v4/locales/ko.d.ts +4 -0
  592. package/node_modules/zod/v4/locales/ko.js +111 -0
  593. package/node_modules/zod/v4/locales/lt.cjs +230 -0
  594. package/node_modules/zod/v4/locales/lt.d.cts +5 -0
  595. package/node_modules/zod/v4/locales/lt.d.ts +4 -0
  596. package/node_modules/zod/v4/locales/lt.js +203 -0
  597. package/node_modules/zod/v4/locales/mk.cjs +136 -0
  598. package/node_modules/zod/v4/locales/mk.d.cts +5 -0
  599. package/node_modules/zod/v4/locales/mk.d.ts +4 -0
  600. package/node_modules/zod/v4/locales/mk.js +109 -0
  601. package/node_modules/zod/v4/locales/ms.cjs +134 -0
  602. package/node_modules/zod/v4/locales/ms.d.cts +5 -0
  603. package/node_modules/zod/v4/locales/ms.d.ts +4 -0
  604. package/node_modules/zod/v4/locales/ms.js +107 -0
  605. package/node_modules/zod/v4/locales/nl.cjs +137 -0
  606. package/node_modules/zod/v4/locales/nl.d.cts +5 -0
  607. package/node_modules/zod/v4/locales/nl.d.ts +4 -0
  608. package/node_modules/zod/v4/locales/nl.js +110 -0
  609. package/node_modules/zod/v4/locales/no.cjs +135 -0
  610. package/node_modules/zod/v4/locales/no.d.cts +5 -0
  611. package/node_modules/zod/v4/locales/no.d.ts +4 -0
  612. package/node_modules/zod/v4/locales/no.js +108 -0
  613. package/node_modules/zod/v4/locales/ota.cjs +136 -0
  614. package/node_modules/zod/v4/locales/ota.d.cts +5 -0
  615. package/node_modules/zod/v4/locales/ota.d.ts +4 -0
  616. package/node_modules/zod/v4/locales/ota.js +109 -0
  617. package/node_modules/zod/v4/locales/package.json +6 -0
  618. package/node_modules/zod/v4/locales/pl.cjs +136 -0
  619. package/node_modules/zod/v4/locales/pl.d.cts +5 -0
  620. package/node_modules/zod/v4/locales/pl.d.ts +4 -0
  621. package/node_modules/zod/v4/locales/pl.js +109 -0
  622. package/node_modules/zod/v4/locales/ps.cjs +141 -0
  623. package/node_modules/zod/v4/locales/ps.d.cts +5 -0
  624. package/node_modules/zod/v4/locales/ps.d.ts +4 -0
  625. package/node_modules/zod/v4/locales/ps.js +114 -0
  626. package/node_modules/zod/v4/locales/pt.cjs +135 -0
  627. package/node_modules/zod/v4/locales/pt.d.cts +5 -0
  628. package/node_modules/zod/v4/locales/pt.d.ts +4 -0
  629. package/node_modules/zod/v4/locales/pt.js +108 -0
  630. package/node_modules/zod/v4/locales/ru.cjs +183 -0
  631. package/node_modules/zod/v4/locales/ru.d.cts +5 -0
  632. package/node_modules/zod/v4/locales/ru.d.ts +4 -0
  633. package/node_modules/zod/v4/locales/ru.js +156 -0
  634. package/node_modules/zod/v4/locales/sl.cjs +136 -0
  635. package/node_modules/zod/v4/locales/sl.d.cts +5 -0
  636. package/node_modules/zod/v4/locales/sl.d.ts +4 -0
  637. package/node_modules/zod/v4/locales/sl.js +109 -0
  638. package/node_modules/zod/v4/locales/sv.cjs +137 -0
  639. package/node_modules/zod/v4/locales/sv.d.cts +5 -0
  640. package/node_modules/zod/v4/locales/sv.d.ts +4 -0
  641. package/node_modules/zod/v4/locales/sv.js +110 -0
  642. package/node_modules/zod/v4/locales/ta.cjs +137 -0
  643. package/node_modules/zod/v4/locales/ta.d.cts +5 -0
  644. package/node_modules/zod/v4/locales/ta.d.ts +4 -0
  645. package/node_modules/zod/v4/locales/ta.js +110 -0
  646. package/node_modules/zod/v4/locales/th.cjs +137 -0
  647. package/node_modules/zod/v4/locales/th.d.cts +5 -0
  648. package/node_modules/zod/v4/locales/th.d.ts +4 -0
  649. package/node_modules/zod/v4/locales/th.js +110 -0
  650. package/node_modules/zod/v4/locales/tr.cjs +132 -0
  651. package/node_modules/zod/v4/locales/tr.d.cts +5 -0
  652. package/node_modules/zod/v4/locales/tr.d.ts +4 -0
  653. package/node_modules/zod/v4/locales/tr.js +105 -0
  654. package/node_modules/zod/v4/locales/ua.cjs +12 -0
  655. package/node_modules/zod/v4/locales/ua.d.cts +5 -0
  656. package/node_modules/zod/v4/locales/ua.d.ts +5 -0
  657. package/node_modules/zod/v4/locales/ua.js +5 -0
  658. package/node_modules/zod/v4/locales/uk.cjs +135 -0
  659. package/node_modules/zod/v4/locales/uk.d.cts +5 -0
  660. package/node_modules/zod/v4/locales/uk.d.ts +4 -0
  661. package/node_modules/zod/v4/locales/uk.js +108 -0
  662. package/node_modules/zod/v4/locales/ur.cjs +137 -0
  663. package/node_modules/zod/v4/locales/ur.d.cts +5 -0
  664. package/node_modules/zod/v4/locales/ur.d.ts +4 -0
  665. package/node_modules/zod/v4/locales/ur.js +110 -0
  666. package/node_modules/zod/v4/locales/uz.cjs +136 -0
  667. package/node_modules/zod/v4/locales/uz.d.cts +5 -0
  668. package/node_modules/zod/v4/locales/uz.d.ts +4 -0
  669. package/node_modules/zod/v4/locales/uz.js +109 -0
  670. package/node_modules/zod/v4/locales/vi.cjs +135 -0
  671. package/node_modules/zod/v4/locales/vi.d.cts +5 -0
  672. package/node_modules/zod/v4/locales/vi.d.ts +4 -0
  673. package/node_modules/zod/v4/locales/vi.js +108 -0
  674. package/node_modules/zod/v4/locales/yo.cjs +134 -0
  675. package/node_modules/zod/v4/locales/yo.d.cts +5 -0
  676. package/node_modules/zod/v4/locales/yo.d.ts +4 -0
  677. package/node_modules/zod/v4/locales/yo.js +107 -0
  678. package/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
  679. package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
  680. package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
  681. package/node_modules/zod/v4/locales/zh-CN.js +109 -0
  682. package/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
  683. package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
  684. package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
  685. package/node_modules/zod/v4/locales/zh-TW.js +107 -0
  686. package/node_modules/zod/v4/mini/checks.cjs +34 -0
  687. package/node_modules/zod/v4/mini/checks.d.cts +1 -0
  688. package/node_modules/zod/v4/mini/checks.d.ts +1 -0
  689. package/node_modules/zod/v4/mini/checks.js +1 -0
  690. package/node_modules/zod/v4/mini/coerce.cjs +52 -0
  691. package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
  692. package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
  693. package/node_modules/zod/v4/mini/coerce.js +22 -0
  694. package/node_modules/zod/v4/mini/external.cjs +63 -0
  695. package/node_modules/zod/v4/mini/external.d.cts +12 -0
  696. package/node_modules/zod/v4/mini/external.d.ts +12 -0
  697. package/node_modules/zod/v4/mini/external.js +14 -0
  698. package/node_modules/zod/v4/mini/index.cjs +32 -0
  699. package/node_modules/zod/v4/mini/index.d.cts +3 -0
  700. package/node_modules/zod/v4/mini/index.d.ts +3 -0
  701. package/node_modules/zod/v4/mini/index.js +3 -0
  702. package/node_modules/zod/v4/mini/iso.cjs +64 -0
  703. package/node_modules/zod/v4/mini/iso.d.cts +22 -0
  704. package/node_modules/zod/v4/mini/iso.d.ts +22 -0
  705. package/node_modules/zod/v4/mini/iso.js +34 -0
  706. package/node_modules/zod/v4/mini/package.json +6 -0
  707. package/node_modules/zod/v4/mini/parse.cjs +16 -0
  708. package/node_modules/zod/v4/mini/parse.d.cts +1 -0
  709. package/node_modules/zod/v4/mini/parse.d.ts +1 -0
  710. package/node_modules/zod/v4/mini/parse.js +1 -0
  711. package/node_modules/zod/v4/mini/schemas.cjs +1046 -0
  712. package/node_modules/zod/v4/mini/schemas.d.cts +427 -0
  713. package/node_modules/zod/v4/mini/schemas.d.ts +427 -0
  714. package/node_modules/zod/v4/mini/schemas.js +925 -0
  715. package/node_modules/zod/v4/package.json +6 -0
  716. package/node_modules/zod/v4-mini/index.cjs +32 -0
  717. package/node_modules/zod/v4-mini/index.d.cts +3 -0
  718. package/node_modules/zod/v4-mini/index.d.ts +3 -0
  719. package/node_modules/zod/v4-mini/index.js +3 -0
  720. package/node_modules/zod/v4-mini/package.json +6 -0
  721. package/package.json +3 -2
  722. package/src/__tests__/command-executor.test.ts +575 -60
  723. package/src/__tests__/command-validator.test.ts +697 -0
  724. package/src/__tests__/command-workspace.test.ts +30 -0
  725. package/src/__tests__/grant-store.test.ts +151 -33
  726. package/src/__tests__/http-executor.test.ts +106 -16
  727. package/src/__tests__/http-policy.test.ts +121 -22
  728. package/src/__tests__/local-materializers.test.ts +34 -0
  729. package/src/__tests__/managed-integration.test.ts +633 -0
  730. package/src/__tests__/managed-lazy-getters.test.ts +245 -0
  731. package/src/__tests__/managed-materializers.test.ts +107 -38
  732. package/src/__tests__/managed-rejection.test.ts +43 -0
  733. package/src/__tests__/toolstore.test.ts +207 -18
  734. package/src/__tests__/transport.test.ts +26 -6
  735. package/src/commands/auth-adapters.ts +2 -2
  736. package/src/commands/egress-hooks.ts +203 -0
  737. package/src/commands/executor.ts +403 -87
  738. package/src/commands/profiles.ts +4 -0
  739. package/src/commands/validator.ts +267 -3
  740. package/src/commands/workspace.ts +59 -21
  741. package/src/grants/index.ts +1 -1
  742. package/src/grants/persistent-store.ts +79 -17
  743. package/src/grants/rpc-handlers.ts +67 -43
  744. package/src/grants/temporary-store.ts +26 -19
  745. package/src/http/executor.ts +170 -25
  746. package/src/http/path-template.ts +75 -9
  747. package/src/http/policy.ts +9 -27
  748. package/src/index.ts +3 -0
  749. package/src/main.ts +102 -43
  750. package/src/managed-errors.ts +9 -0
  751. package/src/managed-lazy-getters.ts +70 -0
  752. package/src/managed-main.ts +191 -65
  753. package/src/materializers/local-oauth-lookup.ts +97 -0
  754. package/src/materializers/local-secure-key-backend.ts +254 -0
  755. package/src/materializers/local-token-refresh.ts +263 -0
  756. package/src/materializers/local.ts +21 -5
  757. package/src/materializers/managed-platform.ts +50 -25
  758. package/src/paths.ts +28 -10
  759. package/src/server.ts +147 -11
  760. package/src/subjects/managed.ts +33 -12
  761. package/src/subjects/policy.ts +79 -0
  762. package/src/toolstore/publish.ts +236 -7
@@ -16,21 +16,27 @@
16
16
  * 4. **Workspace staging** — Stage declared workspace inputs into a
17
17
  * CES-private scratch directory.
18
18
  *
19
- * 5. **Auth materialization** — Materialize the credential through the
20
- * declared auth adapter (env_var, temp_file, or credential_process).
19
+ * 5. **Credential materialization** — Materialize the raw credential
20
+ * value from the credential store.
21
21
  *
22
22
  * 6. **Egress proxy startup** — Start a CES-owned egress proxy session
23
23
  * (when egressMode is `proxy_required`) to enforce network target
24
- * allowlists.
24
+ * allowlists. This happens BEFORE the auth adapter runs so that
25
+ * credential_process helpers also execute under egress control.
25
26
  *
26
- * 7. **Command execution** — Run the command with clean config dirs,
27
+ * 7. **Auth adapter construction** — Build the credential environment
28
+ * through the declared auth adapter (env_var, temp_file, or
29
+ * credential_process). For credential_process, the helper runs
30
+ * with proxy env vars injected.
31
+ *
32
+ * 8. **Command execution** — Run the command with clean config dirs,
27
33
  * materialized credential env vars, and proxy env vars. The command
28
34
  * runs in the scratch directory, never in the assistant workspace.
29
35
  *
30
- * 8. **Output copyback** — After exit, validate and copy declared output
36
+ * 9. **Output copyback** — After exit, validate and copy declared output
31
37
  * files from the scratch directory back into the workspace.
32
38
  *
33
- * 9. **Cleanup** — Stop the egress proxy session, remove temp files, and
39
+ * 10. **Cleanup** — Stop the egress proxy session, remove temp files, and
34
40
  * clean up the scratch directory.
35
41
  *
36
42
  * The executor is fail-closed: bundle mismatches, missing grants,
@@ -38,9 +44,9 @@
38
44
  * violations all result in command rejection before or after execution.
39
45
  */
40
46
 
41
- import { createHash, randomUUID } from "node:crypto";
42
- import { dirname, join } from "node:path";
43
- import { mkdirSync, writeFileSync, unlinkSync, rmSync } from "node:fs";
47
+ import { randomUUID } from "node:crypto";
48
+ import { dirname, join, resolve } from "node:path";
49
+ import { mkdirSync, writeFileSync, unlinkSync, rmSync, realpathSync } from "node:fs";
44
50
  import { tmpdir } from "node:os";
45
51
  import {
46
52
  SessionStore,
@@ -56,7 +62,7 @@ import { readPublishedManifest, getBundleContentPath, isBundlePublished } from "
56
62
  import { getCesToolStoreDir, type CesMode } from "../paths.js";
57
63
  import type { SecureCommandManifest, CommandProfile } from "./profiles.js";
58
64
  import { isDeniedBinary, EgressMode } from "./profiles.js";
59
- import { validateCommand, type CommandValidationResult } from "./validator.js";
65
+ import { validateCommand, extractShellBinary, containsShellMetacharacters, type CommandValidationResult } from "./validator.js";
60
66
  import type { AuthAdapterConfig } from "./auth-adapters.js";
61
67
  import { AuthAdapterType, validateAuthAdapterConfig } from "./auth-adapters.js";
62
68
  import {
@@ -68,8 +74,12 @@ import {
68
74
  type WorkspaceOutput,
69
75
  type CopybackResult,
70
76
  } from "./workspace.js";
77
+ import { hashProposal, type AuditRecordSummary, type CommandGrantProposal } from "@vellumai/ces-contracts";
78
+
79
+ import type { AuditStore } from "../audit/store.js";
71
80
  import type { PersistentGrantStore } from "../grants/persistent-store.js";
72
81
  import type { TemporaryGrantStore } from "../grants/temporary-store.js";
82
+ import type { SessionIdRef } from "../server.js";
73
83
 
74
84
  // ---------------------------------------------------------------------------
75
85
  // Types
@@ -97,10 +107,8 @@ export interface ExecuteCommandRequest {
97
107
  purpose: string;
98
108
  /** Explicit grant ID to consume, if the caller holds one. */
99
109
  grantId?: string;
100
- /** Conversation ID for thread-scoped temporary grants. */
110
+ /** Conversation ID for conversation-scoped temporary grants. */
101
111
  conversationId?: string;
102
- /** Session ID for the egress proxy. */
103
- sessionId?: string;
104
112
  }
105
113
 
106
114
  /**
@@ -121,6 +129,19 @@ export interface ExecuteCommandResult {
121
129
  error?: string;
122
130
  /** Audit-relevant metadata. */
123
131
  auditId?: string;
132
+ /**
133
+ * When the failure reason is a missing grant, this field contains the
134
+ * proposal metadata needed by the approval bridge. Present only when
135
+ * the error is an approval-required grant failure.
136
+ */
137
+ approvalRequired?: {
138
+ credentialHandle: string;
139
+ bundleId: string;
140
+ bundleDigest: string;
141
+ profileName: string;
142
+ command: string;
143
+ purpose: string;
144
+ };
124
145
  }
125
146
 
126
147
  /**
@@ -148,6 +169,10 @@ export interface CommandExecutorDeps {
148
169
  temporaryStore: TemporaryGrantStore;
149
170
  /** Credential materializer function. */
150
171
  materializeCredential: MaterializeCredentialFn;
172
+ /** Audit store for persisting token-free audit records. */
173
+ auditStore?: AuditStore;
174
+ /** Mutable reference to the session ID for audit records. Updated to the handshake session ID once the RPC handshake completes. */
175
+ sessionId?: SessionIdRef;
151
176
  /** CES operating mode (for toolstore path resolution). */
152
177
  cesMode?: CesMode;
153
178
  /** Egress proxy session start hooks (for creating the proxy server). */
@@ -228,6 +253,14 @@ export async function executeAuthenticatedCommand(
228
253
  success: false,
229
254
  error: grantResult.error,
230
255
  auditId,
256
+ approvalRequired: {
257
+ credentialHandle: request.credentialHandle,
258
+ bundleId: manifest.bundleId,
259
+ bundleDigest: request.bundleDigest,
260
+ profileName: request.profileName,
261
+ command: `${request.bundleDigest}/${request.profileName} ${request.argv.join(" ")}`.trim(),
262
+ purpose: request.purpose,
263
+ },
231
264
  };
232
265
  }
233
266
 
@@ -269,33 +302,17 @@ export async function executeAuthenticatedCommand(
269
302
  secrets: secretSet,
270
303
  };
271
304
 
272
- // -- 6. Build auth adapter environment ------------------------------------
273
- let adapterEnv: Record<string, string>;
274
- let tempFilePath: string | undefined;
275
- try {
276
- const adapterResult = await buildAuthAdapterEnv(
277
- manifest.authAdapter,
278
- matResult.value,
279
- );
280
- adapterEnv = adapterResult.env;
281
- tempFilePath = adapterResult.tempFilePath;
282
- } catch (err) {
283
- cleanupScratchDir(scratchDir);
284
- return {
285
- success: false,
286
- error: `Auth adapter materialization failed: ${err instanceof Error ? err.message : String(err)}`,
287
- auditId,
288
- };
289
- }
290
-
291
- // -- 7. Start egress proxy (if proxy_required) ----------------------------
305
+ // -- 6. Start egress proxy (if proxy_required) ----------------------------
306
+ // The egress proxy must be started BEFORE the auth adapter runs, so that
307
+ // credential_process helpers execute under egress control (not in an
308
+ // uncontrolled network state).
292
309
  let proxyEnv: ProxyEnvVars | undefined;
293
310
  let proxySessionId: string | undefined;
294
311
  const sessionStore = deps.egressSessionStore ?? new SessionStore();
295
312
 
296
313
  if (manifest.egressMode === EgressMode.ProxyRequired) {
297
314
  if (!deps.egressHooks) {
298
- cleanupAll(scratchDir, tempFilePath);
315
+ cleanupScratchDir(scratchDir);
299
316
  return {
300
317
  success: false,
301
318
  error: "Egress mode is proxy_required but no egress hooks were provided. " +
@@ -306,10 +323,19 @@ export async function executeAuthenticatedCommand(
306
323
 
307
324
  try {
308
325
  const conversationId = request.conversationId ?? `ces-cmd-${auditId}`;
326
+ // Carry the profile's allowedNetworkTargets into the session config
327
+ // so the egress proxy can enforce the allowlist.
328
+ const profile = manifest.commandProfiles[request.profileName];
329
+ const allowedTargets = profile?.allowedNetworkTargets?.map((t) => ({
330
+ host: t.hostPattern,
331
+ ...(t.ports ? { ports: t.ports } : {}),
332
+ ...(t.protocols ? { protocols: t.protocols } : {}),
333
+ }));
309
334
  const session = createSession(
310
335
  sessionStore,
311
336
  conversationId,
312
337
  [request.credentialHandle],
338
+ { allowedTargets },
313
339
  );
314
340
  const started = await startSession(
315
341
  sessionStore,
@@ -319,7 +345,7 @@ export async function executeAuthenticatedCommand(
319
345
  proxySessionId = started.id;
320
346
  proxyEnv = getSessionEnv(sessionStore, started.id);
321
347
  } catch (err) {
322
- cleanupAll(scratchDir, tempFilePath);
348
+ cleanupScratchDir(scratchDir);
323
349
  return {
324
350
  success: false,
325
351
  error: `Egress proxy startup failed: ${err instanceof Error ? err.message : String(err)}`,
@@ -328,17 +354,148 @@ export async function executeAuthenticatedCommand(
328
354
  }
329
355
  }
330
356
 
357
+ // For no_network mode, block all outbound by pointing proxy vars at a
358
+ // non-existent address. This prevents subprocesses from making direct
359
+ // connections even without a running egress proxy.
360
+ let noNetworkEnv: Record<string, string> | undefined;
361
+ if (manifest.egressMode === EgressMode.NoNetwork) {
362
+ const blockedProxy = "http://127.0.0.1:0";
363
+ noNetworkEnv = {
364
+ HTTP_PROXY: blockedProxy,
365
+ HTTPS_PROXY: blockedProxy,
366
+ http_proxy: blockedProxy,
367
+ https_proxy: blockedProxy,
368
+ NO_PROXY: "",
369
+ no_proxy: "",
370
+ };
371
+ }
372
+
373
+ // -- 7. Build auth adapter environment ------------------------------------
374
+ // Pass proxy/no-network env vars so credential_process helpers also run
375
+ // under egress control.
376
+ let adapterEnv: Record<string, string>;
377
+ let tempFilePath: string | undefined;
378
+ try {
379
+ const adapterResult = await buildAuthAdapterEnv(
380
+ manifest.authAdapter,
381
+ matResult.value,
382
+ proxyEnv,
383
+ noNetworkEnv,
384
+ );
385
+ adapterEnv = adapterResult.env;
386
+ tempFilePath = adapterResult.tempFilePath;
387
+ } catch (err) {
388
+ // Stop the proxy session before returning — it may already be running
389
+ if (proxySessionId) {
390
+ try {
391
+ await stopSession(proxySessionId, sessionStore);
392
+ } catch {
393
+ // Best-effort proxy cleanup
394
+ }
395
+ }
396
+ cleanupScratchDir(scratchDir);
397
+ return {
398
+ success: false,
399
+ error: `Auth adapter materialization failed: ${err instanceof Error ? err.message : String(err)}`,
400
+ auditId,
401
+ };
402
+ }
403
+
331
404
  // -- 8. Build the execution environment -----------------------------------
332
- const entrypointPath = join(
333
- getBundleContentPath(toolstoreDir, request.bundleDigest),
334
- "..",
335
- manifest.entrypoint,
336
- );
405
+ const bundleDir = dirname(getBundleContentPath(toolstoreDir, request.bundleDigest));
406
+ const entrypointPath = resolve(bundleDir, manifest.entrypoint);
407
+
408
+ // Containment check: entrypoint must resolve inside the bundle directory
409
+ // (lexical check for path traversal via ../)
410
+ if (!entrypointPath.startsWith(bundleDir + "/") && entrypointPath !== bundleDir) {
411
+ // Stop the proxy session before returning — it may already be running
412
+ if (proxySessionId) {
413
+ try {
414
+ await stopSession(proxySessionId, sessionStore);
415
+ } catch {
416
+ // Best-effort proxy cleanup
417
+ }
418
+ }
419
+ cleanupAll(scratchDir, tempFilePath);
420
+ return {
421
+ success: false,
422
+ error: `Entrypoint "${manifest.entrypoint}" resolves outside the bundle directory. ` +
423
+ `Path traversal is not allowed.`,
424
+ auditId,
425
+ };
426
+ }
427
+
428
+ // Symlink escape check: follow symlinks and verify the real path is
429
+ // still inside the bundle directory. A symlink entrypoint like
430
+ // `bin/tool -> /usr/bin/curl` passes the lexical check above but
431
+ // executes outside the bundle boundary.
432
+ let realEntrypointPath: string;
433
+ try {
434
+ realEntrypointPath = realpathSync(entrypointPath);
435
+ } catch {
436
+ // realpathSync fails if the file doesn't exist or is a broken symlink
437
+ if (proxySessionId) {
438
+ try {
439
+ await stopSession(proxySessionId, sessionStore);
440
+ } catch {
441
+ // Best-effort proxy cleanup
442
+ }
443
+ }
444
+ cleanupAll(scratchDir, tempFilePath);
445
+ return {
446
+ success: false,
447
+ error: `Entrypoint "${manifest.entrypoint}" could not be resolved (broken symlink or missing file).`,
448
+ auditId,
449
+ };
450
+ }
451
+ const realBundleDir = realpathSync(bundleDir);
452
+ if (!realEntrypointPath.startsWith(realBundleDir + "/") && realEntrypointPath !== realBundleDir) {
453
+ if (proxySessionId) {
454
+ try {
455
+ await stopSession(proxySessionId, sessionStore);
456
+ } catch {
457
+ // Best-effort proxy cleanup
458
+ }
459
+ }
460
+ cleanupAll(scratchDir, tempFilePath);
461
+ return {
462
+ success: false,
463
+ error: `Entrypoint "${manifest.entrypoint}" is a symlink that resolves to "${realEntrypointPath}", ` +
464
+ `which is outside the bundle directory. Symlink escape is not allowed.`,
465
+ auditId,
466
+ };
467
+ }
468
+
469
+ // Generate HOME path before buildCommandEnv so we have a known-safe value
470
+ // for cleanup. buildCommandEnv sets HOME after spreading adapterEnv to
471
+ // prevent auth adapters from overriding the isolated home directory.
472
+ const generatedHomeDir = join(tmpdir(), `ces-home-${randomUUID()}`);
473
+
474
+ // Create the HOME directory and enforce cleanConfigDirs before building env
475
+ try {
476
+ mkdirSync(generatedHomeDir, { recursive: true });
477
+ enforceCleanConfigDirs(manifest, generatedHomeDir);
478
+ } catch (err) {
479
+ if (proxySessionId) {
480
+ try {
481
+ await stopSession(proxySessionId, sessionStore);
482
+ } catch {
483
+ // Best-effort proxy cleanup
484
+ }
485
+ }
486
+ cleanupAll(scratchDir, tempFilePath, generatedHomeDir);
487
+ return {
488
+ success: false,
489
+ error: `Clean config dirs setup failed: ${err instanceof Error ? err.message : String(err)}`,
490
+ auditId,
491
+ };
492
+ }
337
493
 
338
494
  const commandEnv = buildCommandEnv(
339
495
  adapterEnv,
340
496
  proxyEnv,
341
- manifest.cleanConfigDirs,
497
+ noNetworkEnv,
498
+ generatedHomeDir,
342
499
  );
343
500
 
344
501
  // -- 9. Execute the command -----------------------------------------------
@@ -400,7 +557,23 @@ export async function executeAuthenticatedCommand(
400
557
  }
401
558
  }
402
559
 
403
- cleanupAll(scratchDir, tempFilePath);
560
+ cleanupAll(scratchDir, tempFilePath, generatedHomeDir);
561
+
562
+ // -- 12. Persist audit record -----------------------------------------------
563
+ if (deps.auditStore) {
564
+ const auditRecord: AuditRecordSummary = {
565
+ auditId,
566
+ grantId: grantResult.grantId ?? "unknown",
567
+ credentialHandle: request.credentialHandle,
568
+ toolName: "command",
569
+ target: `${request.bundleDigest}/${request.profileName}`,
570
+ sessionId: deps.sessionId?.current ?? "unknown",
571
+ success: execResult.success,
572
+ ...(execResult.error ? { errorMessage: execResult.error } : {}),
573
+ timestamp: new Date().toISOString(),
574
+ };
575
+ try { deps.auditStore.append(auditRecord); } catch { /* audit persistence must not block execution */ }
576
+ }
404
577
 
405
578
  return execResult;
406
579
  }
@@ -529,13 +702,25 @@ function checkGrant(
529
702
  persistentStore: PersistentGrantStore,
530
703
  temporaryStore: TemporaryGrantStore,
531
704
  ): GrantCheckResult {
532
- // If an explicit grantId is provided, check it directly
705
+ // Build the full legacy command string for exact matching against legacy grants.
706
+ const legacyCommand = `${request.bundleDigest}/${profileName} ${request.argv.join(" ")}`.trim();
707
+
708
+ // If an explicit grantId is provided, check it directly — but verify
709
+ // that the grant's scope matches the current request. Without this
710
+ // check, an agent with a valid grant for one command/credential could
711
+ // reuse the grantId for a different command/credential (authorization
712
+ // bypass).
533
713
  if (request.grantId) {
534
714
  const grant = persistentStore.getById(request.grantId);
535
- if (grant) {
715
+ if (
716
+ grant &&
717
+ grant.tool === "command" &&
718
+ grant.scope === request.credentialHandle &&
719
+ grantMatchesCommand(grant.pattern, request.credentialHandle, request.bundleDigest, profileName, legacyCommand)
720
+ ) {
536
721
  return { ok: true, grantId: grant.id };
537
722
  }
538
- // Explicit grant not found — fall through to pattern matching
723
+ // Explicit grant not found or does not match this request — fall through to pattern matching
539
724
  }
540
725
 
541
726
  // Check persistent grants for a matching command grant
@@ -544,18 +729,23 @@ function checkGrant(
544
729
  if (
545
730
  grant.tool === "command" &&
546
731
  grant.scope === request.credentialHandle &&
547
- grantMatchesCommand(grant.pattern, manifest.bundleId, profileName)
732
+ grantMatchesCommand(grant.pattern, request.credentialHandle, request.bundleDigest, profileName, legacyCommand)
548
733
  ) {
549
734
  return { ok: true, grantId: grant.id };
550
735
  }
551
736
  }
552
737
 
553
- // Check temporary grants
554
- const proposalHash = computeCommandProposalHash(
555
- request.credentialHandle,
556
- manifest.bundleId,
557
- profileName,
558
- );
738
+ // Check temporary grants — build the same proposal shape that the
739
+ // approval bridge produces, then hash with the canonical algorithm
740
+ // from `@vellumai/ces-contracts` so the hashes align.
741
+ const tempProposal: CommandGrantProposal = {
742
+ type: "command",
743
+ credentialHandle: request.credentialHandle,
744
+ command: `${request.bundleDigest}/${profileName} ${request.argv.join(" ")}`.trim(),
745
+ purpose: request.purpose,
746
+ allowedCommandPatterns: [`${request.credentialHandle}:${request.bundleDigest}:${profileName}`],
747
+ };
748
+ const proposalHash = hashProposal(tempProposal);
559
749
  const tempKind = temporaryStore.checkAny(
560
750
  proposalHash,
561
751
  request.conversationId,
@@ -575,29 +765,38 @@ function checkGrant(
575
765
  /**
576
766
  * Check if a persistent grant pattern matches a command invocation.
577
767
  *
578
- * Grant patterns for commands use the format: `<bundleId>/<profileName>`.
768
+ * Grant patterns for commands can be stored in two formats:
769
+ * 1. Canonical: `<credentialHandle>:<bundleDigest>:<profileName>` (from allowedCommandPatterns)
770
+ * 2. Legacy: `<bundleDigest>/<profileName> <argv...>` (from proposal.command fallback)
771
+ *
772
+ * The legacy format exists because older grants were persisted using
773
+ * `proposal.command` before `allowedCommandPatterns` was introduced.
774
+ * Credential scope is already verified by the caller (`grant.scope === credentialHandle`),
775
+ * so for legacy patterns we match the full command string (including argv) to prevent
776
+ * a grant for one argv from authorizing a different argv on the same profile.
579
777
  */
580
778
  function grantMatchesCommand(
581
779
  pattern: string,
582
- bundleId: string,
780
+ credentialHandle: string,
781
+ bundleDigest: string,
583
782
  profileName: string,
783
+ legacyCommand: string,
584
784
  ): boolean {
585
- return pattern === `${bundleId}/${profileName}`;
586
- }
785
+ // Canonical format: <credentialHandle>:<bundleDigest>:<profileName>
786
+ if (pattern === `${credentialHandle}:${bundleDigest}:${profileName}`) {
787
+ return true;
788
+ }
587
789
 
588
- /**
589
- * Compute a deterministic hash for temporary grant lookup.
590
- */
591
- function computeCommandProposalHash(
592
- credentialHandle: string,
593
- bundleId: string,
594
- profileName: string,
595
- ): string {
596
- const parts = ["command", credentialHandle, bundleId, profileName];
597
- const canonical = JSON.stringify(parts);
598
- return createHash("sha256").update(canonical, "utf8").digest("hex");
790
+ // Legacy format: <bundleDigest>/<profileName> <argv...>
791
+ // Match the full legacy command string exactly to prevent approval scope widening.
792
+ if (pattern === legacyCommand) {
793
+ return true;
794
+ }
795
+
796
+ return false;
599
797
  }
600
798
 
799
+
601
800
  // ---------------------------------------------------------------------------
602
801
  // Internal: Auth adapter environment construction
603
802
  // ---------------------------------------------------------------------------
@@ -612,6 +811,8 @@ interface AuthAdapterEnvResult {
612
811
  async function buildAuthAdapterEnv(
613
812
  adapter: AuthAdapterConfig,
614
813
  credentialValue: string,
814
+ proxyEnv?: ProxyEnvVars,
815
+ noNetworkEnv?: Record<string, string>,
615
816
  ): Promise<AuthAdapterEnvResult> {
616
817
  // Validate adapter config
617
818
  const errors = validateAuthAdapterConfig(adapter);
@@ -646,12 +847,16 @@ async function buildAuthAdapterEnv(
646
847
  }
647
848
 
648
849
  case AuthAdapterType.CredentialProcess: {
649
- // Run the helper command and capture its stdout
850
+ // Run the helper command and capture its stdout.
851
+ // Proxy env vars are forwarded so the helper runs under the same
852
+ // egress control as the main command.
650
853
  const timeoutMs = adapter.timeoutMs ?? CREDENTIAL_PROCESS_TIMEOUT_MS;
651
854
  const helperResult = await runCredentialProcess(
652
855
  adapter.helperCommand,
653
856
  credentialValue,
654
857
  timeoutMs,
858
+ proxyEnv,
859
+ noNetworkEnv,
655
860
  );
656
861
  if (!helperResult.ok) {
657
862
  throw new Error(
@@ -677,23 +882,77 @@ async function buildAuthAdapterEnv(
677
882
  */
678
883
  async function runCredentialProcess(
679
884
  helperCommand: string,
680
- _credentialValue: string,
885
+ credentialValue: string,
681
886
  timeoutMs: number,
887
+ proxyEnv?: ProxyEnvVars,
888
+ noNetworkEnv?: Record<string, string>,
682
889
  ): Promise<{ ok: true; stdout: string } | { ok: false; error: string }> {
890
+ // Defense-in-depth: re-check denied binary and metacharacters at execution
891
+ // time, mirroring the validator's static checks. If a manifest was tampered
892
+ // with after validation, this blocks execution before spawning the shell.
893
+ if (containsShellMetacharacters(helperCommand)) {
894
+ return {
895
+ ok: false,
896
+ error: `Credential process helperCommand contains shell metacharacters. ` +
897
+ `Command chaining operators are not allowed.`,
898
+ };
899
+ }
900
+
901
+ const helperBinary = extractShellBinary(helperCommand);
902
+ if (isDeniedBinary(helperBinary)) {
903
+ return {
904
+ ok: false,
905
+ error: `Credential process helperCommand starts with denied binary "${helperBinary}". ` +
906
+ `Generic HTTP clients, interpreters, and shell trampolines cannot be used as credential helpers.`,
907
+ };
908
+ }
909
+
683
910
  try {
911
+ // Build a minimal environment for the helper. No host env is inherited,
912
+ // but egress proxy or no-network env vars are injected so the helper
913
+ // runs under the same network controls as the main command.
914
+ const helperEnv: Record<string, string> = {};
915
+
916
+ if (proxyEnv) {
917
+ helperEnv["HTTP_PROXY"] = proxyEnv.HTTP_PROXY;
918
+ helperEnv["HTTPS_PROXY"] = proxyEnv.HTTPS_PROXY;
919
+ helperEnv["NO_PROXY"] = proxyEnv.NO_PROXY;
920
+ helperEnv["http_proxy"] = proxyEnv.HTTP_PROXY;
921
+ helperEnv["https_proxy"] = proxyEnv.HTTPS_PROXY;
922
+ helperEnv["no_proxy"] = proxyEnv.NO_PROXY;
923
+ if (proxyEnv.NODE_EXTRA_CA_CERTS) {
924
+ helperEnv["NODE_EXTRA_CA_CERTS"] = proxyEnv.NODE_EXTRA_CA_CERTS;
925
+ }
926
+ if (proxyEnv.SSL_CERT_FILE) {
927
+ helperEnv["SSL_CERT_FILE"] = proxyEnv.SSL_CERT_FILE;
928
+ }
929
+ }
930
+
931
+ if (noNetworkEnv) {
932
+ Object.assign(helperEnv, noNetworkEnv);
933
+ }
934
+
684
935
  const proc = Bun.spawn(["sh", "-c", helperCommand], {
685
936
  stdin: "pipe",
686
937
  stdout: "pipe",
687
938
  stderr: "pipe",
688
- env: {}, // Clean environment — no secrets leaked
939
+ env: helperEnv,
689
940
  });
690
941
 
691
- // Close stdin immediately the helper reads only from its argv/config
942
+ // Write the credential value to stdin for the helper to consume
943
+ proc.stdin.write(credentialValue);
692
944
  proc.stdin.end();
693
945
 
694
946
  const timeoutSignal = AbortSignal.timeout(timeoutMs);
695
- const exitCode = await Promise.race([
696
- proc.exited,
947
+
948
+ // Consume stdout/stderr concurrently with waiting for exit to avoid
949
+ // pipe buffer deadlocks when the helper produces large output.
950
+ const [exitCode, stdout, stderr] = await Promise.race([
951
+ Promise.all([
952
+ proc.exited,
953
+ new Response(proc.stdout).text(),
954
+ new Response(proc.stderr).text(),
955
+ ]),
697
956
  new Promise<never>((_, reject) => {
698
957
  timeoutSignal.addEventListener("abort", () => {
699
958
  proc.kill();
@@ -702,9 +961,6 @@ async function runCredentialProcess(
702
961
  }),
703
962
  ]);
704
963
 
705
- const stdout = await new Response(proc.stdout).text();
706
- const stderr = await new Response(proc.stderr).text();
707
-
708
964
  if (exitCode !== 0) {
709
965
  return {
710
966
  ok: false,
@@ -740,15 +996,17 @@ async function runCredentialProcess(
740
996
  function buildCommandEnv(
741
997
  adapterEnv: Record<string, string>,
742
998
  proxyEnv?: ProxyEnvVars,
743
- _cleanConfigDirs?: Record<string, string>,
999
+ noNetworkEnv?: Record<string, string>,
1000
+ homeDir?: string,
744
1001
  ): Record<string, string> {
745
1002
  const env: Record<string, string> = {
746
- // Minimal baseline environment
1003
+ // Inject auth adapter env vars first so they cannot override protected keys
1004
+ ...adapterEnv,
1005
+ // PATH, LANG, and HOME are set after adapterEnv spread to prevent auth
1006
+ // adapters from overriding baseline environment invariants.
747
1007
  PATH: process.env["PATH"] ?? "/usr/local/bin:/usr/bin:/bin",
748
- HOME: join(tmpdir(), `ces-home-${randomUUID()}`),
749
1008
  LANG: "en_US.UTF-8",
750
- // Inject auth adapter env vars
751
- ...adapterEnv,
1009
+ HOME: homeDir ?? join(tmpdir(), `ces-home-${randomUUID()}`),
752
1010
  };
753
1011
 
754
1012
  // Inject proxy env vars if the egress proxy is active
@@ -767,9 +1025,55 @@ function buildCommandEnv(
767
1025
  }
768
1026
  }
769
1027
 
1028
+ // For no_network mode, inject proxy vars pointing at a dead address to
1029
+ // block direct outbound connections from the subprocess.
1030
+ if (noNetworkEnv) {
1031
+ Object.assign(env, noNetworkEnv);
1032
+ }
1033
+
770
1034
  return env;
771
1035
  }
772
1036
 
1037
+ // ---------------------------------------------------------------------------
1038
+ // Internal: Clean config dirs enforcement
1039
+ // ---------------------------------------------------------------------------
1040
+
1041
+ /**
1042
+ * Enforce the manifest's `cleanConfigDirs` contract by creating empty
1043
+ * directories under the temp HOME directory.
1044
+ *
1045
+ * For each entry in `cleanConfigDirs`:
1046
+ * - `~/`-prefixed paths are resolved relative to the temp HOME dir and
1047
+ * created as empty directories. This ensures the command finds an empty
1048
+ * config directory instead of reading host config that might contain secrets.
1049
+ * - Absolute paths (not `~/`-prefixed) are skipped for v1 — they would
1050
+ * require filesystem-level isolation (bind mounts, overlayfs).
1051
+ */
1052
+ function enforceCleanConfigDirs(
1053
+ manifest: SecureCommandManifest,
1054
+ homeDir: string,
1055
+ ): void {
1056
+ const dirs = manifest.cleanConfigDirs;
1057
+ if (!dirs) return;
1058
+
1059
+ for (const dirPath of Object.keys(dirs)) {
1060
+ // Only handle ~/‑prefixed paths for v1
1061
+ if (dirPath.startsWith("~/")) {
1062
+ const relativePath = dirPath.slice(2); // strip "~/"
1063
+ const resolvedPath = resolve(homeDir, relativePath);
1064
+ // Containment check: resolved path must stay inside homeDir
1065
+ if (!resolvedPath.startsWith(homeDir + "/") && resolvedPath !== homeDir) {
1066
+ continue; // Skip paths that escape the home directory
1067
+ }
1068
+ mkdirSync(resolvedPath, { recursive: true });
1069
+ } else if (dirPath === "~") {
1070
+ // "~" alone is just the home dir itself, already created
1071
+ continue;
1072
+ }
1073
+ // Absolute paths are skipped — would require filesystem-level isolation
1074
+ }
1075
+ }
1076
+
773
1077
  // ---------------------------------------------------------------------------
774
1078
  // Internal: Command execution
775
1079
  // ---------------------------------------------------------------------------
@@ -795,11 +1099,14 @@ async function runCommand(
795
1099
  stderr: "pipe",
796
1100
  });
797
1101
 
798
- const exitCode = await proc.exited;
799
-
800
- // Capture stdout and stderr with size limits
801
- const stdoutRaw = await new Response(proc.stdout).text();
802
- const stderrRaw = await new Response(proc.stderr).text();
1102
+ // Consume stdout/stderr concurrently with waiting for exit to avoid
1103
+ // pipe buffer deadlocks when the command produces output exceeding the
1104
+ // OS pipe buffer size (~64KB).
1105
+ const [exitCode, stdoutRaw, stderrRaw] = await Promise.all([
1106
+ proc.exited,
1107
+ new Response(proc.stdout).text(),
1108
+ new Response(proc.stderr).text(),
1109
+ ]);
803
1110
 
804
1111
  const stdout = stdoutRaw.length > maxOutputBytes
805
1112
  ? stdoutRaw.slice(0, maxOutputBytes) + "\n[output truncated]"
@@ -823,7 +1130,7 @@ async function runCommand(
823
1130
  // Internal: Cleanup helpers
824
1131
  // ---------------------------------------------------------------------------
825
1132
 
826
- function cleanupAll(scratchDir: string, tempFilePath?: string): void {
1133
+ function cleanupAll(scratchDir: string, tempFilePath?: string, homeDir?: string): void {
827
1134
  // Clean up temp auth file
828
1135
  if (tempFilePath) {
829
1136
  try {
@@ -835,6 +1142,15 @@ function cleanupAll(scratchDir: string, tempFilePath?: string): void {
835
1142
  }
836
1143
  }
837
1144
 
1145
+ // Clean up per-execution HOME temp directory
1146
+ if (homeDir) {
1147
+ try {
1148
+ rmSync(homeDir, { recursive: true, force: true });
1149
+ } catch {
1150
+ // Best-effort cleanup
1151
+ }
1152
+ }
1153
+
838
1154
  // Clean up scratch directory
839
1155
  cleanupScratchDir(scratchDir);
840
1156
  }