@vellumai/cli 0.10.0 → 0.10.1-dev.202606240206.7c2bca6

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 (750) 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__/loopback-auth.test.ts +26 -0
  5. package/node_modules/@vellumai/local-mode/src/__tests__/package-boundary.test.ts +6 -6
  6. package/node_modules/@vellumai/local-mode/src/index.ts +2 -0
  7. package/node_modules/@vellumai/local-mode/src/lockfile-contract.test.ts +148 -12
  8. package/node_modules/@vellumai/local-mode/src/lockfile-contract.ts +136 -80
  9. package/node_modules/@vellumai/local-mode/src/lockfile.test.ts +3 -1
  10. package/node_modules/@vellumai/local-mode/src/lockfile.ts +9 -2
  11. package/node_modules/@vellumai/local-mode/src/status.ts +1 -0
  12. package/node_modules/@vellumai/local-mode/src/upgrade.ts +105 -0
  13. package/node_modules/@vellumai/local-mode/src/util.ts +4 -8
  14. package/node_modules/zod/LICENSE +21 -0
  15. package/node_modules/zod/README.md +191 -0
  16. package/node_modules/zod/index.cjs +33 -0
  17. package/node_modules/zod/index.d.cts +4 -0
  18. package/node_modules/zod/index.d.ts +4 -0
  19. package/node_modules/zod/index.js +4 -0
  20. package/node_modules/zod/locales/index.cjs +17 -0
  21. package/node_modules/zod/locales/index.d.cts +1 -0
  22. package/node_modules/zod/locales/index.d.ts +1 -0
  23. package/node_modules/zod/locales/index.js +1 -0
  24. package/node_modules/zod/locales/package.json +7 -0
  25. package/node_modules/zod/mini/index.cjs +32 -0
  26. package/node_modules/zod/mini/index.d.cts +3 -0
  27. package/node_modules/zod/mini/index.d.ts +3 -0
  28. package/node_modules/zod/mini/index.js +3 -0
  29. package/node_modules/zod/mini/package.json +7 -0
  30. package/node_modules/zod/package.json +135 -0
  31. package/node_modules/zod/src/index.ts +4 -0
  32. package/node_modules/zod/src/locales/index.ts +1 -0
  33. package/node_modules/zod/src/mini/index.ts +3 -0
  34. package/node_modules/zod/src/v3/ZodError.ts +330 -0
  35. package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
  36. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  37. package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
  38. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
  39. package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
  40. package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
  41. package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
  42. package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
  43. package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
  44. package/node_modules/zod/src/v3/errors.ts +13 -0
  45. package/node_modules/zod/src/v3/external.ts +6 -0
  46. package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
  47. package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
  48. package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
  49. package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
  50. package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
  51. package/node_modules/zod/src/v3/helpers/util.ts +224 -0
  52. package/node_modules/zod/src/v3/index.ts +4 -0
  53. package/node_modules/zod/src/v3/locales/en.ts +124 -0
  54. package/node_modules/zod/src/v3/standard-schema.ts +113 -0
  55. package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
  56. package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
  57. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
  58. package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
  59. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
  60. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
  61. package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
  62. package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
  63. package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
  64. package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
  65. package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
  66. package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
  67. package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
  68. package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
  69. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
  70. package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
  71. package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
  72. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
  73. package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
  74. package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
  75. package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
  76. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  77. package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
  78. package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
  79. package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
  80. package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
  81. package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
  82. package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
  83. package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
  84. package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
  85. package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
  86. package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
  87. package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
  88. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
  89. package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
  90. package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
  91. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
  92. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
  93. package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
  94. package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
  95. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
  96. package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
  97. package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
  98. package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
  99. package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
  100. package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
  101. package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
  102. package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
  103. package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
  104. package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
  105. package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
  106. package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
  107. package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
  108. package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
  109. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
  110. package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
  111. package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
  112. package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
  113. package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
  114. package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
  115. package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
  116. package/node_modules/zod/src/v3/types.ts +5138 -0
  117. package/node_modules/zod/src/v4/classic/checks.ts +32 -0
  118. package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
  119. package/node_modules/zod/src/v4/classic/compat.ts +70 -0
  120. package/node_modules/zod/src/v4/classic/errors.ts +82 -0
  121. package/node_modules/zod/src/v4/classic/external.ts +52 -0
  122. package/node_modules/zod/src/v4/classic/from-json-schema.ts +659 -0
  123. package/node_modules/zod/src/v4/classic/index.ts +5 -0
  124. package/node_modules/zod/src/v4/classic/iso.ts +90 -0
  125. package/node_modules/zod/src/v4/classic/parse.ts +82 -0
  126. package/node_modules/zod/src/v4/classic/schemas.ts +2672 -0
  127. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
  128. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
  129. package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
  130. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +216 -0
  131. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
  132. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
  133. package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
  134. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
  135. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
  136. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +326 -0
  137. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
  138. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
  139. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +703 -0
  140. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
  141. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
  142. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
  143. package/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
  144. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
  145. package/node_modules/zod/src/v4/classic/tests/default.test.ts +409 -0
  146. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
  147. package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
  148. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +197 -0
  149. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +694 -0
  150. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
  151. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +807 -0
  152. package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
  153. package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
  154. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
  155. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
  156. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +895 -0
  157. package/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
  158. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
  159. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +39 -0
  160. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
  161. package/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
  162. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
  163. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
  164. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +46 -0
  165. package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
  166. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
  167. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
  168. package/node_modules/zod/src/v4/classic/tests/locales_ka.test.ts +29 -0
  169. package/node_modules/zod/src/v4/classic/tests/locales_ro.test.ts +24 -0
  170. package/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
  171. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
  172. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
  173. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
  174. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
  175. package/node_modules/zod/src/v4/classic/tests/number.test.ts +325 -0
  176. package/node_modules/zod/src/v4/classic/tests/object.test.ts +717 -0
  177. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +333 -0
  178. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +450 -0
  179. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
  180. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
  181. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
  182. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +26 -0
  183. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +351 -0
  184. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
  185. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
  186. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
  187. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
  188. package/node_modules/zod/src/v4/classic/tests/record.test.ts +717 -0
  189. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +631 -0
  190. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +633 -0
  191. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
  192. package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
  193. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
  194. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
  195. package/node_modules/zod/src/v4/classic/tests/string.test.ts +1224 -0
  196. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
  197. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
  198. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
  199. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +3125 -0
  200. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +378 -0
  201. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +496 -0
  202. package/node_modules/zod/src/v4/classic/tests/union.test.ts +273 -0
  203. package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
  204. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
  205. package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
  206. package/node_modules/zod/src/v4/core/api.ts +1823 -0
  207. package/node_modules/zod/src/v4/core/checks.ts +1293 -0
  208. package/node_modules/zod/src/v4/core/config.ts +15 -0
  209. package/node_modules/zod/src/v4/core/core.ts +153 -0
  210. package/node_modules/zod/src/v4/core/doc.ts +44 -0
  211. package/node_modules/zod/src/v4/core/errors.ts +455 -0
  212. package/node_modules/zod/src/v4/core/index.ts +16 -0
  213. package/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
  214. package/node_modules/zod/src/v4/core/json-schema-processors.ts +666 -0
  215. package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
  216. package/node_modules/zod/src/v4/core/parse.ts +195 -0
  217. package/node_modules/zod/src/v4/core/regexes.ts +190 -0
  218. package/node_modules/zod/src/v4/core/registries.ts +105 -0
  219. package/node_modules/zod/src/v4/core/schemas.ts +4730 -0
  220. package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
  221. package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
  222. package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
  223. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
  224. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +215 -0
  225. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
  226. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
  227. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +72 -0
  228. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
  229. package/node_modules/zod/src/v4/core/tests/locales/hr.test.ts +163 -0
  230. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
  231. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
  232. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
  233. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +105 -0
  234. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +125 -0
  235. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
  236. package/node_modules/zod/src/v4/core/to-json-schema.ts +622 -0
  237. package/node_modules/zod/src/v4/core/util.ts +983 -0
  238. package/node_modules/zod/src/v4/core/versions.ts +5 -0
  239. package/node_modules/zod/src/v4/core/zsf.ts +323 -0
  240. package/node_modules/zod/src/v4/index.ts +4 -0
  241. package/node_modules/zod/src/v4/locales/ar.ts +115 -0
  242. package/node_modules/zod/src/v4/locales/az.ts +111 -0
  243. package/node_modules/zod/src/v4/locales/be.ts +176 -0
  244. package/node_modules/zod/src/v4/locales/bg.ts +128 -0
  245. package/node_modules/zod/src/v4/locales/ca.ts +116 -0
  246. package/node_modules/zod/src/v4/locales/cs.ts +118 -0
  247. package/node_modules/zod/src/v4/locales/da.ts +123 -0
  248. package/node_modules/zod/src/v4/locales/de.ts +116 -0
  249. package/node_modules/zod/src/v4/locales/el.ts +121 -0
  250. package/node_modules/zod/src/v4/locales/en.ts +123 -0
  251. package/node_modules/zod/src/v4/locales/eo.ts +118 -0
  252. package/node_modules/zod/src/v4/locales/es.ts +141 -0
  253. package/node_modules/zod/src/v4/locales/fa.ts +126 -0
  254. package/node_modules/zod/src/v4/locales/fi.ts +121 -0
  255. package/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
  256. package/node_modules/zod/src/v4/locales/fr.ts +132 -0
  257. package/node_modules/zod/src/v4/locales/he.ts +246 -0
  258. package/node_modules/zod/src/v4/locales/hr.ts +131 -0
  259. package/node_modules/zod/src/v4/locales/hu.ts +117 -0
  260. package/node_modules/zod/src/v4/locales/hy.ts +164 -0
  261. package/node_modules/zod/src/v4/locales/id.ts +115 -0
  262. package/node_modules/zod/src/v4/locales/index.ts +52 -0
  263. package/node_modules/zod/src/v4/locales/is.ts +119 -0
  264. package/node_modules/zod/src/v4/locales/it.ts +116 -0
  265. package/node_modules/zod/src/v4/locales/ja.ts +114 -0
  266. package/node_modules/zod/src/v4/locales/ka.ts +123 -0
  267. package/node_modules/zod/src/v4/locales/kh.ts +7 -0
  268. package/node_modules/zod/src/v4/locales/km.ts +119 -0
  269. package/node_modules/zod/src/v4/locales/ko.ts +121 -0
  270. package/node_modules/zod/src/v4/locales/lt.ts +239 -0
  271. package/node_modules/zod/src/v4/locales/mk.ts +118 -0
  272. package/node_modules/zod/src/v4/locales/ms.ts +115 -0
  273. package/node_modules/zod/src/v4/locales/nl.ts +121 -0
  274. package/node_modules/zod/src/v4/locales/no.ts +116 -0
  275. package/node_modules/zod/src/v4/locales/ota.ts +117 -0
  276. package/node_modules/zod/src/v4/locales/pl.ts +118 -0
  277. package/node_modules/zod/src/v4/locales/ps.ts +126 -0
  278. package/node_modules/zod/src/v4/locales/pt.ts +116 -0
  279. package/node_modules/zod/src/v4/locales/ro.ts +129 -0
  280. package/node_modules/zod/src/v4/locales/ru.ts +176 -0
  281. package/node_modules/zod/src/v4/locales/sl.ts +118 -0
  282. package/node_modules/zod/src/v4/locales/sv.ts +119 -0
  283. package/node_modules/zod/src/v4/locales/ta.ts +118 -0
  284. package/node_modules/zod/src/v4/locales/th.ts +119 -0
  285. package/node_modules/zod/src/v4/locales/tr.ts +111 -0
  286. package/node_modules/zod/src/v4/locales/ua.ts +7 -0
  287. package/node_modules/zod/src/v4/locales/uk.ts +117 -0
  288. package/node_modules/zod/src/v4/locales/ur.ts +119 -0
  289. package/node_modules/zod/src/v4/locales/uz.ts +117 -0
  290. package/node_modules/zod/src/v4/locales/vi.ts +117 -0
  291. package/node_modules/zod/src/v4/locales/yo.ts +124 -0
  292. package/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
  293. package/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
  294. package/node_modules/zod/src/v4/mini/checks.ts +32 -0
  295. package/node_modules/zod/src/v4/mini/coerce.ts +27 -0
  296. package/node_modules/zod/src/v4/mini/external.ts +41 -0
  297. package/node_modules/zod/src/v4/mini/index.ts +3 -0
  298. package/node_modules/zod/src/v4/mini/iso.ts +66 -0
  299. package/node_modules/zod/src/v4/mini/parse.ts +14 -0
  300. package/node_modules/zod/src/v4/mini/schemas.ts +1947 -0
  301. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
  302. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
  303. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
  304. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
  305. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +548 -0
  306. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
  307. package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
  308. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
  309. package/node_modules/zod/src/v4/mini/tests/index.test.ts +993 -0
  310. package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
  311. package/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
  312. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
  313. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +325 -0
  314. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
  315. package/node_modules/zod/src/v4/mini/tests/string.test.ts +352 -0
  316. package/node_modules/zod/src/v4-mini/index.ts +3 -0
  317. package/node_modules/zod/v3/ZodError.cjs +138 -0
  318. package/node_modules/zod/v3/ZodError.d.cts +164 -0
  319. package/node_modules/zod/v3/ZodError.d.ts +164 -0
  320. package/node_modules/zod/v3/ZodError.js +133 -0
  321. package/node_modules/zod/v3/errors.cjs +17 -0
  322. package/node_modules/zod/v3/errors.d.cts +5 -0
  323. package/node_modules/zod/v3/errors.d.ts +5 -0
  324. package/node_modules/zod/v3/errors.js +9 -0
  325. package/node_modules/zod/v3/external.cjs +22 -0
  326. package/node_modules/zod/v3/external.d.cts +6 -0
  327. package/node_modules/zod/v3/external.d.ts +6 -0
  328. package/node_modules/zod/v3/external.js +6 -0
  329. package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
  330. package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
  331. package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
  332. package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
  333. package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
  334. package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
  335. package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
  336. package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  337. package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
  338. package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
  339. package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
  340. package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  341. package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
  342. package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
  343. package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
  344. package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
  345. package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
  346. package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
  347. package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
  348. package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  349. package/node_modules/zod/v3/helpers/util.cjs +137 -0
  350. package/node_modules/zod/v3/helpers/util.d.cts +85 -0
  351. package/node_modules/zod/v3/helpers/util.d.ts +85 -0
  352. package/node_modules/zod/v3/helpers/util.js +133 -0
  353. package/node_modules/zod/v3/index.cjs +33 -0
  354. package/node_modules/zod/v3/index.d.cts +4 -0
  355. package/node_modules/zod/v3/index.d.ts +4 -0
  356. package/node_modules/zod/v3/index.js +4 -0
  357. package/node_modules/zod/v3/locales/en.cjs +112 -0
  358. package/node_modules/zod/v3/locales/en.d.cts +3 -0
  359. package/node_modules/zod/v3/locales/en.d.ts +3 -0
  360. package/node_modules/zod/v3/locales/en.js +109 -0
  361. package/node_modules/zod/v3/package.json +7 -0
  362. package/node_modules/zod/v3/standard-schema.cjs +2 -0
  363. package/node_modules/zod/v3/standard-schema.d.cts +102 -0
  364. package/node_modules/zod/v3/standard-schema.d.ts +102 -0
  365. package/node_modules/zod/v3/standard-schema.js +1 -0
  366. package/node_modules/zod/v3/types.cjs +3777 -0
  367. package/node_modules/zod/v3/types.d.cts +1034 -0
  368. package/node_modules/zod/v3/types.d.ts +1034 -0
  369. package/node_modules/zod/v3/types.js +3695 -0
  370. package/node_modules/zod/v4/classic/checks.cjs +33 -0
  371. package/node_modules/zod/v4/classic/checks.d.cts +1 -0
  372. package/node_modules/zod/v4/classic/checks.d.ts +1 -0
  373. package/node_modules/zod/v4/classic/checks.js +1 -0
  374. package/node_modules/zod/v4/classic/coerce.cjs +47 -0
  375. package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
  376. package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
  377. package/node_modules/zod/v4/classic/coerce.js +17 -0
  378. package/node_modules/zod/v4/classic/compat.cjs +61 -0
  379. package/node_modules/zod/v4/classic/compat.d.cts +50 -0
  380. package/node_modules/zod/v4/classic/compat.d.ts +50 -0
  381. package/node_modules/zod/v4/classic/compat.js +31 -0
  382. package/node_modules/zod/v4/classic/errors.cjs +74 -0
  383. package/node_modules/zod/v4/classic/errors.d.cts +30 -0
  384. package/node_modules/zod/v4/classic/errors.d.ts +30 -0
  385. package/node_modules/zod/v4/classic/errors.js +48 -0
  386. package/node_modules/zod/v4/classic/external.cjs +73 -0
  387. package/node_modules/zod/v4/classic/external.d.cts +16 -0
  388. package/node_modules/zod/v4/classic/external.d.ts +16 -0
  389. package/node_modules/zod/v4/classic/external.js +20 -0
  390. package/node_modules/zod/v4/classic/from-json-schema.cjs +625 -0
  391. package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
  392. package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
  393. package/node_modules/zod/v4/classic/from-json-schema.js +599 -0
  394. package/node_modules/zod/v4/classic/index.cjs +33 -0
  395. package/node_modules/zod/v4/classic/index.d.cts +4 -0
  396. package/node_modules/zod/v4/classic/index.d.ts +4 -0
  397. package/node_modules/zod/v4/classic/index.js +4 -0
  398. package/node_modules/zod/v4/classic/iso.cjs +60 -0
  399. package/node_modules/zod/v4/classic/iso.d.cts +22 -0
  400. package/node_modules/zod/v4/classic/iso.d.ts +22 -0
  401. package/node_modules/zod/v4/classic/iso.js +30 -0
  402. package/node_modules/zod/v4/classic/package.json +7 -0
  403. package/node_modules/zod/v4/classic/parse.cjs +41 -0
  404. package/node_modules/zod/v4/classic/parse.d.cts +31 -0
  405. package/node_modules/zod/v4/classic/parse.d.ts +31 -0
  406. package/node_modules/zod/v4/classic/parse.js +15 -0
  407. package/node_modules/zod/v4/classic/schemas.cjs +1511 -0
  408. package/node_modules/zod/v4/classic/schemas.d.cts +767 -0
  409. package/node_modules/zod/v4/classic/schemas.d.ts +767 -0
  410. package/node_modules/zod/v4/classic/schemas.js +1395 -0
  411. package/node_modules/zod/v4/core/api.cjs +1227 -0
  412. package/node_modules/zod/v4/core/api.d.cts +325 -0
  413. package/node_modules/zod/v4/core/api.d.ts +325 -0
  414. package/node_modules/zod/v4/core/api.js +1087 -0
  415. package/node_modules/zod/v4/core/checks.cjs +601 -0
  416. package/node_modules/zod/v4/core/checks.d.cts +278 -0
  417. package/node_modules/zod/v4/core/checks.d.ts +278 -0
  418. package/node_modules/zod/v4/core/checks.js +575 -0
  419. package/node_modules/zod/v4/core/core.cjs +85 -0
  420. package/node_modules/zod/v4/core/core.d.cts +70 -0
  421. package/node_modules/zod/v4/core/core.d.ts +70 -0
  422. package/node_modules/zod/v4/core/core.js +78 -0
  423. package/node_modules/zod/v4/core/doc.cjs +39 -0
  424. package/node_modules/zod/v4/core/doc.d.cts +14 -0
  425. package/node_modules/zod/v4/core/doc.d.ts +14 -0
  426. package/node_modules/zod/v4/core/doc.js +35 -0
  427. package/node_modules/zod/v4/core/errors.cjs +216 -0
  428. package/node_modules/zod/v4/core/errors.d.cts +221 -0
  429. package/node_modules/zod/v4/core/errors.d.ts +221 -0
  430. package/node_modules/zod/v4/core/errors.js +185 -0
  431. package/node_modules/zod/v4/core/index.cjs +47 -0
  432. package/node_modules/zod/v4/core/index.d.cts +16 -0
  433. package/node_modules/zod/v4/core/index.d.ts +16 -0
  434. package/node_modules/zod/v4/core/index.js +16 -0
  435. package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
  436. package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
  437. package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
  438. package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
  439. package/node_modules/zod/v4/core/json-schema-processors.cjs +644 -0
  440. package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
  441. package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
  442. package/node_modules/zod/v4/core/json-schema-processors.js +601 -0
  443. package/node_modules/zod/v4/core/json-schema.cjs +2 -0
  444. package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
  445. package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
  446. package/node_modules/zod/v4/core/json-schema.js +1 -0
  447. package/node_modules/zod/v4/core/package.json +7 -0
  448. package/node_modules/zod/v4/core/parse.cjs +131 -0
  449. package/node_modules/zod/v4/core/parse.d.cts +49 -0
  450. package/node_modules/zod/v4/core/parse.d.ts +49 -0
  451. package/node_modules/zod/v4/core/parse.js +93 -0
  452. package/node_modules/zod/v4/core/regexes.cjs +172 -0
  453. package/node_modules/zod/v4/core/regexes.d.cts +85 -0
  454. package/node_modules/zod/v4/core/regexes.d.ts +85 -0
  455. package/node_modules/zod/v4/core/regexes.js +139 -0
  456. package/node_modules/zod/v4/core/registries.cjs +56 -0
  457. package/node_modules/zod/v4/core/registries.d.cts +35 -0
  458. package/node_modules/zod/v4/core/registries.d.ts +35 -0
  459. package/node_modules/zod/v4/core/registries.js +51 -0
  460. package/node_modules/zod/v4/core/schemas.cjs +2270 -0
  461. package/node_modules/zod/v4/core/schemas.d.cts +1184 -0
  462. package/node_modules/zod/v4/core/schemas.d.ts +1184 -0
  463. package/node_modules/zod/v4/core/schemas.js +2239 -0
  464. package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
  465. package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
  466. package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
  467. package/node_modules/zod/v4/core/standard-schema.js +1 -0
  468. package/node_modules/zod/v4/core/to-json-schema.cjs +457 -0
  469. package/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
  470. package/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
  471. package/node_modules/zod/v4/core/to-json-schema.js +448 -0
  472. package/node_modules/zod/v4/core/util.cjs +734 -0
  473. package/node_modules/zod/v4/core/util.d.cts +200 -0
  474. package/node_modules/zod/v4/core/util.d.ts +200 -0
  475. package/node_modules/zod/v4/core/util.js +674 -0
  476. package/node_modules/zod/v4/core/versions.cjs +8 -0
  477. package/node_modules/zod/v4/core/versions.d.cts +5 -0
  478. package/node_modules/zod/v4/core/versions.d.ts +5 -0
  479. package/node_modules/zod/v4/core/versions.js +5 -0
  480. package/node_modules/zod/v4/index.cjs +22 -0
  481. package/node_modules/zod/v4/index.d.cts +3 -0
  482. package/node_modules/zod/v4/index.d.ts +3 -0
  483. package/node_modules/zod/v4/index.js +3 -0
  484. package/node_modules/zod/v4/locales/ar.cjs +133 -0
  485. package/node_modules/zod/v4/locales/ar.d.cts +5 -0
  486. package/node_modules/zod/v4/locales/ar.d.ts +4 -0
  487. package/node_modules/zod/v4/locales/ar.js +106 -0
  488. package/node_modules/zod/v4/locales/az.cjs +132 -0
  489. package/node_modules/zod/v4/locales/az.d.cts +5 -0
  490. package/node_modules/zod/v4/locales/az.d.ts +4 -0
  491. package/node_modules/zod/v4/locales/az.js +105 -0
  492. package/node_modules/zod/v4/locales/be.cjs +183 -0
  493. package/node_modules/zod/v4/locales/be.d.cts +5 -0
  494. package/node_modules/zod/v4/locales/be.d.ts +4 -0
  495. package/node_modules/zod/v4/locales/be.js +156 -0
  496. package/node_modules/zod/v4/locales/bg.cjs +147 -0
  497. package/node_modules/zod/v4/locales/bg.d.cts +5 -0
  498. package/node_modules/zod/v4/locales/bg.d.ts +4 -0
  499. package/node_modules/zod/v4/locales/bg.js +120 -0
  500. package/node_modules/zod/v4/locales/ca.cjs +134 -0
  501. package/node_modules/zod/v4/locales/ca.d.cts +5 -0
  502. package/node_modules/zod/v4/locales/ca.d.ts +4 -0
  503. package/node_modules/zod/v4/locales/ca.js +107 -0
  504. package/node_modules/zod/v4/locales/cs.cjs +138 -0
  505. package/node_modules/zod/v4/locales/cs.d.cts +5 -0
  506. package/node_modules/zod/v4/locales/cs.d.ts +4 -0
  507. package/node_modules/zod/v4/locales/cs.js +111 -0
  508. package/node_modules/zod/v4/locales/da.cjs +142 -0
  509. package/node_modules/zod/v4/locales/da.d.cts +5 -0
  510. package/node_modules/zod/v4/locales/da.d.ts +4 -0
  511. package/node_modules/zod/v4/locales/da.js +115 -0
  512. package/node_modules/zod/v4/locales/de.cjs +135 -0
  513. package/node_modules/zod/v4/locales/de.d.cts +5 -0
  514. package/node_modules/zod/v4/locales/de.d.ts +4 -0
  515. package/node_modules/zod/v4/locales/de.js +108 -0
  516. package/node_modules/zod/v4/locales/el.cjs +136 -0
  517. package/node_modules/zod/v4/locales/el.d.cts +5 -0
  518. package/node_modules/zod/v4/locales/el.d.ts +4 -0
  519. package/node_modules/zod/v4/locales/el.js +109 -0
  520. package/node_modules/zod/v4/locales/en.cjs +140 -0
  521. package/node_modules/zod/v4/locales/en.d.cts +5 -0
  522. package/node_modules/zod/v4/locales/en.d.ts +4 -0
  523. package/node_modules/zod/v4/locales/en.js +113 -0
  524. package/node_modules/zod/v4/locales/eo.cjs +136 -0
  525. package/node_modules/zod/v4/locales/eo.d.cts +5 -0
  526. package/node_modules/zod/v4/locales/eo.d.ts +4 -0
  527. package/node_modules/zod/v4/locales/eo.js +109 -0
  528. package/node_modules/zod/v4/locales/es.cjs +159 -0
  529. package/node_modules/zod/v4/locales/es.d.cts +5 -0
  530. package/node_modules/zod/v4/locales/es.d.ts +4 -0
  531. package/node_modules/zod/v4/locales/es.js +132 -0
  532. package/node_modules/zod/v4/locales/fa.cjs +141 -0
  533. package/node_modules/zod/v4/locales/fa.d.cts +5 -0
  534. package/node_modules/zod/v4/locales/fa.d.ts +4 -0
  535. package/node_modules/zod/v4/locales/fa.js +114 -0
  536. package/node_modules/zod/v4/locales/fi.cjs +139 -0
  537. package/node_modules/zod/v4/locales/fi.d.cts +5 -0
  538. package/node_modules/zod/v4/locales/fi.d.ts +4 -0
  539. package/node_modules/zod/v4/locales/fi.js +112 -0
  540. package/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
  541. package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
  542. package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
  543. package/node_modules/zod/v4/locales/fr-CA.js +107 -0
  544. package/node_modules/zod/v4/locales/fr.cjs +152 -0
  545. package/node_modules/zod/v4/locales/fr.d.cts +5 -0
  546. package/node_modules/zod/v4/locales/fr.d.ts +4 -0
  547. package/node_modules/zod/v4/locales/fr.js +125 -0
  548. package/node_modules/zod/v4/locales/he.cjs +241 -0
  549. package/node_modules/zod/v4/locales/he.d.cts +5 -0
  550. package/node_modules/zod/v4/locales/he.d.ts +4 -0
  551. package/node_modules/zod/v4/locales/he.js +214 -0
  552. package/node_modules/zod/v4/locales/hr.cjs +149 -0
  553. package/node_modules/zod/v4/locales/hr.d.cts +5 -0
  554. package/node_modules/zod/v4/locales/hr.d.ts +4 -0
  555. package/node_modules/zod/v4/locales/hr.js +122 -0
  556. package/node_modules/zod/v4/locales/hu.cjs +135 -0
  557. package/node_modules/zod/v4/locales/hu.d.cts +5 -0
  558. package/node_modules/zod/v4/locales/hu.d.ts +4 -0
  559. package/node_modules/zod/v4/locales/hu.js +108 -0
  560. package/node_modules/zod/v4/locales/hy.cjs +174 -0
  561. package/node_modules/zod/v4/locales/hy.d.cts +5 -0
  562. package/node_modules/zod/v4/locales/hy.d.ts +4 -0
  563. package/node_modules/zod/v4/locales/hy.js +147 -0
  564. package/node_modules/zod/v4/locales/id.cjs +133 -0
  565. package/node_modules/zod/v4/locales/id.d.cts +5 -0
  566. package/node_modules/zod/v4/locales/id.d.ts +4 -0
  567. package/node_modules/zod/v4/locales/id.js +106 -0
  568. package/node_modules/zod/v4/locales/index.cjs +111 -0
  569. package/node_modules/zod/v4/locales/index.d.cts +52 -0
  570. package/node_modules/zod/v4/locales/index.d.ts +52 -0
  571. package/node_modules/zod/v4/locales/index.js +52 -0
  572. package/node_modules/zod/v4/locales/is.cjs +136 -0
  573. package/node_modules/zod/v4/locales/is.d.cts +5 -0
  574. package/node_modules/zod/v4/locales/is.d.ts +4 -0
  575. package/node_modules/zod/v4/locales/is.js +109 -0
  576. package/node_modules/zod/v4/locales/it.cjs +135 -0
  577. package/node_modules/zod/v4/locales/it.d.cts +5 -0
  578. package/node_modules/zod/v4/locales/it.d.ts +4 -0
  579. package/node_modules/zod/v4/locales/it.js +108 -0
  580. package/node_modules/zod/v4/locales/ja.cjs +134 -0
  581. package/node_modules/zod/v4/locales/ja.d.cts +5 -0
  582. package/node_modules/zod/v4/locales/ja.d.ts +4 -0
  583. package/node_modules/zod/v4/locales/ja.js +107 -0
  584. package/node_modules/zod/v4/locales/ka.cjs +139 -0
  585. package/node_modules/zod/v4/locales/ka.d.cts +5 -0
  586. package/node_modules/zod/v4/locales/ka.d.ts +4 -0
  587. package/node_modules/zod/v4/locales/ka.js +112 -0
  588. package/node_modules/zod/v4/locales/kh.cjs +12 -0
  589. package/node_modules/zod/v4/locales/kh.d.cts +5 -0
  590. package/node_modules/zod/v4/locales/kh.d.ts +5 -0
  591. package/node_modules/zod/v4/locales/kh.js +5 -0
  592. package/node_modules/zod/v4/locales/km.cjs +137 -0
  593. package/node_modules/zod/v4/locales/km.d.cts +5 -0
  594. package/node_modules/zod/v4/locales/km.d.ts +4 -0
  595. package/node_modules/zod/v4/locales/km.js +110 -0
  596. package/node_modules/zod/v4/locales/ko.cjs +138 -0
  597. package/node_modules/zod/v4/locales/ko.d.cts +5 -0
  598. package/node_modules/zod/v4/locales/ko.d.ts +4 -0
  599. package/node_modules/zod/v4/locales/ko.js +111 -0
  600. package/node_modules/zod/v4/locales/lt.cjs +230 -0
  601. package/node_modules/zod/v4/locales/lt.d.cts +5 -0
  602. package/node_modules/zod/v4/locales/lt.d.ts +4 -0
  603. package/node_modules/zod/v4/locales/lt.js +203 -0
  604. package/node_modules/zod/v4/locales/mk.cjs +136 -0
  605. package/node_modules/zod/v4/locales/mk.d.cts +5 -0
  606. package/node_modules/zod/v4/locales/mk.d.ts +4 -0
  607. package/node_modules/zod/v4/locales/mk.js +109 -0
  608. package/node_modules/zod/v4/locales/ms.cjs +134 -0
  609. package/node_modules/zod/v4/locales/ms.d.cts +5 -0
  610. package/node_modules/zod/v4/locales/ms.d.ts +4 -0
  611. package/node_modules/zod/v4/locales/ms.js +107 -0
  612. package/node_modules/zod/v4/locales/nl.cjs +137 -0
  613. package/node_modules/zod/v4/locales/nl.d.cts +5 -0
  614. package/node_modules/zod/v4/locales/nl.d.ts +4 -0
  615. package/node_modules/zod/v4/locales/nl.js +110 -0
  616. package/node_modules/zod/v4/locales/no.cjs +135 -0
  617. package/node_modules/zod/v4/locales/no.d.cts +5 -0
  618. package/node_modules/zod/v4/locales/no.d.ts +4 -0
  619. package/node_modules/zod/v4/locales/no.js +108 -0
  620. package/node_modules/zod/v4/locales/ota.cjs +136 -0
  621. package/node_modules/zod/v4/locales/ota.d.cts +5 -0
  622. package/node_modules/zod/v4/locales/ota.d.ts +4 -0
  623. package/node_modules/zod/v4/locales/ota.js +109 -0
  624. package/node_modules/zod/v4/locales/package.json +7 -0
  625. package/node_modules/zod/v4/locales/pl.cjs +136 -0
  626. package/node_modules/zod/v4/locales/pl.d.cts +5 -0
  627. package/node_modules/zod/v4/locales/pl.d.ts +4 -0
  628. package/node_modules/zod/v4/locales/pl.js +109 -0
  629. package/node_modules/zod/v4/locales/ps.cjs +141 -0
  630. package/node_modules/zod/v4/locales/ps.d.cts +5 -0
  631. package/node_modules/zod/v4/locales/ps.d.ts +4 -0
  632. package/node_modules/zod/v4/locales/ps.js +114 -0
  633. package/node_modules/zod/v4/locales/pt.cjs +135 -0
  634. package/node_modules/zod/v4/locales/pt.d.cts +5 -0
  635. package/node_modules/zod/v4/locales/pt.d.ts +4 -0
  636. package/node_modules/zod/v4/locales/pt.js +108 -0
  637. package/node_modules/zod/v4/locales/ro.cjs +146 -0
  638. package/node_modules/zod/v4/locales/ro.d.cts +5 -0
  639. package/node_modules/zod/v4/locales/ro.d.ts +4 -0
  640. package/node_modules/zod/v4/locales/ro.js +119 -0
  641. package/node_modules/zod/v4/locales/ru.cjs +183 -0
  642. package/node_modules/zod/v4/locales/ru.d.cts +5 -0
  643. package/node_modules/zod/v4/locales/ru.d.ts +4 -0
  644. package/node_modules/zod/v4/locales/ru.js +156 -0
  645. package/node_modules/zod/v4/locales/sl.cjs +136 -0
  646. package/node_modules/zod/v4/locales/sl.d.cts +5 -0
  647. package/node_modules/zod/v4/locales/sl.d.ts +4 -0
  648. package/node_modules/zod/v4/locales/sl.js +109 -0
  649. package/node_modules/zod/v4/locales/sv.cjs +137 -0
  650. package/node_modules/zod/v4/locales/sv.d.cts +5 -0
  651. package/node_modules/zod/v4/locales/sv.d.ts +4 -0
  652. package/node_modules/zod/v4/locales/sv.js +110 -0
  653. package/node_modules/zod/v4/locales/ta.cjs +137 -0
  654. package/node_modules/zod/v4/locales/ta.d.cts +5 -0
  655. package/node_modules/zod/v4/locales/ta.d.ts +4 -0
  656. package/node_modules/zod/v4/locales/ta.js +110 -0
  657. package/node_modules/zod/v4/locales/th.cjs +137 -0
  658. package/node_modules/zod/v4/locales/th.d.cts +5 -0
  659. package/node_modules/zod/v4/locales/th.d.ts +4 -0
  660. package/node_modules/zod/v4/locales/th.js +110 -0
  661. package/node_modules/zod/v4/locales/tr.cjs +132 -0
  662. package/node_modules/zod/v4/locales/tr.d.cts +5 -0
  663. package/node_modules/zod/v4/locales/tr.d.ts +4 -0
  664. package/node_modules/zod/v4/locales/tr.js +105 -0
  665. package/node_modules/zod/v4/locales/ua.cjs +12 -0
  666. package/node_modules/zod/v4/locales/ua.d.cts +5 -0
  667. package/node_modules/zod/v4/locales/ua.d.ts +5 -0
  668. package/node_modules/zod/v4/locales/ua.js +5 -0
  669. package/node_modules/zod/v4/locales/uk.cjs +135 -0
  670. package/node_modules/zod/v4/locales/uk.d.cts +5 -0
  671. package/node_modules/zod/v4/locales/uk.d.ts +4 -0
  672. package/node_modules/zod/v4/locales/uk.js +108 -0
  673. package/node_modules/zod/v4/locales/ur.cjs +137 -0
  674. package/node_modules/zod/v4/locales/ur.d.cts +5 -0
  675. package/node_modules/zod/v4/locales/ur.d.ts +4 -0
  676. package/node_modules/zod/v4/locales/ur.js +110 -0
  677. package/node_modules/zod/v4/locales/uz.cjs +137 -0
  678. package/node_modules/zod/v4/locales/uz.d.cts +5 -0
  679. package/node_modules/zod/v4/locales/uz.d.ts +4 -0
  680. package/node_modules/zod/v4/locales/uz.js +110 -0
  681. package/node_modules/zod/v4/locales/vi.cjs +135 -0
  682. package/node_modules/zod/v4/locales/vi.d.cts +5 -0
  683. package/node_modules/zod/v4/locales/vi.d.ts +4 -0
  684. package/node_modules/zod/v4/locales/vi.js +108 -0
  685. package/node_modules/zod/v4/locales/yo.cjs +134 -0
  686. package/node_modules/zod/v4/locales/yo.d.cts +5 -0
  687. package/node_modules/zod/v4/locales/yo.d.ts +4 -0
  688. package/node_modules/zod/v4/locales/yo.js +107 -0
  689. package/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
  690. package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
  691. package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
  692. package/node_modules/zod/v4/locales/zh-CN.js +109 -0
  693. package/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
  694. package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
  695. package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
  696. package/node_modules/zod/v4/locales/zh-TW.js +107 -0
  697. package/node_modules/zod/v4/mini/checks.cjs +34 -0
  698. package/node_modules/zod/v4/mini/checks.d.cts +1 -0
  699. package/node_modules/zod/v4/mini/checks.d.ts +1 -0
  700. package/node_modules/zod/v4/mini/checks.js +1 -0
  701. package/node_modules/zod/v4/mini/coerce.cjs +52 -0
  702. package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
  703. package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
  704. package/node_modules/zod/v4/mini/coerce.js +22 -0
  705. package/node_modules/zod/v4/mini/external.cjs +63 -0
  706. package/node_modules/zod/v4/mini/external.d.cts +13 -0
  707. package/node_modules/zod/v4/mini/external.d.ts +13 -0
  708. package/node_modules/zod/v4/mini/external.js +14 -0
  709. package/node_modules/zod/v4/mini/index.cjs +32 -0
  710. package/node_modules/zod/v4/mini/index.d.cts +3 -0
  711. package/node_modules/zod/v4/mini/index.d.ts +3 -0
  712. package/node_modules/zod/v4/mini/index.js +3 -0
  713. package/node_modules/zod/v4/mini/iso.cjs +64 -0
  714. package/node_modules/zod/v4/mini/iso.d.cts +22 -0
  715. package/node_modules/zod/v4/mini/iso.d.ts +22 -0
  716. package/node_modules/zod/v4/mini/iso.js +34 -0
  717. package/node_modules/zod/v4/mini/package.json +7 -0
  718. package/node_modules/zod/v4/mini/parse.cjs +16 -0
  719. package/node_modules/zod/v4/mini/parse.d.cts +1 -0
  720. package/node_modules/zod/v4/mini/parse.d.ts +1 -0
  721. package/node_modules/zod/v4/mini/parse.js +1 -0
  722. package/node_modules/zod/v4/mini/schemas.cjs +1083 -0
  723. package/node_modules/zod/v4/mini/schemas.d.cts +445 -0
  724. package/node_modules/zod/v4/mini/schemas.d.ts +445 -0
  725. package/node_modules/zod/v4/mini/schemas.js +961 -0
  726. package/node_modules/zod/v4/package.json +7 -0
  727. package/node_modules/zod/v4-mini/index.cjs +32 -0
  728. package/node_modules/zod/v4-mini/index.d.cts +3 -0
  729. package/node_modules/zod/v4-mini/index.d.ts +3 -0
  730. package/node_modules/zod/v4-mini/index.js +3 -0
  731. package/node_modules/zod/v4-mini/package.json +7 -0
  732. package/package.json +1 -1
  733. package/src/__tests__/upgrade-local.test.ts +443 -0
  734. package/src/commands/client.ts +277 -100
  735. package/src/commands/exec.ts +2 -2
  736. package/src/commands/flags.ts +1 -1
  737. package/src/commands/logs.ts +1 -2
  738. package/src/commands/ps.ts +1 -2
  739. package/src/commands/retire.ts +1 -2
  740. package/src/commands/roadmap.ts +8 -10
  741. package/src/commands/rollback.ts +1 -2
  742. package/src/commands/ssh.ts +1 -2
  743. package/src/commands/teleport.ts +6 -7
  744. package/src/commands/upgrade.ts +351 -25
  745. package/src/lib/assistant-config.ts +56 -48
  746. package/src/lib/confirm-action.ts +4 -0
  747. package/src/lib/local.ts +204 -24
  748. package/src/lib/terminal-session.ts +2 -2
  749. package/src/lib/upgrade-lifecycle.ts +29 -16
  750. 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",
@@ -69,6 +69,32 @@ describe("isActiveAssistant", () => {
69
69
  expect(isActiveAssistant([lockfilePath], "active")).toBe(true);
70
70
  });
71
71
 
72
+ test("returns true for the sole assistant when activeAssistant is empty", () => {
73
+ const dir = makeTempDir();
74
+ const lockfilePath = path.join(dir, "lockfile.json");
75
+ fs.writeFileSync(
76
+ lockfilePath,
77
+ JSON.stringify({
78
+ assistants: [{ assistantId: "only" }],
79
+ activeAssistant: null,
80
+ }),
81
+ );
82
+ expect(isActiveAssistant([lockfilePath], "only")).toBe(true);
83
+ });
84
+
85
+ test("returns true for the sole assistant when activeAssistant is stale", () => {
86
+ const dir = makeTempDir();
87
+ const lockfilePath = path.join(dir, "lockfile.json");
88
+ fs.writeFileSync(
89
+ lockfilePath,
90
+ JSON.stringify({
91
+ assistants: [{ assistantId: "only" }],
92
+ activeAssistant: "missing",
93
+ }),
94
+ );
95
+ expect(isActiveAssistant([lockfilePath], "only")).toBe(true);
96
+ });
97
+
72
98
  test("returns false for a non-active assistant", () => {
73
99
  const dir = makeTempDir();
74
100
  const lockfilePath = path.join(dir, "lockfile.json");
@@ -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
  });
@@ -39,6 +39,8 @@ export { runSleep } from "./sleep";
39
39
  export type { SleepResult } from "./sleep";
40
40
  export { runWake } from "./wake";
41
41
  export type { WakeOptions, WakeResult } from "./wake";
42
+ export { runUpgrade } from "./upgrade";
43
+ export type { UpgradeOptions, UpgradeResult } from "./upgrade";
42
44
  export { getLocalAssistantStatus } from "./status";
43
45
  export type {
44
46
  LocalAssistantRuntimeState,
@@ -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,30 @@ 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
- assistants: [{ assistantId: "asst_1", localUrl: "http://127.0.0.1:7777" }],
68
+ assistants: [
69
+ { assistantId: "asst_1", localUrl: "http://127.0.0.1:7777" },
70
+ ],
61
71
  });
62
- expect(parsed.assistants).toEqual([{ assistantId: "asst_1" }]);
72
+ expect(parsed.assistants).toEqual([
73
+ { assistantId: "asst_1", cloud: "local" },
74
+ ]);
63
75
  });
64
76
 
65
77
  test("drops malformed entries but salvages valid siblings", () => {
@@ -111,7 +123,9 @@ describe("parseLockfile", () => {
111
123
  });
112
124
 
113
125
  test("coerces a non-string activeAssistant to null", () => {
114
- expect(parseLockfile({ assistants: [], activeAssistant: 7 }).activeAssistant).toBeNull();
126
+ expect(
127
+ parseLockfile({ assistants: [], activeAssistant: 7 }).activeAssistant,
128
+ ).toBeNull();
115
129
  expect(parseLockfile({ assistants: [] }).activeAssistant).toBeNull();
116
130
  });
117
131
 
@@ -124,9 +138,9 @@ describe("parseLockfile", () => {
124
138
  });
125
139
 
126
140
  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.
141
+ // assistantId is the only required field. A mistyped optional field is
142
+ // dropped from the result, but the entry survives on the strength of its
143
+ // identity. (A mistyped `cloud` is dropped, then re-normalized to `local`.)
130
144
  const raw = {
131
145
  assistants: [
132
146
  { assistantId: "asst_1", cloud: 7, runtimeUrl: "http://a" }, // cloud not a string
@@ -135,7 +149,7 @@ describe("parseLockfile", () => {
135
149
  activeAssistant: null,
136
150
  };
137
151
  expect(parseLockfile(raw).assistants).toEqual([
138
- { assistantId: "asst_1", runtimeUrl: "http://a" },
152
+ { assistantId: "asst_1", cloud: "local", runtimeUrl: "http://a" },
139
153
  { assistantId: "asst_2", cloud: "local" },
140
154
  ]);
141
155
  });
@@ -189,4 +203,126 @@ describe("parseLockfile", () => {
189
203
  });
190
204
  expect(assistant?.resources).toBeUndefined();
191
205
  });
206
+
207
+ test("keeps local runtime resource fields when well-typed", () => {
208
+ const raw = {
209
+ assistants: [
210
+ {
211
+ assistantId: "asst_1",
212
+ cloud: "local",
213
+ runtimeUrl: "http://a",
214
+ resources: {
215
+ gatewayPort: 7777,
216
+ daemonPort: 7778,
217
+ runtimeVersion: "v0.8.13",
218
+ runtimeInstallDir: "/tmp/vellum/runtime/0.8.13",
219
+ },
220
+ },
221
+ ],
222
+ activeAssistant: null,
223
+ };
224
+ expect(parseLockfile(raw).assistants[0]?.resources).toEqual({
225
+ gatewayPort: 7777,
226
+ daemonPort: 7778,
227
+ runtimeVersion: "v0.8.13",
228
+ runtimeInstallDir: "/tmp/vellum/runtime/0.8.13",
229
+ });
230
+ });
231
+
232
+ test("strips sensitive and host-only fields from resources", () => {
233
+ const raw = {
234
+ assistants: [
235
+ {
236
+ assistantId: "asst_1",
237
+ cloud: "local",
238
+ resources: {
239
+ instanceDir: "/data",
240
+ gatewayPort: 7777,
241
+ daemonPort: 7778,
242
+ runtimeVersion: "v0.8.13",
243
+ runtimeInstallDir: "/tmp/vellum/runtime/0.8.13",
244
+ qdrantPort: 7779,
245
+ cesPort: 7780,
246
+ signingKey: "hunter2",
247
+ },
248
+ },
249
+ ],
250
+ activeAssistant: null,
251
+ };
252
+ expect(parseLockfile(raw).assistants[0]?.resources).toEqual({
253
+ instanceDir: "/data",
254
+ gatewayPort: 7777,
255
+ daemonPort: 7778,
256
+ runtimeVersion: "v0.8.13",
257
+ runtimeInstallDir: "/tmp/vellum/runtime/0.8.13",
258
+ });
259
+ });
260
+
261
+ test("resolves cloud from legacy remote markers when the field is absent", () => {
262
+ // Pre-`cloud` remote entries encode topology in `project` (gcp) / `sshUser`
263
+ // (custom). The parser resolves these so a cloudless remote entry is never
264
+ // mistaken for a local one; a cloudless entry with no markers normalizes to
265
+ // `local`. The raw markers are not carried through.
266
+ const raw = {
267
+ assistants: [
268
+ { assistantId: "gcp_1", project: "my-proj", runtimeUrl: "https://a" },
269
+ { assistantId: "ssh_1", sshUser: "deploy", runtimeUrl: "https://b" },
270
+ { assistantId: "local_1", runtimeUrl: "http://localhost:7830" },
271
+ ],
272
+ activeAssistant: null,
273
+ };
274
+ expect(parseLockfile(raw).assistants).toEqual([
275
+ { assistantId: "gcp_1", cloud: "gcp", runtimeUrl: "https://a" },
276
+ { assistantId: "ssh_1", cloud: "custom", runtimeUrl: "https://b" },
277
+ { assistantId: "local_1", cloud: "local", runtimeUrl: "http://localhost:7830" },
278
+ ]);
279
+ });
280
+
281
+ test("prefers an explicit cloud over legacy remote markers", () => {
282
+ const raw = {
283
+ assistants: [{ assistantId: "a", cloud: "vellum", project: "stale-proj" }],
284
+ activeAssistant: null,
285
+ };
286
+ expect(parseLockfile(raw).assistants).toEqual([
287
+ { assistantId: "a", cloud: "vellum" },
288
+ ]);
289
+ });
290
+ });
291
+
292
+ describe("resolveCloud", () => {
293
+ test("prefers an explicit cloud", () => {
294
+ expect(resolveCloud({ cloud: "vellum", project: "p", sshUser: "u" })).toBe(
295
+ "vellum",
296
+ );
297
+ });
298
+
299
+ test("falls back to legacy markers, then local", () => {
300
+ expect(resolveCloud({ project: "p" })).toBe("gcp");
301
+ expect(resolveCloud({ sshUser: "u" })).toBe("custom");
302
+ expect(resolveCloud({})).toBe("local");
303
+ expect(resolveCloud({ cloud: "" })).toBe("local");
304
+ });
305
+ });
306
+
307
+ describe("taxonomy", () => {
308
+ test("KNOWN_CLOUDS covers the documented topologies", () => {
309
+ expect(KNOWN_CLOUDS).toEqual([
310
+ "local",
311
+ "docker",
312
+ "apple-container",
313
+ "vellum",
314
+ "gcp",
315
+ "aws",
316
+ "custom",
317
+ "paired",
318
+ ]);
319
+ });
320
+
321
+ test("SENSITIVE_KEYS lists the redacted secrets", () => {
322
+ expect(SENSITIVE_KEYS).toEqual([
323
+ "signingKey",
324
+ "bearerToken",
325
+ "guardianBootstrapSecret",
326
+ ]);
327
+ });
192
328
  });
@@ -1,52 +1,127 @@
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, the instance directory, and the local runtime install metadata.
82
+ * Richer host-only fields (other ports, the signing key) live on the CLI's
83
+ * type and are stripped from this shape.
84
+ */
85
+ export const LocalAssistantResourcesSchema = z.object({
86
+ instanceDir: z.string().optional(),
87
+ gatewayPort: z.number(),
88
+ daemonPort: z.number(),
89
+ runtimeVersion: z.string().optional(),
90
+ runtimeInstallDir: z.string().optional(),
91
+ });
92
+ export type LocalAssistantResources = z.infer<
93
+ typeof LocalAssistantResourcesSchema
94
+ >;
95
+
96
+ /**
97
+ * The renderer-safe shape of one assistant entry. `assistantId` is the only
98
+ * required field — the identity every reader looks entries up by — and every
99
+ * other field is salvaged by {@link parseLockfile}. The CLI extends this with
100
+ * its host-only and sensitive fields; this base carries only what is safe to
101
+ * surface in the renderer.
102
+ */
103
+ export const LockfileAssistantSchema = z.object({
104
+ assistantId: z.string(),
105
+ name: z.string().optional(),
106
+ cloud: z.string().optional(),
107
+ runtimeUrl: z.string().optional(),
108
+ species: z.string().optional(),
109
+ hatchedAt: z.string().optional(),
46
110
  /** Owning org for platform assistants; absent for local ones. */
47
- organizationId?: string;
48
- resources?: LocalAssistantResources;
49
- }
111
+ organizationId: z.string().optional(),
112
+ resources: LocalAssistantResourcesSchema.optional(),
113
+ });
114
+
115
+ /**
116
+ * A validated, normalized assistant entry. Identical to the schema's inferred
117
+ * shape except `cloud` is always present — {@link parseLockfile} resolves it for
118
+ * every entry (defaulting to "local"), so readers never special-case its
119
+ * absence.
120
+ */
121
+ export type LockfileAssistant = Omit<
122
+ z.infer<typeof LockfileAssistantSchema>,
123
+ "cloud"
124
+ > & { cloud: Cloud };
50
125
 
51
126
  export interface Lockfile {
52
127
  assistants: LockfileAssistant[];
@@ -55,8 +130,8 @@ export interface Lockfile {
55
130
 
56
131
  /**
57
132
  * 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.
133
+ * Carries no HTTP-style status — hosts map that away because the renderer
134
+ * surfaces failures by message alone.
60
135
  */
61
136
  export type LockfileWriteResult =
62
137
  | { ok: true; lockfile: Lockfile }
@@ -66,49 +141,30 @@ function isRecord(value: unknown): value is Record<string, unknown> {
66
141
  return typeof value === "object" && value !== null && !Array.isArray(value);
67
142
  }
68
143
 
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
144
  /**
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.
145
+ * Validate and normalize a single entry. Returns null only when `assistantId`
146
+ * is missing or not a string; any other entry is salvaged — each modeled field
147
+ * is copied only when present and well-typed (a malformed optional field is
148
+ * dropped without discarding the entry), unknown fields are ignored, and
149
+ * `cloud` is resolved from the raw markers so a cloudless remote entry is never
150
+ * mistaken for a local one and a markerless entry defaults to "local".
88
151
  */
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
- if (typeof value.cloud === "string") assistant.cloud = value.cloud;
96
- if (typeof value.runtimeUrl === "string") assistant.runtimeUrl = value.runtimeUrl;
97
- if (typeof value.species === "string") assistant.species = value.species;
98
- if (typeof value.hatchedAt === "string") assistant.hatchedAt = value.hatchedAt;
99
- if (typeof value.organizationId === "string") assistant.organizationId = value.organizationId;
100
- const resources = parseResources(value.resources);
101
- if (resources) assistant.resources = resources;
102
- return assistant;
152
+ function parseAssistant(raw: unknown): LockfileAssistant | null {
153
+ if (!isRecord(raw) || typeof raw.assistantId !== "string") return null;
154
+ const out: Record<string, unknown> = {};
155
+ for (const [key, field] of Object.entries(LockfileAssistantSchema.shape)) {
156
+ const result = (field as z.ZodType).safeParse(raw[key]);
157
+ if (result.success && result.data !== undefined) out[key] = result.data;
158
+ }
159
+ out.cloud = resolveCloud(raw);
160
+ return out as LockfileAssistant;
103
161
  }
104
162
 
105
163
  /**
106
- * Coerce parsed JSON into a validated `Lockfile`. Total and non-throwing:
107
- * individual assistant entries that fail validation are dropped (so one
108
- * malformed entry can't discard the whole file), a missing/non-array
109
- * `assistants` becomes `[]`, and a non-string `activeAssistant` becomes
110
- * `null`. Callers pass the result through unchanged; the only failure modes a
111
- * host surfaces are I/O and JSON-parse errors, handled by `getLockfileData`.
164
+ * Coerce parsed JSON into a validated {@link Lockfile}. Total and non-throwing:
165
+ * entries that fail validation are dropped (one malformed entry can't discard
166
+ * the file), a missing or non-array `assistants` becomes `[]`, and a non-string
167
+ * `activeAssistant` becomes null.
112
168
  */
113
169
  export function parseLockfile(raw: unknown): Lockfile {
114
170
  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
  });
@@ -94,8 +94,15 @@ export function isActiveAssistant(
94
94
  ): boolean {
95
95
  for (const candidate of lockfilePaths) {
96
96
  try {
97
- const data = JSON.parse(fs.readFileSync(candidate, "utf-8")) as Record<string, unknown>;
98
- return data.activeAssistant === assistantId;
97
+ const data = JSON.parse(fs.readFileSync(candidate, "utf-8")) as Record<
98
+ string,
99
+ unknown
100
+ >;
101
+ if (data.activeAssistant === assistantId) return true;
102
+ const assistants = data.assistants;
103
+ if (!Array.isArray(assistants) || assistants.length !== 1) return false;
104
+ const [onlyAssistant] = assistants as Array<Record<string, unknown>>;
105
+ return onlyAssistant?.assistantId === assistantId;
99
106
  } catch {
100
107
  continue;
101
108
  }
@@ -20,6 +20,7 @@ const DEFAULT_PORTS = {
20
20
 
21
21
  export type LocalAssistantRuntimeState =
22
22
  | "healthy"
23
+ | "upgrading"
23
24
  | "sleeping"
24
25
  | "starting"
25
26
  | "crashed"