@vellumai/cli 0.10.0-dev.202606222007.e9d01e2 → 0.10.0-dev.202606222239.7186c51

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 (738) hide show
  1. package/bun.lock +1 -1
  2. package/node_modules/@vellumai/local-mode/bun.lock +3 -0
  3. package/node_modules/@vellumai/local-mode/package.json +2 -1
  4. package/node_modules/@vellumai/local-mode/src/__tests__/package-boundary.test.ts +6 -6
  5. package/node_modules/@vellumai/local-mode/src/lockfile-contract.test.ts +93 -16
  6. package/node_modules/@vellumai/local-mode/src/lockfile-contract.ts +132 -90
  7. package/node_modules/@vellumai/local-mode/src/lockfile.test.ts +3 -1
  8. package/node_modules/@vellumai/local-mode/src/util.ts +4 -8
  9. package/node_modules/zod/LICENSE +21 -0
  10. package/node_modules/zod/README.md +191 -0
  11. package/node_modules/zod/index.cjs +33 -0
  12. package/node_modules/zod/index.d.cts +4 -0
  13. package/node_modules/zod/index.d.ts +4 -0
  14. package/node_modules/zod/index.js +4 -0
  15. package/node_modules/zod/locales/index.cjs +17 -0
  16. package/node_modules/zod/locales/index.d.cts +1 -0
  17. package/node_modules/zod/locales/index.d.ts +1 -0
  18. package/node_modules/zod/locales/index.js +1 -0
  19. package/node_modules/zod/locales/package.json +7 -0
  20. package/node_modules/zod/mini/index.cjs +32 -0
  21. package/node_modules/zod/mini/index.d.cts +3 -0
  22. package/node_modules/zod/mini/index.d.ts +3 -0
  23. package/node_modules/zod/mini/index.js +3 -0
  24. package/node_modules/zod/mini/package.json +7 -0
  25. package/node_modules/zod/package.json +135 -0
  26. package/node_modules/zod/src/index.ts +4 -0
  27. package/node_modules/zod/src/locales/index.ts +1 -0
  28. package/node_modules/zod/src/mini/index.ts +3 -0
  29. package/node_modules/zod/src/v3/ZodError.ts +330 -0
  30. package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
  31. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  32. package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
  33. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
  34. package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
  35. package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
  36. package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
  37. package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
  38. package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
  39. package/node_modules/zod/src/v3/errors.ts +13 -0
  40. package/node_modules/zod/src/v3/external.ts +6 -0
  41. package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
  42. package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
  43. package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
  44. package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
  45. package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
  46. package/node_modules/zod/src/v3/helpers/util.ts +224 -0
  47. package/node_modules/zod/src/v3/index.ts +4 -0
  48. package/node_modules/zod/src/v3/locales/en.ts +124 -0
  49. package/node_modules/zod/src/v3/standard-schema.ts +113 -0
  50. package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
  51. package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
  52. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
  53. package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
  54. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
  55. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
  56. package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
  57. package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
  58. package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
  59. package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
  60. package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
  61. package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
  62. package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
  63. package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
  64. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
  65. package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
  66. package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
  67. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
  68. package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
  69. package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
  70. package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
  71. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  72. package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
  73. package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
  74. package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
  75. package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
  76. package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
  77. package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
  78. package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
  79. package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
  80. package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
  81. package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
  82. package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
  83. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
  84. package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
  85. package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
  86. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
  87. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
  88. package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
  89. package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
  90. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
  91. package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
  92. package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
  93. package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
  94. package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
  95. package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
  96. package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
  97. package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
  98. package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
  99. package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
  100. package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
  101. package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
  102. package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
  103. package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
  104. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
  105. package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
  106. package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
  107. package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
  108. package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
  109. package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
  110. package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
  111. package/node_modules/zod/src/v3/types.ts +5138 -0
  112. package/node_modules/zod/src/v4/classic/checks.ts +32 -0
  113. package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
  114. package/node_modules/zod/src/v4/classic/compat.ts +70 -0
  115. package/node_modules/zod/src/v4/classic/errors.ts +82 -0
  116. package/node_modules/zod/src/v4/classic/external.ts +52 -0
  117. package/node_modules/zod/src/v4/classic/from-json-schema.ts +659 -0
  118. package/node_modules/zod/src/v4/classic/index.ts +5 -0
  119. package/node_modules/zod/src/v4/classic/iso.ts +90 -0
  120. package/node_modules/zod/src/v4/classic/parse.ts +82 -0
  121. package/node_modules/zod/src/v4/classic/schemas.ts +2672 -0
  122. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
  123. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
  124. package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
  125. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +216 -0
  126. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
  127. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
  128. package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
  129. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
  130. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
  131. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +326 -0
  132. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
  133. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
  134. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +703 -0
  135. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
  136. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
  137. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
  138. package/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
  139. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
  140. package/node_modules/zod/src/v4/classic/tests/default.test.ts +409 -0
  141. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
  142. package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
  143. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +197 -0
  144. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +694 -0
  145. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
  146. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +807 -0
  147. package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
  148. package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
  149. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
  150. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
  151. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +895 -0
  152. package/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
  153. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
  154. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +39 -0
  155. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
  156. package/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
  157. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
  158. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
  159. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +46 -0
  160. package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
  161. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
  162. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
  163. package/node_modules/zod/src/v4/classic/tests/locales_ka.test.ts +29 -0
  164. package/node_modules/zod/src/v4/classic/tests/locales_ro.test.ts +24 -0
  165. package/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
  166. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
  167. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
  168. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
  169. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
  170. package/node_modules/zod/src/v4/classic/tests/number.test.ts +325 -0
  171. package/node_modules/zod/src/v4/classic/tests/object.test.ts +717 -0
  172. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +333 -0
  173. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +450 -0
  174. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
  175. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
  176. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
  177. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +26 -0
  178. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +351 -0
  179. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
  180. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
  181. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
  182. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
  183. package/node_modules/zod/src/v4/classic/tests/record.test.ts +717 -0
  184. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +631 -0
  185. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +633 -0
  186. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
  187. package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
  188. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
  189. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
  190. package/node_modules/zod/src/v4/classic/tests/string.test.ts +1224 -0
  191. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
  192. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
  193. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
  194. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +3125 -0
  195. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +378 -0
  196. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +496 -0
  197. package/node_modules/zod/src/v4/classic/tests/union.test.ts +273 -0
  198. package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
  199. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
  200. package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
  201. package/node_modules/zod/src/v4/core/api.ts +1823 -0
  202. package/node_modules/zod/src/v4/core/checks.ts +1293 -0
  203. package/node_modules/zod/src/v4/core/config.ts +15 -0
  204. package/node_modules/zod/src/v4/core/core.ts +153 -0
  205. package/node_modules/zod/src/v4/core/doc.ts +44 -0
  206. package/node_modules/zod/src/v4/core/errors.ts +455 -0
  207. package/node_modules/zod/src/v4/core/index.ts +16 -0
  208. package/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
  209. package/node_modules/zod/src/v4/core/json-schema-processors.ts +666 -0
  210. package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
  211. package/node_modules/zod/src/v4/core/parse.ts +195 -0
  212. package/node_modules/zod/src/v4/core/regexes.ts +190 -0
  213. package/node_modules/zod/src/v4/core/registries.ts +105 -0
  214. package/node_modules/zod/src/v4/core/schemas.ts +4730 -0
  215. package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
  216. package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
  217. package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
  218. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
  219. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +215 -0
  220. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
  221. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
  222. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +72 -0
  223. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
  224. package/node_modules/zod/src/v4/core/tests/locales/hr.test.ts +163 -0
  225. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
  226. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
  227. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
  228. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +105 -0
  229. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +125 -0
  230. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
  231. package/node_modules/zod/src/v4/core/to-json-schema.ts +622 -0
  232. package/node_modules/zod/src/v4/core/util.ts +983 -0
  233. package/node_modules/zod/src/v4/core/versions.ts +5 -0
  234. package/node_modules/zod/src/v4/core/zsf.ts +323 -0
  235. package/node_modules/zod/src/v4/index.ts +4 -0
  236. package/node_modules/zod/src/v4/locales/ar.ts +115 -0
  237. package/node_modules/zod/src/v4/locales/az.ts +111 -0
  238. package/node_modules/zod/src/v4/locales/be.ts +176 -0
  239. package/node_modules/zod/src/v4/locales/bg.ts +128 -0
  240. package/node_modules/zod/src/v4/locales/ca.ts +116 -0
  241. package/node_modules/zod/src/v4/locales/cs.ts +118 -0
  242. package/node_modules/zod/src/v4/locales/da.ts +123 -0
  243. package/node_modules/zod/src/v4/locales/de.ts +116 -0
  244. package/node_modules/zod/src/v4/locales/el.ts +121 -0
  245. package/node_modules/zod/src/v4/locales/en.ts +123 -0
  246. package/node_modules/zod/src/v4/locales/eo.ts +118 -0
  247. package/node_modules/zod/src/v4/locales/es.ts +141 -0
  248. package/node_modules/zod/src/v4/locales/fa.ts +126 -0
  249. package/node_modules/zod/src/v4/locales/fi.ts +121 -0
  250. package/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
  251. package/node_modules/zod/src/v4/locales/fr.ts +132 -0
  252. package/node_modules/zod/src/v4/locales/he.ts +246 -0
  253. package/node_modules/zod/src/v4/locales/hr.ts +131 -0
  254. package/node_modules/zod/src/v4/locales/hu.ts +117 -0
  255. package/node_modules/zod/src/v4/locales/hy.ts +164 -0
  256. package/node_modules/zod/src/v4/locales/id.ts +115 -0
  257. package/node_modules/zod/src/v4/locales/index.ts +52 -0
  258. package/node_modules/zod/src/v4/locales/is.ts +119 -0
  259. package/node_modules/zod/src/v4/locales/it.ts +116 -0
  260. package/node_modules/zod/src/v4/locales/ja.ts +114 -0
  261. package/node_modules/zod/src/v4/locales/ka.ts +123 -0
  262. package/node_modules/zod/src/v4/locales/kh.ts +7 -0
  263. package/node_modules/zod/src/v4/locales/km.ts +119 -0
  264. package/node_modules/zod/src/v4/locales/ko.ts +121 -0
  265. package/node_modules/zod/src/v4/locales/lt.ts +239 -0
  266. package/node_modules/zod/src/v4/locales/mk.ts +118 -0
  267. package/node_modules/zod/src/v4/locales/ms.ts +115 -0
  268. package/node_modules/zod/src/v4/locales/nl.ts +121 -0
  269. package/node_modules/zod/src/v4/locales/no.ts +116 -0
  270. package/node_modules/zod/src/v4/locales/ota.ts +117 -0
  271. package/node_modules/zod/src/v4/locales/pl.ts +118 -0
  272. package/node_modules/zod/src/v4/locales/ps.ts +126 -0
  273. package/node_modules/zod/src/v4/locales/pt.ts +116 -0
  274. package/node_modules/zod/src/v4/locales/ro.ts +129 -0
  275. package/node_modules/zod/src/v4/locales/ru.ts +176 -0
  276. package/node_modules/zod/src/v4/locales/sl.ts +118 -0
  277. package/node_modules/zod/src/v4/locales/sv.ts +119 -0
  278. package/node_modules/zod/src/v4/locales/ta.ts +118 -0
  279. package/node_modules/zod/src/v4/locales/th.ts +119 -0
  280. package/node_modules/zod/src/v4/locales/tr.ts +111 -0
  281. package/node_modules/zod/src/v4/locales/ua.ts +7 -0
  282. package/node_modules/zod/src/v4/locales/uk.ts +117 -0
  283. package/node_modules/zod/src/v4/locales/ur.ts +119 -0
  284. package/node_modules/zod/src/v4/locales/uz.ts +117 -0
  285. package/node_modules/zod/src/v4/locales/vi.ts +117 -0
  286. package/node_modules/zod/src/v4/locales/yo.ts +124 -0
  287. package/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
  288. package/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
  289. package/node_modules/zod/src/v4/mini/checks.ts +32 -0
  290. package/node_modules/zod/src/v4/mini/coerce.ts +27 -0
  291. package/node_modules/zod/src/v4/mini/external.ts +41 -0
  292. package/node_modules/zod/src/v4/mini/index.ts +3 -0
  293. package/node_modules/zod/src/v4/mini/iso.ts +66 -0
  294. package/node_modules/zod/src/v4/mini/parse.ts +14 -0
  295. package/node_modules/zod/src/v4/mini/schemas.ts +1947 -0
  296. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
  297. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
  298. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
  299. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
  300. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +548 -0
  301. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
  302. package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
  303. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
  304. package/node_modules/zod/src/v4/mini/tests/index.test.ts +993 -0
  305. package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
  306. package/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
  307. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
  308. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +325 -0
  309. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
  310. package/node_modules/zod/src/v4/mini/tests/string.test.ts +352 -0
  311. package/node_modules/zod/src/v4-mini/index.ts +3 -0
  312. package/node_modules/zod/v3/ZodError.cjs +138 -0
  313. package/node_modules/zod/v3/ZodError.d.cts +164 -0
  314. package/node_modules/zod/v3/ZodError.d.ts +164 -0
  315. package/node_modules/zod/v3/ZodError.js +133 -0
  316. package/node_modules/zod/v3/errors.cjs +17 -0
  317. package/node_modules/zod/v3/errors.d.cts +5 -0
  318. package/node_modules/zod/v3/errors.d.ts +5 -0
  319. package/node_modules/zod/v3/errors.js +9 -0
  320. package/node_modules/zod/v3/external.cjs +22 -0
  321. package/node_modules/zod/v3/external.d.cts +6 -0
  322. package/node_modules/zod/v3/external.d.ts +6 -0
  323. package/node_modules/zod/v3/external.js +6 -0
  324. package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
  325. package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
  326. package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
  327. package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
  328. package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
  329. package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
  330. package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
  331. package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  332. package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
  333. package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
  334. package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
  335. package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  336. package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
  337. package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
  338. package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
  339. package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
  340. package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
  341. package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
  342. package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
  343. package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  344. package/node_modules/zod/v3/helpers/util.cjs +137 -0
  345. package/node_modules/zod/v3/helpers/util.d.cts +85 -0
  346. package/node_modules/zod/v3/helpers/util.d.ts +85 -0
  347. package/node_modules/zod/v3/helpers/util.js +133 -0
  348. package/node_modules/zod/v3/index.cjs +33 -0
  349. package/node_modules/zod/v3/index.d.cts +4 -0
  350. package/node_modules/zod/v3/index.d.ts +4 -0
  351. package/node_modules/zod/v3/index.js +4 -0
  352. package/node_modules/zod/v3/locales/en.cjs +112 -0
  353. package/node_modules/zod/v3/locales/en.d.cts +3 -0
  354. package/node_modules/zod/v3/locales/en.d.ts +3 -0
  355. package/node_modules/zod/v3/locales/en.js +109 -0
  356. package/node_modules/zod/v3/package.json +7 -0
  357. package/node_modules/zod/v3/standard-schema.cjs +2 -0
  358. package/node_modules/zod/v3/standard-schema.d.cts +102 -0
  359. package/node_modules/zod/v3/standard-schema.d.ts +102 -0
  360. package/node_modules/zod/v3/standard-schema.js +1 -0
  361. package/node_modules/zod/v3/types.cjs +3777 -0
  362. package/node_modules/zod/v3/types.d.cts +1034 -0
  363. package/node_modules/zod/v3/types.d.ts +1034 -0
  364. package/node_modules/zod/v3/types.js +3695 -0
  365. package/node_modules/zod/v4/classic/checks.cjs +33 -0
  366. package/node_modules/zod/v4/classic/checks.d.cts +1 -0
  367. package/node_modules/zod/v4/classic/checks.d.ts +1 -0
  368. package/node_modules/zod/v4/classic/checks.js +1 -0
  369. package/node_modules/zod/v4/classic/coerce.cjs +47 -0
  370. package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
  371. package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
  372. package/node_modules/zod/v4/classic/coerce.js +17 -0
  373. package/node_modules/zod/v4/classic/compat.cjs +61 -0
  374. package/node_modules/zod/v4/classic/compat.d.cts +50 -0
  375. package/node_modules/zod/v4/classic/compat.d.ts +50 -0
  376. package/node_modules/zod/v4/classic/compat.js +31 -0
  377. package/node_modules/zod/v4/classic/errors.cjs +74 -0
  378. package/node_modules/zod/v4/classic/errors.d.cts +30 -0
  379. package/node_modules/zod/v4/classic/errors.d.ts +30 -0
  380. package/node_modules/zod/v4/classic/errors.js +48 -0
  381. package/node_modules/zod/v4/classic/external.cjs +73 -0
  382. package/node_modules/zod/v4/classic/external.d.cts +16 -0
  383. package/node_modules/zod/v4/classic/external.d.ts +16 -0
  384. package/node_modules/zod/v4/classic/external.js +20 -0
  385. package/node_modules/zod/v4/classic/from-json-schema.cjs +625 -0
  386. package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
  387. package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
  388. package/node_modules/zod/v4/classic/from-json-schema.js +599 -0
  389. package/node_modules/zod/v4/classic/index.cjs +33 -0
  390. package/node_modules/zod/v4/classic/index.d.cts +4 -0
  391. package/node_modules/zod/v4/classic/index.d.ts +4 -0
  392. package/node_modules/zod/v4/classic/index.js +4 -0
  393. package/node_modules/zod/v4/classic/iso.cjs +60 -0
  394. package/node_modules/zod/v4/classic/iso.d.cts +22 -0
  395. package/node_modules/zod/v4/classic/iso.d.ts +22 -0
  396. package/node_modules/zod/v4/classic/iso.js +30 -0
  397. package/node_modules/zod/v4/classic/package.json +7 -0
  398. package/node_modules/zod/v4/classic/parse.cjs +41 -0
  399. package/node_modules/zod/v4/classic/parse.d.cts +31 -0
  400. package/node_modules/zod/v4/classic/parse.d.ts +31 -0
  401. package/node_modules/zod/v4/classic/parse.js +15 -0
  402. package/node_modules/zod/v4/classic/schemas.cjs +1511 -0
  403. package/node_modules/zod/v4/classic/schemas.d.cts +767 -0
  404. package/node_modules/zod/v4/classic/schemas.d.ts +767 -0
  405. package/node_modules/zod/v4/classic/schemas.js +1395 -0
  406. package/node_modules/zod/v4/core/api.cjs +1227 -0
  407. package/node_modules/zod/v4/core/api.d.cts +325 -0
  408. package/node_modules/zod/v4/core/api.d.ts +325 -0
  409. package/node_modules/zod/v4/core/api.js +1087 -0
  410. package/node_modules/zod/v4/core/checks.cjs +601 -0
  411. package/node_modules/zod/v4/core/checks.d.cts +278 -0
  412. package/node_modules/zod/v4/core/checks.d.ts +278 -0
  413. package/node_modules/zod/v4/core/checks.js +575 -0
  414. package/node_modules/zod/v4/core/core.cjs +85 -0
  415. package/node_modules/zod/v4/core/core.d.cts +70 -0
  416. package/node_modules/zod/v4/core/core.d.ts +70 -0
  417. package/node_modules/zod/v4/core/core.js +78 -0
  418. package/node_modules/zod/v4/core/doc.cjs +39 -0
  419. package/node_modules/zod/v4/core/doc.d.cts +14 -0
  420. package/node_modules/zod/v4/core/doc.d.ts +14 -0
  421. package/node_modules/zod/v4/core/doc.js +35 -0
  422. package/node_modules/zod/v4/core/errors.cjs +216 -0
  423. package/node_modules/zod/v4/core/errors.d.cts +221 -0
  424. package/node_modules/zod/v4/core/errors.d.ts +221 -0
  425. package/node_modules/zod/v4/core/errors.js +185 -0
  426. package/node_modules/zod/v4/core/index.cjs +47 -0
  427. package/node_modules/zod/v4/core/index.d.cts +16 -0
  428. package/node_modules/zod/v4/core/index.d.ts +16 -0
  429. package/node_modules/zod/v4/core/index.js +16 -0
  430. package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
  431. package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
  432. package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
  433. package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
  434. package/node_modules/zod/v4/core/json-schema-processors.cjs +644 -0
  435. package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
  436. package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
  437. package/node_modules/zod/v4/core/json-schema-processors.js +601 -0
  438. package/node_modules/zod/v4/core/json-schema.cjs +2 -0
  439. package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
  440. package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
  441. package/node_modules/zod/v4/core/json-schema.js +1 -0
  442. package/node_modules/zod/v4/core/package.json +7 -0
  443. package/node_modules/zod/v4/core/parse.cjs +131 -0
  444. package/node_modules/zod/v4/core/parse.d.cts +49 -0
  445. package/node_modules/zod/v4/core/parse.d.ts +49 -0
  446. package/node_modules/zod/v4/core/parse.js +93 -0
  447. package/node_modules/zod/v4/core/regexes.cjs +172 -0
  448. package/node_modules/zod/v4/core/regexes.d.cts +85 -0
  449. package/node_modules/zod/v4/core/regexes.d.ts +85 -0
  450. package/node_modules/zod/v4/core/regexes.js +139 -0
  451. package/node_modules/zod/v4/core/registries.cjs +56 -0
  452. package/node_modules/zod/v4/core/registries.d.cts +35 -0
  453. package/node_modules/zod/v4/core/registries.d.ts +35 -0
  454. package/node_modules/zod/v4/core/registries.js +51 -0
  455. package/node_modules/zod/v4/core/schemas.cjs +2270 -0
  456. package/node_modules/zod/v4/core/schemas.d.cts +1184 -0
  457. package/node_modules/zod/v4/core/schemas.d.ts +1184 -0
  458. package/node_modules/zod/v4/core/schemas.js +2239 -0
  459. package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
  460. package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
  461. package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
  462. package/node_modules/zod/v4/core/standard-schema.js +1 -0
  463. package/node_modules/zod/v4/core/to-json-schema.cjs +457 -0
  464. package/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
  465. package/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
  466. package/node_modules/zod/v4/core/to-json-schema.js +448 -0
  467. package/node_modules/zod/v4/core/util.cjs +734 -0
  468. package/node_modules/zod/v4/core/util.d.cts +200 -0
  469. package/node_modules/zod/v4/core/util.d.ts +200 -0
  470. package/node_modules/zod/v4/core/util.js +674 -0
  471. package/node_modules/zod/v4/core/versions.cjs +8 -0
  472. package/node_modules/zod/v4/core/versions.d.cts +5 -0
  473. package/node_modules/zod/v4/core/versions.d.ts +5 -0
  474. package/node_modules/zod/v4/core/versions.js +5 -0
  475. package/node_modules/zod/v4/index.cjs +22 -0
  476. package/node_modules/zod/v4/index.d.cts +3 -0
  477. package/node_modules/zod/v4/index.d.ts +3 -0
  478. package/node_modules/zod/v4/index.js +3 -0
  479. package/node_modules/zod/v4/locales/ar.cjs +133 -0
  480. package/node_modules/zod/v4/locales/ar.d.cts +5 -0
  481. package/node_modules/zod/v4/locales/ar.d.ts +4 -0
  482. package/node_modules/zod/v4/locales/ar.js +106 -0
  483. package/node_modules/zod/v4/locales/az.cjs +132 -0
  484. package/node_modules/zod/v4/locales/az.d.cts +5 -0
  485. package/node_modules/zod/v4/locales/az.d.ts +4 -0
  486. package/node_modules/zod/v4/locales/az.js +105 -0
  487. package/node_modules/zod/v4/locales/be.cjs +183 -0
  488. package/node_modules/zod/v4/locales/be.d.cts +5 -0
  489. package/node_modules/zod/v4/locales/be.d.ts +4 -0
  490. package/node_modules/zod/v4/locales/be.js +156 -0
  491. package/node_modules/zod/v4/locales/bg.cjs +147 -0
  492. package/node_modules/zod/v4/locales/bg.d.cts +5 -0
  493. package/node_modules/zod/v4/locales/bg.d.ts +4 -0
  494. package/node_modules/zod/v4/locales/bg.js +120 -0
  495. package/node_modules/zod/v4/locales/ca.cjs +134 -0
  496. package/node_modules/zod/v4/locales/ca.d.cts +5 -0
  497. package/node_modules/zod/v4/locales/ca.d.ts +4 -0
  498. package/node_modules/zod/v4/locales/ca.js +107 -0
  499. package/node_modules/zod/v4/locales/cs.cjs +138 -0
  500. package/node_modules/zod/v4/locales/cs.d.cts +5 -0
  501. package/node_modules/zod/v4/locales/cs.d.ts +4 -0
  502. package/node_modules/zod/v4/locales/cs.js +111 -0
  503. package/node_modules/zod/v4/locales/da.cjs +142 -0
  504. package/node_modules/zod/v4/locales/da.d.cts +5 -0
  505. package/node_modules/zod/v4/locales/da.d.ts +4 -0
  506. package/node_modules/zod/v4/locales/da.js +115 -0
  507. package/node_modules/zod/v4/locales/de.cjs +135 -0
  508. package/node_modules/zod/v4/locales/de.d.cts +5 -0
  509. package/node_modules/zod/v4/locales/de.d.ts +4 -0
  510. package/node_modules/zod/v4/locales/de.js +108 -0
  511. package/node_modules/zod/v4/locales/el.cjs +136 -0
  512. package/node_modules/zod/v4/locales/el.d.cts +5 -0
  513. package/node_modules/zod/v4/locales/el.d.ts +4 -0
  514. package/node_modules/zod/v4/locales/el.js +109 -0
  515. package/node_modules/zod/v4/locales/en.cjs +140 -0
  516. package/node_modules/zod/v4/locales/en.d.cts +5 -0
  517. package/node_modules/zod/v4/locales/en.d.ts +4 -0
  518. package/node_modules/zod/v4/locales/en.js +113 -0
  519. package/node_modules/zod/v4/locales/eo.cjs +136 -0
  520. package/node_modules/zod/v4/locales/eo.d.cts +5 -0
  521. package/node_modules/zod/v4/locales/eo.d.ts +4 -0
  522. package/node_modules/zod/v4/locales/eo.js +109 -0
  523. package/node_modules/zod/v4/locales/es.cjs +159 -0
  524. package/node_modules/zod/v4/locales/es.d.cts +5 -0
  525. package/node_modules/zod/v4/locales/es.d.ts +4 -0
  526. package/node_modules/zod/v4/locales/es.js +132 -0
  527. package/node_modules/zod/v4/locales/fa.cjs +141 -0
  528. package/node_modules/zod/v4/locales/fa.d.cts +5 -0
  529. package/node_modules/zod/v4/locales/fa.d.ts +4 -0
  530. package/node_modules/zod/v4/locales/fa.js +114 -0
  531. package/node_modules/zod/v4/locales/fi.cjs +139 -0
  532. package/node_modules/zod/v4/locales/fi.d.cts +5 -0
  533. package/node_modules/zod/v4/locales/fi.d.ts +4 -0
  534. package/node_modules/zod/v4/locales/fi.js +112 -0
  535. package/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
  536. package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
  537. package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
  538. package/node_modules/zod/v4/locales/fr-CA.js +107 -0
  539. package/node_modules/zod/v4/locales/fr.cjs +152 -0
  540. package/node_modules/zod/v4/locales/fr.d.cts +5 -0
  541. package/node_modules/zod/v4/locales/fr.d.ts +4 -0
  542. package/node_modules/zod/v4/locales/fr.js +125 -0
  543. package/node_modules/zod/v4/locales/he.cjs +241 -0
  544. package/node_modules/zod/v4/locales/he.d.cts +5 -0
  545. package/node_modules/zod/v4/locales/he.d.ts +4 -0
  546. package/node_modules/zod/v4/locales/he.js +214 -0
  547. package/node_modules/zod/v4/locales/hr.cjs +149 -0
  548. package/node_modules/zod/v4/locales/hr.d.cts +5 -0
  549. package/node_modules/zod/v4/locales/hr.d.ts +4 -0
  550. package/node_modules/zod/v4/locales/hr.js +122 -0
  551. package/node_modules/zod/v4/locales/hu.cjs +135 -0
  552. package/node_modules/zod/v4/locales/hu.d.cts +5 -0
  553. package/node_modules/zod/v4/locales/hu.d.ts +4 -0
  554. package/node_modules/zod/v4/locales/hu.js +108 -0
  555. package/node_modules/zod/v4/locales/hy.cjs +174 -0
  556. package/node_modules/zod/v4/locales/hy.d.cts +5 -0
  557. package/node_modules/zod/v4/locales/hy.d.ts +4 -0
  558. package/node_modules/zod/v4/locales/hy.js +147 -0
  559. package/node_modules/zod/v4/locales/id.cjs +133 -0
  560. package/node_modules/zod/v4/locales/id.d.cts +5 -0
  561. package/node_modules/zod/v4/locales/id.d.ts +4 -0
  562. package/node_modules/zod/v4/locales/id.js +106 -0
  563. package/node_modules/zod/v4/locales/index.cjs +111 -0
  564. package/node_modules/zod/v4/locales/index.d.cts +52 -0
  565. package/node_modules/zod/v4/locales/index.d.ts +52 -0
  566. package/node_modules/zod/v4/locales/index.js +52 -0
  567. package/node_modules/zod/v4/locales/is.cjs +136 -0
  568. package/node_modules/zod/v4/locales/is.d.cts +5 -0
  569. package/node_modules/zod/v4/locales/is.d.ts +4 -0
  570. package/node_modules/zod/v4/locales/is.js +109 -0
  571. package/node_modules/zod/v4/locales/it.cjs +135 -0
  572. package/node_modules/zod/v4/locales/it.d.cts +5 -0
  573. package/node_modules/zod/v4/locales/it.d.ts +4 -0
  574. package/node_modules/zod/v4/locales/it.js +108 -0
  575. package/node_modules/zod/v4/locales/ja.cjs +134 -0
  576. package/node_modules/zod/v4/locales/ja.d.cts +5 -0
  577. package/node_modules/zod/v4/locales/ja.d.ts +4 -0
  578. package/node_modules/zod/v4/locales/ja.js +107 -0
  579. package/node_modules/zod/v4/locales/ka.cjs +139 -0
  580. package/node_modules/zod/v4/locales/ka.d.cts +5 -0
  581. package/node_modules/zod/v4/locales/ka.d.ts +4 -0
  582. package/node_modules/zod/v4/locales/ka.js +112 -0
  583. package/node_modules/zod/v4/locales/kh.cjs +12 -0
  584. package/node_modules/zod/v4/locales/kh.d.cts +5 -0
  585. package/node_modules/zod/v4/locales/kh.d.ts +5 -0
  586. package/node_modules/zod/v4/locales/kh.js +5 -0
  587. package/node_modules/zod/v4/locales/km.cjs +137 -0
  588. package/node_modules/zod/v4/locales/km.d.cts +5 -0
  589. package/node_modules/zod/v4/locales/km.d.ts +4 -0
  590. package/node_modules/zod/v4/locales/km.js +110 -0
  591. package/node_modules/zod/v4/locales/ko.cjs +138 -0
  592. package/node_modules/zod/v4/locales/ko.d.cts +5 -0
  593. package/node_modules/zod/v4/locales/ko.d.ts +4 -0
  594. package/node_modules/zod/v4/locales/ko.js +111 -0
  595. package/node_modules/zod/v4/locales/lt.cjs +230 -0
  596. package/node_modules/zod/v4/locales/lt.d.cts +5 -0
  597. package/node_modules/zod/v4/locales/lt.d.ts +4 -0
  598. package/node_modules/zod/v4/locales/lt.js +203 -0
  599. package/node_modules/zod/v4/locales/mk.cjs +136 -0
  600. package/node_modules/zod/v4/locales/mk.d.cts +5 -0
  601. package/node_modules/zod/v4/locales/mk.d.ts +4 -0
  602. package/node_modules/zod/v4/locales/mk.js +109 -0
  603. package/node_modules/zod/v4/locales/ms.cjs +134 -0
  604. package/node_modules/zod/v4/locales/ms.d.cts +5 -0
  605. package/node_modules/zod/v4/locales/ms.d.ts +4 -0
  606. package/node_modules/zod/v4/locales/ms.js +107 -0
  607. package/node_modules/zod/v4/locales/nl.cjs +137 -0
  608. package/node_modules/zod/v4/locales/nl.d.cts +5 -0
  609. package/node_modules/zod/v4/locales/nl.d.ts +4 -0
  610. package/node_modules/zod/v4/locales/nl.js +110 -0
  611. package/node_modules/zod/v4/locales/no.cjs +135 -0
  612. package/node_modules/zod/v4/locales/no.d.cts +5 -0
  613. package/node_modules/zod/v4/locales/no.d.ts +4 -0
  614. package/node_modules/zod/v4/locales/no.js +108 -0
  615. package/node_modules/zod/v4/locales/ota.cjs +136 -0
  616. package/node_modules/zod/v4/locales/ota.d.cts +5 -0
  617. package/node_modules/zod/v4/locales/ota.d.ts +4 -0
  618. package/node_modules/zod/v4/locales/ota.js +109 -0
  619. package/node_modules/zod/v4/locales/package.json +7 -0
  620. package/node_modules/zod/v4/locales/pl.cjs +136 -0
  621. package/node_modules/zod/v4/locales/pl.d.cts +5 -0
  622. package/node_modules/zod/v4/locales/pl.d.ts +4 -0
  623. package/node_modules/zod/v4/locales/pl.js +109 -0
  624. package/node_modules/zod/v4/locales/ps.cjs +141 -0
  625. package/node_modules/zod/v4/locales/ps.d.cts +5 -0
  626. package/node_modules/zod/v4/locales/ps.d.ts +4 -0
  627. package/node_modules/zod/v4/locales/ps.js +114 -0
  628. package/node_modules/zod/v4/locales/pt.cjs +135 -0
  629. package/node_modules/zod/v4/locales/pt.d.cts +5 -0
  630. package/node_modules/zod/v4/locales/pt.d.ts +4 -0
  631. package/node_modules/zod/v4/locales/pt.js +108 -0
  632. package/node_modules/zod/v4/locales/ro.cjs +146 -0
  633. package/node_modules/zod/v4/locales/ro.d.cts +5 -0
  634. package/node_modules/zod/v4/locales/ro.d.ts +4 -0
  635. package/node_modules/zod/v4/locales/ro.js +119 -0
  636. package/node_modules/zod/v4/locales/ru.cjs +183 -0
  637. package/node_modules/zod/v4/locales/ru.d.cts +5 -0
  638. package/node_modules/zod/v4/locales/ru.d.ts +4 -0
  639. package/node_modules/zod/v4/locales/ru.js +156 -0
  640. package/node_modules/zod/v4/locales/sl.cjs +136 -0
  641. package/node_modules/zod/v4/locales/sl.d.cts +5 -0
  642. package/node_modules/zod/v4/locales/sl.d.ts +4 -0
  643. package/node_modules/zod/v4/locales/sl.js +109 -0
  644. package/node_modules/zod/v4/locales/sv.cjs +137 -0
  645. package/node_modules/zod/v4/locales/sv.d.cts +5 -0
  646. package/node_modules/zod/v4/locales/sv.d.ts +4 -0
  647. package/node_modules/zod/v4/locales/sv.js +110 -0
  648. package/node_modules/zod/v4/locales/ta.cjs +137 -0
  649. package/node_modules/zod/v4/locales/ta.d.cts +5 -0
  650. package/node_modules/zod/v4/locales/ta.d.ts +4 -0
  651. package/node_modules/zod/v4/locales/ta.js +110 -0
  652. package/node_modules/zod/v4/locales/th.cjs +137 -0
  653. package/node_modules/zod/v4/locales/th.d.cts +5 -0
  654. package/node_modules/zod/v4/locales/th.d.ts +4 -0
  655. package/node_modules/zod/v4/locales/th.js +110 -0
  656. package/node_modules/zod/v4/locales/tr.cjs +132 -0
  657. package/node_modules/zod/v4/locales/tr.d.cts +5 -0
  658. package/node_modules/zod/v4/locales/tr.d.ts +4 -0
  659. package/node_modules/zod/v4/locales/tr.js +105 -0
  660. package/node_modules/zod/v4/locales/ua.cjs +12 -0
  661. package/node_modules/zod/v4/locales/ua.d.cts +5 -0
  662. package/node_modules/zod/v4/locales/ua.d.ts +5 -0
  663. package/node_modules/zod/v4/locales/ua.js +5 -0
  664. package/node_modules/zod/v4/locales/uk.cjs +135 -0
  665. package/node_modules/zod/v4/locales/uk.d.cts +5 -0
  666. package/node_modules/zod/v4/locales/uk.d.ts +4 -0
  667. package/node_modules/zod/v4/locales/uk.js +108 -0
  668. package/node_modules/zod/v4/locales/ur.cjs +137 -0
  669. package/node_modules/zod/v4/locales/ur.d.cts +5 -0
  670. package/node_modules/zod/v4/locales/ur.d.ts +4 -0
  671. package/node_modules/zod/v4/locales/ur.js +110 -0
  672. package/node_modules/zod/v4/locales/uz.cjs +137 -0
  673. package/node_modules/zod/v4/locales/uz.d.cts +5 -0
  674. package/node_modules/zod/v4/locales/uz.d.ts +4 -0
  675. package/node_modules/zod/v4/locales/uz.js +110 -0
  676. package/node_modules/zod/v4/locales/vi.cjs +135 -0
  677. package/node_modules/zod/v4/locales/vi.d.cts +5 -0
  678. package/node_modules/zod/v4/locales/vi.d.ts +4 -0
  679. package/node_modules/zod/v4/locales/vi.js +108 -0
  680. package/node_modules/zod/v4/locales/yo.cjs +134 -0
  681. package/node_modules/zod/v4/locales/yo.d.cts +5 -0
  682. package/node_modules/zod/v4/locales/yo.d.ts +4 -0
  683. package/node_modules/zod/v4/locales/yo.js +107 -0
  684. package/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
  685. package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
  686. package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
  687. package/node_modules/zod/v4/locales/zh-CN.js +109 -0
  688. package/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
  689. package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
  690. package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
  691. package/node_modules/zod/v4/locales/zh-TW.js +107 -0
  692. package/node_modules/zod/v4/mini/checks.cjs +34 -0
  693. package/node_modules/zod/v4/mini/checks.d.cts +1 -0
  694. package/node_modules/zod/v4/mini/checks.d.ts +1 -0
  695. package/node_modules/zod/v4/mini/checks.js +1 -0
  696. package/node_modules/zod/v4/mini/coerce.cjs +52 -0
  697. package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
  698. package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
  699. package/node_modules/zod/v4/mini/coerce.js +22 -0
  700. package/node_modules/zod/v4/mini/external.cjs +63 -0
  701. package/node_modules/zod/v4/mini/external.d.cts +13 -0
  702. package/node_modules/zod/v4/mini/external.d.ts +13 -0
  703. package/node_modules/zod/v4/mini/external.js +14 -0
  704. package/node_modules/zod/v4/mini/index.cjs +32 -0
  705. package/node_modules/zod/v4/mini/index.d.cts +3 -0
  706. package/node_modules/zod/v4/mini/index.d.ts +3 -0
  707. package/node_modules/zod/v4/mini/index.js +3 -0
  708. package/node_modules/zod/v4/mini/iso.cjs +64 -0
  709. package/node_modules/zod/v4/mini/iso.d.cts +22 -0
  710. package/node_modules/zod/v4/mini/iso.d.ts +22 -0
  711. package/node_modules/zod/v4/mini/iso.js +34 -0
  712. package/node_modules/zod/v4/mini/package.json +7 -0
  713. package/node_modules/zod/v4/mini/parse.cjs +16 -0
  714. package/node_modules/zod/v4/mini/parse.d.cts +1 -0
  715. package/node_modules/zod/v4/mini/parse.d.ts +1 -0
  716. package/node_modules/zod/v4/mini/parse.js +1 -0
  717. package/node_modules/zod/v4/mini/schemas.cjs +1083 -0
  718. package/node_modules/zod/v4/mini/schemas.d.cts +445 -0
  719. package/node_modules/zod/v4/mini/schemas.d.ts +445 -0
  720. package/node_modules/zod/v4/mini/schemas.js +961 -0
  721. package/node_modules/zod/v4/package.json +7 -0
  722. package/node_modules/zod/v4-mini/index.cjs +32 -0
  723. package/node_modules/zod/v4-mini/index.d.cts +3 -0
  724. package/node_modules/zod/v4-mini/index.d.ts +3 -0
  725. package/node_modules/zod/v4-mini/index.js +3 -0
  726. package/node_modules/zod/v4-mini/package.json +7 -0
  727. package/package.json +1 -1
  728. package/src/commands/exec.ts +2 -2
  729. package/src/commands/logs.ts +1 -2
  730. package/src/commands/ps.ts +1 -2
  731. package/src/commands/retire.ts +1 -2
  732. package/src/commands/rollback.ts +1 -2
  733. package/src/commands/ssh.ts +1 -2
  734. package/src/commands/teleport.ts +6 -7
  735. package/src/commands/upgrade.ts +1 -2
  736. package/src/lib/assistant-config.ts +52 -48
  737. package/src/lib/terminal-session.ts +2 -2
  738. package/src/shared/provider-env-vars.ts +1 -0
package/bun.lock CHANGED
@@ -398,7 +398,7 @@
398
398
 
399
399
  "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
400
400
 
401
- "@vellumai/local-mode/@vellumai/environments": ["@vellumai/environments@file:../packages/environments", {}],
401
+ "@vellumai/local-mode/@vellumai/environments": ["@vellumai/environments@file:../packages/environments", { "devDependencies": { "@types/bun": "1.3.11", "typescript": "5.9.3" } }],
402
402
 
403
403
  "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
404
404
 
@@ -6,6 +6,7 @@
6
6
  "name": "@vellumai/local-mode",
7
7
  "dependencies": {
8
8
  "@vellumai/environments": "file:../environments",
9
+ "zod": "4.3.6",
9
10
  },
10
11
  "devDependencies": {
11
12
  "@types/bun": "1.3.11",
@@ -25,5 +26,7 @@
25
26
  "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
26
27
 
27
28
  "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="],
29
+
30
+ "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="],
28
31
  }
29
32
  }
@@ -13,7 +13,8 @@
13
13
  "test": "bun test src/"
14
14
  },
15
15
  "dependencies": {
16
- "@vellumai/environments": "file:../environments"
16
+ "@vellumai/environments": "file:../environments",
17
+ "zod": "4.3.6"
17
18
  },
18
19
  "devDependencies": {
19
20
  "@types/bun": "1.3.11",
@@ -6,10 +6,9 @@
6
6
  * uses node builtins for filesystem, child-process, and network work.
7
7
  *
8
8
  * Enforces that the package:
9
- * 1. Imports only node builtins, its own relative modules, and
10
- * `@vellumai/environments` no other `@vellumai/*` packages and no
11
- * third-party runtime imports (so any bundler host can inline it).
12
- * 2. Declares exactly one runtime dependency: `@vellumai/environments`.
9
+ * 1. Imports only node builtins, its own relative modules, `@vellumai/environments`,
10
+ * and `zod` (the lockfile contract's schema library) nothing else.
11
+ * 2. Declares exactly those two runtime dependencies.
13
12
  * 3. Is marked `private`.
14
13
  */
15
14
 
@@ -20,7 +19,7 @@ import { join, resolve } from "node:path";
20
19
  const PACKAGE_ROOT = resolve(import.meta.dirname, "../..");
21
20
  const SRC_DIR = join(PACKAGE_ROOT, "src");
22
21
 
23
- const ALLOWED_PACKAGES = new Set(["@vellumai/environments"]);
22
+ const ALLOWED_PACKAGES = new Set(["@vellumai/environments", "zod"]);
24
23
 
25
24
  function collectSourceFiles(dir: string): string[] {
26
25
  const files: string[] = [];
@@ -92,13 +91,14 @@ describe("package boundary", () => {
92
91
  }
93
92
  });
94
93
 
95
- test("package.json declares it as private with only the @vellumai/environments dependency", () => {
94
+ test("package.json declares it as private with only its environments and zod dependencies", () => {
96
95
  const pkg = JSON.parse(
97
96
  readFileSync(join(PACKAGE_ROOT, "package.json"), "utf-8"),
98
97
  );
99
98
  expect(pkg.private).toBe(true);
100
99
  expect(pkg.dependencies ?? {}).toEqual({
101
100
  "@vellumai/environments": "file:../environments",
101
+ zod: "4.3.6",
102
102
  });
103
103
  });
104
104
  });
@@ -1,6 +1,12 @@
1
1
  import { describe, expect, test } from "bun:test";
2
2
 
3
- import { parseLockfile, type Lockfile } from "./lockfile-contract";
3
+ import {
4
+ KNOWN_CLOUDS,
5
+ parseLockfile,
6
+ resolveCloud,
7
+ SENSITIVE_KEYS,
8
+ type Lockfile,
9
+ } from "./lockfile-contract";
4
10
 
5
11
  describe("parseLockfile", () => {
6
12
  test("passes through a fully-populated lockfile", () => {
@@ -42,24 +48,28 @@ describe("parseLockfile", () => {
42
48
 
43
49
  test("salvages a legacy entry that has only an assistantId", () => {
44
50
  // The oldest persisted entries carry just the identity; the CLI fills the
45
- // rest in lazily. assistantId is the only required field, so the entry
46
- // must survive intact rather than being discarded.
51
+ // rest in lazily. assistantId is the only required field, so the entry must
52
+ // survive normalized to the default `local` cloud.
47
53
  const parsed = parseLockfile({
48
54
  activeAssistant: "asst_1",
49
55
  assistants: [{ assistantId: "asst_1" }],
50
56
  });
51
- expect(parsed.assistants).toEqual([{ assistantId: "asst_1" }]);
57
+ expect(parsed.assistants).toEqual([
58
+ { assistantId: "asst_1", cloud: "local" },
59
+ ]);
52
60
  });
53
61
 
54
62
  test("salvages an entry whose cloud and runtimeUrl are absent", () => {
55
63
  // Older CLI builds predate the `cloud` field and persisted the runtime URL
56
64
  // under a different key (`localUrl`), so a real on-disk entry can lack both
57
- // modeled fields. It must still be returned (the macOS↔CLI skew window).
65
+ // modeled fields. It must still be returned, normalized to `local`.
58
66
  const parsed = parseLockfile({
59
67
  activeAssistant: null,
60
68
  assistants: [{ assistantId: "asst_1", localUrl: "http://127.0.0.1:7777" }],
61
69
  });
62
- expect(parsed.assistants).toEqual([{ assistantId: "asst_1" }]);
70
+ expect(parsed.assistants).toEqual([
71
+ { assistantId: "asst_1", cloud: "local" },
72
+ ]);
63
73
  });
64
74
 
65
75
  test("drops malformed entries but salvages valid siblings", () => {
@@ -111,7 +121,9 @@ describe("parseLockfile", () => {
111
121
  });
112
122
 
113
123
  test("coerces a non-string activeAssistant to null", () => {
114
- expect(parseLockfile({ assistants: [], activeAssistant: 7 }).activeAssistant).toBeNull();
124
+ expect(
125
+ parseLockfile({ assistants: [], activeAssistant: 7 }).activeAssistant,
126
+ ).toBeNull();
115
127
  expect(parseLockfile({ assistants: [] }).activeAssistant).toBeNull();
116
128
  });
117
129
 
@@ -124,9 +136,9 @@ describe("parseLockfile", () => {
124
136
  });
125
137
 
126
138
  test("drops a mistyped optional field but keeps the entry", () => {
127
- // assistantId is the only required field. A mistyped optional field (here
128
- // cloud / runtimeUrl) is dropped from the result, but the entry survives on
129
- // the strength of its identity rather than being discarded wholesale.
139
+ // assistantId is the only required field. A mistyped optional field is
140
+ // dropped from the result, but the entry survives on the strength of its
141
+ // identity. (A mistyped `cloud` is dropped, then re-normalized to `local`.)
130
142
  const raw = {
131
143
  assistants: [
132
144
  { assistantId: "asst_1", cloud: 7, runtimeUrl: "http://a" }, // cloud not a string
@@ -135,7 +147,7 @@ describe("parseLockfile", () => {
135
147
  activeAssistant: null,
136
148
  };
137
149
  expect(parseLockfile(raw).assistants).toEqual([
138
- { assistantId: "asst_1", runtimeUrl: "http://a" },
150
+ { assistantId: "asst_1", cloud: "local", runtimeUrl: "http://a" },
139
151
  { assistantId: "asst_2", cloud: "local" },
140
152
  ]);
141
153
  });
@@ -190,11 +202,38 @@ describe("parseLockfile", () => {
190
202
  expect(assistant?.resources).toBeUndefined();
191
203
  });
192
204
 
205
+ test("strips sensitive and host-only fields from resources", () => {
206
+ // The renderer-facing resources shape is ports + instanceDir only; the
207
+ // signing key and other ports are host-only and never cross the boundary.
208
+ const raw = {
209
+ assistants: [
210
+ {
211
+ assistantId: "asst_1",
212
+ cloud: "local",
213
+ resources: {
214
+ instanceDir: "/data",
215
+ gatewayPort: 7777,
216
+ daemonPort: 7778,
217
+ qdrantPort: 7779,
218
+ cesPort: 7780,
219
+ signingKey: "hunter2",
220
+ },
221
+ },
222
+ ],
223
+ activeAssistant: null,
224
+ };
225
+ expect(parseLockfile(raw).assistants[0]?.resources).toEqual({
226
+ instanceDir: "/data",
227
+ gatewayPort: 7777,
228
+ daemonPort: 7778,
229
+ });
230
+ });
231
+
193
232
  test("resolves cloud from legacy remote markers when the field is absent", () => {
194
233
  // Pre-`cloud` remote entries encode topology in `project` (gcp) / `sshUser`
195
234
  // (custom). The parser resolves these so a cloudless remote entry is never
196
- // mistaken for a local one downstream; a cloudless entry with no markers
197
- // stays cloudless (local). The raw markers are not carried through.
235
+ // mistaken for a local one; a cloudless entry with no markers normalizes to
236
+ // `local`. The raw markers are not carried through.
198
237
  const raw = {
199
238
  assistants: [
200
239
  { assistantId: "gcp_1", project: "my-proj", runtimeUrl: "https://a" },
@@ -206,17 +245,55 @@ describe("parseLockfile", () => {
206
245
  expect(parseLockfile(raw).assistants).toEqual([
207
246
  { assistantId: "gcp_1", cloud: "gcp", runtimeUrl: "https://a" },
208
247
  { assistantId: "ssh_1", cloud: "custom", runtimeUrl: "https://b" },
209
- { assistantId: "local_1", runtimeUrl: "http://localhost:7830" },
248
+ { assistantId: "local_1", cloud: "local", runtimeUrl: "http://localhost:7830" },
210
249
  ]);
211
250
  });
212
251
 
213
252
  test("prefers an explicit cloud over legacy remote markers", () => {
214
253
  const raw = {
215
- assistants: [{ assistantId: "a", cloud: "local", project: "stale-proj" }],
254
+ assistants: [{ assistantId: "a", cloud: "vellum", project: "stale-proj" }],
216
255
  activeAssistant: null,
217
256
  };
218
257
  expect(parseLockfile(raw).assistants).toEqual([
219
- { assistantId: "a", cloud: "local" },
258
+ { assistantId: "a", cloud: "vellum" },
259
+ ]);
260
+ });
261
+ });
262
+
263
+ describe("resolveCloud", () => {
264
+ test("prefers an explicit cloud", () => {
265
+ expect(resolveCloud({ cloud: "vellum", project: "p", sshUser: "u" })).toBe(
266
+ "vellum",
267
+ );
268
+ });
269
+
270
+ test("falls back to legacy markers, then local", () => {
271
+ expect(resolveCloud({ project: "p" })).toBe("gcp");
272
+ expect(resolveCloud({ sshUser: "u" })).toBe("custom");
273
+ expect(resolveCloud({})).toBe("local");
274
+ expect(resolveCloud({ cloud: "" })).toBe("local");
275
+ });
276
+ });
277
+
278
+ describe("taxonomy", () => {
279
+ test("KNOWN_CLOUDS covers the documented topologies", () => {
280
+ expect(KNOWN_CLOUDS).toEqual([
281
+ "local",
282
+ "docker",
283
+ "apple-container",
284
+ "vellum",
285
+ "gcp",
286
+ "aws",
287
+ "custom",
288
+ "paired",
289
+ ]);
290
+ });
291
+
292
+ test("SENSITIVE_KEYS lists the redacted secrets", () => {
293
+ expect(SENSITIVE_KEYS).toEqual([
294
+ "signingKey",
295
+ "bearerToken",
296
+ "guardianBootstrapSecret",
220
297
  ]);
221
298
  });
222
299
  });
@@ -1,52 +1,124 @@
1
1
  /**
2
- * The lockfile wire contract — the types and the parser that validates them —
3
- * kept in its own module so consumers can import the contract without pulling
4
- * in the host I/O graph (`node:fs`, the CLI resolver, the environments
5
- * package). The renderer relies on that separation: it imports these types
6
- * type-only and must not transitively reference Node built-ins.
2
+ * The lockfile wire contract — one Zod schema that is the single source of truth
3
+ * for an assistant entry's shape, its validation, the `cloud` taxonomy, the
4
+ * normalization, and the redaction policy.
7
5
  *
8
- * Validation is hand-written rather than schema-library-based on purpose: this
9
- * package is inlined from source by three different bundler hosts (the CLI, the
10
- * Electron main process, and the web dev server) and deliberately carries no
11
- * third-party runtime dependencies (enforced by `__tests__/package-boundary`).
12
- * The contract is small enough that a typed parser is clearer than a dependency.
6
+ * Kept in its own module, exported from the package as `./contract`, so
7
+ * consumers import the contract without pulling in the host I/O graph
8
+ * (`node:fs`, the CLI resolver). The CLI, the host I/O layer, the Electron and
9
+ * dev-server bridges, and the renderer all depend on this one definition. It
10
+ * references no node built-ins the renderer bundles it directly and `zod`
11
+ * is its only third-party import.
13
12
  *
14
13
  * The lockfile is written by the Vellum CLI and read across the macOS↔CLI
15
- * boundary, which do not release in lockstep. The parser is therefore
16
- * permissive about unknown fields: it reads only the modeled fields below and
17
- * ignores everything else, so a newer writer's extra fields never fail an
18
- * older reader. Unknown fields are preserved on disk by the write path (see
19
- * `lockfile.ts`); the validated value returned to callers carries only the
20
- * modeled shape.
21
- *
22
- * `assistantId` is the only required field — it is the entry's identity (the
23
- * key every reader and the write path look entries up by) and the one field
24
- * the CLI always writes. Everything else is optional on disk: older entries
25
- * predate the `cloud` field, the runtime URL has historically been persisted
26
- * under a different key (`localUrl`), and resource ports are only present for
27
- * multi-instance local setups. The parser therefore salvages any entry that
28
- * has a string `assistantId` and copies the remaining modeled fields only when
29
- * they are present and well-typed, rather than discarding an otherwise-usable
30
- * assistant because an optional field is missing or malformed.
14
+ * boundary, which do not release in lockstep, so the parser is permissive: it
15
+ * validates the modeled fields, salvages an entry on the strength of its
16
+ * `assistantId` alone (dropping individual malformed optional fields rather
17
+ * than the whole entry), and ignores unknown fields so a newer writer never
18
+ * breaks an older reader. Unknown fields are preserved on disk by the write
19
+ * path (see `lockfile.ts`); the validated value carries only the modeled,
20
+ * renderer-safe shape.
21
+ */
22
+ import { z } from "zod";
23
+
24
+ /**
25
+ * Known deployment topologies. `cloud` is stored as a free string on disk for
26
+ * forward-compatibility an older reader must tolerate a newer writer's value
27
+ * but the known set is enumerated here so callers switch on it exhaustively
28
+ * instead of matching string literals scattered across the codebase:
29
+ * - `local` on-machine daemon
30
+ * - `docker` — local container
31
+ * - `apple-container` — macOS-app-managed container
32
+ * - `vellum` — platform-managed (uses the X-Session-Token auth path)
33
+ * - `gcp` / `aws` / `custom` — remote, SSH-managed
34
+ * - `paired` — a remote assistant paired from another machine
31
35
  */
36
+ export const KNOWN_CLOUDS = [
37
+ "local",
38
+ "docker",
39
+ "apple-container",
40
+ "vellum",
41
+ "gcp",
42
+ "aws",
43
+ "custom",
44
+ "paired",
45
+ ] as const;
46
+ export type KnownCloud = (typeof KNOWN_CLOUDS)[number];
47
+ export type Cloud = KnownCloud | (string & {});
32
48
 
33
- export interface LocalAssistantResources {
34
- instanceDir?: string;
35
- gatewayPort: number;
36
- daemonPort: number;
49
+ /**
50
+ * Keys that must never cross the host→renderer boundary. Stripped from raw
51
+ * lockfile JSON before it leaves a host (see `stripSensitiveFields`) and absent
52
+ * from the renderer-facing schema below; the CLI's extended type is the only
53
+ * place they are modeled.
54
+ */
55
+ export const SENSITIVE_KEYS = [
56
+ "signingKey",
57
+ "bearerToken",
58
+ "guardianBootstrapSecret",
59
+ ] as const;
60
+
61
+ /**
62
+ * Resolve an entry's deployment topology from its raw on-disk fields. Prefers
63
+ * an explicit `cloud`, then the legacy markers that predate the field
64
+ * (`project` ⇒ gcp, `sshUser` ⇒ custom), and defaults to "local". This is the
65
+ * one definition every reader shares, so a cloudless entry is classified
66
+ * identically by the CLI, the host I/O layer, and the renderer.
67
+ */
68
+ export function resolveCloud(raw: {
69
+ cloud?: unknown;
70
+ project?: unknown;
71
+ sshUser?: unknown;
72
+ }): Cloud {
73
+ if (typeof raw.cloud === "string" && raw.cloud) return raw.cloud;
74
+ if (typeof raw.project === "string" && raw.project) return "gcp";
75
+ if (typeof raw.sshUser === "string" && raw.sshUser) return "custom";
76
+ return "local";
37
77
  }
38
78
 
39
- export interface LockfileAssistant {
40
- assistantId: string;
41
- name?: string;
42
- cloud?: string;
43
- runtimeUrl?: string;
44
- species?: string;
45
- hatchedAt?: string;
79
+ /**
80
+ * Per-instance resources for a local assistant: the renderer-facing subset of
81
+ * ports plus the instance directory. Richer host-only fields (other ports, the
82
+ * signing key) live on the CLI's type and are stripped from this shape.
83
+ */
84
+ export const LocalAssistantResourcesSchema = z.object({
85
+ instanceDir: z.string().optional(),
86
+ gatewayPort: z.number(),
87
+ daemonPort: z.number(),
88
+ });
89
+ export type LocalAssistantResources = z.infer<
90
+ typeof LocalAssistantResourcesSchema
91
+ >;
92
+
93
+ /**
94
+ * The renderer-safe shape of one assistant entry. `assistantId` is the only
95
+ * required field — the identity every reader looks entries up by — and every
96
+ * other field is salvaged by {@link parseLockfile}. The CLI extends this with
97
+ * its host-only and sensitive fields; this base carries only what is safe to
98
+ * surface in the renderer.
99
+ */
100
+ export const LockfileAssistantSchema = z.object({
101
+ assistantId: z.string(),
102
+ name: z.string().optional(),
103
+ cloud: z.string().optional(),
104
+ runtimeUrl: z.string().optional(),
105
+ species: z.string().optional(),
106
+ hatchedAt: z.string().optional(),
46
107
  /** Owning org for platform assistants; absent for local ones. */
47
- organizationId?: string;
48
- resources?: LocalAssistantResources;
49
- }
108
+ organizationId: z.string().optional(),
109
+ resources: LocalAssistantResourcesSchema.optional(),
110
+ });
111
+
112
+ /**
113
+ * A validated, normalized assistant entry. Identical to the schema's inferred
114
+ * shape except `cloud` is always present — {@link parseLockfile} resolves it for
115
+ * every entry (defaulting to "local"), so readers never special-case its
116
+ * absence.
117
+ */
118
+ export type LockfileAssistant = Omit<
119
+ z.infer<typeof LockfileAssistantSchema>,
120
+ "cloud"
121
+ > & { cloud: Cloud };
50
122
 
51
123
  export interface Lockfile {
52
124
  assistants: LockfileAssistant[];
@@ -55,8 +127,8 @@ export interface Lockfile {
55
127
 
56
128
  /**
57
129
  * Renderer-facing result of a lockfile write, returned across the host bridge.
58
- * Carries no HTTP-style `status`the hosts map that away because the
59
- * renderer surfaces failures by message alone.
130
+ * Carries no HTTP-style status — hosts map that away because the renderer
131
+ * surfaces failures by message alone.
60
132
  */
61
133
  export type LockfileWriteResult =
62
134
  | { ok: true; lockfile: Lockfile }
@@ -66,60 +138,30 @@ function isRecord(value: unknown): value is Record<string, unknown> {
66
138
  return typeof value === "object" && value !== null && !Array.isArray(value);
67
139
  }
68
140
 
69
- function parseResources(value: unknown): LocalAssistantResources | undefined {
70
- if (!isRecord(value)) return undefined;
71
- if (typeof value.gatewayPort !== "number") return undefined;
72
- if (typeof value.daemonPort !== "number") return undefined;
73
- return {
74
- ...(typeof value.instanceDir === "string"
75
- ? { instanceDir: value.instanceDir }
76
- : {}),
77
- gatewayPort: value.gatewayPort,
78
- daemonPort: value.daemonPort,
79
- };
80
- }
81
-
82
141
  /**
83
- * Validate a single assistant entry. Returns `null` only when the entry lacks a
84
- * string `assistantId` (its identity); any other entry is salvaged. Each
85
- * optional field is copied only when present and well-typed a missing or
86
- * mistyped optional field is dropped from the result without discarding the
87
- * entry and unknown fields are ignored.
142
+ * Validate and normalize a single entry. Returns null only when `assistantId`
143
+ * is missing or not a string; any other entry is salvaged — each modeled field
144
+ * is copied only when present and well-typed (a malformed optional field is
145
+ * dropped without discarding the entry), unknown fields are ignored, and
146
+ * `cloud` is resolved from the raw markers so a cloudless remote entry is never
147
+ * mistaken for a local one and a markerless entry defaults to "local".
88
148
  */
89
- function parseAssistant(value: unknown): LockfileAssistant | null {
90
- if (!isRecord(value)) return null;
91
- if (typeof value.assistantId !== "string") return null;
92
-
93
- const assistant: LockfileAssistant = { assistantId: value.assistantId };
94
- if (typeof value.name === "string") assistant.name = value.name;
95
- // Normalize `cloud`. A pre-`cloud` remote entry encodes its topology in legacy
96
- // markers (`project` => "gcp", `sshUser` => "custom") that aren't modeled
97
- // fields; resolve them here — mirroring the CLI's `resolveCloud` — so a
98
- // cloudless remote entry isn't indistinguishable from a local one downstream.
99
- // A cloudless entry with no markers stays cloudless (i.e. local).
100
- if (typeof value.cloud === "string") {
101
- assistant.cloud = value.cloud;
102
- } else if (typeof value.project === "string" && value.project) {
103
- assistant.cloud = "gcp";
104
- } else if (typeof value.sshUser === "string" && value.sshUser) {
105
- assistant.cloud = "custom";
149
+ function parseAssistant(raw: unknown): LockfileAssistant | null {
150
+ if (!isRecord(raw) || typeof raw.assistantId !== "string") return null;
151
+ const out: Record<string, unknown> = {};
152
+ for (const [key, field] of Object.entries(LockfileAssistantSchema.shape)) {
153
+ const result = (field as z.ZodType).safeParse(raw[key]);
154
+ if (result.success && result.data !== undefined) out[key] = result.data;
106
155
  }
107
- if (typeof value.runtimeUrl === "string") assistant.runtimeUrl = value.runtimeUrl;
108
- if (typeof value.species === "string") assistant.species = value.species;
109
- if (typeof value.hatchedAt === "string") assistant.hatchedAt = value.hatchedAt;
110
- if (typeof value.organizationId === "string") assistant.organizationId = value.organizationId;
111
- const resources = parseResources(value.resources);
112
- if (resources) assistant.resources = resources;
113
- return assistant;
156
+ out.cloud = resolveCloud(raw);
157
+ return out as LockfileAssistant;
114
158
  }
115
159
 
116
160
  /**
117
- * Coerce parsed JSON into a validated `Lockfile`. Total and non-throwing:
118
- * individual assistant entries that fail validation are dropped (so one
119
- * malformed entry can't discard the whole file), a missing/non-array
120
- * `assistants` becomes `[]`, and a non-string `activeAssistant` becomes
121
- * `null`. Callers pass the result through unchanged; the only failure modes a
122
- * host surfaces are I/O and JSON-parse errors, handled by `getLockfileData`.
161
+ * Coerce parsed JSON into a validated {@link Lockfile}. Total and non-throwing:
162
+ * entries that fail validation are dropped (one malformed entry can't discard
163
+ * the file), a missing or non-array `assistants` becomes `[]`, and a non-string
164
+ * `activeAssistant` becomes null.
123
165
  */
124
166
  export function parseLockfile(raw: unknown): Lockfile {
125
167
  const root = isRecord(raw) ? raw : {};
@@ -74,7 +74,9 @@ describe("getLockfileData", () => {
74
74
  const result = getLockfileData([lockfilePath]);
75
75
  expect(result.ok).toBe(true);
76
76
  if (result.ok) {
77
- expect(result.data.assistants).toEqual([{ assistantId: "asst_legacy" }]);
77
+ expect(result.data.assistants).toEqual([
78
+ { assistantId: "asst_legacy", cloud: "local" },
79
+ ]);
78
80
  expect(result.data.activeAssistant).toBe("asst_legacy");
79
81
  }
80
82
  });
@@ -2,6 +2,8 @@ import fs from "node:fs";
2
2
  import { createRequire } from "node:module";
3
3
  import path from "node:path";
4
4
 
5
+ import { SENSITIVE_KEYS } from "./lockfile-contract";
6
+
5
7
  const CLI_PACKAGE_NAME = "@vellumai/cli";
6
8
 
7
9
  /**
@@ -17,24 +19,18 @@ export interface CliInvocation {
17
19
  baseArgs: string[];
18
20
  }
19
21
 
20
- const SENSITIVE_FIELDS = [
21
- "signingKey",
22
- "bearerToken",
23
- "guardianBootstrapSecret",
24
- ] as const;
25
-
26
22
  export function stripSensitiveFields(data: Record<string, unknown>): void {
27
23
  const assistants = data.assistants;
28
24
  if (!Array.isArray(assistants)) return;
29
25
  for (const assistant of assistants) {
30
26
  if (assistant && typeof assistant === "object") {
31
27
  const entry = assistant as Record<string, unknown>;
32
- for (const field of SENSITIVE_FIELDS) {
28
+ for (const field of SENSITIVE_KEYS) {
33
29
  delete entry[field];
34
30
  }
35
31
  const resources = entry.resources;
36
32
  if (resources && typeof resources === "object") {
37
- for (const field of SENSITIVE_FIELDS) {
33
+ for (const field of SENSITIVE_KEYS) {
38
34
  delete (resources as Record<string, unknown>)[field];
39
35
  }
40
36
  }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Colin McDonnell
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.