clawdlets 0.3.4 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1231) hide show
  1. package/dist/config/template-source.json +2 -2
  2. package/dist/main.mjs +931 -445
  3. package/package.json +8 -7
  4. package/vendor/@clawdlets/cattle-core/dist/index.d.ts +10 -0
  5. package/vendor/@clawdlets/cattle-core/dist/index.js +10 -0
  6. package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/cattle-cloudinit.d.ts +6 -0
  7. package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/cattle-cloudinit.js +47 -1
  8. package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/cattle-planner.js +7 -1
  9. package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/hcloud-labels.js +28 -2
  10. package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/persona-loader.js +1 -1
  11. package/vendor/@clawdlets/cattle-core/package.json +33 -0
  12. package/vendor/@clawdlets/core/dist/assets/clawdbot-config.schema.json +7872 -0
  13. package/{node_modules → vendor}/@clawdlets/core/dist/assets/opentofu/main.tf +1 -7
  14. package/{node_modules → vendor}/@clawdlets/core/dist/doctor/deploy-checks.js +45 -49
  15. package/{node_modules → vendor}/@clawdlets/core/dist/doctor/repo-checks.js +38 -0
  16. package/vendor/@clawdlets/core/dist/lib/clawdbot-config-invariants.d.ts +19 -0
  17. package/vendor/@clawdlets/core/dist/lib/clawdbot-config-invariants.js +130 -0
  18. package/vendor/@clawdlets/core/dist/lib/clawdbot-schema-validate.d.ts +6 -0
  19. package/vendor/@clawdlets/core/dist/lib/clawdbot-schema-validate.js +35 -0
  20. package/vendor/@clawdlets/core/dist/lib/clawdbot-schema.d.ts +9 -0
  21. package/vendor/@clawdlets/core/dist/lib/clawdbot-schema.js +5 -0
  22. package/vendor/@clawdlets/core/dist/lib/clawdlets-config-legacy.d.ts +3 -0
  23. package/vendor/@clawdlets/core/dist/lib/clawdlets-config-legacy.js +64 -0
  24. package/vendor/@clawdlets/core/dist/lib/clawdlets-config-migrate.d.ts +8 -0
  25. package/vendor/@clawdlets/core/dist/lib/clawdlets-config-migrate.js +152 -0
  26. package/vendor/@clawdlets/core/dist/lib/clawdlets-config-validate.d.ts +19 -0
  27. package/vendor/@clawdlets/core/dist/lib/clawdlets-config-validate.js +138 -0
  28. package/{node_modules → vendor}/@clawdlets/core/dist/lib/clawdlets-config.d.ts +31 -7
  29. package/{node_modules → vendor}/@clawdlets/core/dist/lib/clawdlets-config.js +27 -76
  30. package/vendor/@clawdlets/core/dist/lib/concurrency.d.ts +6 -0
  31. package/vendor/@clawdlets/core/dist/lib/concurrency.js +18 -0
  32. package/vendor/@clawdlets/core/dist/lib/config-patch.d.ts +10 -0
  33. package/vendor/@clawdlets/core/dist/lib/config-patch.js +55 -0
  34. package/{node_modules → vendor}/@clawdlets/core/dist/lib/deploy-creds.d.ts +7 -0
  35. package/{node_modules → vendor}/@clawdlets/core/dist/lib/deploy-creds.js +14 -0
  36. package/vendor/@clawdlets/core/dist/lib/env-var-refs.d.ts +6 -0
  37. package/vendor/@clawdlets/core/dist/lib/env-var-refs.js +78 -0
  38. package/vendor/@clawdlets/core/dist/lib/fleet-secrets-plan-helpers.d.ts +79 -0
  39. package/vendor/@clawdlets/core/dist/lib/fleet-secrets-plan-helpers.js +457 -0
  40. package/vendor/@clawdlets/core/dist/lib/fleet-secrets-plan.d.ts +30 -0
  41. package/vendor/@clawdlets/core/dist/lib/fleet-secrets-plan.js +418 -0
  42. package/vendor/@clawdlets/core/dist/lib/fleet-workspaces.d.ts +8 -0
  43. package/vendor/@clawdlets/core/dist/lib/fleet-workspaces.js +17 -0
  44. package/vendor/@clawdlets/core/dist/lib/object-path.d.ts +4 -0
  45. package/vendor/@clawdlets/core/dist/lib/object-path.js +55 -0
  46. package/{node_modules → vendor}/@clawdlets/core/dist/lib/opentofu.js +1 -5
  47. package/vendor/@clawdlets/core/dist/lib/project-init.d.ts +26 -0
  48. package/vendor/@clawdlets/core/dist/lib/project-init.js +254 -0
  49. package/vendor/@clawdlets/core/dist/lib/run-constants.d.ts +4 -0
  50. package/vendor/@clawdlets/core/dist/lib/run-constants.js +20 -0
  51. package/vendor/@clawdlets/core/dist/lib/run-types.d.ts +48 -0
  52. package/vendor/@clawdlets/core/dist/lib/run-types.js +13 -0
  53. package/vendor/@clawdlets/core/dist/lib/safe-record.d.ts +7 -0
  54. package/vendor/@clawdlets/core/dist/lib/safe-record.js +13 -0
  55. package/vendor/@clawdlets/core/dist/lib/secret-wiring.d.ts +39 -0
  56. package/vendor/@clawdlets/core/dist/lib/secret-wiring.js +39 -0
  57. package/vendor/@clawdlets/core/dist/lib/secrets-allowlist.d.ts +10 -0
  58. package/vendor/@clawdlets/core/dist/lib/secrets-allowlist.js +21 -0
  59. package/vendor/@clawdlets/core/dist/lib/secrets-autowire.d.ts +26 -0
  60. package/vendor/@clawdlets/core/dist/lib/secrets-autowire.js +97 -0
  61. package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-init.d.ts +1 -6
  62. package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-init.js +21 -37
  63. package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-migrate.js +1 -1
  64. package/vendor/@clawdlets/core/dist/lib/secrets-plan.d.ts +172 -0
  65. package/vendor/@clawdlets/core/dist/lib/secrets-plan.js +62 -0
  66. package/vendor/@clawdlets/core/dist/lib/ssh-files.d.ts +3 -0
  67. package/vendor/@clawdlets/core/dist/lib/ssh-files.js +33 -0
  68. package/{node_modules → vendor}/@clawdlets/core/dist/lib/template-source.js +3 -2
  69. package/vendor/@clawdlets/core/dist/lib/yaml-scalar.d.ts +10 -0
  70. package/{node_modules → vendor}/@clawdlets/core/dist/lib/yaml-scalar.js +17 -0
  71. package/{node_modules → vendor}/@clawdlets/core/dist/repo-layout.d.ts +4 -0
  72. package/{node_modules → vendor}/@clawdlets/core/dist/repo-layout.js +11 -1
  73. package/{node_modules → vendor}/@clawdlets/core/package.json +5 -1
  74. package/vendor/@clawdlets/shared/dist/assets/llm-providers.json +255 -0
  75. package/vendor/@clawdlets/shared/dist/index.d.ts +3 -0
  76. package/vendor/@clawdlets/shared/dist/index.js +3 -0
  77. package/{node_modules/@clawdlets/core → vendor/@clawdlets/shared}/dist/lib/identifiers.js +2 -2
  78. package/vendor/@clawdlets/shared/dist/lib/llm-provider-env.d.ts +18 -0
  79. package/vendor/@clawdlets/shared/dist/lib/llm-provider-env.js +100 -0
  80. package/vendor/@clawdlets/shared/package.json +29 -0
  81. package/node_modules/@clawdlets/core/dist/doctor/cattle-checks.d.ts.map +0 -1
  82. package/node_modules/@clawdlets/core/dist/doctor/cattle-checks.js.map +0 -1
  83. package/node_modules/@clawdlets/core/dist/doctor/deploy-checks.d.ts.map +0 -1
  84. package/node_modules/@clawdlets/core/dist/doctor/deploy-checks.js.map +0 -1
  85. package/node_modules/@clawdlets/core/dist/doctor/repo-checks.d.ts.map +0 -1
  86. package/node_modules/@clawdlets/core/dist/doctor/repo-checks.js.map +0 -1
  87. package/node_modules/@clawdlets/core/dist/doctor/types.d.ts.map +0 -1
  88. package/node_modules/@clawdlets/core/dist/doctor/types.js.map +0 -1
  89. package/node_modules/@clawdlets/core/dist/doctor/util.d.ts.map +0 -1
  90. package/node_modules/@clawdlets/core/dist/doctor/util.js.map +0 -1
  91. package/node_modules/@clawdlets/core/dist/doctor.d.ts.map +0 -1
  92. package/node_modules/@clawdlets/core/dist/doctor.js.map +0 -1
  93. package/node_modules/@clawdlets/core/dist/index.d.ts.map +0 -1
  94. package/node_modules/@clawdlets/core/dist/index.js.map +0 -1
  95. package/node_modules/@clawdlets/core/dist/lib/age-keygen.d.ts.map +0 -1
  96. package/node_modules/@clawdlets/core/dist/lib/age-keygen.js.map +0 -1
  97. package/node_modules/@clawdlets/core/dist/lib/age.d.ts.map +0 -1
  98. package/node_modules/@clawdlets/core/dist/lib/age.js.map +0 -1
  99. package/node_modules/@clawdlets/core/dist/lib/base-flake.d.ts.map +0 -1
  100. package/node_modules/@clawdlets/core/dist/lib/base-flake.js.map +0 -1
  101. package/node_modules/@clawdlets/core/dist/lib/cattle-cloudinit.d.ts.map +0 -1
  102. package/node_modules/@clawdlets/core/dist/lib/cattle-cloudinit.js.map +0 -1
  103. package/node_modules/@clawdlets/core/dist/lib/cattle-planner.d.ts.map +0 -1
  104. package/node_modules/@clawdlets/core/dist/lib/cattle-planner.js.map +0 -1
  105. package/node_modules/@clawdlets/core/dist/lib/cattle-task.d.ts.map +0 -1
  106. package/node_modules/@clawdlets/core/dist/lib/cattle-task.js.map +0 -1
  107. package/node_modules/@clawdlets/core/dist/lib/clawdlets-config.d.ts.map +0 -1
  108. package/node_modules/@clawdlets/core/dist/lib/clawdlets-config.js.map +0 -1
  109. package/node_modules/@clawdlets/core/dist/lib/context.d.ts.map +0 -1
  110. package/node_modules/@clawdlets/core/dist/lib/context.js.map +0 -1
  111. package/node_modules/@clawdlets/core/dist/lib/deploy-creds.d.ts.map +0 -1
  112. package/node_modules/@clawdlets/core/dist/lib/deploy-creds.js.map +0 -1
  113. package/node_modules/@clawdlets/core/dist/lib/docs-index.d.ts.map +0 -1
  114. package/node_modules/@clawdlets/core/dist/lib/docs-index.js.map +0 -1
  115. package/node_modules/@clawdlets/core/dist/lib/dot-path.d.ts.map +0 -1
  116. package/node_modules/@clawdlets/core/dist/lib/dot-path.js.map +0 -1
  117. package/node_modules/@clawdlets/core/dist/lib/dotenv-file.d.ts.map +0 -1
  118. package/node_modules/@clawdlets/core/dist/lib/dotenv-file.js.map +0 -1
  119. package/node_modules/@clawdlets/core/dist/lib/fleet-nix-eval.d.ts.map +0 -1
  120. package/node_modules/@clawdlets/core/dist/lib/fleet-nix-eval.js.map +0 -1
  121. package/node_modules/@clawdlets/core/dist/lib/fleet-policy.d.ts.map +0 -1
  122. package/node_modules/@clawdlets/core/dist/lib/fleet-policy.js.map +0 -1
  123. package/node_modules/@clawdlets/core/dist/lib/fleet-secrets.d.ts +0 -23
  124. package/node_modules/@clawdlets/core/dist/lib/fleet-secrets.d.ts.map +0 -1
  125. package/node_modules/@clawdlets/core/dist/lib/fleet-secrets.js +0 -114
  126. package/node_modules/@clawdlets/core/dist/lib/fleet-secrets.js.map +0 -1
  127. package/node_modules/@clawdlets/core/dist/lib/fs-private.d.ts.map +0 -1
  128. package/node_modules/@clawdlets/core/dist/lib/fs-private.js.map +0 -1
  129. package/node_modules/@clawdlets/core/dist/lib/fs-safe.d.ts.map +0 -1
  130. package/node_modules/@clawdlets/core/dist/lib/fs-safe.js.map +0 -1
  131. package/node_modules/@clawdlets/core/dist/lib/git.d.ts.map +0 -1
  132. package/node_modules/@clawdlets/core/dist/lib/git.js.map +0 -1
  133. package/node_modules/@clawdlets/core/dist/lib/github.d.ts.map +0 -1
  134. package/node_modules/@clawdlets/core/dist/lib/github.js.map +0 -1
  135. package/node_modules/@clawdlets/core/dist/lib/hcloud-cattle.d.ts.map +0 -1
  136. package/node_modules/@clawdlets/core/dist/lib/hcloud-cattle.js.map +0 -1
  137. package/node_modules/@clawdlets/core/dist/lib/hcloud-labels.d.ts.map +0 -1
  138. package/node_modules/@clawdlets/core/dist/lib/hcloud-labels.js.map +0 -1
  139. package/node_modules/@clawdlets/core/dist/lib/hcloud.d.ts.map +0 -1
  140. package/node_modules/@clawdlets/core/dist/lib/hcloud.js.map +0 -1
  141. package/node_modules/@clawdlets/core/dist/lib/host-resolve.d.ts.map +0 -1
  142. package/node_modules/@clawdlets/core/dist/lib/host-resolve.js.map +0 -1
  143. package/node_modules/@clawdlets/core/dist/lib/identifiers.d.ts.map +0 -1
  144. package/node_modules/@clawdlets/core/dist/lib/identifiers.js.map +0 -1
  145. package/node_modules/@clawdlets/core/dist/lib/inline-script-ban.d.ts.map +0 -1
  146. package/node_modules/@clawdlets/core/dist/lib/inline-script-ban.js.map +0 -1
  147. package/node_modules/@clawdlets/core/dist/lib/llm-provider-env.d.ts +0 -4
  148. package/node_modules/@clawdlets/core/dist/lib/llm-provider-env.d.ts.map +0 -1
  149. package/node_modules/@clawdlets/core/dist/lib/llm-provider-env.js +0 -25
  150. package/node_modules/@clawdlets/core/dist/lib/llm-provider-env.js.map +0 -1
  151. package/node_modules/@clawdlets/core/dist/lib/mkpasswd.d.ts.map +0 -1
  152. package/node_modules/@clawdlets/core/dist/lib/mkpasswd.js.map +0 -1
  153. package/node_modules/@clawdlets/core/dist/lib/nix-flakes.d.ts.map +0 -1
  154. package/node_modules/@clawdlets/core/dist/lib/nix-flakes.js.map +0 -1
  155. package/node_modules/@clawdlets/core/dist/lib/nix-host.d.ts.map +0 -1
  156. package/node_modules/@clawdlets/core/dist/lib/nix-host.js.map +0 -1
  157. package/node_modules/@clawdlets/core/dist/lib/nix-tools.d.ts.map +0 -1
  158. package/node_modules/@clawdlets/core/dist/lib/nix-tools.js.map +0 -1
  159. package/node_modules/@clawdlets/core/dist/lib/opentofu.d.ts.map +0 -1
  160. package/node_modules/@clawdlets/core/dist/lib/opentofu.js.map +0 -1
  161. package/node_modules/@clawdlets/core/dist/lib/path-expand.d.ts.map +0 -1
  162. package/node_modules/@clawdlets/core/dist/lib/path-expand.js.map +0 -1
  163. package/node_modules/@clawdlets/core/dist/lib/persona-loader.d.ts.map +0 -1
  164. package/node_modules/@clawdlets/core/dist/lib/persona-loader.js.map +0 -1
  165. package/node_modules/@clawdlets/core/dist/lib/repo.d.ts.map +0 -1
  166. package/node_modules/@clawdlets/core/dist/lib/repo.js.map +0 -1
  167. package/node_modules/@clawdlets/core/dist/lib/run.d.ts.map +0 -1
  168. package/node_modules/@clawdlets/core/dist/lib/run.js.map +0 -1
  169. package/node_modules/@clawdlets/core/dist/lib/secrets-init.d.ts.map +0 -1
  170. package/node_modules/@clawdlets/core/dist/lib/secrets-init.js.map +0 -1
  171. package/node_modules/@clawdlets/core/dist/lib/secrets-migrate.d.ts.map +0 -1
  172. package/node_modules/@clawdlets/core/dist/lib/secrets-migrate.js.map +0 -1
  173. package/node_modules/@clawdlets/core/dist/lib/secrets-policy.d.ts.map +0 -1
  174. package/node_modules/@clawdlets/core/dist/lib/secrets-policy.js.map +0 -1
  175. package/node_modules/@clawdlets/core/dist/lib/secrets-tar.d.ts.map +0 -1
  176. package/node_modules/@clawdlets/core/dist/lib/secrets-tar.js.map +0 -1
  177. package/node_modules/@clawdlets/core/dist/lib/sops-config.d.ts.map +0 -1
  178. package/node_modules/@clawdlets/core/dist/lib/sops-config.js.map +0 -1
  179. package/node_modules/@clawdlets/core/dist/lib/sops-path.d.ts.map +0 -1
  180. package/node_modules/@clawdlets/core/dist/lib/sops-path.js.map +0 -1
  181. package/node_modules/@clawdlets/core/dist/lib/sops-rules.d.ts.map +0 -1
  182. package/node_modules/@clawdlets/core/dist/lib/sops-rules.js.map +0 -1
  183. package/node_modules/@clawdlets/core/dist/lib/sops.d.ts.map +0 -1
  184. package/node_modules/@clawdlets/core/dist/lib/sops.js.map +0 -1
  185. package/node_modules/@clawdlets/core/dist/lib/ssh-remote.d.ts.map +0 -1
  186. package/node_modules/@clawdlets/core/dist/lib/ssh-remote.js.map +0 -1
  187. package/node_modules/@clawdlets/core/dist/lib/ssh.d.ts.map +0 -1
  188. package/node_modules/@clawdlets/core/dist/lib/ssh.js.map +0 -1
  189. package/node_modules/@clawdlets/core/dist/lib/template-source.d.ts.map +0 -1
  190. package/node_modules/@clawdlets/core/dist/lib/template-source.js.map +0 -1
  191. package/node_modules/@clawdlets/core/dist/lib/template-test-dir.d.ts.map +0 -1
  192. package/node_modules/@clawdlets/core/dist/lib/template-test-dir.js.map +0 -1
  193. package/node_modules/@clawdlets/core/dist/lib/ttl.d.ts.map +0 -1
  194. package/node_modules/@clawdlets/core/dist/lib/ttl.js.map +0 -1
  195. package/node_modules/@clawdlets/core/dist/lib/yaml-scalar.d.ts +0 -5
  196. package/node_modules/@clawdlets/core/dist/lib/yaml-scalar.d.ts.map +0 -1
  197. package/node_modules/@clawdlets/core/dist/lib/yaml-scalar.js.map +0 -1
  198. package/node_modules/@clawdlets/core/dist/repo-layout.d.ts.map +0 -1
  199. package/node_modules/@clawdlets/core/dist/repo-layout.js.map +0 -1
  200. package/node_modules/dotenv/CHANGELOG.md +0 -598
  201. package/node_modules/dotenv/LICENSE +0 -23
  202. package/node_modules/dotenv/README-es.md +0 -405
  203. package/node_modules/dotenv/README.md +0 -692
  204. package/node_modules/dotenv/SECURITY.md +0 -1
  205. package/node_modules/dotenv/config.d.ts +0 -1
  206. package/node_modules/dotenv/config.js +0 -9
  207. package/node_modules/dotenv/lib/cli-options.js +0 -17
  208. package/node_modules/dotenv/lib/env-options.js +0 -28
  209. package/node_modules/dotenv/lib/main.d.ts +0 -179
  210. package/node_modules/dotenv/lib/main.js +0 -434
  211. package/node_modules/dotenv/package.json +0 -62
  212. package/node_modules/yaml/LICENSE +0 -13
  213. package/node_modules/yaml/README.md +0 -172
  214. package/node_modules/yaml/bin.mjs +0 -11
  215. package/node_modules/yaml/browser/dist/compose/compose-collection.js +0 -88
  216. package/node_modules/yaml/browser/dist/compose/compose-doc.js +0 -43
  217. package/node_modules/yaml/browser/dist/compose/compose-node.js +0 -102
  218. package/node_modules/yaml/browser/dist/compose/compose-scalar.js +0 -86
  219. package/node_modules/yaml/browser/dist/compose/composer.js +0 -217
  220. package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +0 -115
  221. package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +0 -198
  222. package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +0 -49
  223. package/node_modules/yaml/browser/dist/compose/resolve-end.js +0 -37
  224. package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +0 -207
  225. package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +0 -223
  226. package/node_modules/yaml/browser/dist/compose/resolve-props.js +0 -146
  227. package/node_modules/yaml/browser/dist/compose/util-contains-newline.js +0 -34
  228. package/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +0 -26
  229. package/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +0 -15
  230. package/node_modules/yaml/browser/dist/compose/util-map-includes.js +0 -13
  231. package/node_modules/yaml/browser/dist/doc/Document.js +0 -335
  232. package/node_modules/yaml/browser/dist/doc/anchors.js +0 -71
  233. package/node_modules/yaml/browser/dist/doc/applyReviver.js +0 -55
  234. package/node_modules/yaml/browser/dist/doc/createNode.js +0 -88
  235. package/node_modules/yaml/browser/dist/doc/directives.js +0 -176
  236. package/node_modules/yaml/browser/dist/errors.js +0 -57
  237. package/node_modules/yaml/browser/dist/index.js +0 -17
  238. package/node_modules/yaml/browser/dist/log.js +0 -11
  239. package/node_modules/yaml/browser/dist/nodes/Alias.js +0 -114
  240. package/node_modules/yaml/browser/dist/nodes/Collection.js +0 -147
  241. package/node_modules/yaml/browser/dist/nodes/Node.js +0 -38
  242. package/node_modules/yaml/browser/dist/nodes/Pair.js +0 -36
  243. package/node_modules/yaml/browser/dist/nodes/Scalar.js +0 -24
  244. package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +0 -144
  245. package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +0 -113
  246. package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +0 -63
  247. package/node_modules/yaml/browser/dist/nodes/identity.js +0 -36
  248. package/node_modules/yaml/browser/dist/nodes/toJS.js +0 -37
  249. package/node_modules/yaml/browser/dist/parse/cst-scalar.js +0 -214
  250. package/node_modules/yaml/browser/dist/parse/cst-stringify.js +0 -61
  251. package/node_modules/yaml/browser/dist/parse/cst-visit.js +0 -97
  252. package/node_modules/yaml/browser/dist/parse/cst.js +0 -98
  253. package/node_modules/yaml/browser/dist/parse/lexer.js +0 -717
  254. package/node_modules/yaml/browser/dist/parse/line-counter.js +0 -39
  255. package/node_modules/yaml/browser/dist/parse/parser.js +0 -967
  256. package/node_modules/yaml/browser/dist/public-api.js +0 -102
  257. package/node_modules/yaml/browser/dist/schema/Schema.js +0 -37
  258. package/node_modules/yaml/browser/dist/schema/common/map.js +0 -17
  259. package/node_modules/yaml/browser/dist/schema/common/null.js +0 -15
  260. package/node_modules/yaml/browser/dist/schema/common/seq.js +0 -17
  261. package/node_modules/yaml/browser/dist/schema/common/string.js +0 -14
  262. package/node_modules/yaml/browser/dist/schema/core/bool.js +0 -19
  263. package/node_modules/yaml/browser/dist/schema/core/float.js +0 -43
  264. package/node_modules/yaml/browser/dist/schema/core/int.js +0 -38
  265. package/node_modules/yaml/browser/dist/schema/core/schema.js +0 -23
  266. package/node_modules/yaml/browser/dist/schema/json/schema.js +0 -62
  267. package/node_modules/yaml/browser/dist/schema/tags.js +0 -96
  268. package/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +0 -58
  269. package/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +0 -26
  270. package/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +0 -46
  271. package/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +0 -71
  272. package/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +0 -64
  273. package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +0 -74
  274. package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +0 -78
  275. package/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +0 -39
  276. package/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +0 -93
  277. package/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +0 -101
  278. package/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +0 -146
  279. package/node_modules/yaml/browser/dist/stringify/stringify.js +0 -128
  280. package/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +0 -143
  281. package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +0 -20
  282. package/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +0 -85
  283. package/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +0 -24
  284. package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +0 -150
  285. package/node_modules/yaml/browser/dist/stringify/stringifyString.js +0 -336
  286. package/node_modules/yaml/browser/dist/util.js +0 -11
  287. package/node_modules/yaml/browser/dist/visit.js +0 -233
  288. package/node_modules/yaml/browser/index.js +0 -5
  289. package/node_modules/yaml/browser/package.json +0 -3
  290. package/node_modules/yaml/dist/cli.d.ts +0 -8
  291. package/node_modules/yaml/dist/cli.mjs +0 -201
  292. package/node_modules/yaml/dist/compose/compose-collection.d.ts +0 -11
  293. package/node_modules/yaml/dist/compose/compose-collection.js +0 -90
  294. package/node_modules/yaml/dist/compose/compose-doc.d.ts +0 -7
  295. package/node_modules/yaml/dist/compose/compose-doc.js +0 -45
  296. package/node_modules/yaml/dist/compose/compose-node.d.ts +0 -29
  297. package/node_modules/yaml/dist/compose/compose-node.js +0 -105
  298. package/node_modules/yaml/dist/compose/compose-scalar.d.ts +0 -5
  299. package/node_modules/yaml/dist/compose/compose-scalar.js +0 -88
  300. package/node_modules/yaml/dist/compose/composer.d.ts +0 -63
  301. package/node_modules/yaml/dist/compose/composer.js +0 -222
  302. package/node_modules/yaml/dist/compose/resolve-block-map.d.ts +0 -6
  303. package/node_modules/yaml/dist/compose/resolve-block-map.js +0 -117
  304. package/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +0 -11
  305. package/node_modules/yaml/dist/compose/resolve-block-scalar.js +0 -200
  306. package/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +0 -6
  307. package/node_modules/yaml/dist/compose/resolve-block-seq.js +0 -51
  308. package/node_modules/yaml/dist/compose/resolve-end.d.ts +0 -6
  309. package/node_modules/yaml/dist/compose/resolve-end.js +0 -39
  310. package/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +0 -7
  311. package/node_modules/yaml/dist/compose/resolve-flow-collection.js +0 -209
  312. package/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +0 -10
  313. package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +0 -225
  314. package/node_modules/yaml/dist/compose/resolve-props.d.ts +0 -23
  315. package/node_modules/yaml/dist/compose/resolve-props.js +0 -148
  316. package/node_modules/yaml/dist/compose/util-contains-newline.d.ts +0 -2
  317. package/node_modules/yaml/dist/compose/util-contains-newline.js +0 -36
  318. package/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +0 -2
  319. package/node_modules/yaml/dist/compose/util-empty-scalar-position.js +0 -28
  320. package/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +0 -3
  321. package/node_modules/yaml/dist/compose/util-flow-indent-check.js +0 -17
  322. package/node_modules/yaml/dist/compose/util-map-includes.d.ts +0 -4
  323. package/node_modules/yaml/dist/compose/util-map-includes.js +0 -15
  324. package/node_modules/yaml/dist/doc/Document.d.ts +0 -141
  325. package/node_modules/yaml/dist/doc/Document.js +0 -337
  326. package/node_modules/yaml/dist/doc/anchors.d.ts +0 -24
  327. package/node_modules/yaml/dist/doc/anchors.js +0 -76
  328. package/node_modules/yaml/dist/doc/applyReviver.d.ts +0 -9
  329. package/node_modules/yaml/dist/doc/applyReviver.js +0 -57
  330. package/node_modules/yaml/dist/doc/createNode.d.ts +0 -17
  331. package/node_modules/yaml/dist/doc/createNode.js +0 -90
  332. package/node_modules/yaml/dist/doc/directives.d.ts +0 -49
  333. package/node_modules/yaml/dist/doc/directives.js +0 -178
  334. package/node_modules/yaml/dist/errors.d.ts +0 -21
  335. package/node_modules/yaml/dist/errors.js +0 -62
  336. package/node_modules/yaml/dist/index.d.ts +0 -25
  337. package/node_modules/yaml/dist/index.js +0 -50
  338. package/node_modules/yaml/dist/log.d.ts +0 -3
  339. package/node_modules/yaml/dist/log.js +0 -19
  340. package/node_modules/yaml/dist/nodes/Alias.d.ts +0 -29
  341. package/node_modules/yaml/dist/nodes/Alias.js +0 -116
  342. package/node_modules/yaml/dist/nodes/Collection.d.ts +0 -73
  343. package/node_modules/yaml/dist/nodes/Collection.js +0 -151
  344. package/node_modules/yaml/dist/nodes/Node.d.ts +0 -53
  345. package/node_modules/yaml/dist/nodes/Node.js +0 -40
  346. package/node_modules/yaml/dist/nodes/Pair.d.ts +0 -22
  347. package/node_modules/yaml/dist/nodes/Pair.js +0 -39
  348. package/node_modules/yaml/dist/nodes/Scalar.d.ts +0 -43
  349. package/node_modules/yaml/dist/nodes/Scalar.js +0 -27
  350. package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +0 -53
  351. package/node_modules/yaml/dist/nodes/YAMLMap.js +0 -147
  352. package/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +0 -60
  353. package/node_modules/yaml/dist/nodes/YAMLSeq.js +0 -115
  354. package/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +0 -4
  355. package/node_modules/yaml/dist/nodes/addPairToJSMap.js +0 -65
  356. package/node_modules/yaml/dist/nodes/identity.d.ts +0 -23
  357. package/node_modules/yaml/dist/nodes/identity.js +0 -53
  358. package/node_modules/yaml/dist/nodes/toJS.d.ts +0 -29
  359. package/node_modules/yaml/dist/nodes/toJS.js +0 -39
  360. package/node_modules/yaml/dist/options.d.ts +0 -344
  361. package/node_modules/yaml/dist/parse/cst-scalar.d.ts +0 -64
  362. package/node_modules/yaml/dist/parse/cst-scalar.js +0 -218
  363. package/node_modules/yaml/dist/parse/cst-stringify.d.ts +0 -8
  364. package/node_modules/yaml/dist/parse/cst-stringify.js +0 -63
  365. package/node_modules/yaml/dist/parse/cst-visit.d.ts +0 -39
  366. package/node_modules/yaml/dist/parse/cst-visit.js +0 -99
  367. package/node_modules/yaml/dist/parse/cst.d.ts +0 -109
  368. package/node_modules/yaml/dist/parse/cst.js +0 -112
  369. package/node_modules/yaml/dist/parse/lexer.d.ts +0 -87
  370. package/node_modules/yaml/dist/parse/lexer.js +0 -719
  371. package/node_modules/yaml/dist/parse/line-counter.d.ts +0 -22
  372. package/node_modules/yaml/dist/parse/line-counter.js +0 -41
  373. package/node_modules/yaml/dist/parse/parser.d.ts +0 -84
  374. package/node_modules/yaml/dist/parse/parser.js +0 -972
  375. package/node_modules/yaml/dist/public-api.d.ts +0 -44
  376. package/node_modules/yaml/dist/public-api.js +0 -107
  377. package/node_modules/yaml/dist/schema/Schema.d.ts +0 -17
  378. package/node_modules/yaml/dist/schema/Schema.js +0 -39
  379. package/node_modules/yaml/dist/schema/common/map.d.ts +0 -2
  380. package/node_modules/yaml/dist/schema/common/map.js +0 -19
  381. package/node_modules/yaml/dist/schema/common/null.d.ts +0 -4
  382. package/node_modules/yaml/dist/schema/common/null.js +0 -17
  383. package/node_modules/yaml/dist/schema/common/seq.d.ts +0 -2
  384. package/node_modules/yaml/dist/schema/common/seq.js +0 -19
  385. package/node_modules/yaml/dist/schema/common/string.d.ts +0 -2
  386. package/node_modules/yaml/dist/schema/common/string.js +0 -16
  387. package/node_modules/yaml/dist/schema/core/bool.d.ts +0 -4
  388. package/node_modules/yaml/dist/schema/core/bool.js +0 -21
  389. package/node_modules/yaml/dist/schema/core/float.d.ts +0 -4
  390. package/node_modules/yaml/dist/schema/core/float.js +0 -47
  391. package/node_modules/yaml/dist/schema/core/int.d.ts +0 -4
  392. package/node_modules/yaml/dist/schema/core/int.js +0 -42
  393. package/node_modules/yaml/dist/schema/core/schema.d.ts +0 -1
  394. package/node_modules/yaml/dist/schema/core/schema.js +0 -25
  395. package/node_modules/yaml/dist/schema/json/schema.d.ts +0 -2
  396. package/node_modules/yaml/dist/schema/json/schema.js +0 -64
  397. package/node_modules/yaml/dist/schema/json-schema.d.ts +0 -69
  398. package/node_modules/yaml/dist/schema/tags.d.ts +0 -48
  399. package/node_modules/yaml/dist/schema/tags.js +0 -99
  400. package/node_modules/yaml/dist/schema/types.d.ts +0 -92
  401. package/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +0 -2
  402. package/node_modules/yaml/dist/schema/yaml-1.1/binary.js +0 -70
  403. package/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +0 -7
  404. package/node_modules/yaml/dist/schema/yaml-1.1/bool.js +0 -29
  405. package/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +0 -4
  406. package/node_modules/yaml/dist/schema/yaml-1.1/float.js +0 -50
  407. package/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +0 -5
  408. package/node_modules/yaml/dist/schema/yaml-1.1/int.js +0 -76
  409. package/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +0 -9
  410. package/node_modules/yaml/dist/schema/yaml-1.1/merge.js +0 -68
  411. package/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +0 -22
  412. package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +0 -77
  413. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +0 -10
  414. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +0 -82
  415. package/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +0 -1
  416. package/node_modules/yaml/dist/schema/yaml-1.1/schema.js +0 -41
  417. package/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +0 -28
  418. package/node_modules/yaml/dist/schema/yaml-1.1/set.js +0 -96
  419. package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +0 -6
  420. package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +0 -105
  421. package/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +0 -34
  422. package/node_modules/yaml/dist/stringify/foldFlowLines.js +0 -151
  423. package/node_modules/yaml/dist/stringify/stringify.d.ts +0 -21
  424. package/node_modules/yaml/dist/stringify/stringify.js +0 -131
  425. package/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +0 -17
  426. package/node_modules/yaml/dist/stringify/stringifyCollection.js +0 -145
  427. package/node_modules/yaml/dist/stringify/stringifyComment.d.ts +0 -10
  428. package/node_modules/yaml/dist/stringify/stringifyComment.js +0 -24
  429. package/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +0 -4
  430. package/node_modules/yaml/dist/stringify/stringifyDocument.js +0 -87
  431. package/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +0 -2
  432. package/node_modules/yaml/dist/stringify/stringifyNumber.js +0 -26
  433. package/node_modules/yaml/dist/stringify/stringifyPair.d.ts +0 -3
  434. package/node_modules/yaml/dist/stringify/stringifyPair.js +0 -152
  435. package/node_modules/yaml/dist/stringify/stringifyString.d.ts +0 -9
  436. package/node_modules/yaml/dist/stringify/stringifyString.js +0 -338
  437. package/node_modules/yaml/dist/test-events.d.ts +0 -4
  438. package/node_modules/yaml/dist/test-events.js +0 -134
  439. package/node_modules/yaml/dist/util.d.ts +0 -16
  440. package/node_modules/yaml/dist/util.js +0 -28
  441. package/node_modules/yaml/dist/visit.d.ts +0 -102
  442. package/node_modules/yaml/dist/visit.js +0 -236
  443. package/node_modules/yaml/package.json +0 -97
  444. package/node_modules/yaml/util.js +0 -2
  445. package/node_modules/zod/LICENSE +0 -21
  446. package/node_modules/zod/README.md +0 -208
  447. package/node_modules/zod/index.cjs +0 -33
  448. package/node_modules/zod/index.d.cts +0 -4
  449. package/node_modules/zod/index.d.ts +0 -4
  450. package/node_modules/zod/index.js +0 -4
  451. package/node_modules/zod/locales/index.cjs +0 -17
  452. package/node_modules/zod/locales/index.d.cts +0 -1
  453. package/node_modules/zod/locales/index.d.ts +0 -1
  454. package/node_modules/zod/locales/index.js +0 -1
  455. package/node_modules/zod/locales/package.json +0 -6
  456. package/node_modules/zod/mini/index.cjs +0 -17
  457. package/node_modules/zod/mini/index.d.cts +0 -1
  458. package/node_modules/zod/mini/index.d.ts +0 -1
  459. package/node_modules/zod/mini/index.js +0 -1
  460. package/node_modules/zod/mini/package.json +0 -6
  461. package/node_modules/zod/package.json +0 -135
  462. package/node_modules/zod/src/index.ts +0 -4
  463. package/node_modules/zod/src/locales/index.ts +0 -1
  464. package/node_modules/zod/src/mini/index.ts +0 -1
  465. package/node_modules/zod/src/v3/ZodError.ts +0 -330
  466. package/node_modules/zod/src/v3/benchmarks/datetime.ts +0 -58
  467. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +0 -80
  468. package/node_modules/zod/src/v3/benchmarks/index.ts +0 -59
  469. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +0 -57
  470. package/node_modules/zod/src/v3/benchmarks/object.ts +0 -69
  471. package/node_modules/zod/src/v3/benchmarks/primitives.ts +0 -162
  472. package/node_modules/zod/src/v3/benchmarks/realworld.ts +0 -63
  473. package/node_modules/zod/src/v3/benchmarks/string.ts +0 -55
  474. package/node_modules/zod/src/v3/benchmarks/union.ts +0 -80
  475. package/node_modules/zod/src/v3/errors.ts +0 -13
  476. package/node_modules/zod/src/v3/external.ts +0 -6
  477. package/node_modules/zod/src/v3/helpers/enumUtil.ts +0 -17
  478. package/node_modules/zod/src/v3/helpers/errorUtil.ts +0 -8
  479. package/node_modules/zod/src/v3/helpers/parseUtil.ts +0 -176
  480. package/node_modules/zod/src/v3/helpers/partialUtil.ts +0 -34
  481. package/node_modules/zod/src/v3/helpers/typeAliases.ts +0 -2
  482. package/node_modules/zod/src/v3/helpers/util.ts +0 -224
  483. package/node_modules/zod/src/v3/index.ts +0 -4
  484. package/node_modules/zod/src/v3/locales/en.ts +0 -124
  485. package/node_modules/zod/src/v3/standard-schema.ts +0 -113
  486. package/node_modules/zod/src/v3/tests/Mocker.ts +0 -54
  487. package/node_modules/zod/src/v3/tests/all-errors.test.ts +0 -157
  488. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +0 -28
  489. package/node_modules/zod/src/v3/tests/array.test.ts +0 -71
  490. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +0 -388
  491. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +0 -46
  492. package/node_modules/zod/src/v3/tests/base.test.ts +0 -29
  493. package/node_modules/zod/src/v3/tests/bigint.test.ts +0 -55
  494. package/node_modules/zod/src/v3/tests/branded.test.ts +0 -53
  495. package/node_modules/zod/src/v3/tests/catch.test.ts +0 -220
  496. package/node_modules/zod/src/v3/tests/coerce.test.ts +0 -133
  497. package/node_modules/zod/src/v3/tests/complex.test.ts +0 -70
  498. package/node_modules/zod/src/v3/tests/custom.test.ts +0 -31
  499. package/node_modules/zod/src/v3/tests/date.test.ts +0 -32
  500. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +0 -186
  501. package/node_modules/zod/src/v3/tests/default.test.ts +0 -112
  502. package/node_modules/zod/src/v3/tests/description.test.ts +0 -33
  503. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +0 -315
  504. package/node_modules/zod/src/v3/tests/enum.test.ts +0 -80
  505. package/node_modules/zod/src/v3/tests/error.test.ts +0 -551
  506. package/node_modules/zod/src/v3/tests/firstparty.test.ts +0 -87
  507. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +0 -21
  508. package/node_modules/zod/src/v3/tests/function.test.ts +0 -261
  509. package/node_modules/zod/src/v3/tests/generics.test.ts +0 -48
  510. package/node_modules/zod/src/v3/tests/instanceof.test.ts +0 -37
  511. package/node_modules/zod/src/v3/tests/intersection.test.ts +0 -110
  512. package/node_modules/zod/src/v3/tests/language-server.source.ts +0 -76
  513. package/node_modules/zod/src/v3/tests/language-server.test.ts +0 -207
  514. package/node_modules/zod/src/v3/tests/literal.test.ts +0 -36
  515. package/node_modules/zod/src/v3/tests/map.test.ts +0 -110
  516. package/node_modules/zod/src/v3/tests/masking.test.ts +0 -4
  517. package/node_modules/zod/src/v3/tests/mocker.test.ts +0 -19
  518. package/node_modules/zod/src/v3/tests/nan.test.ts +0 -24
  519. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +0 -87
  520. package/node_modules/zod/src/v3/tests/nullable.test.ts +0 -42
  521. package/node_modules/zod/src/v3/tests/number.test.ts +0 -176
  522. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +0 -29
  523. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +0 -29
  524. package/node_modules/zod/src/v3/tests/object.test.ts +0 -434
  525. package/node_modules/zod/src/v3/tests/optional.test.ts +0 -42
  526. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +0 -23
  527. package/node_modules/zod/src/v3/tests/parser.test.ts +0 -41
  528. package/node_modules/zod/src/v3/tests/partials.test.ts +0 -243
  529. package/node_modules/zod/src/v3/tests/pickomit.test.ts +0 -111
  530. package/node_modules/zod/src/v3/tests/pipeline.test.ts +0 -29
  531. package/node_modules/zod/src/v3/tests/preprocess.test.ts +0 -186
  532. package/node_modules/zod/src/v3/tests/primitive.test.ts +0 -440
  533. package/node_modules/zod/src/v3/tests/promise.test.ts +0 -90
  534. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -194
  535. package/node_modules/zod/src/v3/tests/record.test.ts +0 -171
  536. package/node_modules/zod/src/v3/tests/recursive.test.ts +0 -197
  537. package/node_modules/zod/src/v3/tests/refine.test.ts +0 -313
  538. package/node_modules/zod/src/v3/tests/safeparse.test.ts +0 -27
  539. package/node_modules/zod/src/v3/tests/set.test.ts +0 -142
  540. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +0 -83
  541. package/node_modules/zod/src/v3/tests/string.test.ts +0 -916
  542. package/node_modules/zod/src/v3/tests/transformer.test.ts +0 -233
  543. package/node_modules/zod/src/v3/tests/tuple.test.ts +0 -90
  544. package/node_modules/zod/src/v3/tests/unions.test.ts +0 -57
  545. package/node_modules/zod/src/v3/tests/validations.test.ts +0 -133
  546. package/node_modules/zod/src/v3/tests/void.test.ts +0 -15
  547. package/node_modules/zod/src/v3/types.ts +0 -5138
  548. package/node_modules/zod/src/v4/classic/checks.ts +0 -32
  549. package/node_modules/zod/src/v4/classic/coerce.ts +0 -27
  550. package/node_modules/zod/src/v4/classic/compat.ts +0 -70
  551. package/node_modules/zod/src/v4/classic/errors.ts +0 -82
  552. package/node_modules/zod/src/v4/classic/external.ts +0 -51
  553. package/node_modules/zod/src/v4/classic/from-json-schema.ts +0 -643
  554. package/node_modules/zod/src/v4/classic/index.ts +0 -5
  555. package/node_modules/zod/src/v4/classic/iso.ts +0 -90
  556. package/node_modules/zod/src/v4/classic/parse.ts +0 -82
  557. package/node_modules/zod/src/v4/classic/schemas.ts +0 -2409
  558. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +0 -26
  559. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +0 -59
  560. package/node_modules/zod/src/v4/classic/tests/array.test.ts +0 -264
  561. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +0 -210
  562. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +0 -381
  563. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +0 -68
  564. package/node_modules/zod/src/v4/classic/tests/base.test.ts +0 -7
  565. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +0 -54
  566. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +0 -106
  567. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +0 -276
  568. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +0 -20
  569. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +0 -573
  570. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +0 -562
  571. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +0 -160
  572. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +0 -374
  573. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +0 -40
  574. package/node_modules/zod/src/v4/classic/tests/date.test.ts +0 -62
  575. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +0 -302
  576. package/node_modules/zod/src/v4/classic/tests/default.test.ts +0 -365
  577. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +0 -27
  578. package/node_modules/zod/src/v4/classic/tests/description.test.ts +0 -32
  579. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +0 -661
  580. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +0 -285
  581. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +0 -595
  582. package/node_modules/zod/src/v4/classic/tests/error.test.ts +0 -711
  583. package/node_modules/zod/src/v4/classic/tests/file.test.ts +0 -96
  584. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +0 -179
  585. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +0 -26
  586. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +0 -734
  587. package/node_modules/zod/src/v4/classic/tests/function.test.ts +0 -360
  588. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +0 -72
  589. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +0 -68
  590. package/node_modules/zod/src/v4/classic/tests/index.test.ts +0 -939
  591. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +0 -60
  592. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +0 -198
  593. package/node_modules/zod/src/v4/classic/tests/json.test.ts +0 -109
  594. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +0 -227
  595. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +0 -117
  596. package/node_modules/zod/src/v4/classic/tests/map.test.ts +0 -330
  597. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +0 -21
  598. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +0 -168
  599. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +0 -101
  600. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +0 -22
  601. package/node_modules/zod/src/v4/classic/tests/number.test.ts +0 -270
  602. package/node_modules/zod/src/v4/classic/tests/object.test.ts +0 -640
  603. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +0 -223
  604. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +0 -427
  605. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +0 -211
  606. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +0 -101
  607. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +0 -74
  608. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +0 -282
  609. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +0 -175
  610. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +0 -81
  611. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +0 -23
  612. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -252
  613. package/node_modules/zod/src/v4/classic/tests/record.test.ts +0 -600
  614. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +0 -582
  615. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +0 -570
  616. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +0 -243
  617. package/node_modules/zod/src/v4/classic/tests/set.test.ts +0 -181
  618. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +0 -134
  619. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +0 -125
  620. package/node_modules/zod/src/v4/classic/tests/string.test.ts +0 -1175
  621. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +0 -106
  622. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +0 -771
  623. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +0 -438
  624. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +0 -2975
  625. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +0 -361
  626. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +0 -183
  627. package/node_modules/zod/src/v4/classic/tests/union.test.ts +0 -219
  628. package/node_modules/zod/src/v4/classic/tests/url.test.ts +0 -13
  629. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +0 -283
  630. package/node_modules/zod/src/v4/classic/tests/void.test.ts +0 -12
  631. package/node_modules/zod/src/v4/core/api.ts +0 -1798
  632. package/node_modules/zod/src/v4/core/checks.ts +0 -1293
  633. package/node_modules/zod/src/v4/core/config.ts +0 -15
  634. package/node_modules/zod/src/v4/core/core.ts +0 -138
  635. package/node_modules/zod/src/v4/core/doc.ts +0 -44
  636. package/node_modules/zod/src/v4/core/errors.ts +0 -448
  637. package/node_modules/zod/src/v4/core/index.ts +0 -16
  638. package/node_modules/zod/src/v4/core/json-schema-generator.ts +0 -126
  639. package/node_modules/zod/src/v4/core/json-schema-processors.ts +0 -667
  640. package/node_modules/zod/src/v4/core/json-schema.ts +0 -147
  641. package/node_modules/zod/src/v4/core/parse.ts +0 -195
  642. package/node_modules/zod/src/v4/core/regexes.ts +0 -183
  643. package/node_modules/zod/src/v4/core/registries.ts +0 -105
  644. package/node_modules/zod/src/v4/core/schemas.ts +0 -4543
  645. package/node_modules/zod/src/v4/core/standard-schema.ts +0 -159
  646. package/node_modules/zod/src/v4/core/tests/extend.test.ts +0 -59
  647. package/node_modules/zod/src/v4/core/tests/index.test.ts +0 -46
  648. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +0 -124
  649. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +0 -22
  650. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +0 -181
  651. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +0 -379
  652. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +0 -46
  653. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +0 -128
  654. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +0 -69
  655. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +0 -83
  656. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +0 -67
  657. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +0 -45
  658. package/node_modules/zod/src/v4/core/to-json-schema.ts +0 -613
  659. package/node_modules/zod/src/v4/core/util.ts +0 -966
  660. package/node_modules/zod/src/v4/core/versions.ts +0 -5
  661. package/node_modules/zod/src/v4/core/zsf.ts +0 -323
  662. package/node_modules/zod/src/v4/index.ts +0 -4
  663. package/node_modules/zod/src/v4/locales/ar.ts +0 -115
  664. package/node_modules/zod/src/v4/locales/az.ts +0 -111
  665. package/node_modules/zod/src/v4/locales/be.ts +0 -176
  666. package/node_modules/zod/src/v4/locales/bg.ts +0 -128
  667. package/node_modules/zod/src/v4/locales/ca.ts +0 -116
  668. package/node_modules/zod/src/v4/locales/cs.ts +0 -118
  669. package/node_modules/zod/src/v4/locales/da.ts +0 -123
  670. package/node_modules/zod/src/v4/locales/de.ts +0 -116
  671. package/node_modules/zod/src/v4/locales/en.ts +0 -119
  672. package/node_modules/zod/src/v4/locales/eo.ts +0 -118
  673. package/node_modules/zod/src/v4/locales/es.ts +0 -141
  674. package/node_modules/zod/src/v4/locales/fa.ts +0 -126
  675. package/node_modules/zod/src/v4/locales/fi.ts +0 -121
  676. package/node_modules/zod/src/v4/locales/fr-CA.ts +0 -116
  677. package/node_modules/zod/src/v4/locales/fr.ts +0 -116
  678. package/node_modules/zod/src/v4/locales/he.ts +0 -246
  679. package/node_modules/zod/src/v4/locales/hu.ts +0 -117
  680. package/node_modules/zod/src/v4/locales/hy.ts +0 -164
  681. package/node_modules/zod/src/v4/locales/id.ts +0 -115
  682. package/node_modules/zod/src/v4/locales/index.ts +0 -49
  683. package/node_modules/zod/src/v4/locales/is.ts +0 -119
  684. package/node_modules/zod/src/v4/locales/it.ts +0 -116
  685. package/node_modules/zod/src/v4/locales/ja.ts +0 -114
  686. package/node_modules/zod/src/v4/locales/ka.ts +0 -123
  687. package/node_modules/zod/src/v4/locales/kh.ts +0 -7
  688. package/node_modules/zod/src/v4/locales/km.ts +0 -119
  689. package/node_modules/zod/src/v4/locales/ko.ts +0 -121
  690. package/node_modules/zod/src/v4/locales/lt.ts +0 -239
  691. package/node_modules/zod/src/v4/locales/mk.ts +0 -118
  692. package/node_modules/zod/src/v4/locales/ms.ts +0 -115
  693. package/node_modules/zod/src/v4/locales/nl.ts +0 -121
  694. package/node_modules/zod/src/v4/locales/no.ts +0 -116
  695. package/node_modules/zod/src/v4/locales/ota.ts +0 -117
  696. package/node_modules/zod/src/v4/locales/pl.ts +0 -118
  697. package/node_modules/zod/src/v4/locales/ps.ts +0 -126
  698. package/node_modules/zod/src/v4/locales/pt.ts +0 -116
  699. package/node_modules/zod/src/v4/locales/ru.ts +0 -176
  700. package/node_modules/zod/src/v4/locales/sl.ts +0 -118
  701. package/node_modules/zod/src/v4/locales/sv.ts +0 -119
  702. package/node_modules/zod/src/v4/locales/ta.ts +0 -118
  703. package/node_modules/zod/src/v4/locales/th.ts +0 -119
  704. package/node_modules/zod/src/v4/locales/tr.ts +0 -111
  705. package/node_modules/zod/src/v4/locales/ua.ts +0 -7
  706. package/node_modules/zod/src/v4/locales/uk.ts +0 -117
  707. package/node_modules/zod/src/v4/locales/ur.ts +0 -119
  708. package/node_modules/zod/src/v4/locales/uz.ts +0 -116
  709. package/node_modules/zod/src/v4/locales/vi.ts +0 -117
  710. package/node_modules/zod/src/v4/locales/yo.ts +0 -124
  711. package/node_modules/zod/src/v4/locales/zh-CN.ts +0 -116
  712. package/node_modules/zod/src/v4/locales/zh-TW.ts +0 -115
  713. package/node_modules/zod/src/v4/mini/checks.ts +0 -32
  714. package/node_modules/zod/src/v4/mini/coerce.ts +0 -27
  715. package/node_modules/zod/src/v4/mini/external.ts +0 -40
  716. package/node_modules/zod/src/v4/mini/index.ts +0 -3
  717. package/node_modules/zod/src/v4/mini/iso.ts +0 -66
  718. package/node_modules/zod/src/v4/mini/parse.ts +0 -14
  719. package/node_modules/zod/src/v4/mini/schemas.ts +0 -1916
  720. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +0 -24
  721. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +0 -129
  722. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +0 -94
  723. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +0 -144
  724. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +0 -529
  725. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +0 -36
  726. package/node_modules/zod/src/v4/mini/tests/error.test.ts +0 -22
  727. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +0 -5
  728. package/node_modules/zod/src/v4/mini/tests/index.test.ts +0 -963
  729. package/node_modules/zod/src/v4/mini/tests/number.test.ts +0 -95
  730. package/node_modules/zod/src/v4/mini/tests/object.test.ts +0 -227
  731. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +0 -43
  732. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +0 -275
  733. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +0 -50
  734. package/node_modules/zod/src/v4/mini/tests/string.test.ts +0 -347
  735. package/node_modules/zod/src/v4-mini/index.ts +0 -1
  736. package/node_modules/zod/v3/ZodError.cjs +0 -138
  737. package/node_modules/zod/v3/ZodError.d.cts +0 -164
  738. package/node_modules/zod/v3/ZodError.d.ts +0 -164
  739. package/node_modules/zod/v3/ZodError.js +0 -133
  740. package/node_modules/zod/v3/errors.cjs +0 -17
  741. package/node_modules/zod/v3/errors.d.cts +0 -5
  742. package/node_modules/zod/v3/errors.d.ts +0 -5
  743. package/node_modules/zod/v3/errors.js +0 -9
  744. package/node_modules/zod/v3/external.cjs +0 -22
  745. package/node_modules/zod/v3/external.d.cts +0 -6
  746. package/node_modules/zod/v3/external.d.ts +0 -6
  747. package/node_modules/zod/v3/external.js +0 -6
  748. package/node_modules/zod/v3/helpers/enumUtil.cjs +0 -2
  749. package/node_modules/zod/v3/helpers/enumUtil.d.cts +0 -8
  750. package/node_modules/zod/v3/helpers/enumUtil.d.ts +0 -8
  751. package/node_modules/zod/v3/helpers/enumUtil.js +0 -1
  752. package/node_modules/zod/v3/helpers/errorUtil.cjs +0 -9
  753. package/node_modules/zod/v3/helpers/errorUtil.d.cts +0 -9
  754. package/node_modules/zod/v3/helpers/errorUtil.d.ts +0 -9
  755. package/node_modules/zod/v3/helpers/errorUtil.js +0 -6
  756. package/node_modules/zod/v3/helpers/parseUtil.cjs +0 -124
  757. package/node_modules/zod/v3/helpers/parseUtil.d.cts +0 -78
  758. package/node_modules/zod/v3/helpers/parseUtil.d.ts +0 -78
  759. package/node_modules/zod/v3/helpers/parseUtil.js +0 -109
  760. package/node_modules/zod/v3/helpers/partialUtil.cjs +0 -2
  761. package/node_modules/zod/v3/helpers/partialUtil.d.cts +0 -8
  762. package/node_modules/zod/v3/helpers/partialUtil.d.ts +0 -8
  763. package/node_modules/zod/v3/helpers/partialUtil.js +0 -1
  764. package/node_modules/zod/v3/helpers/typeAliases.cjs +0 -2
  765. package/node_modules/zod/v3/helpers/typeAliases.d.cts +0 -2
  766. package/node_modules/zod/v3/helpers/typeAliases.d.ts +0 -2
  767. package/node_modules/zod/v3/helpers/typeAliases.js +0 -1
  768. package/node_modules/zod/v3/helpers/util.cjs +0 -137
  769. package/node_modules/zod/v3/helpers/util.d.cts +0 -85
  770. package/node_modules/zod/v3/helpers/util.d.ts +0 -85
  771. package/node_modules/zod/v3/helpers/util.js +0 -133
  772. package/node_modules/zod/v3/index.cjs +0 -33
  773. package/node_modules/zod/v3/index.d.cts +0 -4
  774. package/node_modules/zod/v3/index.d.ts +0 -4
  775. package/node_modules/zod/v3/index.js +0 -4
  776. package/node_modules/zod/v3/locales/en.cjs +0 -112
  777. package/node_modules/zod/v3/locales/en.d.cts +0 -3
  778. package/node_modules/zod/v3/locales/en.d.ts +0 -3
  779. package/node_modules/zod/v3/locales/en.js +0 -109
  780. package/node_modules/zod/v3/package.json +0 -6
  781. package/node_modules/zod/v3/standard-schema.cjs +0 -2
  782. package/node_modules/zod/v3/standard-schema.d.cts +0 -102
  783. package/node_modules/zod/v3/standard-schema.d.ts +0 -102
  784. package/node_modules/zod/v3/standard-schema.js +0 -1
  785. package/node_modules/zod/v3/types.cjs +0 -3777
  786. package/node_modules/zod/v3/types.d.cts +0 -1034
  787. package/node_modules/zod/v3/types.d.ts +0 -1034
  788. package/node_modules/zod/v3/types.js +0 -3695
  789. package/node_modules/zod/v4/classic/checks.cjs +0 -33
  790. package/node_modules/zod/v4/classic/checks.d.cts +0 -1
  791. package/node_modules/zod/v4/classic/checks.d.ts +0 -1
  792. package/node_modules/zod/v4/classic/checks.js +0 -1
  793. package/node_modules/zod/v4/classic/coerce.cjs +0 -47
  794. package/node_modules/zod/v4/classic/coerce.d.cts +0 -17
  795. package/node_modules/zod/v4/classic/coerce.d.ts +0 -17
  796. package/node_modules/zod/v4/classic/coerce.js +0 -17
  797. package/node_modules/zod/v4/classic/compat.cjs +0 -61
  798. package/node_modules/zod/v4/classic/compat.d.cts +0 -50
  799. package/node_modules/zod/v4/classic/compat.d.ts +0 -50
  800. package/node_modules/zod/v4/classic/compat.js +0 -31
  801. package/node_modules/zod/v4/classic/errors.cjs +0 -74
  802. package/node_modules/zod/v4/classic/errors.d.cts +0 -30
  803. package/node_modules/zod/v4/classic/errors.d.ts +0 -30
  804. package/node_modules/zod/v4/classic/errors.js +0 -48
  805. package/node_modules/zod/v4/classic/external.cjs +0 -73
  806. package/node_modules/zod/v4/classic/external.d.cts +0 -15
  807. package/node_modules/zod/v4/classic/external.d.ts +0 -15
  808. package/node_modules/zod/v4/classic/external.js +0 -20
  809. package/node_modules/zod/v4/classic/from-json-schema.cjs +0 -610
  810. package/node_modules/zod/v4/classic/from-json-schema.d.cts +0 -12
  811. package/node_modules/zod/v4/classic/from-json-schema.d.ts +0 -12
  812. package/node_modules/zod/v4/classic/from-json-schema.js +0 -584
  813. package/node_modules/zod/v4/classic/index.cjs +0 -33
  814. package/node_modules/zod/v4/classic/index.d.cts +0 -4
  815. package/node_modules/zod/v4/classic/index.d.ts +0 -4
  816. package/node_modules/zod/v4/classic/index.js +0 -4
  817. package/node_modules/zod/v4/classic/iso.cjs +0 -60
  818. package/node_modules/zod/v4/classic/iso.d.cts +0 -22
  819. package/node_modules/zod/v4/classic/iso.d.ts +0 -22
  820. package/node_modules/zod/v4/classic/iso.js +0 -30
  821. package/node_modules/zod/v4/classic/package.json +0 -6
  822. package/node_modules/zod/v4/classic/parse.cjs +0 -41
  823. package/node_modules/zod/v4/classic/parse.d.cts +0 -31
  824. package/node_modules/zod/v4/classic/parse.d.ts +0 -31
  825. package/node_modules/zod/v4/classic/parse.js +0 -15
  826. package/node_modules/zod/v4/classic/schemas.cjs +0 -1272
  827. package/node_modules/zod/v4/classic/schemas.d.cts +0 -739
  828. package/node_modules/zod/v4/classic/schemas.d.ts +0 -739
  829. package/node_modules/zod/v4/classic/schemas.js +0 -1157
  830. package/node_modules/zod/v4/core/api.cjs +0 -1222
  831. package/node_modules/zod/v4/core/api.d.cts +0 -304
  832. package/node_modules/zod/v4/core/api.d.ts +0 -304
  833. package/node_modules/zod/v4/core/api.js +0 -1082
  834. package/node_modules/zod/v4/core/checks.cjs +0 -601
  835. package/node_modules/zod/v4/core/checks.d.cts +0 -278
  836. package/node_modules/zod/v4/core/checks.d.ts +0 -278
  837. package/node_modules/zod/v4/core/checks.js +0 -575
  838. package/node_modules/zod/v4/core/core.cjs +0 -83
  839. package/node_modules/zod/v4/core/core.d.cts +0 -70
  840. package/node_modules/zod/v4/core/core.d.ts +0 -70
  841. package/node_modules/zod/v4/core/core.js +0 -76
  842. package/node_modules/zod/v4/core/doc.cjs +0 -39
  843. package/node_modules/zod/v4/core/doc.d.cts +0 -14
  844. package/node_modules/zod/v4/core/doc.d.ts +0 -14
  845. package/node_modules/zod/v4/core/doc.js +0 -35
  846. package/node_modules/zod/v4/core/errors.cjs +0 -213
  847. package/node_modules/zod/v4/core/errors.d.cts +0 -220
  848. package/node_modules/zod/v4/core/errors.d.ts +0 -220
  849. package/node_modules/zod/v4/core/errors.js +0 -182
  850. package/node_modules/zod/v4/core/index.cjs +0 -47
  851. package/node_modules/zod/v4/core/index.d.cts +0 -16
  852. package/node_modules/zod/v4/core/index.d.ts +0 -16
  853. package/node_modules/zod/v4/core/index.js +0 -16
  854. package/node_modules/zod/v4/core/json-schema-generator.cjs +0 -99
  855. package/node_modules/zod/v4/core/json-schema-generator.d.cts +0 -65
  856. package/node_modules/zod/v4/core/json-schema-generator.d.ts +0 -65
  857. package/node_modules/zod/v4/core/json-schema-generator.js +0 -95
  858. package/node_modules/zod/v4/core/json-schema-processors.cjs +0 -648
  859. package/node_modules/zod/v4/core/json-schema-processors.d.cts +0 -49
  860. package/node_modules/zod/v4/core/json-schema-processors.d.ts +0 -49
  861. package/node_modules/zod/v4/core/json-schema-processors.js +0 -605
  862. package/node_modules/zod/v4/core/json-schema.cjs +0 -2
  863. package/node_modules/zod/v4/core/json-schema.d.cts +0 -88
  864. package/node_modules/zod/v4/core/json-schema.d.ts +0 -88
  865. package/node_modules/zod/v4/core/json-schema.js +0 -1
  866. package/node_modules/zod/v4/core/package.json +0 -6
  867. package/node_modules/zod/v4/core/parse.cjs +0 -131
  868. package/node_modules/zod/v4/core/parse.d.cts +0 -49
  869. package/node_modules/zod/v4/core/parse.d.ts +0 -49
  870. package/node_modules/zod/v4/core/parse.js +0 -93
  871. package/node_modules/zod/v4/core/regexes.cjs +0 -166
  872. package/node_modules/zod/v4/core/regexes.d.cts +0 -79
  873. package/node_modules/zod/v4/core/regexes.d.ts +0 -79
  874. package/node_modules/zod/v4/core/regexes.js +0 -133
  875. package/node_modules/zod/v4/core/registries.cjs +0 -56
  876. package/node_modules/zod/v4/core/registries.d.cts +0 -35
  877. package/node_modules/zod/v4/core/registries.d.ts +0 -35
  878. package/node_modules/zod/v4/core/registries.js +0 -51
  879. package/node_modules/zod/v4/core/schemas.cjs +0 -2126
  880. package/node_modules/zod/v4/core/schemas.d.cts +0 -1146
  881. package/node_modules/zod/v4/core/schemas.d.ts +0 -1146
  882. package/node_modules/zod/v4/core/schemas.js +0 -2095
  883. package/node_modules/zod/v4/core/standard-schema.cjs +0 -2
  884. package/node_modules/zod/v4/core/standard-schema.d.cts +0 -126
  885. package/node_modules/zod/v4/core/standard-schema.d.ts +0 -126
  886. package/node_modules/zod/v4/core/standard-schema.js +0 -1
  887. package/node_modules/zod/v4/core/to-json-schema.cjs +0 -446
  888. package/node_modules/zod/v4/core/to-json-schema.d.cts +0 -114
  889. package/node_modules/zod/v4/core/to-json-schema.d.ts +0 -114
  890. package/node_modules/zod/v4/core/to-json-schema.js +0 -437
  891. package/node_modules/zod/v4/core/util.cjs +0 -710
  892. package/node_modules/zod/v4/core/util.d.cts +0 -199
  893. package/node_modules/zod/v4/core/util.d.ts +0 -199
  894. package/node_modules/zod/v4/core/util.js +0 -651
  895. package/node_modules/zod/v4/core/versions.cjs +0 -8
  896. package/node_modules/zod/v4/core/versions.d.cts +0 -5
  897. package/node_modules/zod/v4/core/versions.d.ts +0 -5
  898. package/node_modules/zod/v4/core/versions.js +0 -5
  899. package/node_modules/zod/v4/index.cjs +0 -22
  900. package/node_modules/zod/v4/index.d.cts +0 -3
  901. package/node_modules/zod/v4/index.d.ts +0 -3
  902. package/node_modules/zod/v4/index.js +0 -3
  903. package/node_modules/zod/v4/locales/ar.cjs +0 -133
  904. package/node_modules/zod/v4/locales/ar.d.cts +0 -5
  905. package/node_modules/zod/v4/locales/ar.d.ts +0 -4
  906. package/node_modules/zod/v4/locales/ar.js +0 -106
  907. package/node_modules/zod/v4/locales/az.cjs +0 -132
  908. package/node_modules/zod/v4/locales/az.d.cts +0 -5
  909. package/node_modules/zod/v4/locales/az.d.ts +0 -4
  910. package/node_modules/zod/v4/locales/az.js +0 -105
  911. package/node_modules/zod/v4/locales/be.cjs +0 -183
  912. package/node_modules/zod/v4/locales/be.d.cts +0 -5
  913. package/node_modules/zod/v4/locales/be.d.ts +0 -4
  914. package/node_modules/zod/v4/locales/be.js +0 -156
  915. package/node_modules/zod/v4/locales/bg.cjs +0 -147
  916. package/node_modules/zod/v4/locales/bg.d.cts +0 -5
  917. package/node_modules/zod/v4/locales/bg.d.ts +0 -4
  918. package/node_modules/zod/v4/locales/bg.js +0 -120
  919. package/node_modules/zod/v4/locales/ca.cjs +0 -134
  920. package/node_modules/zod/v4/locales/ca.d.cts +0 -5
  921. package/node_modules/zod/v4/locales/ca.d.ts +0 -4
  922. package/node_modules/zod/v4/locales/ca.js +0 -107
  923. package/node_modules/zod/v4/locales/cs.cjs +0 -138
  924. package/node_modules/zod/v4/locales/cs.d.cts +0 -5
  925. package/node_modules/zod/v4/locales/cs.d.ts +0 -4
  926. package/node_modules/zod/v4/locales/cs.js +0 -111
  927. package/node_modules/zod/v4/locales/da.cjs +0 -142
  928. package/node_modules/zod/v4/locales/da.d.cts +0 -5
  929. package/node_modules/zod/v4/locales/da.d.ts +0 -4
  930. package/node_modules/zod/v4/locales/da.js +0 -115
  931. package/node_modules/zod/v4/locales/de.cjs +0 -135
  932. package/node_modules/zod/v4/locales/de.d.cts +0 -5
  933. package/node_modules/zod/v4/locales/de.d.ts +0 -4
  934. package/node_modules/zod/v4/locales/de.js +0 -108
  935. package/node_modules/zod/v4/locales/en.cjs +0 -136
  936. package/node_modules/zod/v4/locales/en.d.cts +0 -5
  937. package/node_modules/zod/v4/locales/en.d.ts +0 -4
  938. package/node_modules/zod/v4/locales/en.js +0 -109
  939. package/node_modules/zod/v4/locales/eo.cjs +0 -136
  940. package/node_modules/zod/v4/locales/eo.d.cts +0 -5
  941. package/node_modules/zod/v4/locales/eo.d.ts +0 -4
  942. package/node_modules/zod/v4/locales/eo.js +0 -109
  943. package/node_modules/zod/v4/locales/es.cjs +0 -159
  944. package/node_modules/zod/v4/locales/es.d.cts +0 -5
  945. package/node_modules/zod/v4/locales/es.d.ts +0 -4
  946. package/node_modules/zod/v4/locales/es.js +0 -132
  947. package/node_modules/zod/v4/locales/fa.cjs +0 -141
  948. package/node_modules/zod/v4/locales/fa.d.cts +0 -5
  949. package/node_modules/zod/v4/locales/fa.d.ts +0 -4
  950. package/node_modules/zod/v4/locales/fa.js +0 -114
  951. package/node_modules/zod/v4/locales/fi.cjs +0 -139
  952. package/node_modules/zod/v4/locales/fi.d.cts +0 -5
  953. package/node_modules/zod/v4/locales/fi.d.ts +0 -4
  954. package/node_modules/zod/v4/locales/fi.js +0 -112
  955. package/node_modules/zod/v4/locales/fr-CA.cjs +0 -134
  956. package/node_modules/zod/v4/locales/fr-CA.d.cts +0 -5
  957. package/node_modules/zod/v4/locales/fr-CA.d.ts +0 -4
  958. package/node_modules/zod/v4/locales/fr-CA.js +0 -107
  959. package/node_modules/zod/v4/locales/fr.cjs +0 -135
  960. package/node_modules/zod/v4/locales/fr.d.cts +0 -5
  961. package/node_modules/zod/v4/locales/fr.d.ts +0 -4
  962. package/node_modules/zod/v4/locales/fr.js +0 -108
  963. package/node_modules/zod/v4/locales/he.cjs +0 -241
  964. package/node_modules/zod/v4/locales/he.d.cts +0 -5
  965. package/node_modules/zod/v4/locales/he.d.ts +0 -4
  966. package/node_modules/zod/v4/locales/he.js +0 -214
  967. package/node_modules/zod/v4/locales/hu.cjs +0 -135
  968. package/node_modules/zod/v4/locales/hu.d.cts +0 -5
  969. package/node_modules/zod/v4/locales/hu.d.ts +0 -4
  970. package/node_modules/zod/v4/locales/hu.js +0 -108
  971. package/node_modules/zod/v4/locales/hy.cjs +0 -174
  972. package/node_modules/zod/v4/locales/hy.d.cts +0 -5
  973. package/node_modules/zod/v4/locales/hy.d.ts +0 -4
  974. package/node_modules/zod/v4/locales/hy.js +0 -147
  975. package/node_modules/zod/v4/locales/id.cjs +0 -133
  976. package/node_modules/zod/v4/locales/id.d.cts +0 -5
  977. package/node_modules/zod/v4/locales/id.d.ts +0 -4
  978. package/node_modules/zod/v4/locales/id.js +0 -106
  979. package/node_modules/zod/v4/locales/index.cjs +0 -104
  980. package/node_modules/zod/v4/locales/index.d.cts +0 -49
  981. package/node_modules/zod/v4/locales/index.d.ts +0 -49
  982. package/node_modules/zod/v4/locales/index.js +0 -49
  983. package/node_modules/zod/v4/locales/is.cjs +0 -136
  984. package/node_modules/zod/v4/locales/is.d.cts +0 -5
  985. package/node_modules/zod/v4/locales/is.d.ts +0 -4
  986. package/node_modules/zod/v4/locales/is.js +0 -109
  987. package/node_modules/zod/v4/locales/it.cjs +0 -135
  988. package/node_modules/zod/v4/locales/it.d.cts +0 -5
  989. package/node_modules/zod/v4/locales/it.d.ts +0 -4
  990. package/node_modules/zod/v4/locales/it.js +0 -108
  991. package/node_modules/zod/v4/locales/ja.cjs +0 -134
  992. package/node_modules/zod/v4/locales/ja.d.cts +0 -5
  993. package/node_modules/zod/v4/locales/ja.d.ts +0 -4
  994. package/node_modules/zod/v4/locales/ja.js +0 -107
  995. package/node_modules/zod/v4/locales/ka.cjs +0 -139
  996. package/node_modules/zod/v4/locales/ka.d.cts +0 -5
  997. package/node_modules/zod/v4/locales/ka.d.ts +0 -4
  998. package/node_modules/zod/v4/locales/ka.js +0 -112
  999. package/node_modules/zod/v4/locales/kh.cjs +0 -12
  1000. package/node_modules/zod/v4/locales/kh.d.cts +0 -5
  1001. package/node_modules/zod/v4/locales/kh.d.ts +0 -5
  1002. package/node_modules/zod/v4/locales/kh.js +0 -5
  1003. package/node_modules/zod/v4/locales/km.cjs +0 -137
  1004. package/node_modules/zod/v4/locales/km.d.cts +0 -5
  1005. package/node_modules/zod/v4/locales/km.d.ts +0 -4
  1006. package/node_modules/zod/v4/locales/km.js +0 -110
  1007. package/node_modules/zod/v4/locales/ko.cjs +0 -138
  1008. package/node_modules/zod/v4/locales/ko.d.cts +0 -5
  1009. package/node_modules/zod/v4/locales/ko.d.ts +0 -4
  1010. package/node_modules/zod/v4/locales/ko.js +0 -111
  1011. package/node_modules/zod/v4/locales/lt.cjs +0 -230
  1012. package/node_modules/zod/v4/locales/lt.d.cts +0 -5
  1013. package/node_modules/zod/v4/locales/lt.d.ts +0 -4
  1014. package/node_modules/zod/v4/locales/lt.js +0 -203
  1015. package/node_modules/zod/v4/locales/mk.cjs +0 -136
  1016. package/node_modules/zod/v4/locales/mk.d.cts +0 -5
  1017. package/node_modules/zod/v4/locales/mk.d.ts +0 -4
  1018. package/node_modules/zod/v4/locales/mk.js +0 -109
  1019. package/node_modules/zod/v4/locales/ms.cjs +0 -134
  1020. package/node_modules/zod/v4/locales/ms.d.cts +0 -5
  1021. package/node_modules/zod/v4/locales/ms.d.ts +0 -4
  1022. package/node_modules/zod/v4/locales/ms.js +0 -107
  1023. package/node_modules/zod/v4/locales/nl.cjs +0 -137
  1024. package/node_modules/zod/v4/locales/nl.d.cts +0 -5
  1025. package/node_modules/zod/v4/locales/nl.d.ts +0 -4
  1026. package/node_modules/zod/v4/locales/nl.js +0 -110
  1027. package/node_modules/zod/v4/locales/no.cjs +0 -135
  1028. package/node_modules/zod/v4/locales/no.d.cts +0 -5
  1029. package/node_modules/zod/v4/locales/no.d.ts +0 -4
  1030. package/node_modules/zod/v4/locales/no.js +0 -108
  1031. package/node_modules/zod/v4/locales/ota.cjs +0 -136
  1032. package/node_modules/zod/v4/locales/ota.d.cts +0 -5
  1033. package/node_modules/zod/v4/locales/ota.d.ts +0 -4
  1034. package/node_modules/zod/v4/locales/ota.js +0 -109
  1035. package/node_modules/zod/v4/locales/package.json +0 -6
  1036. package/node_modules/zod/v4/locales/pl.cjs +0 -136
  1037. package/node_modules/zod/v4/locales/pl.d.cts +0 -5
  1038. package/node_modules/zod/v4/locales/pl.d.ts +0 -4
  1039. package/node_modules/zod/v4/locales/pl.js +0 -109
  1040. package/node_modules/zod/v4/locales/ps.cjs +0 -141
  1041. package/node_modules/zod/v4/locales/ps.d.cts +0 -5
  1042. package/node_modules/zod/v4/locales/ps.d.ts +0 -4
  1043. package/node_modules/zod/v4/locales/ps.js +0 -114
  1044. package/node_modules/zod/v4/locales/pt.cjs +0 -135
  1045. package/node_modules/zod/v4/locales/pt.d.cts +0 -5
  1046. package/node_modules/zod/v4/locales/pt.d.ts +0 -4
  1047. package/node_modules/zod/v4/locales/pt.js +0 -108
  1048. package/node_modules/zod/v4/locales/ru.cjs +0 -183
  1049. package/node_modules/zod/v4/locales/ru.d.cts +0 -5
  1050. package/node_modules/zod/v4/locales/ru.d.ts +0 -4
  1051. package/node_modules/zod/v4/locales/ru.js +0 -156
  1052. package/node_modules/zod/v4/locales/sl.cjs +0 -136
  1053. package/node_modules/zod/v4/locales/sl.d.cts +0 -5
  1054. package/node_modules/zod/v4/locales/sl.d.ts +0 -4
  1055. package/node_modules/zod/v4/locales/sl.js +0 -109
  1056. package/node_modules/zod/v4/locales/sv.cjs +0 -137
  1057. package/node_modules/zod/v4/locales/sv.d.cts +0 -5
  1058. package/node_modules/zod/v4/locales/sv.d.ts +0 -4
  1059. package/node_modules/zod/v4/locales/sv.js +0 -110
  1060. package/node_modules/zod/v4/locales/ta.cjs +0 -137
  1061. package/node_modules/zod/v4/locales/ta.d.cts +0 -5
  1062. package/node_modules/zod/v4/locales/ta.d.ts +0 -4
  1063. package/node_modules/zod/v4/locales/ta.js +0 -110
  1064. package/node_modules/zod/v4/locales/th.cjs +0 -137
  1065. package/node_modules/zod/v4/locales/th.d.cts +0 -5
  1066. package/node_modules/zod/v4/locales/th.d.ts +0 -4
  1067. package/node_modules/zod/v4/locales/th.js +0 -110
  1068. package/node_modules/zod/v4/locales/tr.cjs +0 -132
  1069. package/node_modules/zod/v4/locales/tr.d.cts +0 -5
  1070. package/node_modules/zod/v4/locales/tr.d.ts +0 -4
  1071. package/node_modules/zod/v4/locales/tr.js +0 -105
  1072. package/node_modules/zod/v4/locales/ua.cjs +0 -12
  1073. package/node_modules/zod/v4/locales/ua.d.cts +0 -5
  1074. package/node_modules/zod/v4/locales/ua.d.ts +0 -5
  1075. package/node_modules/zod/v4/locales/ua.js +0 -5
  1076. package/node_modules/zod/v4/locales/uk.cjs +0 -135
  1077. package/node_modules/zod/v4/locales/uk.d.cts +0 -5
  1078. package/node_modules/zod/v4/locales/uk.d.ts +0 -4
  1079. package/node_modules/zod/v4/locales/uk.js +0 -108
  1080. package/node_modules/zod/v4/locales/ur.cjs +0 -137
  1081. package/node_modules/zod/v4/locales/ur.d.cts +0 -5
  1082. package/node_modules/zod/v4/locales/ur.d.ts +0 -4
  1083. package/node_modules/zod/v4/locales/ur.js +0 -110
  1084. package/node_modules/zod/v4/locales/uz.cjs +0 -136
  1085. package/node_modules/zod/v4/locales/uz.d.cts +0 -5
  1086. package/node_modules/zod/v4/locales/uz.d.ts +0 -4
  1087. package/node_modules/zod/v4/locales/uz.js +0 -109
  1088. package/node_modules/zod/v4/locales/vi.cjs +0 -135
  1089. package/node_modules/zod/v4/locales/vi.d.cts +0 -5
  1090. package/node_modules/zod/v4/locales/vi.d.ts +0 -4
  1091. package/node_modules/zod/v4/locales/vi.js +0 -108
  1092. package/node_modules/zod/v4/locales/yo.cjs +0 -134
  1093. package/node_modules/zod/v4/locales/yo.d.cts +0 -5
  1094. package/node_modules/zod/v4/locales/yo.d.ts +0 -4
  1095. package/node_modules/zod/v4/locales/yo.js +0 -107
  1096. package/node_modules/zod/v4/locales/zh-CN.cjs +0 -136
  1097. package/node_modules/zod/v4/locales/zh-CN.d.cts +0 -5
  1098. package/node_modules/zod/v4/locales/zh-CN.d.ts +0 -4
  1099. package/node_modules/zod/v4/locales/zh-CN.js +0 -109
  1100. package/node_modules/zod/v4/locales/zh-TW.cjs +0 -134
  1101. package/node_modules/zod/v4/locales/zh-TW.d.cts +0 -5
  1102. package/node_modules/zod/v4/locales/zh-TW.d.ts +0 -4
  1103. package/node_modules/zod/v4/locales/zh-TW.js +0 -107
  1104. package/node_modules/zod/v4/mini/checks.cjs +0 -34
  1105. package/node_modules/zod/v4/mini/checks.d.cts +0 -1
  1106. package/node_modules/zod/v4/mini/checks.d.ts +0 -1
  1107. package/node_modules/zod/v4/mini/checks.js +0 -1
  1108. package/node_modules/zod/v4/mini/coerce.cjs +0 -52
  1109. package/node_modules/zod/v4/mini/coerce.d.cts +0 -7
  1110. package/node_modules/zod/v4/mini/coerce.d.ts +0 -7
  1111. package/node_modules/zod/v4/mini/coerce.js +0 -22
  1112. package/node_modules/zod/v4/mini/external.cjs +0 -63
  1113. package/node_modules/zod/v4/mini/external.d.cts +0 -12
  1114. package/node_modules/zod/v4/mini/external.d.ts +0 -12
  1115. package/node_modules/zod/v4/mini/external.js +0 -14
  1116. package/node_modules/zod/v4/mini/index.cjs +0 -32
  1117. package/node_modules/zod/v4/mini/index.d.cts +0 -3
  1118. package/node_modules/zod/v4/mini/index.d.ts +0 -3
  1119. package/node_modules/zod/v4/mini/index.js +0 -3
  1120. package/node_modules/zod/v4/mini/iso.cjs +0 -64
  1121. package/node_modules/zod/v4/mini/iso.d.cts +0 -22
  1122. package/node_modules/zod/v4/mini/iso.d.ts +0 -22
  1123. package/node_modules/zod/v4/mini/iso.js +0 -34
  1124. package/node_modules/zod/v4/mini/package.json +0 -6
  1125. package/node_modules/zod/v4/mini/parse.cjs +0 -16
  1126. package/node_modules/zod/v4/mini/parse.d.cts +0 -1
  1127. package/node_modules/zod/v4/mini/parse.d.ts +0 -1
  1128. package/node_modules/zod/v4/mini/parse.js +0 -1
  1129. package/node_modules/zod/v4/mini/schemas.cjs +0 -1046
  1130. package/node_modules/zod/v4/mini/schemas.d.cts +0 -427
  1131. package/node_modules/zod/v4/mini/schemas.d.ts +0 -427
  1132. package/node_modules/zod/v4/mini/schemas.js +0 -925
  1133. package/node_modules/zod/v4/package.json +0 -6
  1134. package/node_modules/zod/v4-mini/index.cjs +0 -17
  1135. package/node_modules/zod/v4-mini/index.d.cts +0 -1
  1136. package/node_modules/zod/v4-mini/index.d.ts +0 -1
  1137. package/node_modules/zod/v4-mini/index.js +0 -1
  1138. package/node_modules/zod/v4-mini/package.json +0 -6
  1139. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/cattle-planner.d.ts +0 -0
  1140. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/cattle-task.d.ts +0 -0
  1141. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/cattle-task.js +0 -0
  1142. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/fs-private.d.ts +0 -0
  1143. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/fs-private.js +0 -0
  1144. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/hcloud-cattle.d.ts +0 -0
  1145. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/hcloud-cattle.js +0 -0
  1146. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/hcloud-labels.d.ts +0 -0
  1147. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/hcloud.d.ts +0 -0
  1148. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/hcloud.js +0 -0
  1149. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/persona-loader.d.ts +0 -0
  1150. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/ttl.d.ts +0 -0
  1151. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/ttl.js +0 -0
  1152. /package/{node_modules → vendor}/@clawdlets/core/dist/assets/opentofu/.terraform.lock.hcl +0 -0
  1153. /package/{node_modules → vendor}/@clawdlets/core/dist/assets/opentofu/README.md +0 -0
  1154. /package/{node_modules → vendor}/@clawdlets/core/dist/assets/opentofu/modules/bot_host/main.tf +0 -0
  1155. /package/{node_modules → vendor}/@clawdlets/core/dist/assets/opentofu/outputs.tf +0 -0
  1156. /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/cattle-checks.d.ts +0 -0
  1157. /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/cattle-checks.js +0 -0
  1158. /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/deploy-checks.d.ts +0 -0
  1159. /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/repo-checks.d.ts +0 -0
  1160. /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/types.d.ts +0 -0
  1161. /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/types.js +0 -0
  1162. /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/util.d.ts +0 -0
  1163. /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/util.js +0 -0
  1164. /package/{node_modules → vendor}/@clawdlets/core/dist/doctor.d.ts +0 -0
  1165. /package/{node_modules → vendor}/@clawdlets/core/dist/doctor.js +0 -0
  1166. /package/{node_modules → vendor}/@clawdlets/core/dist/index.d.ts +0 -0
  1167. /package/{node_modules → vendor}/@clawdlets/core/dist/index.js +0 -0
  1168. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/age-keygen.d.ts +0 -0
  1169. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/age-keygen.js +0 -0
  1170. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/age.d.ts +0 -0
  1171. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/age.js +0 -0
  1172. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/base-flake.d.ts +0 -0
  1173. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/base-flake.js +0 -0
  1174. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/context.d.ts +0 -0
  1175. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/context.js +0 -0
  1176. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/docs-index.d.ts +0 -0
  1177. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/docs-index.js +0 -0
  1178. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/dot-path.d.ts +0 -0
  1179. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/dot-path.js +0 -0
  1180. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/dotenv-file.d.ts +0 -0
  1181. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/dotenv-file.js +0 -0
  1182. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/fleet-nix-eval.d.ts +0 -0
  1183. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/fleet-nix-eval.js +0 -0
  1184. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/fleet-policy.d.ts +0 -0
  1185. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/fleet-policy.js +0 -0
  1186. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/fs-safe.d.ts +0 -0
  1187. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/fs-safe.js +0 -0
  1188. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/git.d.ts +0 -0
  1189. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/git.js +0 -0
  1190. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/github.d.ts +0 -0
  1191. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/github.js +0 -0
  1192. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/host-resolve.d.ts +0 -0
  1193. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/host-resolve.js +0 -0
  1194. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/inline-script-ban.d.ts +0 -0
  1195. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/inline-script-ban.js +0 -0
  1196. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/mkpasswd.d.ts +0 -0
  1197. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/mkpasswd.js +0 -0
  1198. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/nix-flakes.d.ts +0 -0
  1199. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/nix-flakes.js +0 -0
  1200. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/nix-host.d.ts +0 -0
  1201. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/nix-host.js +0 -0
  1202. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/nix-tools.d.ts +0 -0
  1203. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/nix-tools.js +0 -0
  1204. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/opentofu.d.ts +0 -0
  1205. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/path-expand.d.ts +0 -0
  1206. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/path-expand.js +0 -0
  1207. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/repo.d.ts +0 -0
  1208. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/repo.js +0 -0
  1209. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/run.d.ts +0 -0
  1210. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/run.js +0 -0
  1211. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-migrate.d.ts +0 -0
  1212. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-policy.d.ts +0 -0
  1213. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-policy.js +0 -0
  1214. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-tar.d.ts +0 -0
  1215. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-tar.js +0 -0
  1216. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops-config.d.ts +0 -0
  1217. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops-config.js +0 -0
  1218. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops-path.d.ts +0 -0
  1219. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops-path.js +0 -0
  1220. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops-rules.d.ts +0 -0
  1221. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops-rules.js +0 -0
  1222. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops.d.ts +0 -0
  1223. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops.js +0 -0
  1224. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/ssh-remote.d.ts +0 -0
  1225. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/ssh-remote.js +0 -0
  1226. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/ssh.d.ts +0 -0
  1227. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/ssh.js +0 -0
  1228. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/template-source.d.ts +0 -0
  1229. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/template-test-dir.d.ts +0 -0
  1230. /package/{node_modules → vendor}/@clawdlets/core/dist/lib/template-test-dir.js +0 -0
  1231. /package/{node_modules/@clawdlets/core → vendor/@clawdlets/shared}/dist/lib/identifiers.d.ts +0 -0
package/dist/main.mjs CHANGED
@@ -10,22 +10,28 @@ import { applyOpenTofuVars, destroyOpenTofuVars } from "@clawdlets/core/lib/open
10
10
  import { resolveGitRev } from "@clawdlets/core/lib/git";
11
11
  import { capture, run } from "@clawdlets/core/lib/run";
12
12
  import { checkGithubRepoVisibility, tryParseGithubFlakeUri } from "@clawdlets/core/lib/github";
13
- import { loadDeployCreds } from "@clawdlets/core/lib/deploy-creds";
13
+ import { loadDeployCreds, renderDeployCredsEnvFile } from "@clawdlets/core/lib/deploy-creds";
14
14
  import { expandPath } from "@clawdlets/core/lib/path-expand";
15
- import { buildFleetSecretsPlan } from "@clawdlets/core/lib/fleet-secrets";
15
+ import { buildFleetSecretsPlan } from "@clawdlets/core/lib/fleet-secrets-plan";
16
16
  import { withFlakesEnv } from "@clawdlets/core/lib/nix-flakes";
17
17
  import { resolveBaseFlake } from "@clawdlets/core/lib/base-flake";
18
18
  import { getHostEncryptedAgeKeyFile, getHostExtraFilesDir, getHostExtraFilesKeyPath, getHostExtraFilesSecretsDir, getHostOpenTofuDir, getHostRemoteSecretsDir, getHostSecretsDir, getLocalOperatorAgeKeyPath, getRepoLayout } from "@clawdlets/core/repo-layout";
19
19
  import { collectDoctorChecks } from "@clawdlets/core/doctor";
20
20
  import { resolveHostNameOrExit } from "@clawdlets/core/lib/host-resolve";
21
+ import { shellQuote, sshCapture, sshRun, validateTargetHost } from "@clawdlets/core/lib/ssh-remote";
22
+ import { BotIdSchema, assertSafeHostName as assertSafeHostName$1, sanitizeOperatorId } from "@clawdlets/shared/lib/identifiers";
23
+ import { loadHostContextOrExit } from "@clawdlets/core/lib/context";
24
+ import { buildClawdbotBotConfig } from "@clawdlets/core/lib/clawdbot-config-invariants";
21
25
  import { ensureDir, writeFileAtomic } from "@clawdlets/core/lib/fs-safe";
22
26
  import { splitDotPath } from "@clawdlets/core/lib/dot-path";
23
- import { formatDotenvValue, parseDotenv } from "@clawdlets/core/lib/dotenv-file";
27
+ import { deleteAtPath, getAtPath, setAtPath } from "@clawdlets/core/lib/object-path";
28
+ import { migrateClawdletsConfigToV9 } from "@clawdlets/core/lib/clawdlets-config-migrate";
29
+ import { validateClawdletsConfig } from "@clawdlets/core/lib/clawdlets-config-validate";
30
+ import { applySecretsAutowire, planSecretsAutowire } from "@clawdlets/core/lib/secrets-autowire";
31
+ import { parseDotenv } from "@clawdlets/core/lib/dotenv-file";
24
32
  import { looksLikeSshPrivateKey, parseSshPublicKeysFromText } from "@clawdlets/core/lib/ssh";
25
- import { shellQuote, sshCapture, sshRun, validateTargetHost } from "@clawdlets/core/lib/ssh-remote";
26
- import { loadHostContextOrExit } from "@clawdlets/core/lib/context";
27
- import { tmpdir } from "node:os";
28
- import { downloadTemplate } from "giget";
33
+ import { readKnownHostsFromFile, readSshPublicKeysFromFile } from "@clawdlets/core/lib/ssh-files";
34
+ import { initProject, planProjectInit } from "@clawdlets/core/lib/project-init";
29
35
  import { fileURLToPath, pathToFileURL } from "node:url";
30
36
  import { normalizeTemplateSource } from "@clawdlets/core/lib/template-source";
31
37
  import { ageKeygen, agePublicKeyFromIdentityFile } from "@clawdlets/core/lib/age-keygen";
@@ -34,9 +40,10 @@ import { mkpasswdYescryptHash } from "@clawdlets/core/lib/mkpasswd";
34
40
  import { getSopsCreationRuleAgeRecipients, upsertSopsCreationRule } from "@clawdlets/core/lib/sops-config";
35
41
  import { sopsDecryptYamlFile, sopsEncryptYamlToFile } from "@clawdlets/core/lib/sops";
36
42
  import { getHostAgeKeySopsCreationRulePathRegex, getHostSecretsSopsCreationRulePathRegex } from "@clawdlets/core/lib/sops-rules";
37
- import { sanitizeOperatorId } from "@clawdlets/core/lib/identifiers";
38
43
  import { buildSecretsInitTemplate, isPlaceholderSecretValue, listSecretsInitPlaceholders, parseSecretsInitJson, resolveSecretsInitFromJsonArg, validateSecretsInitNonInteractive } from "@clawdlets/core/lib/secrets-init";
39
- import { readYamlScalarFromMapping } from "@clawdlets/core/lib/yaml-scalar";
44
+ import { readYamlScalarFromMapping, upsertYamlScalarLine } from "@clawdlets/core/lib/yaml-scalar";
45
+ import { mapWithConcurrency } from "@clawdlets/core/lib/concurrency";
46
+ import { assertSecretsAreManaged, buildManagedHostSecretNameAllowlist } from "@clawdlets/core/lib/secrets-allowlist";
40
47
  import { createSecretsTar } from "@clawdlets/core/lib/secrets-tar";
41
48
  import YAML from "yaml";
42
49
 
@@ -703,38 +710,117 @@ const bootstrap = defineCommand({
703
710
  });
704
711
 
705
712
  //#endregion
706
- //#region src/commands/config.ts
707
- function getAtPath(obj, parts) {
708
- let cur = obj;
709
- for (const k of parts) {
710
- if (cur == null || typeof cur !== "object") return void 0;
711
- cur = cur[k];
712
- }
713
- return cur;
713
+ //#region src/commands/ssh-target.ts
714
+ function needsSudo(targetHost) {
715
+ return !/^root@/i.test(targetHost.trim());
714
716
  }
715
- function setAtPath(obj, parts, value) {
716
- let cur = obj;
717
- for (let i = 0; i < parts.length - 1; i++) {
718
- const k = parts[i];
719
- if (cur[k] == null || typeof cur[k] !== "object" || Array.isArray(cur[k])) cur[k] = {};
720
- cur = cur[k];
721
- }
722
- cur[parts[parts.length - 1]] = value;
717
+ function requireTargetHost(targetHost, hostName) {
718
+ const v = targetHost.trim();
719
+ if (v) return validateTargetHost(v);
720
+ throw new Error([
721
+ `missing target host for ${hostName}`,
722
+ "set it in fleet/clawdlets.json (hosts.<host>.targetHost) or pass --target-host",
723
+ "recommended: use an SSH config alias (e.g. botsmj)"
724
+ ].join("; "));
723
725
  }
724
- function deleteAtPath(obj, parts) {
725
- let cur = obj;
726
- for (let i = 0; i < parts.length - 1; i++) {
727
- const k = parts[i];
728
- if (cur == null || typeof cur !== "object") return false;
729
- cur = cur[k];
730
- }
731
- const last = parts[parts.length - 1];
732
- if (cur && typeof cur === "object" && Object.prototype.hasOwnProperty.call(cur, last)) {
733
- delete cur[last];
734
- return true;
735
- }
736
- return false;
726
+
727
+ //#endregion
728
+ //#region src/commands/clawdbot/schema.ts
729
+ function requireBotId$1(value) {
730
+ const botId = value.trim();
731
+ if (!BotIdSchema.safeParse(botId).success) throw new Error(`invalid --bot: ${botId}`);
732
+ return botId;
733
+ }
734
+ function buildGatewaySchemaCommand(params) {
735
+ const envFile = `/srv/clawdbot/${params.botId}/credentials/gateway.env`;
736
+ const url = `ws://127.0.0.1:${params.port}`;
737
+ const script = [
738
+ "set -euo pipefail",
739
+ `source ${envFile}`,
740
+ `clawdbot gateway call config.schema --url ${url} --token \"$CLAWDBOT_GATEWAY_TOKEN\" --json`
741
+ ].join(" && ");
742
+ return [
743
+ ...params.sudo ? [
744
+ "sudo",
745
+ "-u",
746
+ `bot-${params.botId}`
747
+ ] : [],
748
+ "bash",
749
+ "-lc",
750
+ script
751
+ ].map((a) => shellQuote(a)).join(" ");
737
752
  }
753
+ const schemaFetch = defineCommand({
754
+ meta: {
755
+ name: "fetch",
756
+ description: "Fetch live Clawdbot config schema via gateway RPC."
757
+ },
758
+ args: {
759
+ runtimeDir: {
760
+ type: "string",
761
+ description: "Runtime directory (default: .clawdlets)."
762
+ },
763
+ host: {
764
+ type: "string",
765
+ description: "Host name (defaults to clawdlets.json defaultHost / sole host)."
766
+ },
767
+ targetHost: {
768
+ type: "string",
769
+ description: "SSH target override (default: from clawdlets.json)."
770
+ },
771
+ bot: {
772
+ type: "string",
773
+ description: "Bot id (fleet bot id; maps to systemd unit clawdbot-<bot>.service)."
774
+ },
775
+ sshTty: {
776
+ type: "boolean",
777
+ description: "Allocate SSH TTY.",
778
+ default: false
779
+ }
780
+ },
781
+ async run({ args }) {
782
+ const ctx = loadHostContextOrExit({
783
+ cwd: process$1.cwd(),
784
+ runtimeDir: args.runtimeDir,
785
+ hostArg: args.host
786
+ });
787
+ if (!ctx) return;
788
+ const { hostName, hostCfg, config: config$1 } = ctx;
789
+ const targetHost = requireTargetHost(String(args.targetHost || hostCfg.targetHost || ""), hostName);
790
+ const botId = requireBotId$1(String(args.bot || ""));
791
+ const gateway = buildClawdbotBotConfig({
792
+ config: config$1,
793
+ bot: botId
794
+ }).invariants?.gateway || {};
795
+ const port = typeof gateway.port === "number" ? gateway.port : Number(gateway.port || 0);
796
+ if (!Number.isFinite(port) || port <= 0) throw new Error(`invalid gateway port for bot ${botId}`);
797
+ await sshRun(targetHost, buildGatewaySchemaCommand({
798
+ botId,
799
+ port,
800
+ sudo: needsSudo(targetHost)
801
+ }), { tty: Boolean(args.sshTty) });
802
+ }
803
+ });
804
+ const clawdbotSchema = defineCommand({
805
+ meta: {
806
+ name: "schema",
807
+ description: "Clawdbot config schema helpers."
808
+ },
809
+ subCommands: { fetch: schemaFetch }
810
+ });
811
+
812
+ //#endregion
813
+ //#region src/commands/clawdbot.ts
814
+ const clawdbot = defineCommand({
815
+ meta: {
816
+ name: "clawdbot",
817
+ description: "Clawdbot gateway helpers."
818
+ },
819
+ subCommands: { schema: clawdbotSchema }
820
+ });
821
+
822
+ //#endregion
823
+ //#region src/commands/config.ts
738
824
  const init = defineCommand({
739
825
  meta: {
740
826
  name: "init",
@@ -793,14 +879,261 @@ const show$1 = defineCommand({
793
879
  const validate = defineCommand({
794
880
  meta: {
795
881
  name: "validate",
796
- description: "Validate fleet/clawdlets.json schema."
882
+ description: "Validate fleet/clawdlets.json + rendered Clawdbot config."
797
883
  },
798
- args: {},
799
- async run() {
800
- loadClawdletsConfig({ repoRoot: findRepoRoot(process$1.cwd()) });
884
+ args: {
885
+ host: {
886
+ type: "string",
887
+ description: "Host name (defaults to clawdlets.json defaultHost / sole host)."
888
+ },
889
+ strict: {
890
+ type: "boolean",
891
+ description: "Fail on warnings (inline secrets, invariant overrides).",
892
+ default: false
893
+ }
894
+ },
895
+ async run({ args }) {
896
+ const { config } = loadClawdletsConfig({ repoRoot: findRepoRoot(process$1.cwd()) });
897
+ const resolved = resolveHostName({
898
+ config,
899
+ host: args.host
900
+ });
901
+ if (!resolved.ok) {
902
+ const tips = resolved.tips.length > 0 ? `; ${resolved.tips.join("; ")}` : "";
903
+ throw new Error(`${resolved.message}${tips}`);
904
+ }
905
+ const res = validateClawdletsConfig({
906
+ config,
907
+ hostName: resolved.host,
908
+ strict: Boolean(args.strict)
909
+ });
910
+ for (const w of res.warnings) console.error(`warn: ${w}`);
911
+ if (!res.ok) {
912
+ for (const e of res.errors) console.error(`error: ${e}`);
913
+ throw new Error("config validation failed");
914
+ }
801
915
  console.log("ok");
802
916
  }
803
917
  });
918
+ const wireSecrets = defineCommand({
919
+ meta: {
920
+ name: "wire-secrets",
921
+ description: "Autowire missing secretEnv mappings."
922
+ },
923
+ args: {
924
+ host: {
925
+ type: "string",
926
+ description: "Host name (defaults to clawdlets.json defaultHost / sole host)."
927
+ },
928
+ bot: {
929
+ type: "string",
930
+ description: "Only wire secrets for this bot id."
931
+ },
932
+ scope: {
933
+ type: "string",
934
+ description: "Override scope (bot|fleet)."
935
+ },
936
+ only: {
937
+ type: "string",
938
+ description: "Only wire a specific ENV_VAR (comma-separated)."
939
+ },
940
+ write: {
941
+ type: "boolean",
942
+ description: "Apply changes to fleet/clawdlets.json.",
943
+ default: false
944
+ },
945
+ json: {
946
+ type: "boolean",
947
+ description: "Output JSON summary.",
948
+ default: false
949
+ },
950
+ yes: {
951
+ type: "boolean",
952
+ description: "Skip confirmation (non-interactive).",
953
+ default: false
954
+ }
955
+ },
956
+ async run({ args }) {
957
+ const repoRoot = findRepoRoot(process$1.cwd());
958
+ const { configPath, config } = loadClawdletsConfigRaw({ repoRoot });
959
+ const validated = ClawdletsConfigSchema.parse(config);
960
+ const resolved = resolveHostName({
961
+ config: validated,
962
+ host: args.host
963
+ });
964
+ if (!resolved.ok) {
965
+ const tips = resolved.tips.length > 0 ? `; ${resolved.tips.join("; ")}` : "";
966
+ throw new Error(`${resolved.message}${tips}`);
967
+ }
968
+ const scopeRaw = String(args.scope || "").trim();
969
+ const scope = scopeRaw ? scopeRaw === "bot" || scopeRaw === "fleet" ? scopeRaw : null : null;
970
+ if (scopeRaw && !scope) throw new Error(`invalid --scope: ${scopeRaw} (expected bot|fleet)`);
971
+ const onlyEnvVars = String(args.only || "").split(",").map((s) => s.trim()).filter(Boolean);
972
+ const plan = planSecretsAutowire({
973
+ config: validated,
974
+ hostName: resolved.host,
975
+ scope: scope ?? void 0,
976
+ bot: args.bot ? String(args.bot).trim() : void 0,
977
+ onlyEnvVars
978
+ });
979
+ if (plan.updates.length === 0) {
980
+ if (args.json) console.log(JSON.stringify({
981
+ ok: true,
982
+ updates: []
983
+ }, null, 2));
984
+ else console.log("ok: no missing secretEnv mappings");
985
+ return;
986
+ }
987
+ const summary = plan.updates.map((u) => ({
988
+ bot: u.bot,
989
+ envVar: u.envVar,
990
+ scope: u.scope,
991
+ secretName: u.secretName
992
+ }));
993
+ if (!args.write) {
994
+ if (args.json) {
995
+ console.log(JSON.stringify({
996
+ ok: true,
997
+ write: false,
998
+ updates: summary
999
+ }, null, 2));
1000
+ return;
1001
+ }
1002
+ console.log(`planned: update ${path.relative(repoRoot, configPath)}`);
1003
+ for (const entry of summary) {
1004
+ const target = entry.scope === "fleet" ? `fleet.secretEnv.${entry.envVar}` : `fleet.bots.${entry.bot}.profile.secretEnv.${entry.envVar}`;
1005
+ console.log(`- ${target} = ${entry.secretName}`);
1006
+ }
1007
+ console.log("run with --write to apply changes");
1008
+ return;
1009
+ }
1010
+ const next = applySecretsAutowire({
1011
+ config: validated,
1012
+ plan
1013
+ });
1014
+ const validation = validateClawdletsConfig({
1015
+ config: next,
1016
+ hostName: resolved.host
1017
+ });
1018
+ if (!validation.ok) {
1019
+ for (const e of validation.errors) console.error(`error: ${e}`);
1020
+ throw new Error("autowire failed: validation errors");
1021
+ }
1022
+ await writeClawdletsConfig({
1023
+ configPath,
1024
+ config: next
1025
+ });
1026
+ if (args.json) {
1027
+ console.log(JSON.stringify({
1028
+ ok: true,
1029
+ write: true,
1030
+ updates: summary
1031
+ }, null, 2));
1032
+ return;
1033
+ }
1034
+ console.log(`ok: updated ${path.relative(repoRoot, configPath)}`);
1035
+ for (const entry of summary) {
1036
+ const target = entry.scope === "fleet" ? `fleet.secretEnv.${entry.envVar}` : `fleet.bots.${entry.bot}.profile.secretEnv.${entry.envVar}`;
1037
+ console.log(`- ${target} = ${entry.secretName}`);
1038
+ }
1039
+ }
1040
+ });
1041
+ const deriveAllowlist = defineCommand({
1042
+ meta: {
1043
+ name: "derive-allowlist",
1044
+ description: "Derive per-bot secretEnvAllowlist from current config."
1045
+ },
1046
+ args: {
1047
+ host: {
1048
+ type: "string",
1049
+ description: "Host name (defaults to clawdlets.json defaultHost / sole host)."
1050
+ },
1051
+ bot: {
1052
+ type: "string",
1053
+ description: "Only derive allowlist for this bot id."
1054
+ },
1055
+ write: {
1056
+ type: "boolean",
1057
+ description: "Apply changes to fleet/clawdlets.json.",
1058
+ default: false
1059
+ },
1060
+ json: {
1061
+ type: "boolean",
1062
+ description: "Output JSON summary.",
1063
+ default: false
1064
+ }
1065
+ },
1066
+ async run({ args }) {
1067
+ const repoRoot = findRepoRoot(process$1.cwd());
1068
+ const { configPath, config } = loadClawdletsConfigRaw({ repoRoot });
1069
+ const validated = ClawdletsConfigSchema.parse(config);
1070
+ const resolved = resolveHostName({
1071
+ config: validated,
1072
+ host: args.host
1073
+ });
1074
+ if (!resolved.ok) {
1075
+ const tips = resolved.tips.length > 0 ? `; ${resolved.tips.join("; ")}` : "";
1076
+ throw new Error(`${resolved.message}${tips}`);
1077
+ }
1078
+ const plan = buildFleetSecretsPlan({
1079
+ config: validated,
1080
+ hostName: resolved.host
1081
+ });
1082
+ const botArg = args.bot ? String(args.bot).trim() : "";
1083
+ const bots = botArg ? [botArg] : validated.fleet.botOrder || [];
1084
+ if (bots.length === 0) throw new Error("fleet.botOrder is empty (set bots in fleet/clawdlets.json)");
1085
+ const updates = bots.map((bot$1) => {
1086
+ const envVars = plan.byBot?.[bot$1]?.envVarsRequired;
1087
+ if (!envVars) throw new Error(`unknown bot id: ${bot$1}`);
1088
+ return {
1089
+ bot: bot$1,
1090
+ allowlist: envVars
1091
+ };
1092
+ });
1093
+ if (!args.write) {
1094
+ if (args.json) {
1095
+ console.log(JSON.stringify({
1096
+ ok: true,
1097
+ write: false,
1098
+ updates
1099
+ }, null, 2));
1100
+ return;
1101
+ }
1102
+ console.log(`planned: update ${path.relative(repoRoot, configPath)}`);
1103
+ for (const entry of updates) console.log(`- fleet.bots.${entry.bot}.profile.secretEnvAllowlist = ${JSON.stringify(entry.allowlist)}`);
1104
+ console.log("run with --write to apply changes");
1105
+ return;
1106
+ }
1107
+ const next = structuredClone(validated);
1108
+ for (const entry of updates) {
1109
+ if (!next.fleet.bots[entry.bot]) next.fleet.bots[entry.bot] = {};
1110
+ if (!next.fleet.bots[entry.bot].profile) next.fleet.bots[entry.bot].profile = {};
1111
+ next.fleet.bots[entry.bot].profile.secretEnvAllowlist = entry.allowlist;
1112
+ }
1113
+ const validation = validateClawdletsConfig({
1114
+ config: next,
1115
+ hostName: resolved.host
1116
+ });
1117
+ if (!validation.ok) {
1118
+ for (const e of validation.errors) console.error(`error: ${e}`);
1119
+ throw new Error("allowlist derive failed: validation errors");
1120
+ }
1121
+ await writeClawdletsConfig({
1122
+ configPath,
1123
+ config: next
1124
+ });
1125
+ if (args.json) {
1126
+ console.log(JSON.stringify({
1127
+ ok: true,
1128
+ write: true,
1129
+ updates
1130
+ }, null, 2));
1131
+ return;
1132
+ }
1133
+ console.log(`ok: updated ${path.relative(repoRoot, configPath)}`);
1134
+ for (const entry of updates) console.log(`- fleet.bots.${entry.bot}.profile.secretEnvAllowlist = ${JSON.stringify(entry.allowlist)}`);
1135
+ }
1136
+ });
804
1137
  const get = defineCommand({
805
1138
  meta: {
806
1139
  name: "get",
@@ -882,6 +1215,56 @@ const set$2 = defineCommand({
882
1215
  }
883
1216
  }
884
1217
  });
1218
+ const migrate = defineCommand({
1219
+ meta: {
1220
+ name: "migrate",
1221
+ description: "Migrate fleet/clawdlets.json to a new schema version."
1222
+ },
1223
+ args: {
1224
+ to: {
1225
+ type: "string",
1226
+ description: "Target schema version (only v9 supported).",
1227
+ default: "v9"
1228
+ },
1229
+ "dry-run": {
1230
+ type: "boolean",
1231
+ description: "Print planned write without writing.",
1232
+ default: false
1233
+ }
1234
+ },
1235
+ async run({ args }) {
1236
+ const repoRoot = findRepoRoot(process$1.cwd());
1237
+ const configPath = getRepoLayout(repoRoot).clawdletsConfigPath;
1238
+ if (!fs.existsSync(configPath)) throw new Error(`missing config: ${configPath}`);
1239
+ const rawText = fs.readFileSync(configPath, "utf8");
1240
+ let parsed;
1241
+ try {
1242
+ parsed = JSON.parse(rawText);
1243
+ } catch {
1244
+ throw new Error(`invalid JSON: ${configPath}`);
1245
+ }
1246
+ const to = String(args.to || "v9").trim().toLowerCase();
1247
+ if (to !== "v9" && to !== "9") throw new Error(`unsupported --to: ${to} (expected v9)`);
1248
+ const res = migrateClawdletsConfigToV9(parsed);
1249
+ if (!res.changed) {
1250
+ console.log("ok: already schemaVersion 9");
1251
+ return;
1252
+ }
1253
+ const validated = ClawdletsConfigSchema.parse(res.migrated);
1254
+ if (args["dry-run"]) {
1255
+ console.log(`planned: write ${path.relative(repoRoot, configPath)}`);
1256
+ for (const w of res.warnings) console.log(`warn: ${w}`);
1257
+ return;
1258
+ }
1259
+ await ensureDir(path.dirname(configPath));
1260
+ await writeClawdletsConfig({
1261
+ configPath,
1262
+ config: validated
1263
+ });
1264
+ console.log(`ok: migrated to schemaVersion 9: ${path.relative(repoRoot, configPath)}`);
1265
+ for (const w of res.warnings) console.log(`warn: ${w}`);
1266
+ }
1267
+ });
885
1268
  const config = defineCommand({
886
1269
  meta: {
887
1270
  name: "config",
@@ -892,7 +1275,10 @@ const config = defineCommand({
892
1275
  show: show$1,
893
1276
  validate,
894
1277
  get,
895
- set: set$2
1278
+ set: set$2,
1279
+ migrate,
1280
+ "wire-secrets": wireSecrets,
1281
+ "derive-allowlist": deriveAllowlist
896
1282
  }
897
1283
  });
898
1284
 
@@ -998,18 +1384,6 @@ function resolveEnvFilePath(params) {
998
1384
  origin: "default"
999
1385
  };
1000
1386
  }
1001
- function renderEnvFile(keys) {
1002
- return [
1003
- "# clawdlets deploy creds (local-only; never commit)",
1004
- "# Used by: bootstrap, infra, lockdown, doctor",
1005
- "",
1006
- `HCLOUD_TOKEN=${formatDotenvValue(keys.HCLOUD_TOKEN)}`,
1007
- `GITHUB_TOKEN=${formatDotenvValue(keys.GITHUB_TOKEN)}`,
1008
- `NIX_BIN=${formatDotenvValue(keys.NIX_BIN)}`,
1009
- `SOPS_AGE_KEY_FILE=${formatDotenvValue(keys.SOPS_AGE_KEY_FILE)}`,
1010
- ""
1011
- ].join("\n");
1012
- }
1013
1387
  function readEnvFileOrEmpty(filePath) {
1014
1388
  if (!fs.existsSync(filePath)) return {
1015
1389
  text: "",
@@ -1059,7 +1433,7 @@ const envInit = defineCommand({
1059
1433
  NIX_BIN: String(existing.NIX_BIN || "nix").trim() || "nix",
1060
1434
  SOPS_AGE_KEY_FILE: String(existing.SOPS_AGE_KEY_FILE || "").trim()
1061
1435
  };
1062
- await writeFileAtomic(resolved.path, renderEnvFile(keys), { mode: 384 });
1436
+ await writeFileAtomic(resolved.path, renderDeployCredsEnvFile(keys), { mode: 384 });
1063
1437
  console.log(`ok: wrote ${path.relative(repoRoot, resolved.path) || resolved.path}`);
1064
1438
  if (resolved.origin === "explicit") console.log(`note: you must pass --env-file ${resolved.path} to deploy commands to use it`);
1065
1439
  else console.log("next: edit this file and set HCLOUD_TOKEN (required)");
@@ -1125,24 +1499,6 @@ function parseBoolOrUndefined(v) {
1125
1499
  if (s === "false" || s === "0" || s === "no") return false;
1126
1500
  throw new Error(`invalid boolean: ${String(v)} (use true/false)`);
1127
1501
  }
1128
- function readSshPublicKeysFromFile(filePath) {
1129
- const stat = fs.statSync(filePath);
1130
- if (!stat.isFile()) throw new Error(`not a file: ${filePath}`);
1131
- if (stat.size > 64 * 1024) throw new Error(`ssh key file too large (>64KB): ${filePath}`);
1132
- const raw = fs.readFileSync(filePath, "utf8");
1133
- if (looksLikeSshPrivateKey(raw)) throw new Error(`refusing to read ssh private key (expected .pub): ${filePath}`);
1134
- const keys = parseSshPublicKeysFromText(raw);
1135
- if (keys.length === 0) throw new Error(`no ssh public keys found in file: ${filePath}`);
1136
- return keys;
1137
- }
1138
- function readKnownHostsFromFile(filePath) {
1139
- const stat = fs.statSync(filePath);
1140
- if (!stat.isFile()) throw new Error(`not a file: ${filePath}`);
1141
- if (stat.size > 256 * 1024) throw new Error(`known_hosts file too large (>256KB): ${filePath}`);
1142
- const lines = fs.readFileSync(filePath, "utf8").split(/\r?\n/).map((line) => line.trim()).filter((line) => line && !line.startsWith("#"));
1143
- if (lines.length === 0) throw new Error(`no known_hosts entries found in file: ${filePath}`);
1144
- return lines;
1145
- }
1146
1502
  function toStringArray(v) {
1147
1503
  if (v == null) return [];
1148
1504
  if (Array.isArray(v)) return v.map((x) => String(x));
@@ -1480,10 +1836,6 @@ const set = defineCommand({
1480
1836
  type: "string",
1481
1837
  description: "Enable codex (true/false)."
1482
1838
  },
1483
- "guild-id": {
1484
- type: "string",
1485
- description: "Discord guild ID."
1486
- },
1487
1839
  "restic-enable": {
1488
1840
  type: "string",
1489
1841
  description: "Enable restic backups (true/false)."
@@ -1512,7 +1864,6 @@ const set = defineCommand({
1512
1864
  const v = parseBool(args["restic-enable"]);
1513
1865
  if (v !== void 0) next.fleet.backups.restic.enable = v;
1514
1866
  }
1515
- if (args["guild-id"] !== void 0) next.fleet.guildId = String(args["guild-id"]).trim();
1516
1867
  if (args["restic-repository"] !== void 0) next.fleet.backups.restic.repository = String(args["restic-repository"]).trim();
1517
1868
  await writeClawdletsConfig({
1518
1869
  configPath,
@@ -2203,90 +2554,6 @@ function requireTtyIfInteractive(interactive) {
2203
2554
  if (!interactive) return;
2204
2555
  if (!process$1.stdout.isTTY) throw new Error("--interactive requires a TTY");
2205
2556
  }
2206
- function applySubs(s, subs) {
2207
- let out = s;
2208
- for (const [k, v] of Object.entries(subs)) out = out.split(k).join(v);
2209
- return out;
2210
- }
2211
- function isProbablyText(file) {
2212
- const base = path.basename(file);
2213
- if (base === "Justfile" || base === "_gitignore") return true;
2214
- const ext = path.extname(file).toLowerCase();
2215
- return [
2216
- ".md",
2217
- ".nix",
2218
- ".tf",
2219
- ".hcl",
2220
- ".json",
2221
- ".yaml",
2222
- ".yml",
2223
- ".txt",
2224
- ".lock",
2225
- ".gitignore"
2226
- ].includes(ext);
2227
- }
2228
- async function copyTree(params) {
2229
- const entries = await fs.promises.readdir(params.srcDir, { withFileTypes: true });
2230
- for (const ent of entries) {
2231
- const srcName = ent.name;
2232
- const srcPath = path.join(params.srcDir, srcName);
2233
- const renamed = srcName === "_gitignore" ? ".gitignore" : applySubs(srcName, params.subs);
2234
- const destPath = path.join(params.destDir, renamed);
2235
- if (ent.isDirectory()) {
2236
- await ensureDir(destPath);
2237
- await copyTree({
2238
- srcDir: srcPath,
2239
- destDir: destPath,
2240
- subs: params.subs
2241
- });
2242
- continue;
2243
- }
2244
- if (!ent.isFile()) continue;
2245
- const buf = await fs.promises.readFile(srcPath);
2246
- if (!isProbablyText(srcName)) {
2247
- await ensureDir(path.dirname(destPath));
2248
- await fs.promises.writeFile(destPath, buf);
2249
- continue;
2250
- }
2251
- await writeFileAtomic(destPath, applySubs(buf.toString("utf8"), params.subs));
2252
- }
2253
- }
2254
- async function dirHasAnyFiles(dir) {
2255
- try {
2256
- return (await fs.promises.readdir(dir)).length > 0;
2257
- } catch {
2258
- return false;
2259
- }
2260
- }
2261
- async function ensureHookExecutables(repoRoot) {
2262
- const hooksDir = path.join(repoRoot, ".githooks");
2263
- try {
2264
- const entries = await fs.promises.readdir(hooksDir, { withFileTypes: true });
2265
- let hasHooks = false;
2266
- for (const ent of entries) {
2267
- if (!ent.isFile()) continue;
2268
- const p$1 = path.join(hooksDir, ent.name);
2269
- await fs.promises.chmod(p$1, 493);
2270
- hasHooks = true;
2271
- }
2272
- return hasHooks;
2273
- } catch {
2274
- return false;
2275
- }
2276
- }
2277
- async function findTemplateRoot(dir) {
2278
- const direct = path.join(dir, "fleet", "clawdlets.json");
2279
- if (fs.existsSync(direct)) return dir;
2280
- const entries = await fs.promises.readdir(dir, { withFileTypes: true });
2281
- const candidates = [];
2282
- for (const ent of entries) {
2283
- if (!ent.isDirectory()) continue;
2284
- const candidate = path.join(dir, ent.name);
2285
- if (fs.existsSync(path.join(candidate, "fleet", "clawdlets.json"))) candidates.push(candidate);
2286
- }
2287
- if (candidates.length === 1) return candidates[0];
2288
- throw new Error(`template root missing fleet/clawdlets.json (searched: ${dir})`);
2289
- }
2290
2557
  const projectInit = defineCommand({
2291
2558
  meta: {
2292
2559
  name: "init",
@@ -2337,8 +2604,7 @@ const projectInit = defineCommand({
2337
2604
  if (!dirRaw) throw new Error("missing --dir");
2338
2605
  const destDir = path.resolve(process$1.cwd(), dirRaw);
2339
2606
  const host$1 = String(args.host || "clawdbot-fleet-host").trim() || "clawdbot-fleet-host";
2340
- assertSafeHostName(host$1);
2341
- const projectName = path.basename(destDir);
2607
+ assertSafeHostName$1(host$1);
2342
2608
  if (interactive) {
2343
2609
  p.intro("clawdlets project init");
2344
2610
  const ok = await p.confirm({
@@ -2362,97 +2628,24 @@ const projectInit = defineCommand({
2362
2628
  templatePath: args.templatePath,
2363
2629
  templateRef: args.templateRef
2364
2630
  });
2365
- if (fs.existsSync(destDir) && await dirHasAnyFiles(destDir)) throw new Error(`target dir not empty: ${destDir}`);
2366
- const subs = {
2367
- "__PROJECT_NAME__": projectName,
2368
- "clawdbot-fleet-host": host$1,
2369
- "clawdbot_fleet_host": host$1.replace(/-/g, "_")
2370
- };
2371
- const tempDir = await fs.promises.mkdtemp(path.join(tmpdir(), "clawdlets-template-"));
2372
- let templateDir = tempDir;
2373
- try {
2374
- templateDir = await findTemplateRoot((await downloadTemplate(templateSpec.spec, {
2375
- dir: tempDir,
2376
- force: true,
2377
- auth: String(process$1.env["GITHUB_TOKEN"] || process$1.env["CLAWDLETS_TEMPLATE_TOKEN"] || "").trim() || void 0
2378
- })).dir || tempDir);
2379
- } catch (e) {
2380
- await fs.promises.rm(tempDir, {
2381
- recursive: true,
2382
- force: true
2383
- });
2384
- throw e;
2385
- }
2386
- const planned = [];
2387
- const walk = async (srcDir, rel) => {
2388
- const entries = await fs.promises.readdir(srcDir, { withFileTypes: true });
2389
- for (const ent of entries) {
2390
- const srcName = ent.name;
2391
- const mapped = srcName === "_gitignore" ? ".gitignore" : applySubs(srcName, subs);
2392
- const nextRel = path.join(rel, mapped);
2393
- if (ent.isDirectory()) await walk(path.join(srcDir, srcName), nextRel);
2394
- else if (ent.isFile()) planned.push(nextRel);
2395
- }
2396
- };
2397
- await walk(templateDir, ".");
2398
2631
  if (args.dryRun) {
2399
- p.note(planned.sort().join("\n"), "Planned files");
2632
+ const list$2 = (await planProjectInit({
2633
+ destDir,
2634
+ host: host$1,
2635
+ templateSpec: templateSpec.spec
2636
+ })).plannedFiles.join("\n");
2637
+ p.note(list$2, "Planned files");
2400
2638
  p.outro("dry-run");
2401
- await fs.promises.rm(tempDir, {
2402
- recursive: true,
2403
- force: true
2404
- });
2405
2639
  return;
2406
2640
  }
2407
- await ensureDir(destDir);
2408
- await copyTree({
2409
- srcDir: templateDir,
2641
+ const result = await initProject({
2410
2642
  destDir,
2411
- subs
2643
+ host: host$1,
2644
+ templateSpec: templateSpec.spec,
2645
+ gitInit: args.gitInit
2412
2646
  });
2413
- await fs.promises.rm(tempDir, {
2414
- recursive: true,
2415
- force: true
2416
- });
2417
- const hasHooks = await ensureHookExecutables(destDir);
2418
- {
2419
- const configPath = path.join(destDir, "fleet", "clawdlets.json");
2420
- const raw = await fs.promises.readFile(configPath, "utf8");
2421
- const parsed = JSON.parse(raw);
2422
- const hostCfg = parsed?.hosts?.[host$1];
2423
- if (hostCfg && typeof hostCfg === "object") {
2424
- hostCfg.cache = hostCfg.cache && typeof hostCfg.cache === "object" ? hostCfg.cache : {};
2425
- hostCfg.cache.garnix = hostCfg.cache.garnix && typeof hostCfg.cache.garnix === "object" ? hostCfg.cache.garnix : {};
2426
- hostCfg.cache.garnix.private = hostCfg.cache.garnix.private && typeof hostCfg.cache.garnix.private === "object" ? hostCfg.cache.garnix.private : {};
2427
- hostCfg.cache.garnix.private.enable = false;
2428
- await writeFileAtomic(configPath, `${JSON.stringify(parsed, null, 2)}\n`);
2429
- }
2430
- }
2431
- if (args.gitInit) try {
2432
- await capture("git", ["--version"], { cwd: destDir });
2433
- await run("git", ["init"], { cwd: destDir });
2434
- if (hasHooks) await run("git", [
2435
- "config",
2436
- "core.hooksPath",
2437
- ".githooks"
2438
- ], { cwd: destDir });
2439
- } catch {
2440
- if (interactive) p.note("git not available; skipped `git init`", "gitInit");
2441
- }
2442
- const next = [
2443
- "next:",
2444
- `- cd ${destDir}`,
2445
- "- create a git repo + set origin (recommended; enables blank base flake)",
2446
- "- clawdlets env init # set HCLOUD_TOKEN in .clawdlets/env (required for provisioning)",
2447
- `- clawdlets host set --host ${host$1} --admin-cidr <your-ip>/32 --disk-device /dev/sda --add-ssh-key-file $HOME/.ssh/id_ed25519.pub`,
2448
- `- clawdlets host set --host ${host$1} --ssh-exposure bootstrap`,
2449
- `- clawdlets secrets init --host ${host$1}`,
2450
- `- clawdlets doctor --host ${host$1}`,
2451
- `- clawdlets bootstrap --host ${host$1}`,
2452
- `- clawdlets host set --host ${host$1} --target-host <ssh-alias|user@host>`,
2453
- `- clawdlets host set --host ${host$1} --ssh-exposure tailnet`,
2454
- `- clawdlets lockdown --host ${host$1}`
2455
- ].join("\n");
2647
+ if (!result.gitInitialized && interactive) p.note("git not available; skipped `git init`", "gitInit");
2648
+ const next = result.nextSteps.join("\n");
2456
2649
  if (interactive) p.outro(next);
2457
2650
  else console.log(next);
2458
2651
  }
@@ -2465,35 +2658,6 @@ const project = defineCommand({
2465
2658
  subCommands: { init: projectInit }
2466
2659
  });
2467
2660
 
2468
- //#endregion
2469
- //#region src/commands/ssh-target.ts
2470
- function needsSudo(targetHost) {
2471
- return !/^root@/i.test(targetHost.trim());
2472
- }
2473
- function requireTargetHost(targetHost, hostName) {
2474
- const v = targetHost.trim();
2475
- if (v) return validateTargetHost(v);
2476
- throw new Error([
2477
- `missing target host for ${hostName}`,
2478
- "set it in fleet/clawdlets.json (hosts.<host>.targetHost) or pass --target-host",
2479
- "recommended: use an SSH config alias (e.g. botsmj)"
2480
- ].join("; "));
2481
- }
2482
-
2483
- //#endregion
2484
- //#region src/commands/secrets/common.ts
2485
- function quoteYamlString(value) {
2486
- return `"${value.replace(/\\/g, "\\\\").replace(/\r/g, "\\r").replace(/\n/g, "\\n").replace(/\t/g, "\\t").replace(/"/g, "\\\"")}"`;
2487
- }
2488
- function upsertYamlScalarLine(params) {
2489
- const { text, key, value } = params;
2490
- const escaped = key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
2491
- const rx = new RegExp(`^\\s*${escaped}\\s*:\\s*.*$`, "m");
2492
- const line = `${key}: ${quoteYamlString(value)}`;
2493
- if (rx.test(text)) return text.replace(rx, line);
2494
- return `${text.trimEnd()}\n${line}\n`;
2495
- }
2496
-
2497
2661
  //#endregion
2498
2662
  //#region src/commands/secrets/init.ts
2499
2663
  function wantsInteractive(flag) {
@@ -2554,6 +2718,11 @@ const secretsInit = defineCommand({
2554
2718
  type: "boolean",
2555
2719
  description: "Print actions without writing.",
2556
2720
  default: false
2721
+ },
2722
+ autowire: {
2723
+ type: "boolean",
2724
+ description: "Autowire missing secretEnv mappings before init.",
2725
+ default: false
2557
2726
  }
2558
2727
  },
2559
2728
  async run({ args }) {
@@ -2564,7 +2733,7 @@ const secretsInit = defineCommand({
2564
2733
  hostArg: a.host
2565
2734
  });
2566
2735
  if (!ctx) return;
2567
- const { layout, config: clawdletsConfig, hostName, hostCfg } = ctx;
2736
+ let { layout, config: clawdletsConfig, hostName, hostCfg } = ctx;
2568
2737
  const hasTty = Boolean(process$1.stdin.isTTY && process$1.stdout.isTTY);
2569
2738
  let interactive = wantsInteractive(Boolean(a.interactive));
2570
2739
  if (!interactive && hasTty && !a.fromJson) interactive = true;
@@ -2577,34 +2746,51 @@ const secretsInit = defineCommand({
2577
2746
  const extraFilesKeyPath = getHostExtraFilesKeyPath(layout, hostName);
2578
2747
  const extraFilesSecretsDir = getHostExtraFilesSecretsDir(layout, hostName);
2579
2748
  const localSecretsDir = getHostSecretsDir(layout, hostName);
2580
- const bots = clawdletsConfig.fleet.botOrder;
2581
- if (bots.length === 0) throw new Error("fleet.botOrder is empty (set bots in fleet/clawdlets.json)");
2582
- const requiresTailscaleAuthKey = String(hostCfg.tailnet?.mode || "none") === "tailscale";
2749
+ if (clawdletsConfig.fleet.botOrder.length === 0) throw new Error("fleet.botOrder is empty (set bots in fleet/clawdlets.json)");
2583
2750
  const garnixPrivate = hostCfg.cache?.garnix?.private;
2584
2751
  const garnixPrivateEnabled = Boolean(garnixPrivate?.enable);
2585
2752
  const garnixNetrcSecretName = garnixPrivateEnabled ? String(garnixPrivate?.netrcSecret || "garnix_netrc").trim() : "";
2586
2753
  const garnixNetrcPath = garnixPrivateEnabled ? String(garnixPrivate?.netrcPath || "/etc/nix/netrc").trim() : "";
2587
2754
  if (garnixPrivateEnabled && !garnixNetrcSecretName) throw new Error("cache.garnix.private.netrcSecret must be set when private cache is enabled");
2588
- const secretsPlan = buildFleetSecretsPlan({
2755
+ let secretsPlan = buildFleetSecretsPlan({
2589
2756
  config: clawdletsConfig,
2590
2757
  hostName
2591
2758
  });
2592
- if (secretsPlan.missingSecretConfig.length > 0) {
2759
+ if (secretsPlan.missingSecretConfig.length > 0) if (a.autowire) {
2760
+ const plan = planSecretsAutowire({
2761
+ config: clawdletsConfig,
2762
+ hostName
2763
+ });
2764
+ if (plan.updates.length === 0) {
2765
+ const first = secretsPlan.missingSecretConfig[0];
2766
+ throw new Error(first.kind === "envVar" ? `missing secretEnv mapping for envVar=${first.envVar} (bot=${first.bot}); run: clawdlets config wire-secrets --write` : `invalid secret file config: scope=${first.scope} id=${first.fileId} targetPath=${first.targetPath} (${first.message})`);
2767
+ }
2768
+ const nextConfig = applySecretsAutowire({
2769
+ config: clawdletsConfig,
2770
+ plan
2771
+ });
2772
+ await writeClawdletsConfig({
2773
+ configPath: layout.clawdletsConfigPath,
2774
+ config: nextConfig
2775
+ });
2776
+ clawdletsConfig = nextConfig;
2777
+ secretsPlan = buildFleetSecretsPlan({
2778
+ config: clawdletsConfig,
2779
+ hostName
2780
+ });
2781
+ } else {
2593
2782
  const first = secretsPlan.missingSecretConfig[0];
2594
- if (first.kind === "discord") throw new Error(`missing discordTokenSecret for bot=${first.bot} (set fleet.bots.${first.bot}.profile.discordTokenSecret)`);
2595
- throw new Error(`missing modelSecrets entry for provider=${first.provider} (bot=${first.bot}, model=${first.model}); set fleet.modelSecrets.${first.provider}`);
2783
+ if (first.kind === "envVar") throw new Error(`missing secretEnv mapping for envVar=${first.envVar} (bot=${first.bot}); set fleet.secretEnv.${first.envVar} or fleet.bots.${first.bot}.profile.secretEnv.${first.envVar} (or run: clawdlets config wire-secrets --write)`);
2784
+ throw new Error(`invalid secret file config: scope=${first.scope} id=${first.fileId} targetPath=${first.targetPath} (${first.message})`);
2596
2785
  }
2597
- const requiredSecretNames = new Set(secretsPlan.secretNamesRequired);
2598
- const discordSecretByName = /* @__PURE__ */ new Map();
2599
- for (const [bot$1, secretName] of Object.entries(secretsPlan.discordSecretsByBot)) if (secretName) discordSecretByName.set(secretName, bot$1);
2600
- const discordBotsRequired = bots.filter((b) => {
2601
- const secretName = secretsPlan.discordSecretsByBot[b] || "";
2602
- return secretName && requiredSecretNames.has(secretName);
2603
- });
2604
- const requiredExtraSecretNames = new Set([...requiredSecretNames, ...garnixPrivateEnabled ? [garnixNetrcSecretName] : []]);
2605
- const templateExtraSecrets = {};
2606
- for (const secretName of secretsPlan.secretNamesAll) templateExtraSecrets[secretName] = requiredSecretNames.has(secretName) ? "<REPLACE_WITH_SECRET>" : "<OPTIONAL>";
2607
- if (garnixPrivateEnabled) templateExtraSecrets[garnixNetrcSecretName] = "<REPLACE_WITH_NETRC>";
2786
+ const requiresTailscaleAuthKey = new Set(secretsPlan.hostSecretNamesRequired).has("tailscale_auth_key");
2787
+ const skipHostNames = new Set(["admin_password_hash", "tailscale_auth_key"]);
2788
+ const requiredSecrets = new Set((secretsPlan.required || []).map((spec) => spec.name).filter((name) => !skipHostNames.has(name)));
2789
+ const optionalSecrets = new Set((secretsPlan.optional || []).map((spec) => spec.name).filter((name) => !skipHostNames.has(name)));
2790
+ const templateSecretNames = Array.from(new Set([...Array.from(requiredSecrets), ...Array.from(optionalSecrets)])).sort();
2791
+ const templateSecrets = {};
2792
+ for (const secretName of templateSecretNames) if (garnixPrivateEnabled && secretName === garnixNetrcSecretName) templateSecrets[secretName] = "<REPLACE_WITH_NETRC>";
2793
+ else templateSecrets[secretName] = requiredSecrets.has(secretName) ? "<REPLACE_WITH_SECRET>" : "<OPTIONAL>";
2608
2794
  const defaultSecretsJsonPath = path.join(layout.runtimeDir, "secrets.json");
2609
2795
  const defaultSecretsJsonDisplay = path.relative(process$1.cwd(), defaultSecretsJsonPath) || defaultSecretsJsonPath;
2610
2796
  let fromJson = resolveSecretsInitFromJsonArg({
@@ -2617,8 +2803,6 @@ const secretsInit = defineCommand({
2617
2803
  if (!a.allowPlaceholders) {
2618
2804
  const placeholders = listSecretsInitPlaceholders({
2619
2805
  input: parseSecretsInitJson(fs.readFileSync(defaultSecretsJsonPath, "utf8")),
2620
- bots,
2621
- discordBots: discordBotsRequired,
2622
2806
  requiresTailscaleAuthKey
2623
2807
  });
2624
2808
  if (placeholders.length > 0) {
@@ -2630,10 +2814,8 @@ const secretsInit = defineCommand({
2630
2814
  }
2631
2815
  } else {
2632
2816
  const template = buildSecretsInitTemplate({
2633
- bots,
2634
- discordBots: discordBotsRequired,
2635
2817
  requiresTailscaleAuthKey,
2636
- secrets: templateExtraSecrets
2818
+ secrets: templateSecrets
2637
2819
  });
2638
2820
  if (!a.dryRun) {
2639
2821
  await ensureDir(path.dirname(defaultSecretsJsonPath));
@@ -2816,41 +2998,21 @@ const secretsInit = defineCommand({
2816
2998
  adminPassword: "",
2817
2999
  adminPasswordHash: "",
2818
3000
  tailscaleAuthKey: "",
2819
- secrets: {},
2820
- discordTokens: {}
3001
+ secrets: {}
2821
3002
  };
2822
3003
  if (interactive) {
2823
- const discordSecretNames = new Set(Object.values(secretsPlan.discordSecretsByBot).filter(Boolean));
2824
- const requiredExtraSecrets = Array.from(requiredExtraSecretNames).filter((s) => !discordSecretNames.has(s)).sort();
2825
- const discordTokenBots = [];
2826
- const seenDiscordSecrets = /* @__PURE__ */ new Set();
2827
- for (const bot$1 of bots) {
2828
- const secretName = secretsPlan.discordSecretsByBot[bot$1] || "";
2829
- if (!secretName) continue;
2830
- if (!requiredSecretNames.has(secretName)) continue;
2831
- if (seenDiscordSecrets.has(secretName)) continue;
2832
- seenDiscordSecrets.add(secretName);
2833
- discordTokenBots.push({
2834
- bot: bot$1,
2835
- secretName
2836
- });
2837
- }
3004
+ const requiredSecretsToPrompt = Array.from(requiredSecrets).sort();
2838
3005
  const allSteps = [
2839
3006
  { kind: "adminPassword" },
2840
3007
  ...requiresTailscaleAuthKey ? [{ kind: "tailscaleAuthKey" }] : [],
2841
- ...requiredExtraSecrets.map((secretName) => garnixPrivateEnabled && secretName === garnixNetrcSecretName ? {
3008
+ ...requiredSecretsToPrompt.map((secretName) => garnixPrivateEnabled && secretName === garnixNetrcSecretName ? {
2842
3009
  kind: "garnixNetrcFile",
2843
3010
  secretName,
2844
3011
  netrcPath: garnixNetrcPath || "/etc/nix/netrc"
2845
3012
  } : {
2846
3013
  kind: "secret",
2847
3014
  secretName
2848
- }),
2849
- ...discordTokenBots.map((b) => ({
2850
- kind: "discordToken",
2851
- bot: b.bot,
2852
- secretName: b.secretName
2853
- }))
3015
+ })
2854
3016
  ];
2855
3017
  for (let i = 0; i < allSteps.length;) {
2856
3018
  const step = allSteps[i];
@@ -2862,7 +3024,6 @@ const secretsInit = defineCommand({
2862
3024
  placeholder: `${layout.runtimeDir}/garnix.netrc`
2863
3025
  });
2864
3026
  else if (step.kind === "secret") v = await p.password({ message: `Secret value (${step.secretName}) (required)` });
2865
- else v = await p.password({ message: `Discord token for ${step.bot} (${step.secretName}) (required)` });
2866
3027
  if (p.isCancel(v)) {
2867
3028
  if (await navOnCancel({
2868
3029
  flow: flowSecrets,
@@ -2891,10 +3052,6 @@ const secretsInit = defineCommand({
2891
3052
  values.secrets[step.secretName] = netrc;
2892
3053
  }
2893
3054
  } else if (step.kind === "secret") values.secrets[step.secretName] = s;
2894
- else {
2895
- values.discordTokens[step.bot] = s;
2896
- values.secrets[step.secretName] = s;
2897
- }
2898
3055
  i += 1;
2899
3056
  }
2900
3057
  } else {
@@ -2902,19 +3059,35 @@ const secretsInit = defineCommand({
2902
3059
  values.adminPasswordHash = input.adminPasswordHash;
2903
3060
  values.tailscaleAuthKey = input.tailscaleAuthKey || "";
2904
3061
  values.secrets = input.secrets || {};
2905
- values.discordTokens = input.discordTokens || {};
2906
3062
  }
2907
- const secretsToWrite = secretsPlan.secretNamesAll;
2908
- const requiredSecrets = Array.from(new Set([
2909
- ...requiresTailscaleAuthKey ? ["tailscale_auth_key"] : [],
2910
- "admin_password_hash",
2911
- ...garnixPrivateEnabled ? [garnixNetrcSecretName] : [],
2912
- ...secretsToWrite
2913
- ]));
3063
+ assertSecretsAreManaged({
3064
+ allowlist: buildManagedHostSecretNameAllowlist({
3065
+ config: clawdletsConfig,
3066
+ host: hostName
3067
+ }),
3068
+ secrets: values.secrets
3069
+ });
3070
+ const secretsToWrite = Array.from(new Set([...secretsPlan.hostSecretNamesRequired, ...secretsPlan.secretNamesAll])).sort();
2914
3071
  const isOptionalMarker = (v) => String(v || "").trim() === "<OPTIONAL>";
3072
+ const requiredSecretNamesForValue = new Set([...secretsPlan.hostSecretNamesRequired, ...secretsPlan.secretNamesRequired]);
3073
+ const needsExistingValue = (secretName) => {
3074
+ if (secretName === "tailscale_auth_key") return !values.tailscaleAuthKey.trim();
3075
+ if (secretName === "admin_password_hash") return !values.adminPasswordHash.trim() && !values.adminPassword.trim();
3076
+ const vv = values.secrets?.[secretName]?.trim() || "";
3077
+ const required = requiredSecretNamesForValue.has(secretName);
3078
+ if (vv && !(required && (isOptionalMarker(vv) || isPlaceholderSecretValue(vv)))) return false;
3079
+ return true;
3080
+ };
3081
+ const secretsNeedingExisting = secretsToWrite.filter(needsExistingValue);
3082
+ const existingPairs = secretsNeedingExisting.length > 0 ? await mapWithConcurrency({
3083
+ items: secretsNeedingExisting,
3084
+ concurrency: 4,
3085
+ fn: async (secretName) => [secretName, await readExistingScalar(secretName)]
3086
+ }) : [];
3087
+ const existingBySecret = new Map(existingPairs);
2915
3088
  const resolvedValues = {};
2916
- for (const secretName of requiredSecrets) {
2917
- const existing = await readExistingScalar(secretName);
3089
+ for (const secretName of secretsToWrite) {
3090
+ const existing = existingBySecret.get(secretName) ?? null;
2918
3091
  if (secretName === "tailscale_auth_key") {
2919
3092
  if (values.tailscaleAuthKey.trim()) resolvedValues[secretName] = values.tailscaleAuthKey.trim();
2920
3093
  else if (existing && !isPlaceholderSecretValue(existing)) resolvedValues[secretName] = existing;
@@ -2928,20 +3101,9 @@ const secretsInit = defineCommand({
2928
3101
  else resolvedValues[secretName] = existing ?? "<FILL_ME>";
2929
3102
  continue;
2930
3103
  }
2931
- if (discordSecretByName.has(secretName)) {
2932
- const bot$1 = discordSecretByName.get(secretName) || "";
2933
- const required$1 = requiredSecretNames.has(secretName);
2934
- const vv$1 = (bot$1 ? values.discordTokens[bot$1]?.trim() : "") || values.secrets?.[secretName]?.trim() || "";
2935
- if (vv$1) resolvedValues[secretName] = vv$1;
2936
- else if (existing) resolvedValues[secretName] = existing;
2937
- else if (!required$1) resolvedValues[secretName] = "<OPTIONAL>";
2938
- else if (a.allowPlaceholders) resolvedValues[secretName] = "<FILL_ME>";
2939
- else throw new Error(`missing discord token for ${bot$1 || secretName} (provide it in --from-json.discordTokens or pass --allow-placeholders)`);
2940
- continue;
2941
- }
2942
3104
  const vv = values.secrets?.[secretName]?.trim() || "";
2943
- const required = requiredExtraSecretNames.has(secretName);
2944
- if (vv && !(required && isOptionalMarker(vv))) {
3105
+ const required = requiredSecretNamesForValue.has(secretName);
3106
+ if (vv && !(required && (isOptionalMarker(vv) || isPlaceholderSecretValue(vv)))) {
2945
3107
  resolvedValues[secretName] = vv;
2946
3108
  continue;
2947
3109
  }
@@ -2959,7 +3121,7 @@ const secretsInit = defineCommand({
2959
3121
  if (!a.dryRun) {
2960
3122
  await ensureDir(localSecretsDir);
2961
3123
  await ensureDir(extraFilesSecretsDir);
2962
- for (const secretName of requiredSecrets) {
3124
+ for (const secretName of secretsToWrite) {
2963
3125
  const outPath = path.join(localSecretsDir, `${secretName}.yaml`);
2964
3126
  await sopsEncryptYamlToFile({
2965
3127
  plaintextYaml: upsertYamlScalarLine({
@@ -3130,7 +3292,7 @@ const secretsVerify = defineCommand({
3130
3292
  hostArg: args.host
3131
3293
  });
3132
3294
  if (!ctx) return;
3133
- const { layout, config: config$1, hostName, hostCfg } = ctx;
3295
+ const { layout, config: config$1, hostName } = ctx;
3134
3296
  const deployCreds = loadDeployCreds({
3135
3297
  cwd,
3136
3298
  runtimeDir: args.runtimeDir,
@@ -3149,10 +3311,10 @@ const secretsVerify = defineCommand({
3149
3311
  config: config$1,
3150
3312
  hostName
3151
3313
  });
3152
- const requiredSecretNames = new Set(secretsPlan.secretNamesRequired);
3153
- const tailnetMode = String(hostCfg.tailnet?.mode || "none");
3154
- const requiredSecrets = Array.from(new Set([...tailnetMode === "tailscale" ? ["tailscale_auth_key"] : [], "admin_password_hash"]));
3155
- const secretNames = secretsPlan.secretNamesAll;
3314
+ const planRequiredNames = (secretsPlan.required || []).map((spec) => spec.name);
3315
+ const planOptionalNames = (secretsPlan.optional || []).map((spec) => spec.name);
3316
+ const requiredSecretNames = new Set(planRequiredNames);
3317
+ const secretNames = Array.from(new Set([...planRequiredNames, ...planOptionalNames])).sort();
3156
3318
  const optionalSecrets = ["root_password_hash"];
3157
3319
  const preflight = [];
3158
3320
  if (!fs.existsSync(operatorKeyPath)) preflight.push({
@@ -3207,14 +3369,11 @@ const secretsVerify = defineCommand({
3207
3369
  const results = [];
3208
3370
  const verifyOne = async (secretName, optional, allowOptionalMarker) => {
3209
3371
  const filePath = path.join(localDir, `${secretName}.yaml`);
3210
- if (!fs.existsSync(filePath)) {
3211
- results.push({
3212
- secret: secretName,
3213
- status: optional ? "warn" : "missing",
3214
- detail: `(missing: ${filePath})`
3215
- });
3216
- return;
3217
- }
3372
+ if (!fs.existsSync(filePath)) return {
3373
+ secret: secretName,
3374
+ status: optional ? "warn" : "missing",
3375
+ detail: `(missing: ${filePath})`
3376
+ };
3218
3377
  try {
3219
3378
  const decrypted = await sopsDecryptYamlFile({
3220
3379
  filePath,
@@ -3223,58 +3382,43 @@ const secretsVerify = defineCommand({
3223
3382
  });
3224
3383
  const parsed = YAML.parse(decrypted) || {};
3225
3384
  const keys = Object.keys(parsed).filter((k) => k !== "sops");
3226
- if (keys.length !== 1 || keys[0] !== secretName) {
3227
- results.push({
3228
- secret: secretName,
3229
- status: "missing",
3230
- detail: "(invalid: expected exactly 1 key matching filename)"
3231
- });
3232
- return;
3233
- }
3385
+ if (keys.length !== 1 || keys[0] !== secretName) return {
3386
+ secret: secretName,
3387
+ status: "missing",
3388
+ detail: "(invalid: expected exactly 1 key matching filename)"
3389
+ };
3234
3390
  const v = parsed[secretName];
3235
3391
  const value = typeof v === "string" ? v : v == null ? "" : String(v);
3236
- if (!allowOptionalMarker && value.trim() === "<OPTIONAL>") {
3237
- results.push({
3238
- secret: secretName,
3239
- status: "missing",
3240
- detail: "(placeholder: <OPTIONAL>)"
3241
- });
3242
- return;
3243
- }
3244
- if (!optional && isPlaceholderSecretValue(value)) {
3245
- results.push({
3246
- secret: secretName,
3247
- status: "missing",
3248
- detail: `(placeholder: ${value.trim()})`
3249
- });
3250
- return;
3251
- }
3252
- if (optional && isPlaceholderSecretValue(value)) {
3253
- results.push({
3254
- secret: secretName,
3255
- status: "missing",
3256
- detail: `(placeholder: ${value.trim()})`
3257
- });
3258
- return;
3259
- }
3260
- if (!optional && !value.trim()) {
3261
- results.push({
3262
- secret: secretName,
3263
- status: "missing",
3264
- detail: "(empty)"
3265
- });
3266
- return;
3267
- }
3268
- results.push({
3392
+ if (!allowOptionalMarker && value.trim() === "<OPTIONAL>") return {
3393
+ secret: secretName,
3394
+ status: "missing",
3395
+ detail: "(placeholder: <OPTIONAL>)"
3396
+ };
3397
+ if (!optional && isPlaceholderSecretValue(value)) return {
3398
+ secret: secretName,
3399
+ status: "missing",
3400
+ detail: `(placeholder: ${value.trim()})`
3401
+ };
3402
+ if (optional && isPlaceholderSecretValue(value)) return {
3403
+ secret: secretName,
3404
+ status: "missing",
3405
+ detail: `(placeholder: ${value.trim()})`
3406
+ };
3407
+ if (!optional && !value.trim()) return {
3408
+ secret: secretName,
3409
+ status: "missing",
3410
+ detail: "(empty)"
3411
+ };
3412
+ return {
3269
3413
  secret: secretName,
3270
3414
  status: "ok"
3271
- });
3415
+ };
3272
3416
  } catch (e) {
3273
- results.push({
3417
+ return {
3274
3418
  secret: secretName,
3275
3419
  status: "missing",
3276
3420
  detail: String(e?.message || e)
3277
- });
3421
+ };
3278
3422
  }
3279
3423
  };
3280
3424
  if (!fs.existsSync(localDir)) results.push({
@@ -3283,9 +3427,20 @@ const secretsVerify = defineCommand({
3283
3427
  detail: localDir
3284
3428
  });
3285
3429
  else {
3286
- for (const s of requiredSecrets) await verifyOne(s, false, false);
3287
- for (const s of secretNames) await verifyOne(s, false, !requiredSecretNames.has(s));
3288
- for (const s of optionalSecrets) await verifyOne(s, true, true);
3430
+ const checked = await mapWithConcurrency({
3431
+ items: [...secretNames.map((s) => ({
3432
+ secretName: s,
3433
+ optional: false,
3434
+ allowOptionalMarker: !requiredSecretNames.has(s)
3435
+ })), ...optionalSecrets.map((s) => ({
3436
+ secretName: s,
3437
+ optional: true,
3438
+ allowOptionalMarker: true
3439
+ }))],
3440
+ concurrency: 4,
3441
+ fn: async (c) => await verifyOne(c.secretName, c.optional, c.allowOptionalMarker)
3442
+ });
3443
+ results.push(...checked);
3289
3444
  }
3290
3445
  if (args.json) console.log(JSON.stringify({
3291
3446
  host: hostName,
@@ -3551,6 +3706,303 @@ const serverGithubSync = defineCommand({
3551
3706
  }
3552
3707
  });
3553
3708
 
3709
+ //#endregion
3710
+ //#region src/commands/server/channels.ts
3711
+ function requireBotId(value) {
3712
+ const botId = value.trim();
3713
+ if (!BotIdSchema.safeParse(botId).success) throw new Error(`invalid --bot: ${botId}`);
3714
+ return botId;
3715
+ }
3716
+ function runRemoteClawdbotChannels(params) {
3717
+ const remoteCmd = [
3718
+ ...params.sudo ? ["sudo"] : [],
3719
+ "/etc/clawdlets/bin/clawdbot-channels",
3720
+ "--bot",
3721
+ params.botId,
3722
+ ...params.args
3723
+ ].map((a) => shellQuote(a)).join(" ");
3724
+ return sshRun(params.targetHost, remoteCmd, { tty: params.sshTty });
3725
+ }
3726
+ const serverChannelsStatus = defineCommand({
3727
+ meta: {
3728
+ name: "status",
3729
+ description: "Run `clawdbot channels status` on the host for a bot."
3730
+ },
3731
+ args: {
3732
+ runtimeDir: {
3733
+ type: "string",
3734
+ description: "Runtime directory (default: .clawdlets)."
3735
+ },
3736
+ host: {
3737
+ type: "string",
3738
+ description: "Host name (defaults to clawdlets.json defaultHost / sole host)."
3739
+ },
3740
+ targetHost: {
3741
+ type: "string",
3742
+ description: "SSH target override (default: from clawdlets.json)."
3743
+ },
3744
+ bot: {
3745
+ type: "string",
3746
+ description: "Bot id (fleet bot id; maps to systemd unit clawdbot-<bot>.service)."
3747
+ },
3748
+ probe: {
3749
+ type: "boolean",
3750
+ description: "Probe channel credentials.",
3751
+ default: false
3752
+ },
3753
+ timeout: {
3754
+ type: "string",
3755
+ description: "Timeout in ms.",
3756
+ default: "10000"
3757
+ },
3758
+ json: {
3759
+ type: "boolean",
3760
+ description: "Output JSON.",
3761
+ default: false
3762
+ },
3763
+ sshTty: {
3764
+ type: "boolean",
3765
+ description: "Allocate SSH TTY.",
3766
+ default: false
3767
+ }
3768
+ },
3769
+ async run({ args }) {
3770
+ const ctx = loadHostContextOrExit({
3771
+ cwd: process$1.cwd(),
3772
+ runtimeDir: args.runtimeDir,
3773
+ hostArg: args.host
3774
+ });
3775
+ if (!ctx) return;
3776
+ const { hostName, hostCfg } = ctx;
3777
+ const targetHost = requireTargetHost(String(args.targetHost || hostCfg.targetHost || ""), hostName);
3778
+ const botId = requireBotId(String(args.bot || ""));
3779
+ await runRemoteClawdbotChannels({
3780
+ targetHost,
3781
+ sudo: needsSudo(targetHost),
3782
+ botId,
3783
+ sshTty: Boolean(args.sshTty),
3784
+ args: [
3785
+ "status",
3786
+ ...args.probe ? ["--probe"] : [],
3787
+ ...args.timeout ? ["--timeout", String(args.timeout)] : [],
3788
+ ...args.json ? ["--json"] : []
3789
+ ]
3790
+ });
3791
+ }
3792
+ });
3793
+ const serverChannelsCapabilities = defineCommand({
3794
+ meta: {
3795
+ name: "capabilities",
3796
+ description: "Run `clawdbot channels capabilities` on the host for a bot."
3797
+ },
3798
+ args: {
3799
+ runtimeDir: {
3800
+ type: "string",
3801
+ description: "Runtime directory (default: .clawdlets)."
3802
+ },
3803
+ host: {
3804
+ type: "string",
3805
+ description: "Host name (defaults to clawdlets.json defaultHost / sole host)."
3806
+ },
3807
+ targetHost: {
3808
+ type: "string",
3809
+ description: "SSH target override (default: from clawdlets.json)."
3810
+ },
3811
+ bot: {
3812
+ type: "string",
3813
+ description: "Bot id (fleet bot id; maps to systemd unit clawdbot-<bot>.service)."
3814
+ },
3815
+ channel: {
3816
+ type: "string",
3817
+ description: "Channel id (discord|telegram|slack|whatsapp|...|all)."
3818
+ },
3819
+ account: {
3820
+ type: "string",
3821
+ description: "Account id (only with --channel)."
3822
+ },
3823
+ target: {
3824
+ type: "string",
3825
+ description: "Channel target for permission audit (Discord channel:<id>)."
3826
+ },
3827
+ timeout: {
3828
+ type: "string",
3829
+ description: "Timeout in ms.",
3830
+ default: "10000"
3831
+ },
3832
+ json: {
3833
+ type: "boolean",
3834
+ description: "Output JSON.",
3835
+ default: false
3836
+ },
3837
+ sshTty: {
3838
+ type: "boolean",
3839
+ description: "Allocate SSH TTY.",
3840
+ default: false
3841
+ }
3842
+ },
3843
+ async run({ args }) {
3844
+ const ctx = loadHostContextOrExit({
3845
+ cwd: process$1.cwd(),
3846
+ runtimeDir: args.runtimeDir,
3847
+ hostArg: args.host
3848
+ });
3849
+ if (!ctx) return;
3850
+ const { hostName, hostCfg } = ctx;
3851
+ const targetHost = requireTargetHost(String(args.targetHost || hostCfg.targetHost || ""), hostName);
3852
+ const botId = requireBotId(String(args.bot || ""));
3853
+ await runRemoteClawdbotChannels({
3854
+ targetHost,
3855
+ sudo: needsSudo(targetHost),
3856
+ botId,
3857
+ sshTty: Boolean(args.sshTty),
3858
+ args: [
3859
+ "capabilities",
3860
+ ...args.channel ? ["--channel", String(args.channel)] : [],
3861
+ ...args.account ? ["--account", String(args.account)] : [],
3862
+ ...args.target ? ["--target", String(args.target)] : [],
3863
+ ...args.timeout ? ["--timeout", String(args.timeout)] : [],
3864
+ ...args.json ? ["--json"] : []
3865
+ ]
3866
+ });
3867
+ }
3868
+ });
3869
+ const serverChannelsLogin = defineCommand({
3870
+ meta: {
3871
+ name: "login",
3872
+ description: "Run `clawdbot channels login` on the host for a bot."
3873
+ },
3874
+ args: {
3875
+ runtimeDir: {
3876
+ type: "string",
3877
+ description: "Runtime directory (default: .clawdlets)."
3878
+ },
3879
+ host: {
3880
+ type: "string",
3881
+ description: "Host name (defaults to clawdlets.json defaultHost / sole host)."
3882
+ },
3883
+ targetHost: {
3884
+ type: "string",
3885
+ description: "SSH target override (default: from clawdlets.json)."
3886
+ },
3887
+ bot: {
3888
+ type: "string",
3889
+ description: "Bot id (fleet bot id; maps to systemd unit clawdbot-<bot>.service)."
3890
+ },
3891
+ channel: {
3892
+ type: "string",
3893
+ description: "Channel alias (default: whatsapp)."
3894
+ },
3895
+ account: {
3896
+ type: "string",
3897
+ description: "Account id (accountId)."
3898
+ },
3899
+ verbose: {
3900
+ type: "boolean",
3901
+ description: "Verbose connection logs.",
3902
+ default: false
3903
+ },
3904
+ sshTty: {
3905
+ type: "boolean",
3906
+ description: "Allocate SSH TTY.",
3907
+ default: false
3908
+ }
3909
+ },
3910
+ async run({ args }) {
3911
+ const ctx = loadHostContextOrExit({
3912
+ cwd: process$1.cwd(),
3913
+ runtimeDir: args.runtimeDir,
3914
+ hostArg: args.host
3915
+ });
3916
+ if (!ctx) return;
3917
+ const { hostName, hostCfg } = ctx;
3918
+ const targetHost = requireTargetHost(String(args.targetHost || hostCfg.targetHost || ""), hostName);
3919
+ const botId = requireBotId(String(args.bot || ""));
3920
+ await runRemoteClawdbotChannels({
3921
+ targetHost,
3922
+ sudo: needsSudo(targetHost),
3923
+ botId,
3924
+ sshTty: Boolean(args.sshTty),
3925
+ args: [
3926
+ "login",
3927
+ ...args.channel ? ["--channel", String(args.channel)] : [],
3928
+ ...args.account ? ["--account", String(args.account)] : [],
3929
+ ...args.verbose ? ["--verbose"] : []
3930
+ ]
3931
+ });
3932
+ }
3933
+ });
3934
+ const serverChannelsLogout = defineCommand({
3935
+ meta: {
3936
+ name: "logout",
3937
+ description: "Run `clawdbot channels logout` on the host for a bot."
3938
+ },
3939
+ args: {
3940
+ runtimeDir: {
3941
+ type: "string",
3942
+ description: "Runtime directory (default: .clawdlets)."
3943
+ },
3944
+ host: {
3945
+ type: "string",
3946
+ description: "Host name (defaults to clawdlets.json defaultHost / sole host)."
3947
+ },
3948
+ targetHost: {
3949
+ type: "string",
3950
+ description: "SSH target override (default: from clawdlets.json)."
3951
+ },
3952
+ bot: {
3953
+ type: "string",
3954
+ description: "Bot id (fleet bot id; maps to systemd unit clawdbot-<bot>.service)."
3955
+ },
3956
+ channel: {
3957
+ type: "string",
3958
+ description: "Channel alias (default: whatsapp)."
3959
+ },
3960
+ account: {
3961
+ type: "string",
3962
+ description: "Account id (accountId)."
3963
+ },
3964
+ sshTty: {
3965
+ type: "boolean",
3966
+ description: "Allocate SSH TTY.",
3967
+ default: false
3968
+ }
3969
+ },
3970
+ async run({ args }) {
3971
+ const ctx = loadHostContextOrExit({
3972
+ cwd: process$1.cwd(),
3973
+ runtimeDir: args.runtimeDir,
3974
+ hostArg: args.host
3975
+ });
3976
+ if (!ctx) return;
3977
+ const { hostName, hostCfg } = ctx;
3978
+ const targetHost = requireTargetHost(String(args.targetHost || hostCfg.targetHost || ""), hostName);
3979
+ const botId = requireBotId(String(args.bot || ""));
3980
+ await runRemoteClawdbotChannels({
3981
+ targetHost,
3982
+ sudo: needsSudo(targetHost),
3983
+ botId,
3984
+ sshTty: Boolean(args.sshTty),
3985
+ args: [
3986
+ "logout",
3987
+ ...args.channel ? ["--channel", String(args.channel)] : [],
3988
+ ...args.account ? ["--account", String(args.account)] : []
3989
+ ]
3990
+ });
3991
+ }
3992
+ });
3993
+ const serverChannels = defineCommand({
3994
+ meta: {
3995
+ name: "channels",
3996
+ description: "Operate Clawdbot channels over SSH (status/login/logout/capabilities)."
3997
+ },
3998
+ subCommands: {
3999
+ status: serverChannelsStatus,
4000
+ capabilities: serverChannelsCapabilities,
4001
+ login: serverChannelsLogin,
4002
+ logout: serverChannelsLogout
4003
+ }
4004
+ });
4005
+
3554
4006
  //#endregion
3555
4007
  //#region src/lib/deploy-manifest.ts
3556
4008
  const REV_RE = /^[0-9a-f]{40}$/;
@@ -4099,35 +4551,67 @@ const serverAudit = defineCommand({
4099
4551
  label: "fleet bots list",
4100
4552
  detail: "(empty)"
4101
4553
  });
4102
- for (const bot$1 of bots) {
4103
- const unit = normalizeClawdbotUnit(`clawdbot-${String(bot$1).trim()}`);
4104
- const show$2 = await must(`systemctl show ${unit}`, [
4105
- ...sudo ? ["sudo"] : [],
4106
- "systemctl",
4107
- "show",
4108
- shellQuote(unit)
4109
- ].join(" "));
4110
- if (!show$2) continue;
4111
- const parsed = parseSystemctlShow(show$2);
4112
- const loadState = parsed.LoadState || "";
4113
- const activeState = parsed.ActiveState || "";
4114
- const subState = parsed.SubState || "";
4115
- if (loadState && loadState !== "loaded") add$3({
4116
- status: "missing",
4117
- label: `${unit} load state`,
4118
- detail: `LoadState=${loadState}`
4119
- });
4120
- else if (activeState === "active" && subState === "running") add$3({
4121
- status: "ok",
4122
- label: `${unit} state`,
4123
- detail: `${activeState}/${subState}`
4124
- });
4125
- else add$3({
4126
- status: "missing",
4127
- label: `${unit} state`,
4128
- detail: `${activeState || "?"}/${subState || "?"}`
4129
- });
4130
- }
4554
+ const botChecks = await mapWithConcurrency({
4555
+ items: bots,
4556
+ concurrency: 4,
4557
+ fn: async (bot$1) => {
4558
+ const out = [];
4559
+ const mustBot = async (label, cmd) => {
4560
+ const captured = await trySshCapture(targetHost, cmd, { tty: sudo && args.sshTty });
4561
+ if (!captured.ok) {
4562
+ out.push({
4563
+ status: "missing",
4564
+ label,
4565
+ detail: captured.out
4566
+ });
4567
+ return null;
4568
+ }
4569
+ return captured.out;
4570
+ };
4571
+ const botId = String(bot$1).trim();
4572
+ const unit = normalizeClawdbotUnit(`clawdbot-${botId}`);
4573
+ const show$2 = await mustBot(`systemctl show ${unit}`, [
4574
+ ...sudo ? ["sudo"] : [],
4575
+ "systemctl",
4576
+ "show",
4577
+ shellQuote(unit)
4578
+ ].join(" "));
4579
+ if (show$2) {
4580
+ const parsed = parseSystemctlShow(show$2);
4581
+ const loadState = parsed.LoadState || "";
4582
+ const activeState = parsed.ActiveState || "";
4583
+ const subState = parsed.SubState || "";
4584
+ if (loadState && loadState !== "loaded") out.push({
4585
+ status: "missing",
4586
+ label: `${unit} load state`,
4587
+ detail: `LoadState=${loadState}`
4588
+ });
4589
+ else if (activeState === "active" && subState === "running") out.push({
4590
+ status: "ok",
4591
+ label: `${unit} state`,
4592
+ detail: `${activeState}/${subState}`
4593
+ });
4594
+ else out.push({
4595
+ status: "missing",
4596
+ label: `${unit} state`,
4597
+ detail: `${activeState || "?"}/${subState || "?"}`
4598
+ });
4599
+ }
4600
+ if (await mustBot(`channels status (${botId})`, [
4601
+ ...sudo ? ["sudo"] : [],
4602
+ "/etc/clawdlets/bin/clawdbot-channels",
4603
+ "--bot",
4604
+ shellQuote(botId),
4605
+ "status",
4606
+ "--json"
4607
+ ].join(" "))) out.push({
4608
+ status: "ok",
4609
+ label: `channels status (${botId})`
4610
+ });
4611
+ return out;
4612
+ }
4613
+ });
4614
+ for (const list$2 of botChecks) for (const c of list$2) add$3(c);
4131
4615
  if (args.json) console.log(JSON.stringify({
4132
4616
  host: hostName,
4133
4617
  targetHost,
@@ -4306,6 +4790,7 @@ const server = defineCommand({
4306
4790
  },
4307
4791
  subCommands: {
4308
4792
  audit: serverAudit,
4793
+ channels: serverChannels,
4309
4794
  deploy: serverDeploy,
4310
4795
  manifest: serverManifest,
4311
4796
  status: serverStatus,
@@ -4320,6 +4805,7 @@ const server = defineCommand({
4320
4805
  const baseCommands = {
4321
4806
  bot,
4322
4807
  bootstrap,
4808
+ clawdbot,
4323
4809
  config,
4324
4810
  doctor,
4325
4811
  env,