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.
- package/dist/config/template-source.json +2 -2
- package/dist/main.mjs +931 -445
- package/package.json +8 -7
- package/vendor/@clawdlets/cattle-core/dist/index.d.ts +10 -0
- package/vendor/@clawdlets/cattle-core/dist/index.js +10 -0
- package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/cattle-cloudinit.d.ts +6 -0
- package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/cattle-cloudinit.js +47 -1
- package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/cattle-planner.js +7 -1
- package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/hcloud-labels.js +28 -2
- package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/persona-loader.js +1 -1
- package/vendor/@clawdlets/cattle-core/package.json +33 -0
- package/vendor/@clawdlets/core/dist/assets/clawdbot-config.schema.json +7872 -0
- package/{node_modules → vendor}/@clawdlets/core/dist/assets/opentofu/main.tf +1 -7
- package/{node_modules → vendor}/@clawdlets/core/dist/doctor/deploy-checks.js +45 -49
- package/{node_modules → vendor}/@clawdlets/core/dist/doctor/repo-checks.js +38 -0
- package/vendor/@clawdlets/core/dist/lib/clawdbot-config-invariants.d.ts +19 -0
- package/vendor/@clawdlets/core/dist/lib/clawdbot-config-invariants.js +130 -0
- package/vendor/@clawdlets/core/dist/lib/clawdbot-schema-validate.d.ts +6 -0
- package/vendor/@clawdlets/core/dist/lib/clawdbot-schema-validate.js +35 -0
- package/vendor/@clawdlets/core/dist/lib/clawdbot-schema.d.ts +9 -0
- package/vendor/@clawdlets/core/dist/lib/clawdbot-schema.js +5 -0
- package/vendor/@clawdlets/core/dist/lib/clawdlets-config-legacy.d.ts +3 -0
- package/vendor/@clawdlets/core/dist/lib/clawdlets-config-legacy.js +64 -0
- package/vendor/@clawdlets/core/dist/lib/clawdlets-config-migrate.d.ts +8 -0
- package/vendor/@clawdlets/core/dist/lib/clawdlets-config-migrate.js +152 -0
- package/vendor/@clawdlets/core/dist/lib/clawdlets-config-validate.d.ts +19 -0
- package/vendor/@clawdlets/core/dist/lib/clawdlets-config-validate.js +138 -0
- package/{node_modules → vendor}/@clawdlets/core/dist/lib/clawdlets-config.d.ts +31 -7
- package/{node_modules → vendor}/@clawdlets/core/dist/lib/clawdlets-config.js +27 -76
- package/vendor/@clawdlets/core/dist/lib/concurrency.d.ts +6 -0
- package/vendor/@clawdlets/core/dist/lib/concurrency.js +18 -0
- package/vendor/@clawdlets/core/dist/lib/config-patch.d.ts +10 -0
- package/vendor/@clawdlets/core/dist/lib/config-patch.js +55 -0
- package/{node_modules → vendor}/@clawdlets/core/dist/lib/deploy-creds.d.ts +7 -0
- package/{node_modules → vendor}/@clawdlets/core/dist/lib/deploy-creds.js +14 -0
- package/vendor/@clawdlets/core/dist/lib/env-var-refs.d.ts +6 -0
- package/vendor/@clawdlets/core/dist/lib/env-var-refs.js +78 -0
- package/vendor/@clawdlets/core/dist/lib/fleet-secrets-plan-helpers.d.ts +79 -0
- package/vendor/@clawdlets/core/dist/lib/fleet-secrets-plan-helpers.js +457 -0
- package/vendor/@clawdlets/core/dist/lib/fleet-secrets-plan.d.ts +30 -0
- package/vendor/@clawdlets/core/dist/lib/fleet-secrets-plan.js +418 -0
- package/vendor/@clawdlets/core/dist/lib/fleet-workspaces.d.ts +8 -0
- package/vendor/@clawdlets/core/dist/lib/fleet-workspaces.js +17 -0
- package/vendor/@clawdlets/core/dist/lib/object-path.d.ts +4 -0
- package/vendor/@clawdlets/core/dist/lib/object-path.js +55 -0
- package/{node_modules → vendor}/@clawdlets/core/dist/lib/opentofu.js +1 -5
- package/vendor/@clawdlets/core/dist/lib/project-init.d.ts +26 -0
- package/vendor/@clawdlets/core/dist/lib/project-init.js +254 -0
- package/vendor/@clawdlets/core/dist/lib/run-constants.d.ts +4 -0
- package/vendor/@clawdlets/core/dist/lib/run-constants.js +20 -0
- package/vendor/@clawdlets/core/dist/lib/run-types.d.ts +48 -0
- package/vendor/@clawdlets/core/dist/lib/run-types.js +13 -0
- package/vendor/@clawdlets/core/dist/lib/safe-record.d.ts +7 -0
- package/vendor/@clawdlets/core/dist/lib/safe-record.js +13 -0
- package/vendor/@clawdlets/core/dist/lib/secret-wiring.d.ts +39 -0
- package/vendor/@clawdlets/core/dist/lib/secret-wiring.js +39 -0
- package/vendor/@clawdlets/core/dist/lib/secrets-allowlist.d.ts +10 -0
- package/vendor/@clawdlets/core/dist/lib/secrets-allowlist.js +21 -0
- package/vendor/@clawdlets/core/dist/lib/secrets-autowire.d.ts +26 -0
- package/vendor/@clawdlets/core/dist/lib/secrets-autowire.js +97 -0
- package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-init.d.ts +1 -6
- package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-init.js +21 -37
- package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-migrate.js +1 -1
- package/vendor/@clawdlets/core/dist/lib/secrets-plan.d.ts +172 -0
- package/vendor/@clawdlets/core/dist/lib/secrets-plan.js +62 -0
- package/vendor/@clawdlets/core/dist/lib/ssh-files.d.ts +3 -0
- package/vendor/@clawdlets/core/dist/lib/ssh-files.js +33 -0
- package/{node_modules → vendor}/@clawdlets/core/dist/lib/template-source.js +3 -2
- package/vendor/@clawdlets/core/dist/lib/yaml-scalar.d.ts +10 -0
- package/{node_modules → vendor}/@clawdlets/core/dist/lib/yaml-scalar.js +17 -0
- package/{node_modules → vendor}/@clawdlets/core/dist/repo-layout.d.ts +4 -0
- package/{node_modules → vendor}/@clawdlets/core/dist/repo-layout.js +11 -1
- package/{node_modules → vendor}/@clawdlets/core/package.json +5 -1
- package/vendor/@clawdlets/shared/dist/assets/llm-providers.json +255 -0
- package/vendor/@clawdlets/shared/dist/index.d.ts +3 -0
- package/vendor/@clawdlets/shared/dist/index.js +3 -0
- package/{node_modules/@clawdlets/core → vendor/@clawdlets/shared}/dist/lib/identifiers.js +2 -2
- package/vendor/@clawdlets/shared/dist/lib/llm-provider-env.d.ts +18 -0
- package/vendor/@clawdlets/shared/dist/lib/llm-provider-env.js +100 -0
- package/vendor/@clawdlets/shared/package.json +29 -0
- package/node_modules/@clawdlets/core/dist/doctor/cattle-checks.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/doctor/cattle-checks.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/doctor/deploy-checks.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/doctor/deploy-checks.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/doctor/repo-checks.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/doctor/repo-checks.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/doctor/types.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/doctor/types.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/doctor/util.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/doctor/util.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/doctor.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/doctor.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/index.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/index.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/age-keygen.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/age-keygen.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/age.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/age.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/base-flake.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/base-flake.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/cattle-cloudinit.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/cattle-cloudinit.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/cattle-planner.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/cattle-planner.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/cattle-task.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/cattle-task.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/clawdlets-config.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/clawdlets-config.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/context.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/context.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/deploy-creds.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/deploy-creds.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/docs-index.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/docs-index.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/dot-path.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/dot-path.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/dotenv-file.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/dotenv-file.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/fleet-nix-eval.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/fleet-nix-eval.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/fleet-policy.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/fleet-policy.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/fleet-secrets.d.ts +0 -23
- package/node_modules/@clawdlets/core/dist/lib/fleet-secrets.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/fleet-secrets.js +0 -114
- package/node_modules/@clawdlets/core/dist/lib/fleet-secrets.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/fs-private.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/fs-private.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/fs-safe.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/fs-safe.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/git.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/git.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/github.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/github.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/hcloud-cattle.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/hcloud-cattle.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/hcloud-labels.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/hcloud-labels.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/hcloud.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/hcloud.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/host-resolve.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/host-resolve.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/identifiers.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/identifiers.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/inline-script-ban.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/inline-script-ban.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/llm-provider-env.d.ts +0 -4
- package/node_modules/@clawdlets/core/dist/lib/llm-provider-env.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/llm-provider-env.js +0 -25
- package/node_modules/@clawdlets/core/dist/lib/llm-provider-env.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/mkpasswd.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/mkpasswd.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/nix-flakes.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/nix-flakes.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/nix-host.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/nix-host.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/nix-tools.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/nix-tools.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/opentofu.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/opentofu.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/path-expand.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/path-expand.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/persona-loader.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/persona-loader.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/repo.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/repo.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/run.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/run.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/secrets-init.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/secrets-init.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/secrets-migrate.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/secrets-migrate.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/secrets-policy.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/secrets-policy.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/secrets-tar.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/secrets-tar.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/sops-config.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/sops-config.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/sops-path.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/sops-path.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/sops-rules.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/sops-rules.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/sops.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/sops.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/ssh-remote.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/ssh-remote.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/ssh.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/ssh.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/template-source.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/template-source.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/template-test-dir.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/template-test-dir.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/ttl.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/ttl.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/yaml-scalar.d.ts +0 -5
- package/node_modules/@clawdlets/core/dist/lib/yaml-scalar.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/yaml-scalar.js.map +0 -1
- package/node_modules/@clawdlets/core/dist/repo-layout.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/repo-layout.js.map +0 -1
- package/node_modules/dotenv/CHANGELOG.md +0 -598
- package/node_modules/dotenv/LICENSE +0 -23
- package/node_modules/dotenv/README-es.md +0 -405
- package/node_modules/dotenv/README.md +0 -692
- package/node_modules/dotenv/SECURITY.md +0 -1
- package/node_modules/dotenv/config.d.ts +0 -1
- package/node_modules/dotenv/config.js +0 -9
- package/node_modules/dotenv/lib/cli-options.js +0 -17
- package/node_modules/dotenv/lib/env-options.js +0 -28
- package/node_modules/dotenv/lib/main.d.ts +0 -179
- package/node_modules/dotenv/lib/main.js +0 -434
- package/node_modules/dotenv/package.json +0 -62
- package/node_modules/yaml/LICENSE +0 -13
- package/node_modules/yaml/README.md +0 -172
- package/node_modules/yaml/bin.mjs +0 -11
- package/node_modules/yaml/browser/dist/compose/compose-collection.js +0 -88
- package/node_modules/yaml/browser/dist/compose/compose-doc.js +0 -43
- package/node_modules/yaml/browser/dist/compose/compose-node.js +0 -102
- package/node_modules/yaml/browser/dist/compose/compose-scalar.js +0 -86
- package/node_modules/yaml/browser/dist/compose/composer.js +0 -217
- package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +0 -115
- package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +0 -198
- package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +0 -49
- package/node_modules/yaml/browser/dist/compose/resolve-end.js +0 -37
- package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +0 -207
- package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +0 -223
- package/node_modules/yaml/browser/dist/compose/resolve-props.js +0 -146
- package/node_modules/yaml/browser/dist/compose/util-contains-newline.js +0 -34
- package/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +0 -26
- package/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +0 -15
- package/node_modules/yaml/browser/dist/compose/util-map-includes.js +0 -13
- package/node_modules/yaml/browser/dist/doc/Document.js +0 -335
- package/node_modules/yaml/browser/dist/doc/anchors.js +0 -71
- package/node_modules/yaml/browser/dist/doc/applyReviver.js +0 -55
- package/node_modules/yaml/browser/dist/doc/createNode.js +0 -88
- package/node_modules/yaml/browser/dist/doc/directives.js +0 -176
- package/node_modules/yaml/browser/dist/errors.js +0 -57
- package/node_modules/yaml/browser/dist/index.js +0 -17
- package/node_modules/yaml/browser/dist/log.js +0 -11
- package/node_modules/yaml/browser/dist/nodes/Alias.js +0 -114
- package/node_modules/yaml/browser/dist/nodes/Collection.js +0 -147
- package/node_modules/yaml/browser/dist/nodes/Node.js +0 -38
- package/node_modules/yaml/browser/dist/nodes/Pair.js +0 -36
- package/node_modules/yaml/browser/dist/nodes/Scalar.js +0 -24
- package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +0 -144
- package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +0 -113
- package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +0 -63
- package/node_modules/yaml/browser/dist/nodes/identity.js +0 -36
- package/node_modules/yaml/browser/dist/nodes/toJS.js +0 -37
- package/node_modules/yaml/browser/dist/parse/cst-scalar.js +0 -214
- package/node_modules/yaml/browser/dist/parse/cst-stringify.js +0 -61
- package/node_modules/yaml/browser/dist/parse/cst-visit.js +0 -97
- package/node_modules/yaml/browser/dist/parse/cst.js +0 -98
- package/node_modules/yaml/browser/dist/parse/lexer.js +0 -717
- package/node_modules/yaml/browser/dist/parse/line-counter.js +0 -39
- package/node_modules/yaml/browser/dist/parse/parser.js +0 -967
- package/node_modules/yaml/browser/dist/public-api.js +0 -102
- package/node_modules/yaml/browser/dist/schema/Schema.js +0 -37
- package/node_modules/yaml/browser/dist/schema/common/map.js +0 -17
- package/node_modules/yaml/browser/dist/schema/common/null.js +0 -15
- package/node_modules/yaml/browser/dist/schema/common/seq.js +0 -17
- package/node_modules/yaml/browser/dist/schema/common/string.js +0 -14
- package/node_modules/yaml/browser/dist/schema/core/bool.js +0 -19
- package/node_modules/yaml/browser/dist/schema/core/float.js +0 -43
- package/node_modules/yaml/browser/dist/schema/core/int.js +0 -38
- package/node_modules/yaml/browser/dist/schema/core/schema.js +0 -23
- package/node_modules/yaml/browser/dist/schema/json/schema.js +0 -62
- package/node_modules/yaml/browser/dist/schema/tags.js +0 -96
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +0 -58
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +0 -26
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +0 -46
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +0 -71
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +0 -64
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +0 -74
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +0 -78
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +0 -39
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +0 -93
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +0 -101
- package/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +0 -146
- package/node_modules/yaml/browser/dist/stringify/stringify.js +0 -128
- package/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +0 -143
- package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +0 -20
- package/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +0 -85
- package/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +0 -24
- package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +0 -150
- package/node_modules/yaml/browser/dist/stringify/stringifyString.js +0 -336
- package/node_modules/yaml/browser/dist/util.js +0 -11
- package/node_modules/yaml/browser/dist/visit.js +0 -233
- package/node_modules/yaml/browser/index.js +0 -5
- package/node_modules/yaml/browser/package.json +0 -3
- package/node_modules/yaml/dist/cli.d.ts +0 -8
- package/node_modules/yaml/dist/cli.mjs +0 -201
- package/node_modules/yaml/dist/compose/compose-collection.d.ts +0 -11
- package/node_modules/yaml/dist/compose/compose-collection.js +0 -90
- package/node_modules/yaml/dist/compose/compose-doc.d.ts +0 -7
- package/node_modules/yaml/dist/compose/compose-doc.js +0 -45
- package/node_modules/yaml/dist/compose/compose-node.d.ts +0 -29
- package/node_modules/yaml/dist/compose/compose-node.js +0 -105
- package/node_modules/yaml/dist/compose/compose-scalar.d.ts +0 -5
- package/node_modules/yaml/dist/compose/compose-scalar.js +0 -88
- package/node_modules/yaml/dist/compose/composer.d.ts +0 -63
- package/node_modules/yaml/dist/compose/composer.js +0 -222
- package/node_modules/yaml/dist/compose/resolve-block-map.d.ts +0 -6
- package/node_modules/yaml/dist/compose/resolve-block-map.js +0 -117
- package/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +0 -11
- package/node_modules/yaml/dist/compose/resolve-block-scalar.js +0 -200
- package/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +0 -6
- package/node_modules/yaml/dist/compose/resolve-block-seq.js +0 -51
- package/node_modules/yaml/dist/compose/resolve-end.d.ts +0 -6
- package/node_modules/yaml/dist/compose/resolve-end.js +0 -39
- package/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +0 -7
- package/node_modules/yaml/dist/compose/resolve-flow-collection.js +0 -209
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +0 -10
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +0 -225
- package/node_modules/yaml/dist/compose/resolve-props.d.ts +0 -23
- package/node_modules/yaml/dist/compose/resolve-props.js +0 -148
- package/node_modules/yaml/dist/compose/util-contains-newline.d.ts +0 -2
- package/node_modules/yaml/dist/compose/util-contains-newline.js +0 -36
- package/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +0 -2
- package/node_modules/yaml/dist/compose/util-empty-scalar-position.js +0 -28
- package/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +0 -3
- package/node_modules/yaml/dist/compose/util-flow-indent-check.js +0 -17
- package/node_modules/yaml/dist/compose/util-map-includes.d.ts +0 -4
- package/node_modules/yaml/dist/compose/util-map-includes.js +0 -15
- package/node_modules/yaml/dist/doc/Document.d.ts +0 -141
- package/node_modules/yaml/dist/doc/Document.js +0 -337
- package/node_modules/yaml/dist/doc/anchors.d.ts +0 -24
- package/node_modules/yaml/dist/doc/anchors.js +0 -76
- package/node_modules/yaml/dist/doc/applyReviver.d.ts +0 -9
- package/node_modules/yaml/dist/doc/applyReviver.js +0 -57
- package/node_modules/yaml/dist/doc/createNode.d.ts +0 -17
- package/node_modules/yaml/dist/doc/createNode.js +0 -90
- package/node_modules/yaml/dist/doc/directives.d.ts +0 -49
- package/node_modules/yaml/dist/doc/directives.js +0 -178
- package/node_modules/yaml/dist/errors.d.ts +0 -21
- package/node_modules/yaml/dist/errors.js +0 -62
- package/node_modules/yaml/dist/index.d.ts +0 -25
- package/node_modules/yaml/dist/index.js +0 -50
- package/node_modules/yaml/dist/log.d.ts +0 -3
- package/node_modules/yaml/dist/log.js +0 -19
- package/node_modules/yaml/dist/nodes/Alias.d.ts +0 -29
- package/node_modules/yaml/dist/nodes/Alias.js +0 -116
- package/node_modules/yaml/dist/nodes/Collection.d.ts +0 -73
- package/node_modules/yaml/dist/nodes/Collection.js +0 -151
- package/node_modules/yaml/dist/nodes/Node.d.ts +0 -53
- package/node_modules/yaml/dist/nodes/Node.js +0 -40
- package/node_modules/yaml/dist/nodes/Pair.d.ts +0 -22
- package/node_modules/yaml/dist/nodes/Pair.js +0 -39
- package/node_modules/yaml/dist/nodes/Scalar.d.ts +0 -43
- package/node_modules/yaml/dist/nodes/Scalar.js +0 -27
- package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +0 -53
- package/node_modules/yaml/dist/nodes/YAMLMap.js +0 -147
- package/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +0 -60
- package/node_modules/yaml/dist/nodes/YAMLSeq.js +0 -115
- package/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +0 -4
- package/node_modules/yaml/dist/nodes/addPairToJSMap.js +0 -65
- package/node_modules/yaml/dist/nodes/identity.d.ts +0 -23
- package/node_modules/yaml/dist/nodes/identity.js +0 -53
- package/node_modules/yaml/dist/nodes/toJS.d.ts +0 -29
- package/node_modules/yaml/dist/nodes/toJS.js +0 -39
- package/node_modules/yaml/dist/options.d.ts +0 -344
- package/node_modules/yaml/dist/parse/cst-scalar.d.ts +0 -64
- package/node_modules/yaml/dist/parse/cst-scalar.js +0 -218
- package/node_modules/yaml/dist/parse/cst-stringify.d.ts +0 -8
- package/node_modules/yaml/dist/parse/cst-stringify.js +0 -63
- package/node_modules/yaml/dist/parse/cst-visit.d.ts +0 -39
- package/node_modules/yaml/dist/parse/cst-visit.js +0 -99
- package/node_modules/yaml/dist/parse/cst.d.ts +0 -109
- package/node_modules/yaml/dist/parse/cst.js +0 -112
- package/node_modules/yaml/dist/parse/lexer.d.ts +0 -87
- package/node_modules/yaml/dist/parse/lexer.js +0 -719
- package/node_modules/yaml/dist/parse/line-counter.d.ts +0 -22
- package/node_modules/yaml/dist/parse/line-counter.js +0 -41
- package/node_modules/yaml/dist/parse/parser.d.ts +0 -84
- package/node_modules/yaml/dist/parse/parser.js +0 -972
- package/node_modules/yaml/dist/public-api.d.ts +0 -44
- package/node_modules/yaml/dist/public-api.js +0 -107
- package/node_modules/yaml/dist/schema/Schema.d.ts +0 -17
- package/node_modules/yaml/dist/schema/Schema.js +0 -39
- package/node_modules/yaml/dist/schema/common/map.d.ts +0 -2
- package/node_modules/yaml/dist/schema/common/map.js +0 -19
- package/node_modules/yaml/dist/schema/common/null.d.ts +0 -4
- package/node_modules/yaml/dist/schema/common/null.js +0 -17
- package/node_modules/yaml/dist/schema/common/seq.d.ts +0 -2
- package/node_modules/yaml/dist/schema/common/seq.js +0 -19
- package/node_modules/yaml/dist/schema/common/string.d.ts +0 -2
- package/node_modules/yaml/dist/schema/common/string.js +0 -16
- package/node_modules/yaml/dist/schema/core/bool.d.ts +0 -4
- package/node_modules/yaml/dist/schema/core/bool.js +0 -21
- package/node_modules/yaml/dist/schema/core/float.d.ts +0 -4
- package/node_modules/yaml/dist/schema/core/float.js +0 -47
- package/node_modules/yaml/dist/schema/core/int.d.ts +0 -4
- package/node_modules/yaml/dist/schema/core/int.js +0 -42
- package/node_modules/yaml/dist/schema/core/schema.d.ts +0 -1
- package/node_modules/yaml/dist/schema/core/schema.js +0 -25
- package/node_modules/yaml/dist/schema/json/schema.d.ts +0 -2
- package/node_modules/yaml/dist/schema/json/schema.js +0 -64
- package/node_modules/yaml/dist/schema/json-schema.d.ts +0 -69
- package/node_modules/yaml/dist/schema/tags.d.ts +0 -48
- package/node_modules/yaml/dist/schema/tags.js +0 -99
- package/node_modules/yaml/dist/schema/types.d.ts +0 -92
- package/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +0 -2
- package/node_modules/yaml/dist/schema/yaml-1.1/binary.js +0 -70
- package/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +0 -7
- package/node_modules/yaml/dist/schema/yaml-1.1/bool.js +0 -29
- package/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +0 -4
- package/node_modules/yaml/dist/schema/yaml-1.1/float.js +0 -50
- package/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +0 -5
- package/node_modules/yaml/dist/schema/yaml-1.1/int.js +0 -76
- package/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +0 -9
- package/node_modules/yaml/dist/schema/yaml-1.1/merge.js +0 -68
- package/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +0 -22
- package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +0 -77
- package/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +0 -10
- package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +0 -82
- package/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +0 -1
- package/node_modules/yaml/dist/schema/yaml-1.1/schema.js +0 -41
- package/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +0 -28
- package/node_modules/yaml/dist/schema/yaml-1.1/set.js +0 -96
- package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +0 -6
- package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +0 -105
- package/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +0 -34
- package/node_modules/yaml/dist/stringify/foldFlowLines.js +0 -151
- package/node_modules/yaml/dist/stringify/stringify.d.ts +0 -21
- package/node_modules/yaml/dist/stringify/stringify.js +0 -131
- package/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +0 -17
- package/node_modules/yaml/dist/stringify/stringifyCollection.js +0 -145
- package/node_modules/yaml/dist/stringify/stringifyComment.d.ts +0 -10
- package/node_modules/yaml/dist/stringify/stringifyComment.js +0 -24
- package/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +0 -4
- package/node_modules/yaml/dist/stringify/stringifyDocument.js +0 -87
- package/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +0 -2
- package/node_modules/yaml/dist/stringify/stringifyNumber.js +0 -26
- package/node_modules/yaml/dist/stringify/stringifyPair.d.ts +0 -3
- package/node_modules/yaml/dist/stringify/stringifyPair.js +0 -152
- package/node_modules/yaml/dist/stringify/stringifyString.d.ts +0 -9
- package/node_modules/yaml/dist/stringify/stringifyString.js +0 -338
- package/node_modules/yaml/dist/test-events.d.ts +0 -4
- package/node_modules/yaml/dist/test-events.js +0 -134
- package/node_modules/yaml/dist/util.d.ts +0 -16
- package/node_modules/yaml/dist/util.js +0 -28
- package/node_modules/yaml/dist/visit.d.ts +0 -102
- package/node_modules/yaml/dist/visit.js +0 -236
- package/node_modules/yaml/package.json +0 -97
- package/node_modules/yaml/util.js +0 -2
- package/node_modules/zod/LICENSE +0 -21
- package/node_modules/zod/README.md +0 -208
- package/node_modules/zod/index.cjs +0 -33
- package/node_modules/zod/index.d.cts +0 -4
- package/node_modules/zod/index.d.ts +0 -4
- package/node_modules/zod/index.js +0 -4
- package/node_modules/zod/locales/index.cjs +0 -17
- package/node_modules/zod/locales/index.d.cts +0 -1
- package/node_modules/zod/locales/index.d.ts +0 -1
- package/node_modules/zod/locales/index.js +0 -1
- package/node_modules/zod/locales/package.json +0 -6
- package/node_modules/zod/mini/index.cjs +0 -17
- package/node_modules/zod/mini/index.d.cts +0 -1
- package/node_modules/zod/mini/index.d.ts +0 -1
- package/node_modules/zod/mini/index.js +0 -1
- package/node_modules/zod/mini/package.json +0 -6
- package/node_modules/zod/package.json +0 -135
- package/node_modules/zod/src/index.ts +0 -4
- package/node_modules/zod/src/locales/index.ts +0 -1
- package/node_modules/zod/src/mini/index.ts +0 -1
- package/node_modules/zod/src/v3/ZodError.ts +0 -330
- package/node_modules/zod/src/v3/benchmarks/datetime.ts +0 -58
- package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +0 -80
- package/node_modules/zod/src/v3/benchmarks/index.ts +0 -59
- package/node_modules/zod/src/v3/benchmarks/ipv4.ts +0 -57
- package/node_modules/zod/src/v3/benchmarks/object.ts +0 -69
- package/node_modules/zod/src/v3/benchmarks/primitives.ts +0 -162
- package/node_modules/zod/src/v3/benchmarks/realworld.ts +0 -63
- package/node_modules/zod/src/v3/benchmarks/string.ts +0 -55
- package/node_modules/zod/src/v3/benchmarks/union.ts +0 -80
- package/node_modules/zod/src/v3/errors.ts +0 -13
- package/node_modules/zod/src/v3/external.ts +0 -6
- package/node_modules/zod/src/v3/helpers/enumUtil.ts +0 -17
- package/node_modules/zod/src/v3/helpers/errorUtil.ts +0 -8
- package/node_modules/zod/src/v3/helpers/parseUtil.ts +0 -176
- package/node_modules/zod/src/v3/helpers/partialUtil.ts +0 -34
- package/node_modules/zod/src/v3/helpers/typeAliases.ts +0 -2
- package/node_modules/zod/src/v3/helpers/util.ts +0 -224
- package/node_modules/zod/src/v3/index.ts +0 -4
- package/node_modules/zod/src/v3/locales/en.ts +0 -124
- package/node_modules/zod/src/v3/standard-schema.ts +0 -113
- package/node_modules/zod/src/v3/tests/Mocker.ts +0 -54
- package/node_modules/zod/src/v3/tests/all-errors.test.ts +0 -157
- package/node_modules/zod/src/v3/tests/anyunknown.test.ts +0 -28
- package/node_modules/zod/src/v3/tests/array.test.ts +0 -71
- package/node_modules/zod/src/v3/tests/async-parsing.test.ts +0 -388
- package/node_modules/zod/src/v3/tests/async-refinements.test.ts +0 -46
- package/node_modules/zod/src/v3/tests/base.test.ts +0 -29
- package/node_modules/zod/src/v3/tests/bigint.test.ts +0 -55
- package/node_modules/zod/src/v3/tests/branded.test.ts +0 -53
- package/node_modules/zod/src/v3/tests/catch.test.ts +0 -220
- package/node_modules/zod/src/v3/tests/coerce.test.ts +0 -133
- package/node_modules/zod/src/v3/tests/complex.test.ts +0 -70
- package/node_modules/zod/src/v3/tests/custom.test.ts +0 -31
- package/node_modules/zod/src/v3/tests/date.test.ts +0 -32
- package/node_modules/zod/src/v3/tests/deepmasking.test.ts +0 -186
- package/node_modules/zod/src/v3/tests/default.test.ts +0 -112
- package/node_modules/zod/src/v3/tests/description.test.ts +0 -33
- package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +0 -315
- package/node_modules/zod/src/v3/tests/enum.test.ts +0 -80
- package/node_modules/zod/src/v3/tests/error.test.ts +0 -551
- package/node_modules/zod/src/v3/tests/firstparty.test.ts +0 -87
- package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +0 -21
- package/node_modules/zod/src/v3/tests/function.test.ts +0 -261
- package/node_modules/zod/src/v3/tests/generics.test.ts +0 -48
- package/node_modules/zod/src/v3/tests/instanceof.test.ts +0 -37
- package/node_modules/zod/src/v3/tests/intersection.test.ts +0 -110
- package/node_modules/zod/src/v3/tests/language-server.source.ts +0 -76
- package/node_modules/zod/src/v3/tests/language-server.test.ts +0 -207
- package/node_modules/zod/src/v3/tests/literal.test.ts +0 -36
- package/node_modules/zod/src/v3/tests/map.test.ts +0 -110
- package/node_modules/zod/src/v3/tests/masking.test.ts +0 -4
- package/node_modules/zod/src/v3/tests/mocker.test.ts +0 -19
- package/node_modules/zod/src/v3/tests/nan.test.ts +0 -24
- package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +0 -87
- package/node_modules/zod/src/v3/tests/nullable.test.ts +0 -42
- package/node_modules/zod/src/v3/tests/number.test.ts +0 -176
- package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +0 -29
- package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +0 -29
- package/node_modules/zod/src/v3/tests/object.test.ts +0 -434
- package/node_modules/zod/src/v3/tests/optional.test.ts +0 -42
- package/node_modules/zod/src/v3/tests/parseUtil.test.ts +0 -23
- package/node_modules/zod/src/v3/tests/parser.test.ts +0 -41
- package/node_modules/zod/src/v3/tests/partials.test.ts +0 -243
- package/node_modules/zod/src/v3/tests/pickomit.test.ts +0 -111
- package/node_modules/zod/src/v3/tests/pipeline.test.ts +0 -29
- package/node_modules/zod/src/v3/tests/preprocess.test.ts +0 -186
- package/node_modules/zod/src/v3/tests/primitive.test.ts +0 -440
- package/node_modules/zod/src/v3/tests/promise.test.ts +0 -90
- package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -194
- package/node_modules/zod/src/v3/tests/record.test.ts +0 -171
- package/node_modules/zod/src/v3/tests/recursive.test.ts +0 -197
- package/node_modules/zod/src/v3/tests/refine.test.ts +0 -313
- package/node_modules/zod/src/v3/tests/safeparse.test.ts +0 -27
- package/node_modules/zod/src/v3/tests/set.test.ts +0 -142
- package/node_modules/zod/src/v3/tests/standard-schema.test.ts +0 -83
- package/node_modules/zod/src/v3/tests/string.test.ts +0 -916
- package/node_modules/zod/src/v3/tests/transformer.test.ts +0 -233
- package/node_modules/zod/src/v3/tests/tuple.test.ts +0 -90
- package/node_modules/zod/src/v3/tests/unions.test.ts +0 -57
- package/node_modules/zod/src/v3/tests/validations.test.ts +0 -133
- package/node_modules/zod/src/v3/tests/void.test.ts +0 -15
- package/node_modules/zod/src/v3/types.ts +0 -5138
- package/node_modules/zod/src/v4/classic/checks.ts +0 -32
- package/node_modules/zod/src/v4/classic/coerce.ts +0 -27
- package/node_modules/zod/src/v4/classic/compat.ts +0 -70
- package/node_modules/zod/src/v4/classic/errors.ts +0 -82
- package/node_modules/zod/src/v4/classic/external.ts +0 -51
- package/node_modules/zod/src/v4/classic/from-json-schema.ts +0 -643
- package/node_modules/zod/src/v4/classic/index.ts +0 -5
- package/node_modules/zod/src/v4/classic/iso.ts +0 -90
- package/node_modules/zod/src/v4/classic/parse.ts +0 -82
- package/node_modules/zod/src/v4/classic/schemas.ts +0 -2409
- package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +0 -26
- package/node_modules/zod/src/v4/classic/tests/apply.test.ts +0 -59
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +0 -264
- package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +0 -210
- package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +0 -381
- package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +0 -68
- package/node_modules/zod/src/v4/classic/tests/base.test.ts +0 -7
- package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +0 -54
- package/node_modules/zod/src/v4/classic/tests/brand.test.ts +0 -106
- package/node_modules/zod/src/v4/classic/tests/catch.test.ts +0 -276
- package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +0 -20
- package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +0 -573
- package/node_modules/zod/src/v4/classic/tests/codec.test.ts +0 -562
- package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +0 -160
- package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +0 -374
- package/node_modules/zod/src/v4/classic/tests/custom.test.ts +0 -40
- package/node_modules/zod/src/v4/classic/tests/date.test.ts +0 -62
- package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +0 -302
- package/node_modules/zod/src/v4/classic/tests/default.test.ts +0 -365
- package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +0 -27
- package/node_modules/zod/src/v4/classic/tests/description.test.ts +0 -32
- package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +0 -661
- package/node_modules/zod/src/v4/classic/tests/enum.test.ts +0 -285
- package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +0 -595
- package/node_modules/zod/src/v4/classic/tests/error.test.ts +0 -711
- package/node_modules/zod/src/v4/classic/tests/file.test.ts +0 -96
- package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +0 -179
- package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +0 -26
- package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +0 -734
- package/node_modules/zod/src/v4/classic/tests/function.test.ts +0 -360
- package/node_modules/zod/src/v4/classic/tests/generics.test.ts +0 -72
- package/node_modules/zod/src/v4/classic/tests/hash.test.ts +0 -68
- package/node_modules/zod/src/v4/classic/tests/index.test.ts +0 -939
- package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +0 -60
- package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +0 -198
- package/node_modules/zod/src/v4/classic/tests/json.test.ts +0 -109
- package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +0 -227
- package/node_modules/zod/src/v4/classic/tests/literal.test.ts +0 -117
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +0 -330
- package/node_modules/zod/src/v4/classic/tests/nan.test.ts +0 -21
- package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +0 -168
- package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +0 -101
- package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +0 -22
- package/node_modules/zod/src/v4/classic/tests/number.test.ts +0 -270
- package/node_modules/zod/src/v4/classic/tests/object.test.ts +0 -640
- package/node_modules/zod/src/v4/classic/tests/optional.test.ts +0 -223
- package/node_modules/zod/src/v4/classic/tests/partial.test.ts +0 -427
- package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +0 -211
- package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +0 -101
- package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +0 -74
- package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +0 -282
- package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +0 -175
- package/node_modules/zod/src/v4/classic/tests/promise.test.ts +0 -81
- package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +0 -23
- package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -252
- package/node_modules/zod/src/v4/classic/tests/record.test.ts +0 -600
- package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +0 -582
- package/node_modules/zod/src/v4/classic/tests/refine.test.ts +0 -570
- package/node_modules/zod/src/v4/classic/tests/registries.test.ts +0 -243
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +0 -181
- package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +0 -134
- package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +0 -125
- package/node_modules/zod/src/v4/classic/tests/string.test.ts +0 -1175
- package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +0 -106
- package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +0 -771
- package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +0 -438
- package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +0 -2975
- package/node_modules/zod/src/v4/classic/tests/transform.test.ts +0 -361
- package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +0 -183
- package/node_modules/zod/src/v4/classic/tests/union.test.ts +0 -219
- package/node_modules/zod/src/v4/classic/tests/url.test.ts +0 -13
- package/node_modules/zod/src/v4/classic/tests/validations.test.ts +0 -283
- package/node_modules/zod/src/v4/classic/tests/void.test.ts +0 -12
- package/node_modules/zod/src/v4/core/api.ts +0 -1798
- package/node_modules/zod/src/v4/core/checks.ts +0 -1293
- package/node_modules/zod/src/v4/core/config.ts +0 -15
- package/node_modules/zod/src/v4/core/core.ts +0 -138
- package/node_modules/zod/src/v4/core/doc.ts +0 -44
- package/node_modules/zod/src/v4/core/errors.ts +0 -448
- package/node_modules/zod/src/v4/core/index.ts +0 -16
- package/node_modules/zod/src/v4/core/json-schema-generator.ts +0 -126
- package/node_modules/zod/src/v4/core/json-schema-processors.ts +0 -667
- package/node_modules/zod/src/v4/core/json-schema.ts +0 -147
- package/node_modules/zod/src/v4/core/parse.ts +0 -195
- package/node_modules/zod/src/v4/core/regexes.ts +0 -183
- package/node_modules/zod/src/v4/core/registries.ts +0 -105
- package/node_modules/zod/src/v4/core/schemas.ts +0 -4543
- package/node_modules/zod/src/v4/core/standard-schema.ts +0 -159
- package/node_modules/zod/src/v4/core/tests/extend.test.ts +0 -59
- package/node_modules/zod/src/v4/core/tests/index.test.ts +0 -46
- package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +0 -124
- package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +0 -22
- package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +0 -181
- package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +0 -379
- package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +0 -46
- package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +0 -128
- package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +0 -69
- package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +0 -83
- package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +0 -67
- package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +0 -45
- package/node_modules/zod/src/v4/core/to-json-schema.ts +0 -613
- package/node_modules/zod/src/v4/core/util.ts +0 -966
- package/node_modules/zod/src/v4/core/versions.ts +0 -5
- package/node_modules/zod/src/v4/core/zsf.ts +0 -323
- package/node_modules/zod/src/v4/index.ts +0 -4
- package/node_modules/zod/src/v4/locales/ar.ts +0 -115
- package/node_modules/zod/src/v4/locales/az.ts +0 -111
- package/node_modules/zod/src/v4/locales/be.ts +0 -176
- package/node_modules/zod/src/v4/locales/bg.ts +0 -128
- package/node_modules/zod/src/v4/locales/ca.ts +0 -116
- package/node_modules/zod/src/v4/locales/cs.ts +0 -118
- package/node_modules/zod/src/v4/locales/da.ts +0 -123
- package/node_modules/zod/src/v4/locales/de.ts +0 -116
- package/node_modules/zod/src/v4/locales/en.ts +0 -119
- package/node_modules/zod/src/v4/locales/eo.ts +0 -118
- package/node_modules/zod/src/v4/locales/es.ts +0 -141
- package/node_modules/zod/src/v4/locales/fa.ts +0 -126
- package/node_modules/zod/src/v4/locales/fi.ts +0 -121
- package/node_modules/zod/src/v4/locales/fr-CA.ts +0 -116
- package/node_modules/zod/src/v4/locales/fr.ts +0 -116
- package/node_modules/zod/src/v4/locales/he.ts +0 -246
- package/node_modules/zod/src/v4/locales/hu.ts +0 -117
- package/node_modules/zod/src/v4/locales/hy.ts +0 -164
- package/node_modules/zod/src/v4/locales/id.ts +0 -115
- package/node_modules/zod/src/v4/locales/index.ts +0 -49
- package/node_modules/zod/src/v4/locales/is.ts +0 -119
- package/node_modules/zod/src/v4/locales/it.ts +0 -116
- package/node_modules/zod/src/v4/locales/ja.ts +0 -114
- package/node_modules/zod/src/v4/locales/ka.ts +0 -123
- package/node_modules/zod/src/v4/locales/kh.ts +0 -7
- package/node_modules/zod/src/v4/locales/km.ts +0 -119
- package/node_modules/zod/src/v4/locales/ko.ts +0 -121
- package/node_modules/zod/src/v4/locales/lt.ts +0 -239
- package/node_modules/zod/src/v4/locales/mk.ts +0 -118
- package/node_modules/zod/src/v4/locales/ms.ts +0 -115
- package/node_modules/zod/src/v4/locales/nl.ts +0 -121
- package/node_modules/zod/src/v4/locales/no.ts +0 -116
- package/node_modules/zod/src/v4/locales/ota.ts +0 -117
- package/node_modules/zod/src/v4/locales/pl.ts +0 -118
- package/node_modules/zod/src/v4/locales/ps.ts +0 -126
- package/node_modules/zod/src/v4/locales/pt.ts +0 -116
- package/node_modules/zod/src/v4/locales/ru.ts +0 -176
- package/node_modules/zod/src/v4/locales/sl.ts +0 -118
- package/node_modules/zod/src/v4/locales/sv.ts +0 -119
- package/node_modules/zod/src/v4/locales/ta.ts +0 -118
- package/node_modules/zod/src/v4/locales/th.ts +0 -119
- package/node_modules/zod/src/v4/locales/tr.ts +0 -111
- package/node_modules/zod/src/v4/locales/ua.ts +0 -7
- package/node_modules/zod/src/v4/locales/uk.ts +0 -117
- package/node_modules/zod/src/v4/locales/ur.ts +0 -119
- package/node_modules/zod/src/v4/locales/uz.ts +0 -116
- package/node_modules/zod/src/v4/locales/vi.ts +0 -117
- package/node_modules/zod/src/v4/locales/yo.ts +0 -124
- package/node_modules/zod/src/v4/locales/zh-CN.ts +0 -116
- package/node_modules/zod/src/v4/locales/zh-TW.ts +0 -115
- package/node_modules/zod/src/v4/mini/checks.ts +0 -32
- package/node_modules/zod/src/v4/mini/coerce.ts +0 -27
- package/node_modules/zod/src/v4/mini/external.ts +0 -40
- package/node_modules/zod/src/v4/mini/index.ts +0 -3
- package/node_modules/zod/src/v4/mini/iso.ts +0 -66
- package/node_modules/zod/src/v4/mini/parse.ts +0 -14
- package/node_modules/zod/src/v4/mini/schemas.ts +0 -1916
- package/node_modules/zod/src/v4/mini/tests/apply.test.ts +0 -24
- package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +0 -129
- package/node_modules/zod/src/v4/mini/tests/brand.test.ts +0 -94
- package/node_modules/zod/src/v4/mini/tests/checks.test.ts +0 -144
- package/node_modules/zod/src/v4/mini/tests/codec.test.ts +0 -529
- package/node_modules/zod/src/v4/mini/tests/computed.test.ts +0 -36
- package/node_modules/zod/src/v4/mini/tests/error.test.ts +0 -22
- package/node_modules/zod/src/v4/mini/tests/functions.test.ts +0 -5
- package/node_modules/zod/src/v4/mini/tests/index.test.ts +0 -963
- package/node_modules/zod/src/v4/mini/tests/number.test.ts +0 -95
- package/node_modules/zod/src/v4/mini/tests/object.test.ts +0 -227
- package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +0 -43
- package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +0 -275
- package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +0 -50
- package/node_modules/zod/src/v4/mini/tests/string.test.ts +0 -347
- package/node_modules/zod/src/v4-mini/index.ts +0 -1
- package/node_modules/zod/v3/ZodError.cjs +0 -138
- package/node_modules/zod/v3/ZodError.d.cts +0 -164
- package/node_modules/zod/v3/ZodError.d.ts +0 -164
- package/node_modules/zod/v3/ZodError.js +0 -133
- package/node_modules/zod/v3/errors.cjs +0 -17
- package/node_modules/zod/v3/errors.d.cts +0 -5
- package/node_modules/zod/v3/errors.d.ts +0 -5
- package/node_modules/zod/v3/errors.js +0 -9
- package/node_modules/zod/v3/external.cjs +0 -22
- package/node_modules/zod/v3/external.d.cts +0 -6
- package/node_modules/zod/v3/external.d.ts +0 -6
- package/node_modules/zod/v3/external.js +0 -6
- package/node_modules/zod/v3/helpers/enumUtil.cjs +0 -2
- package/node_modules/zod/v3/helpers/enumUtil.d.cts +0 -8
- package/node_modules/zod/v3/helpers/enumUtil.d.ts +0 -8
- package/node_modules/zod/v3/helpers/enumUtil.js +0 -1
- package/node_modules/zod/v3/helpers/errorUtil.cjs +0 -9
- package/node_modules/zod/v3/helpers/errorUtil.d.cts +0 -9
- package/node_modules/zod/v3/helpers/errorUtil.d.ts +0 -9
- package/node_modules/zod/v3/helpers/errorUtil.js +0 -6
- package/node_modules/zod/v3/helpers/parseUtil.cjs +0 -124
- package/node_modules/zod/v3/helpers/parseUtil.d.cts +0 -78
- package/node_modules/zod/v3/helpers/parseUtil.d.ts +0 -78
- package/node_modules/zod/v3/helpers/parseUtil.js +0 -109
- package/node_modules/zod/v3/helpers/partialUtil.cjs +0 -2
- package/node_modules/zod/v3/helpers/partialUtil.d.cts +0 -8
- package/node_modules/zod/v3/helpers/partialUtil.d.ts +0 -8
- package/node_modules/zod/v3/helpers/partialUtil.js +0 -1
- package/node_modules/zod/v3/helpers/typeAliases.cjs +0 -2
- package/node_modules/zod/v3/helpers/typeAliases.d.cts +0 -2
- package/node_modules/zod/v3/helpers/typeAliases.d.ts +0 -2
- package/node_modules/zod/v3/helpers/typeAliases.js +0 -1
- package/node_modules/zod/v3/helpers/util.cjs +0 -137
- package/node_modules/zod/v3/helpers/util.d.cts +0 -85
- package/node_modules/zod/v3/helpers/util.d.ts +0 -85
- package/node_modules/zod/v3/helpers/util.js +0 -133
- package/node_modules/zod/v3/index.cjs +0 -33
- package/node_modules/zod/v3/index.d.cts +0 -4
- package/node_modules/zod/v3/index.d.ts +0 -4
- package/node_modules/zod/v3/index.js +0 -4
- package/node_modules/zod/v3/locales/en.cjs +0 -112
- package/node_modules/zod/v3/locales/en.d.cts +0 -3
- package/node_modules/zod/v3/locales/en.d.ts +0 -3
- package/node_modules/zod/v3/locales/en.js +0 -109
- package/node_modules/zod/v3/package.json +0 -6
- package/node_modules/zod/v3/standard-schema.cjs +0 -2
- package/node_modules/zod/v3/standard-schema.d.cts +0 -102
- package/node_modules/zod/v3/standard-schema.d.ts +0 -102
- package/node_modules/zod/v3/standard-schema.js +0 -1
- package/node_modules/zod/v3/types.cjs +0 -3777
- package/node_modules/zod/v3/types.d.cts +0 -1034
- package/node_modules/zod/v3/types.d.ts +0 -1034
- package/node_modules/zod/v3/types.js +0 -3695
- package/node_modules/zod/v4/classic/checks.cjs +0 -33
- package/node_modules/zod/v4/classic/checks.d.cts +0 -1
- package/node_modules/zod/v4/classic/checks.d.ts +0 -1
- package/node_modules/zod/v4/classic/checks.js +0 -1
- package/node_modules/zod/v4/classic/coerce.cjs +0 -47
- package/node_modules/zod/v4/classic/coerce.d.cts +0 -17
- package/node_modules/zod/v4/classic/coerce.d.ts +0 -17
- package/node_modules/zod/v4/classic/coerce.js +0 -17
- package/node_modules/zod/v4/classic/compat.cjs +0 -61
- package/node_modules/zod/v4/classic/compat.d.cts +0 -50
- package/node_modules/zod/v4/classic/compat.d.ts +0 -50
- package/node_modules/zod/v4/classic/compat.js +0 -31
- package/node_modules/zod/v4/classic/errors.cjs +0 -74
- package/node_modules/zod/v4/classic/errors.d.cts +0 -30
- package/node_modules/zod/v4/classic/errors.d.ts +0 -30
- package/node_modules/zod/v4/classic/errors.js +0 -48
- package/node_modules/zod/v4/classic/external.cjs +0 -73
- package/node_modules/zod/v4/classic/external.d.cts +0 -15
- package/node_modules/zod/v4/classic/external.d.ts +0 -15
- package/node_modules/zod/v4/classic/external.js +0 -20
- package/node_modules/zod/v4/classic/from-json-schema.cjs +0 -610
- package/node_modules/zod/v4/classic/from-json-schema.d.cts +0 -12
- package/node_modules/zod/v4/classic/from-json-schema.d.ts +0 -12
- package/node_modules/zod/v4/classic/from-json-schema.js +0 -584
- package/node_modules/zod/v4/classic/index.cjs +0 -33
- package/node_modules/zod/v4/classic/index.d.cts +0 -4
- package/node_modules/zod/v4/classic/index.d.ts +0 -4
- package/node_modules/zod/v4/classic/index.js +0 -4
- package/node_modules/zod/v4/classic/iso.cjs +0 -60
- package/node_modules/zod/v4/classic/iso.d.cts +0 -22
- package/node_modules/zod/v4/classic/iso.d.ts +0 -22
- package/node_modules/zod/v4/classic/iso.js +0 -30
- package/node_modules/zod/v4/classic/package.json +0 -6
- package/node_modules/zod/v4/classic/parse.cjs +0 -41
- package/node_modules/zod/v4/classic/parse.d.cts +0 -31
- package/node_modules/zod/v4/classic/parse.d.ts +0 -31
- package/node_modules/zod/v4/classic/parse.js +0 -15
- package/node_modules/zod/v4/classic/schemas.cjs +0 -1272
- package/node_modules/zod/v4/classic/schemas.d.cts +0 -739
- package/node_modules/zod/v4/classic/schemas.d.ts +0 -739
- package/node_modules/zod/v4/classic/schemas.js +0 -1157
- package/node_modules/zod/v4/core/api.cjs +0 -1222
- package/node_modules/zod/v4/core/api.d.cts +0 -304
- package/node_modules/zod/v4/core/api.d.ts +0 -304
- package/node_modules/zod/v4/core/api.js +0 -1082
- package/node_modules/zod/v4/core/checks.cjs +0 -601
- package/node_modules/zod/v4/core/checks.d.cts +0 -278
- package/node_modules/zod/v4/core/checks.d.ts +0 -278
- package/node_modules/zod/v4/core/checks.js +0 -575
- package/node_modules/zod/v4/core/core.cjs +0 -83
- package/node_modules/zod/v4/core/core.d.cts +0 -70
- package/node_modules/zod/v4/core/core.d.ts +0 -70
- package/node_modules/zod/v4/core/core.js +0 -76
- package/node_modules/zod/v4/core/doc.cjs +0 -39
- package/node_modules/zod/v4/core/doc.d.cts +0 -14
- package/node_modules/zod/v4/core/doc.d.ts +0 -14
- package/node_modules/zod/v4/core/doc.js +0 -35
- package/node_modules/zod/v4/core/errors.cjs +0 -213
- package/node_modules/zod/v4/core/errors.d.cts +0 -220
- package/node_modules/zod/v4/core/errors.d.ts +0 -220
- package/node_modules/zod/v4/core/errors.js +0 -182
- package/node_modules/zod/v4/core/index.cjs +0 -47
- package/node_modules/zod/v4/core/index.d.cts +0 -16
- package/node_modules/zod/v4/core/index.d.ts +0 -16
- package/node_modules/zod/v4/core/index.js +0 -16
- package/node_modules/zod/v4/core/json-schema-generator.cjs +0 -99
- package/node_modules/zod/v4/core/json-schema-generator.d.cts +0 -65
- package/node_modules/zod/v4/core/json-schema-generator.d.ts +0 -65
- package/node_modules/zod/v4/core/json-schema-generator.js +0 -95
- package/node_modules/zod/v4/core/json-schema-processors.cjs +0 -648
- package/node_modules/zod/v4/core/json-schema-processors.d.cts +0 -49
- package/node_modules/zod/v4/core/json-schema-processors.d.ts +0 -49
- package/node_modules/zod/v4/core/json-schema-processors.js +0 -605
- package/node_modules/zod/v4/core/json-schema.cjs +0 -2
- package/node_modules/zod/v4/core/json-schema.d.cts +0 -88
- package/node_modules/zod/v4/core/json-schema.d.ts +0 -88
- package/node_modules/zod/v4/core/json-schema.js +0 -1
- package/node_modules/zod/v4/core/package.json +0 -6
- package/node_modules/zod/v4/core/parse.cjs +0 -131
- package/node_modules/zod/v4/core/parse.d.cts +0 -49
- package/node_modules/zod/v4/core/parse.d.ts +0 -49
- package/node_modules/zod/v4/core/parse.js +0 -93
- package/node_modules/zod/v4/core/regexes.cjs +0 -166
- package/node_modules/zod/v4/core/regexes.d.cts +0 -79
- package/node_modules/zod/v4/core/regexes.d.ts +0 -79
- package/node_modules/zod/v4/core/regexes.js +0 -133
- package/node_modules/zod/v4/core/registries.cjs +0 -56
- package/node_modules/zod/v4/core/registries.d.cts +0 -35
- package/node_modules/zod/v4/core/registries.d.ts +0 -35
- package/node_modules/zod/v4/core/registries.js +0 -51
- package/node_modules/zod/v4/core/schemas.cjs +0 -2126
- package/node_modules/zod/v4/core/schemas.d.cts +0 -1146
- package/node_modules/zod/v4/core/schemas.d.ts +0 -1146
- package/node_modules/zod/v4/core/schemas.js +0 -2095
- package/node_modules/zod/v4/core/standard-schema.cjs +0 -2
- package/node_modules/zod/v4/core/standard-schema.d.cts +0 -126
- package/node_modules/zod/v4/core/standard-schema.d.ts +0 -126
- package/node_modules/zod/v4/core/standard-schema.js +0 -1
- package/node_modules/zod/v4/core/to-json-schema.cjs +0 -446
- package/node_modules/zod/v4/core/to-json-schema.d.cts +0 -114
- package/node_modules/zod/v4/core/to-json-schema.d.ts +0 -114
- package/node_modules/zod/v4/core/to-json-schema.js +0 -437
- package/node_modules/zod/v4/core/util.cjs +0 -710
- package/node_modules/zod/v4/core/util.d.cts +0 -199
- package/node_modules/zod/v4/core/util.d.ts +0 -199
- package/node_modules/zod/v4/core/util.js +0 -651
- package/node_modules/zod/v4/core/versions.cjs +0 -8
- package/node_modules/zod/v4/core/versions.d.cts +0 -5
- package/node_modules/zod/v4/core/versions.d.ts +0 -5
- package/node_modules/zod/v4/core/versions.js +0 -5
- package/node_modules/zod/v4/index.cjs +0 -22
- package/node_modules/zod/v4/index.d.cts +0 -3
- package/node_modules/zod/v4/index.d.ts +0 -3
- package/node_modules/zod/v4/index.js +0 -3
- package/node_modules/zod/v4/locales/ar.cjs +0 -133
- package/node_modules/zod/v4/locales/ar.d.cts +0 -5
- package/node_modules/zod/v4/locales/ar.d.ts +0 -4
- package/node_modules/zod/v4/locales/ar.js +0 -106
- package/node_modules/zod/v4/locales/az.cjs +0 -132
- package/node_modules/zod/v4/locales/az.d.cts +0 -5
- package/node_modules/zod/v4/locales/az.d.ts +0 -4
- package/node_modules/zod/v4/locales/az.js +0 -105
- package/node_modules/zod/v4/locales/be.cjs +0 -183
- package/node_modules/zod/v4/locales/be.d.cts +0 -5
- package/node_modules/zod/v4/locales/be.d.ts +0 -4
- package/node_modules/zod/v4/locales/be.js +0 -156
- package/node_modules/zod/v4/locales/bg.cjs +0 -147
- package/node_modules/zod/v4/locales/bg.d.cts +0 -5
- package/node_modules/zod/v4/locales/bg.d.ts +0 -4
- package/node_modules/zod/v4/locales/bg.js +0 -120
- package/node_modules/zod/v4/locales/ca.cjs +0 -134
- package/node_modules/zod/v4/locales/ca.d.cts +0 -5
- package/node_modules/zod/v4/locales/ca.d.ts +0 -4
- package/node_modules/zod/v4/locales/ca.js +0 -107
- package/node_modules/zod/v4/locales/cs.cjs +0 -138
- package/node_modules/zod/v4/locales/cs.d.cts +0 -5
- package/node_modules/zod/v4/locales/cs.d.ts +0 -4
- package/node_modules/zod/v4/locales/cs.js +0 -111
- package/node_modules/zod/v4/locales/da.cjs +0 -142
- package/node_modules/zod/v4/locales/da.d.cts +0 -5
- package/node_modules/zod/v4/locales/da.d.ts +0 -4
- package/node_modules/zod/v4/locales/da.js +0 -115
- package/node_modules/zod/v4/locales/de.cjs +0 -135
- package/node_modules/zod/v4/locales/de.d.cts +0 -5
- package/node_modules/zod/v4/locales/de.d.ts +0 -4
- package/node_modules/zod/v4/locales/de.js +0 -108
- package/node_modules/zod/v4/locales/en.cjs +0 -136
- package/node_modules/zod/v4/locales/en.d.cts +0 -5
- package/node_modules/zod/v4/locales/en.d.ts +0 -4
- package/node_modules/zod/v4/locales/en.js +0 -109
- package/node_modules/zod/v4/locales/eo.cjs +0 -136
- package/node_modules/zod/v4/locales/eo.d.cts +0 -5
- package/node_modules/zod/v4/locales/eo.d.ts +0 -4
- package/node_modules/zod/v4/locales/eo.js +0 -109
- package/node_modules/zod/v4/locales/es.cjs +0 -159
- package/node_modules/zod/v4/locales/es.d.cts +0 -5
- package/node_modules/zod/v4/locales/es.d.ts +0 -4
- package/node_modules/zod/v4/locales/es.js +0 -132
- package/node_modules/zod/v4/locales/fa.cjs +0 -141
- package/node_modules/zod/v4/locales/fa.d.cts +0 -5
- package/node_modules/zod/v4/locales/fa.d.ts +0 -4
- package/node_modules/zod/v4/locales/fa.js +0 -114
- package/node_modules/zod/v4/locales/fi.cjs +0 -139
- package/node_modules/zod/v4/locales/fi.d.cts +0 -5
- package/node_modules/zod/v4/locales/fi.d.ts +0 -4
- package/node_modules/zod/v4/locales/fi.js +0 -112
- package/node_modules/zod/v4/locales/fr-CA.cjs +0 -134
- package/node_modules/zod/v4/locales/fr-CA.d.cts +0 -5
- package/node_modules/zod/v4/locales/fr-CA.d.ts +0 -4
- package/node_modules/zod/v4/locales/fr-CA.js +0 -107
- package/node_modules/zod/v4/locales/fr.cjs +0 -135
- package/node_modules/zod/v4/locales/fr.d.cts +0 -5
- package/node_modules/zod/v4/locales/fr.d.ts +0 -4
- package/node_modules/zod/v4/locales/fr.js +0 -108
- package/node_modules/zod/v4/locales/he.cjs +0 -241
- package/node_modules/zod/v4/locales/he.d.cts +0 -5
- package/node_modules/zod/v4/locales/he.d.ts +0 -4
- package/node_modules/zod/v4/locales/he.js +0 -214
- package/node_modules/zod/v4/locales/hu.cjs +0 -135
- package/node_modules/zod/v4/locales/hu.d.cts +0 -5
- package/node_modules/zod/v4/locales/hu.d.ts +0 -4
- package/node_modules/zod/v4/locales/hu.js +0 -108
- package/node_modules/zod/v4/locales/hy.cjs +0 -174
- package/node_modules/zod/v4/locales/hy.d.cts +0 -5
- package/node_modules/zod/v4/locales/hy.d.ts +0 -4
- package/node_modules/zod/v4/locales/hy.js +0 -147
- package/node_modules/zod/v4/locales/id.cjs +0 -133
- package/node_modules/zod/v4/locales/id.d.cts +0 -5
- package/node_modules/zod/v4/locales/id.d.ts +0 -4
- package/node_modules/zod/v4/locales/id.js +0 -106
- package/node_modules/zod/v4/locales/index.cjs +0 -104
- package/node_modules/zod/v4/locales/index.d.cts +0 -49
- package/node_modules/zod/v4/locales/index.d.ts +0 -49
- package/node_modules/zod/v4/locales/index.js +0 -49
- package/node_modules/zod/v4/locales/is.cjs +0 -136
- package/node_modules/zod/v4/locales/is.d.cts +0 -5
- package/node_modules/zod/v4/locales/is.d.ts +0 -4
- package/node_modules/zod/v4/locales/is.js +0 -109
- package/node_modules/zod/v4/locales/it.cjs +0 -135
- package/node_modules/zod/v4/locales/it.d.cts +0 -5
- package/node_modules/zod/v4/locales/it.d.ts +0 -4
- package/node_modules/zod/v4/locales/it.js +0 -108
- package/node_modules/zod/v4/locales/ja.cjs +0 -134
- package/node_modules/zod/v4/locales/ja.d.cts +0 -5
- package/node_modules/zod/v4/locales/ja.d.ts +0 -4
- package/node_modules/zod/v4/locales/ja.js +0 -107
- package/node_modules/zod/v4/locales/ka.cjs +0 -139
- package/node_modules/zod/v4/locales/ka.d.cts +0 -5
- package/node_modules/zod/v4/locales/ka.d.ts +0 -4
- package/node_modules/zod/v4/locales/ka.js +0 -112
- package/node_modules/zod/v4/locales/kh.cjs +0 -12
- package/node_modules/zod/v4/locales/kh.d.cts +0 -5
- package/node_modules/zod/v4/locales/kh.d.ts +0 -5
- package/node_modules/zod/v4/locales/kh.js +0 -5
- package/node_modules/zod/v4/locales/km.cjs +0 -137
- package/node_modules/zod/v4/locales/km.d.cts +0 -5
- package/node_modules/zod/v4/locales/km.d.ts +0 -4
- package/node_modules/zod/v4/locales/km.js +0 -110
- package/node_modules/zod/v4/locales/ko.cjs +0 -138
- package/node_modules/zod/v4/locales/ko.d.cts +0 -5
- package/node_modules/zod/v4/locales/ko.d.ts +0 -4
- package/node_modules/zod/v4/locales/ko.js +0 -111
- package/node_modules/zod/v4/locales/lt.cjs +0 -230
- package/node_modules/zod/v4/locales/lt.d.cts +0 -5
- package/node_modules/zod/v4/locales/lt.d.ts +0 -4
- package/node_modules/zod/v4/locales/lt.js +0 -203
- package/node_modules/zod/v4/locales/mk.cjs +0 -136
- package/node_modules/zod/v4/locales/mk.d.cts +0 -5
- package/node_modules/zod/v4/locales/mk.d.ts +0 -4
- package/node_modules/zod/v4/locales/mk.js +0 -109
- package/node_modules/zod/v4/locales/ms.cjs +0 -134
- package/node_modules/zod/v4/locales/ms.d.cts +0 -5
- package/node_modules/zod/v4/locales/ms.d.ts +0 -4
- package/node_modules/zod/v4/locales/ms.js +0 -107
- package/node_modules/zod/v4/locales/nl.cjs +0 -137
- package/node_modules/zod/v4/locales/nl.d.cts +0 -5
- package/node_modules/zod/v4/locales/nl.d.ts +0 -4
- package/node_modules/zod/v4/locales/nl.js +0 -110
- package/node_modules/zod/v4/locales/no.cjs +0 -135
- package/node_modules/zod/v4/locales/no.d.cts +0 -5
- package/node_modules/zod/v4/locales/no.d.ts +0 -4
- package/node_modules/zod/v4/locales/no.js +0 -108
- package/node_modules/zod/v4/locales/ota.cjs +0 -136
- package/node_modules/zod/v4/locales/ota.d.cts +0 -5
- package/node_modules/zod/v4/locales/ota.d.ts +0 -4
- package/node_modules/zod/v4/locales/ota.js +0 -109
- package/node_modules/zod/v4/locales/package.json +0 -6
- package/node_modules/zod/v4/locales/pl.cjs +0 -136
- package/node_modules/zod/v4/locales/pl.d.cts +0 -5
- package/node_modules/zod/v4/locales/pl.d.ts +0 -4
- package/node_modules/zod/v4/locales/pl.js +0 -109
- package/node_modules/zod/v4/locales/ps.cjs +0 -141
- package/node_modules/zod/v4/locales/ps.d.cts +0 -5
- package/node_modules/zod/v4/locales/ps.d.ts +0 -4
- package/node_modules/zod/v4/locales/ps.js +0 -114
- package/node_modules/zod/v4/locales/pt.cjs +0 -135
- package/node_modules/zod/v4/locales/pt.d.cts +0 -5
- package/node_modules/zod/v4/locales/pt.d.ts +0 -4
- package/node_modules/zod/v4/locales/pt.js +0 -108
- package/node_modules/zod/v4/locales/ru.cjs +0 -183
- package/node_modules/zod/v4/locales/ru.d.cts +0 -5
- package/node_modules/zod/v4/locales/ru.d.ts +0 -4
- package/node_modules/zod/v4/locales/ru.js +0 -156
- package/node_modules/zod/v4/locales/sl.cjs +0 -136
- package/node_modules/zod/v4/locales/sl.d.cts +0 -5
- package/node_modules/zod/v4/locales/sl.d.ts +0 -4
- package/node_modules/zod/v4/locales/sl.js +0 -109
- package/node_modules/zod/v4/locales/sv.cjs +0 -137
- package/node_modules/zod/v4/locales/sv.d.cts +0 -5
- package/node_modules/zod/v4/locales/sv.d.ts +0 -4
- package/node_modules/zod/v4/locales/sv.js +0 -110
- package/node_modules/zod/v4/locales/ta.cjs +0 -137
- package/node_modules/zod/v4/locales/ta.d.cts +0 -5
- package/node_modules/zod/v4/locales/ta.d.ts +0 -4
- package/node_modules/zod/v4/locales/ta.js +0 -110
- package/node_modules/zod/v4/locales/th.cjs +0 -137
- package/node_modules/zod/v4/locales/th.d.cts +0 -5
- package/node_modules/zod/v4/locales/th.d.ts +0 -4
- package/node_modules/zod/v4/locales/th.js +0 -110
- package/node_modules/zod/v4/locales/tr.cjs +0 -132
- package/node_modules/zod/v4/locales/tr.d.cts +0 -5
- package/node_modules/zod/v4/locales/tr.d.ts +0 -4
- package/node_modules/zod/v4/locales/tr.js +0 -105
- package/node_modules/zod/v4/locales/ua.cjs +0 -12
- package/node_modules/zod/v4/locales/ua.d.cts +0 -5
- package/node_modules/zod/v4/locales/ua.d.ts +0 -5
- package/node_modules/zod/v4/locales/ua.js +0 -5
- package/node_modules/zod/v4/locales/uk.cjs +0 -135
- package/node_modules/zod/v4/locales/uk.d.cts +0 -5
- package/node_modules/zod/v4/locales/uk.d.ts +0 -4
- package/node_modules/zod/v4/locales/uk.js +0 -108
- package/node_modules/zod/v4/locales/ur.cjs +0 -137
- package/node_modules/zod/v4/locales/ur.d.cts +0 -5
- package/node_modules/zod/v4/locales/ur.d.ts +0 -4
- package/node_modules/zod/v4/locales/ur.js +0 -110
- package/node_modules/zod/v4/locales/uz.cjs +0 -136
- package/node_modules/zod/v4/locales/uz.d.cts +0 -5
- package/node_modules/zod/v4/locales/uz.d.ts +0 -4
- package/node_modules/zod/v4/locales/uz.js +0 -109
- package/node_modules/zod/v4/locales/vi.cjs +0 -135
- package/node_modules/zod/v4/locales/vi.d.cts +0 -5
- package/node_modules/zod/v4/locales/vi.d.ts +0 -4
- package/node_modules/zod/v4/locales/vi.js +0 -108
- package/node_modules/zod/v4/locales/yo.cjs +0 -134
- package/node_modules/zod/v4/locales/yo.d.cts +0 -5
- package/node_modules/zod/v4/locales/yo.d.ts +0 -4
- package/node_modules/zod/v4/locales/yo.js +0 -107
- package/node_modules/zod/v4/locales/zh-CN.cjs +0 -136
- package/node_modules/zod/v4/locales/zh-CN.d.cts +0 -5
- package/node_modules/zod/v4/locales/zh-CN.d.ts +0 -4
- package/node_modules/zod/v4/locales/zh-CN.js +0 -109
- package/node_modules/zod/v4/locales/zh-TW.cjs +0 -134
- package/node_modules/zod/v4/locales/zh-TW.d.cts +0 -5
- package/node_modules/zod/v4/locales/zh-TW.d.ts +0 -4
- package/node_modules/zod/v4/locales/zh-TW.js +0 -107
- package/node_modules/zod/v4/mini/checks.cjs +0 -34
- package/node_modules/zod/v4/mini/checks.d.cts +0 -1
- package/node_modules/zod/v4/mini/checks.d.ts +0 -1
- package/node_modules/zod/v4/mini/checks.js +0 -1
- package/node_modules/zod/v4/mini/coerce.cjs +0 -52
- package/node_modules/zod/v4/mini/coerce.d.cts +0 -7
- package/node_modules/zod/v4/mini/coerce.d.ts +0 -7
- package/node_modules/zod/v4/mini/coerce.js +0 -22
- package/node_modules/zod/v4/mini/external.cjs +0 -63
- package/node_modules/zod/v4/mini/external.d.cts +0 -12
- package/node_modules/zod/v4/mini/external.d.ts +0 -12
- package/node_modules/zod/v4/mini/external.js +0 -14
- package/node_modules/zod/v4/mini/index.cjs +0 -32
- package/node_modules/zod/v4/mini/index.d.cts +0 -3
- package/node_modules/zod/v4/mini/index.d.ts +0 -3
- package/node_modules/zod/v4/mini/index.js +0 -3
- package/node_modules/zod/v4/mini/iso.cjs +0 -64
- package/node_modules/zod/v4/mini/iso.d.cts +0 -22
- package/node_modules/zod/v4/mini/iso.d.ts +0 -22
- package/node_modules/zod/v4/mini/iso.js +0 -34
- package/node_modules/zod/v4/mini/package.json +0 -6
- package/node_modules/zod/v4/mini/parse.cjs +0 -16
- package/node_modules/zod/v4/mini/parse.d.cts +0 -1
- package/node_modules/zod/v4/mini/parse.d.ts +0 -1
- package/node_modules/zod/v4/mini/parse.js +0 -1
- package/node_modules/zod/v4/mini/schemas.cjs +0 -1046
- package/node_modules/zod/v4/mini/schemas.d.cts +0 -427
- package/node_modules/zod/v4/mini/schemas.d.ts +0 -427
- package/node_modules/zod/v4/mini/schemas.js +0 -925
- package/node_modules/zod/v4/package.json +0 -6
- package/node_modules/zod/v4-mini/index.cjs +0 -17
- package/node_modules/zod/v4-mini/index.d.cts +0 -1
- package/node_modules/zod/v4-mini/index.d.ts +0 -1
- package/node_modules/zod/v4-mini/index.js +0 -1
- package/node_modules/zod/v4-mini/package.json +0 -6
- /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/cattle-planner.d.ts +0 -0
- /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/cattle-task.d.ts +0 -0
- /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/cattle-task.js +0 -0
- /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/fs-private.d.ts +0 -0
- /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/fs-private.js +0 -0
- /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/hcloud-cattle.d.ts +0 -0
- /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/hcloud-cattle.js +0 -0
- /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/hcloud-labels.d.ts +0 -0
- /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/hcloud.d.ts +0 -0
- /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/hcloud.js +0 -0
- /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/persona-loader.d.ts +0 -0
- /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/ttl.d.ts +0 -0
- /package/{node_modules/@clawdlets/core → vendor/@clawdlets/cattle-core}/dist/lib/ttl.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/assets/opentofu/.terraform.lock.hcl +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/assets/opentofu/README.md +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/assets/opentofu/modules/bot_host/main.tf +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/assets/opentofu/outputs.tf +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/cattle-checks.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/cattle-checks.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/deploy-checks.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/repo-checks.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/types.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/types.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/util.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/doctor/util.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/doctor.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/doctor.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/index.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/index.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/age-keygen.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/age-keygen.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/age.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/age.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/base-flake.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/base-flake.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/context.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/context.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/docs-index.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/docs-index.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/dot-path.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/dot-path.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/dotenv-file.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/dotenv-file.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/fleet-nix-eval.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/fleet-nix-eval.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/fleet-policy.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/fleet-policy.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/fs-safe.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/fs-safe.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/git.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/git.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/github.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/github.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/host-resolve.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/host-resolve.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/inline-script-ban.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/inline-script-ban.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/mkpasswd.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/mkpasswd.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/nix-flakes.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/nix-flakes.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/nix-host.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/nix-host.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/nix-tools.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/nix-tools.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/opentofu.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/path-expand.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/path-expand.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/repo.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/repo.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/run.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/run.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-migrate.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-policy.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-policy.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-tar.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/secrets-tar.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops-config.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops-config.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops-path.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops-path.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops-rules.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops-rules.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/sops.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/ssh-remote.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/ssh-remote.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/ssh.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/ssh.js +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/template-source.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/template-test-dir.d.ts +0 -0
- /package/{node_modules → vendor}/@clawdlets/core/dist/lib/template-test-dir.js +0 -0
- /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 {
|
|
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 {
|
|
26
|
-
import {
|
|
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/
|
|
707
|
-
function
|
|
708
|
-
|
|
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
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
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
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
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
|
|
882
|
+
description: "Validate fleet/clawdlets.json + rendered Clawdbot config."
|
|
797
883
|
},
|
|
798
|
-
args: {
|
|
799
|
-
|
|
800
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
|
2408
|
-
await copyTree({
|
|
2409
|
-
srcDir: templateDir,
|
|
2641
|
+
const result = await initProject({
|
|
2410
2642
|
destDir,
|
|
2411
|
-
|
|
2643
|
+
host: host$1,
|
|
2644
|
+
templateSpec: templateSpec.spec,
|
|
2645
|
+
gitInit: args.gitInit
|
|
2412
2646
|
});
|
|
2413
|
-
|
|
2414
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 === "
|
|
2595
|
-
throw new Error(`
|
|
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
|
|
2598
|
-
const
|
|
2599
|
-
|
|
2600
|
-
const
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
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:
|
|
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
|
|
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
|
-
...
|
|
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
|
-
|
|
2908
|
-
|
|
2909
|
-
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
|
|
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
|
|
2917
|
-
const existing =
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
3153
|
-
const
|
|
3154
|
-
const
|
|
3155
|
-
const secretNames =
|
|
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
|
-
|
|
3212
|
-
|
|
3213
|
-
|
|
3214
|
-
|
|
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
|
-
|
|
3228
|
-
|
|
3229
|
-
|
|
3230
|
-
|
|
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
|
-
|
|
3238
|
-
|
|
3239
|
-
|
|
3240
|
-
|
|
3241
|
-
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3249
|
-
})
|
|
3250
|
-
|
|
3251
|
-
|
|
3252
|
-
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
|
|
3256
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3287
|
-
|
|
3288
|
-
|
|
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
|
-
|
|
4103
|
-
|
|
4104
|
-
|
|
4105
|
-
|
|
4106
|
-
|
|
4107
|
-
|
|
4108
|
-
|
|
4109
|
-
|
|
4110
|
-
|
|
4111
|
-
|
|
4112
|
-
|
|
4113
|
-
|
|
4114
|
-
|
|
4115
|
-
|
|
4116
|
-
|
|
4117
|
-
|
|
4118
|
-
|
|
4119
|
-
|
|
4120
|
-
|
|
4121
|
-
|
|
4122
|
-
|
|
4123
|
-
|
|
4124
|
-
|
|
4125
|
-
|
|
4126
|
-
|
|
4127
|
-
|
|
4128
|
-
|
|
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,
|