@vibe-agent-toolkit/cli 0.2.0-rc.6 → 0.2.0-rc.8
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/README.md +4 -5
- package/dist/bin/vat +34 -19
- package/dist/bin/vat.js +34 -19
- package/dist/bin/vat.js.map +1 -1
- package/dist/bin.js +44 -158
- package/dist/bin.js.map +1 -1
- package/dist/command-loaders.d.ts +2 -2
- package/dist/command-loaders.d.ts.map +1 -1
- package/dist/command-loaders.js +4 -2
- package/dist/command-loaders.js.map +1 -1
- package/dist/commands/agent/build.d.ts.map +1 -1
- package/dist/commands/agent/build.js +2 -1
- package/dist/commands/agent/build.js.map +1 -1
- package/dist/commands/agent/import.d.ts.map +1 -1
- package/dist/commands/agent/import.js +3 -2
- package/dist/commands/agent/import.js.map +1 -1
- package/dist/commands/agent/install-path.d.ts +36 -0
- package/dist/commands/agent/install-path.d.ts.map +1 -0
- package/dist/commands/agent/install-path.js +44 -0
- package/dist/commands/agent/install-path.js.map +1 -0
- package/dist/commands/agent/install.d.ts.map +1 -1
- package/dist/commands/agent/install.js +22 -10
- package/dist/commands/agent/install.js.map +1 -1
- package/dist/commands/agent/installed.d.ts.map +1 -1
- package/dist/commands/agent/installed.js +22 -12
- package/dist/commands/agent/installed.js.map +1 -1
- package/dist/commands/agent/list.d.ts.map +1 -1
- package/dist/commands/agent/list.js +2 -1
- package/dist/commands/agent/list.js.map +1 -1
- package/dist/commands/agent/run.d.ts.map +1 -1
- package/dist/commands/agent/run.js +2 -1
- package/dist/commands/agent/run.js.map +1 -1
- package/dist/commands/agent/uninstall.d.ts.map +1 -1
- package/dist/commands/agent/uninstall.js +13 -6
- package/dist/commands/agent/uninstall.js.map +1 -1
- package/dist/commands/agent/validate.d.ts.map +1 -1
- package/dist/commands/agent/validate.js +3 -2
- package/dist/commands/agent/validate.js.map +1 -1
- package/dist/commands/ard/emit.d.ts +153 -0
- package/dist/commands/ard/emit.d.ts.map +1 -0
- package/dist/commands/ard/emit.js +276 -0
- package/dist/commands/ard/emit.js.map +1 -0
- package/dist/commands/ard/index.d.ts +12 -0
- package/dist/commands/ard/index.d.ts.map +1 -0
- package/dist/commands/ard/index.js +80 -0
- package/dist/commands/ard/index.js.map +1 -0
- package/dist/commands/ard/surfaces.d.ts +56 -0
- package/dist/commands/ard/surfaces.d.ts.map +1 -0
- package/dist/commands/ard/surfaces.js +150 -0
- package/dist/commands/ard/surfaces.js.map +1 -0
- package/dist/commands/audit/distributed-tree.d.ts.map +1 -1
- package/dist/commands/audit/distributed-tree.js +9 -6
- package/dist/commands/audit/distributed-tree.js.map +1 -1
- package/dist/commands/audit/scan-population.d.ts +158 -0
- package/dist/commands/audit/scan-population.d.ts.map +1 -0
- package/dist/commands/audit/scan-population.js +292 -0
- package/dist/commands/audit/scan-population.js.map +1 -0
- package/dist/commands/audit-settings.d.ts.map +1 -1
- package/dist/commands/audit-settings.js +6 -5
- package/dist/commands/audit-settings.js.map +1 -1
- package/dist/commands/audit.d.ts +78 -9
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +853 -473
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +24 -24
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/cache/clear.d.ts.map +1 -1
- package/dist/commands/cache/clear.js +17 -10
- package/dist/commands/cache/clear.js.map +1 -1
- package/dist/commands/claude/budget.d.ts +136 -24
- package/dist/commands/claude/budget.d.ts.map +1 -1
- package/dist/commands/claude/budget.js +152 -57
- package/dist/commands/claude/budget.js.map +1 -1
- package/dist/commands/claude/context.d.ts.map +1 -1
- package/dist/commands/claude/context.js +4 -3
- package/dist/commands/claude/context.js.map +1 -1
- package/dist/commands/claude/marketplace/changelog-utils.d.ts +1 -1
- package/dist/commands/claude/marketplace/changelog-utils.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/changelog-utils.js +1 -2
- package/dist/commands/claude/marketplace/changelog-utils.js.map +1 -1
- package/dist/commands/claude/marketplace/git-publish.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/git-publish.js +3 -2
- package/dist/commands/claude/marketplace/git-publish.js.map +1 -1
- package/dist/commands/claude/marketplace/license-utils.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/license-utils.js +0 -1
- package/dist/commands/claude/marketplace/license-utils.js.map +1 -1
- package/dist/commands/claude/marketplace/publish-tree.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/publish-tree.js +0 -6
- package/dist/commands/claude/marketplace/publish-tree.js.map +1 -1
- package/dist/commands/claude/marketplace/publish.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/publish.js +2 -1
- package/dist/commands/claude/marketplace/publish.js.map +1 -1
- package/dist/commands/claude/marketplace/validate.d.ts +55 -22
- package/dist/commands/claude/marketplace/validate.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/validate.js +392 -77
- package/dist/commands/claude/marketplace/validate.js.map +1 -1
- package/dist/commands/claude/org/api-keys.d.ts +0 -3
- package/dist/commands/claude/org/api-keys.d.ts.map +1 -1
- package/dist/commands/claude/org/api-keys.js +2 -1
- package/dist/commands/claude/org/api-keys.js.map +1 -1
- package/dist/commands/claude/org/helpers.d.ts +17 -22
- package/dist/commands/claude/org/helpers.d.ts.map +1 -1
- package/dist/commands/claude/org/helpers.js +6 -22
- package/dist/commands/claude/org/helpers.js.map +1 -1
- package/dist/commands/claude/org/invites.d.ts +0 -3
- package/dist/commands/claude/org/invites.d.ts.map +1 -1
- package/dist/commands/claude/org/invites.js +3 -2
- package/dist/commands/claude/org/invites.js.map +1 -1
- package/dist/commands/claude/org/skills.d.ts +103 -4
- package/dist/commands/claude/org/skills.d.ts.map +1 -1
- package/dist/commands/claude/org/skills.js +331 -123
- package/dist/commands/claude/org/skills.js.map +1 -1
- package/dist/commands/claude/org/users.d.ts +0 -3
- package/dist/commands/claude/org/users.d.ts.map +1 -1
- package/dist/commands/claude/org/users.js +3 -2
- package/dist/commands/claude/org/users.js.map +1 -1
- package/dist/commands/claude/org/workspaces.d.ts +0 -3
- package/dist/commands/claude/org/workspaces.d.ts.map +1 -1
- package/dist/commands/claude/org/workspaces.js +6 -5
- package/dist/commands/claude/org/workspaces.js.map +1 -1
- package/dist/commands/claude/plugin/build.d.ts +8 -0
- package/dist/commands/claude/plugin/build.d.ts.map +1 -1
- package/dist/commands/claude/plugin/build.js +28 -33
- package/dist/commands/claude/plugin/build.js.map +1 -1
- package/dist/commands/claude/plugin/helpers.d.ts.map +1 -1
- package/dist/commands/claude/plugin/helpers.js +0 -6
- package/dist/commands/claude/plugin/helpers.js.map +1 -1
- package/dist/commands/claude/plugin/install.d.ts +12 -0
- package/dist/commands/claude/plugin/install.d.ts.map +1 -1
- package/dist/commands/claude/plugin/install.js +71 -60
- package/dist/commands/claude/plugin/install.js.map +1 -1
- package/dist/commands/claude/plugin/list.d.ts.map +1 -1
- package/dist/commands/claude/plugin/list.js +3 -2
- package/dist/commands/claude/plugin/list.js.map +1 -1
- package/dist/commands/claude/plugin/plugin-changelog.d.ts.map +1 -1
- package/dist/commands/claude/plugin/plugin-changelog.js +0 -2
- package/dist/commands/claude/plugin/plugin-changelog.js.map +1 -1
- package/dist/commands/claude/plugin/plugin-files.d.ts.map +1 -1
- package/dist/commands/claude/plugin/plugin-files.js +0 -3
- package/dist/commands/claude/plugin/plugin-files.js.map +1 -1
- package/dist/commands/claude/plugin/plugin-validators.d.ts.map +1 -1
- package/dist/commands/claude/plugin/plugin-validators.js +3 -6
- package/dist/commands/claude/plugin/plugin-validators.js.map +1 -1
- package/dist/commands/claude/plugin/tree-copy.d.ts +73 -0
- package/dist/commands/claude/plugin/tree-copy.d.ts.map +1 -1
- package/dist/commands/claude/plugin/tree-copy.js +221 -15
- package/dist/commands/claude/plugin/tree-copy.js.map +1 -1
- package/dist/commands/claude/plugin/uninstall.d.ts.map +1 -1
- package/dist/commands/claude/plugin/uninstall.js +4 -4
- package/dist/commands/claude/plugin/uninstall.js.map +1 -1
- package/dist/commands/consistency-check.d.ts +9 -13
- package/dist/commands/consistency-check.d.ts.map +1 -1
- package/dist/commands/consistency-check.js +91 -81
- package/dist/commands/consistency-check.js.map +1 -1
- package/dist/commands/corpus/index.d.ts.map +1 -1
- package/dist/commands/corpus/index.js +3 -0
- package/dist/commands/corpus/index.js.map +1 -1
- package/dist/commands/corpus/report.d.ts +0 -1
- package/dist/commands/corpus/report.d.ts.map +1 -1
- package/dist/commands/corpus/report.js +1 -3
- package/dist/commands/corpus/report.js.map +1 -1
- package/dist/commands/corpus/runner.d.ts +58 -1
- package/dist/commands/corpus/runner.d.ts.map +1 -1
- package/dist/commands/corpus/runner.js +92 -21
- package/dist/commands/corpus/runner.js.map +1 -1
- package/dist/commands/corpus/scan.d.ts.map +1 -1
- package/dist/commands/corpus/scan.js +2 -4
- package/dist/commands/corpus/scan.js.map +1 -1
- package/dist/commands/corpus/seed.d.ts +4 -4
- package/dist/commands/corpus/seed.d.ts.map +1 -1
- package/dist/commands/corpus/seed.js +1 -3
- package/dist/commands/corpus/seed.js.map +1 -1
- package/dist/commands/doctor.d.ts +14 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +147 -51
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/inventory.d.ts.map +1 -1
- package/dist/commands/inventory.js +6 -7
- package/dist/commands/inventory.js.map +1 -1
- package/dist/commands/mcp/list-collections.d.ts.map +1 -1
- package/dist/commands/mcp/list-collections.js +2 -1
- package/dist/commands/mcp/list-collections.js.map +1 -1
- package/dist/commands/mcp/serve.d.ts.map +1 -1
- package/dist/commands/mcp/serve.js +3 -2
- package/dist/commands/mcp/serve.js.map +1 -1
- package/dist/commands/okf/index.d.ts +11 -0
- package/dist/commands/okf/index.d.ts.map +1 -0
- package/dist/commands/okf/index.js +114 -0
- package/dist/commands/okf/index.js.map +1 -0
- package/dist/commands/okf/validate.d.ts +191 -0
- package/dist/commands/okf/validate.d.ts.map +1 -0
- package/dist/commands/okf/validate.js +190 -0
- package/dist/commands/okf/validate.js.map +1 -0
- package/dist/commands/phase-utils.d.ts +30 -13
- package/dist/commands/phase-utils.d.ts.map +1 -1
- package/dist/commands/phase-utils.js +56 -19
- package/dist/commands/phase-utils.js.map +1 -1
- package/dist/commands/positional-args.d.ts.map +1 -1
- package/dist/commands/positional-args.js +2 -1
- package/dist/commands/positional-args.js.map +1 -1
- package/dist/commands/rag/clear-command.d.ts.map +1 -1
- package/dist/commands/rag/clear-command.js +2 -1
- package/dist/commands/rag/clear-command.js.map +1 -1
- package/dist/commands/rag/index-command.d.ts +27 -2
- package/dist/commands/rag/index-command.d.ts.map +1 -1
- package/dist/commands/rag/index-command.js +48 -8
- package/dist/commands/rag/index-command.js.map +1 -1
- package/dist/commands/rag/index.d.ts.map +1 -1
- package/dist/commands/rag/index.js +2 -0
- package/dist/commands/rag/index.js.map +1 -1
- package/dist/commands/rag/query-command.d.ts.map +1 -1
- package/dist/commands/rag/query-command.js +2 -1
- package/dist/commands/rag/query-command.js.map +1 -1
- package/dist/commands/rag/stats-command.d.ts.map +1 -1
- package/dist/commands/rag/stats-command.js +2 -1
- package/dist/commands/rag/stats-command.js.map +1 -1
- package/dist/commands/resources/check-progress.d.ts +3 -0
- package/dist/commands/resources/check-progress.d.ts.map +1 -1
- package/dist/commands/resources/check-progress.js +11 -2
- package/dist/commands/resources/check-progress.js.map +1 -1
- package/dist/commands/resources/check-supervisor.d.ts.map +1 -1
- package/dist/commands/resources/check-supervisor.js +14 -7
- package/dist/commands/resources/check-supervisor.js.map +1 -1
- package/dist/commands/resources/check.d.ts +168 -8
- package/dist/commands/resources/check.d.ts.map +1 -1
- package/dist/commands/resources/check.js +222 -118
- package/dist/commands/resources/check.js.map +1 -1
- package/dist/commands/resources/index.d.ts.map +1 -1
- package/dist/commands/resources/index.js +64 -29
- package/dist/commands/resources/index.js.map +1 -1
- package/dist/commands/resources/query.d.ts +18 -1
- package/dist/commands/resources/query.d.ts.map +1 -1
- package/dist/commands/resources/query.js +33 -12
- package/dist/commands/resources/query.js.map +1 -1
- package/dist/commands/resources/scan.d.ts.map +1 -1
- package/dist/commands/resources/scan.js +4 -8
- package/dist/commands/resources/scan.js.map +1 -1
- package/dist/commands/resources/validate.d.ts +30 -1
- package/dist/commands/resources/validate.d.ts.map +1 -1
- package/dist/commands/resources/validate.js +116 -14
- package/dist/commands/resources/validate.js.map +1 -1
- package/dist/commands/skill/review-checklist.d.ts +3 -2
- package/dist/commands/skill/review-checklist.d.ts.map +1 -1
- package/dist/commands/skill/review-checklist.js +4 -2
- package/dist/commands/skill/review-checklist.js.map +1 -1
- package/dist/commands/skill/review.d.ts +247 -0
- package/dist/commands/skill/review.d.ts.map +1 -1
- package/dist/commands/skill/review.js +98 -61
- package/dist/commands/skill/review.js.map +1 -1
- package/dist/commands/skill/test/configure.d.ts.map +1 -1
- package/dist/commands/skill/test/configure.js +0 -1
- package/dist/commands/skill/test/configure.js.map +1 -1
- package/dist/commands/skill/test/run.d.ts +12 -6
- package/dist/commands/skill/test/run.d.ts.map +1 -1
- package/dist/commands/skill/test/run.js +137 -67
- package/dist/commands/skill/test/run.js.map +1 -1
- package/dist/commands/skills/build.d.ts +69 -2
- package/dist/commands/skills/build.d.ts.map +1 -1
- package/dist/commands/skills/build.js +128 -42
- package/dist/commands/skills/build.js.map +1 -1
- package/dist/commands/skills/install.d.ts +2 -1
- package/dist/commands/skills/install.d.ts.map +1 -1
- package/dist/commands/skills/install.js +20 -30
- package/dist/commands/skills/install.js.map +1 -1
- package/dist/commands/skills/list.d.ts +2 -1
- package/dist/commands/skills/list.d.ts.map +1 -1
- package/dist/commands/skills/list.js +44 -26
- package/dist/commands/skills/list.js.map +1 -1
- package/dist/commands/skills/package.d.ts +1 -1
- package/dist/commands/skills/package.d.ts.map +1 -1
- package/dist/commands/skills/package.js +6 -8
- package/dist/commands/skills/package.js.map +1 -1
- package/dist/commands/skills/scope-guard.d.ts.map +1 -1
- package/dist/commands/skills/scope-guard.js +2 -4
- package/dist/commands/skills/scope-guard.js.map +1 -1
- package/dist/commands/skills/shared.d.ts.map +1 -1
- package/dist/commands/skills/shared.js +2 -4
- package/dist/commands/skills/shared.js.map +1 -1
- package/dist/commands/skills/skill-discovery.d.ts +40 -1
- package/dist/commands/skills/skill-discovery.d.ts.map +1 -1
- package/dist/commands/skills/skill-discovery.js +32 -4
- package/dist/commands/skills/skill-discovery.js.map +1 -1
- package/dist/commands/skills/source-resolvers.d.ts +15 -0
- package/dist/commands/skills/source-resolvers.d.ts.map +1 -1
- package/dist/commands/skills/source-resolvers.js +25 -4
- package/dist/commands/skills/source-resolvers.js.map +1 -1
- package/dist/commands/skills/validate-command.d.ts.map +1 -1
- package/dist/commands/skills/validate-command.js +11 -3
- package/dist/commands/skills/validate-command.js.map +1 -1
- package/dist/commands/skills/validate.d.ts +66 -7
- package/dist/commands/skills/validate.d.ts.map +1 -1
- package/dist/commands/skills/validate.js +133 -29
- package/dist/commands/skills/validate.js.map +1 -1
- package/dist/commands/validate.d.ts +1 -1
- package/dist/commands/validate.js +8 -6
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/verify.d.ts +102 -5
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +246 -69
- package/dist/commands/verify.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/report-schemas.d.ts +45 -0
- package/dist/report-schemas.d.ts.map +1 -0
- package/dist/report-schemas.js +102 -0
- package/dist/report-schemas.js.map +1 -0
- package/dist/skill-resolution/packaging-config.d.ts +49 -5
- package/dist/skill-resolution/packaging-config.d.ts.map +1 -1
- package/dist/skill-resolution/packaging-config.js +59 -19
- package/dist/skill-resolution/packaging-config.js.map +1 -1
- package/dist/skill-resolution/resolve-skill-reference.d.ts.map +1 -1
- package/dist/skill-resolution/resolve-skill-reference.js +8 -6
- package/dist/skill-resolution/resolve-skill-reference.js.map +1 -1
- package/dist/utils/agent-discovery.d.ts.map +1 -1
- package/dist/utils/agent-discovery.js +22 -11
- package/dist/utils/agent-discovery.js.map +1 -1
- package/dist/utils/agent-runner.d.ts.map +1 -1
- package/dist/utils/agent-runner.js +0 -1
- package/dist/utils/agent-runner.js.map +1 -1
- package/dist/utils/command-error.d.ts +87 -55
- package/dist/utils/command-error.d.ts.map +1 -1
- package/dist/utils/command-error.js +113 -64
- package/dist/utils/command-error.js.map +1 -1
- package/dist/utils/config-loader.d.ts +2 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +3 -6
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/context-budget-issues.d.ts +1 -1
- package/dist/utils/context-budget-issues.js +1 -1
- package/dist/utils/corpus-target.d.ts +5 -27
- package/dist/utils/corpus-target.d.ts.map +1 -1
- package/dist/utils/corpus-target.js +7 -33
- package/dist/utils/corpus-target.js.map +1 -1
- package/dist/utils/edge-lens-evaluation.d.ts +83 -0
- package/dist/utils/edge-lens-evaluation.d.ts.map +1 -0
- package/dist/utils/edge-lens-evaluation.js +110 -0
- package/dist/utils/edge-lens-evaluation.js.map +1 -0
- package/dist/utils/help-loader.d.ts.map +1 -1
- package/dist/utils/help-loader.js +0 -1
- package/dist/utils/help-loader.js.map +1 -1
- package/dist/utils/issue-rendering.d.ts +2 -2
- package/dist/utils/issue-rendering.js +2 -2
- package/dist/utils/optional-backend.d.ts +5 -4
- package/dist/utils/optional-backend.d.ts.map +1 -1
- package/dist/utils/optional-backend.js +7 -5
- package/dist/utils/optional-backend.js.map +1 -1
- package/dist/utils/output.d.ts +9 -0
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +16 -0
- package/dist/utils/output.js.map +1 -1
- package/dist/utils/package-json.d.ts +24 -0
- package/dist/utils/package-json.d.ts.map +1 -0
- package/dist/utils/package-json.js +49 -0
- package/dist/utils/package-json.js.map +1 -0
- package/dist/utils/project-root-policy.d.ts +20 -0
- package/dist/utils/project-root-policy.d.ts.map +1 -1
- package/dist/utils/project-root-policy.js +30 -0
- package/dist/utils/project-root-policy.js.map +1 -1
- package/dist/utils/projection-query.d.ts +41 -4
- package/dist/utils/projection-query.d.ts.map +1 -1
- package/dist/utils/projection-query.js +44 -10
- package/dist/utils/projection-query.js.map +1 -1
- package/dist/utils/projection-store.d.ts +41 -15
- package/dist/utils/projection-store.d.ts.map +1 -1
- package/dist/utils/projection-store.js +65 -18
- package/dist/utils/projection-store.js.map +1 -1
- package/dist/utils/repeatable-option.d.ts +37 -0
- package/dist/utils/repeatable-option.d.ts.map +1 -0
- package/dist/utils/repeatable-option.js +39 -0
- package/dist/utils/repeatable-option.js.map +1 -0
- package/dist/utils/resource-loader.d.ts +4 -3
- package/dist/utils/resource-loader.d.ts.map +1 -1
- package/dist/utils/resource-loader.js +63 -32
- package/dist/utils/resource-loader.js.map +1 -1
- package/dist/utils/root-argv.d.ts +53 -0
- package/dist/utils/root-argv.d.ts.map +1 -0
- package/dist/utils/root-argv.js +215 -0
- package/dist/utils/root-argv.js.map +1 -0
- package/dist/utils/run-integrity.d.ts +95 -0
- package/dist/utils/run-integrity.d.ts.map +1 -0
- package/dist/utils/run-integrity.js +102 -0
- package/dist/utils/run-integrity.js.map +1 -0
- package/dist/utils/skill-packaging-config.d.ts +27 -0
- package/dist/utils/skill-packaging-config.d.ts.map +1 -1
- package/dist/utils/skill-packaging-config.js +30 -0
- package/dist/utils/skill-packaging-config.js.map +1 -1
- package/dist/utils/sqlite-experimental-warning.d.ts +69 -0
- package/dist/utils/sqlite-experimental-warning.d.ts.map +1 -0
- package/dist/utils/sqlite-experimental-warning.js +144 -0
- package/dist/utils/sqlite-experimental-warning.js.map +1 -0
- package/dist/utils/url-redact.d.ts.map +1 -1
- package/dist/utils/url-redact.js +4 -6
- package/dist/utils/url-redact.js.map +1 -1
- package/dist/utils/user-context-scanner.d.ts +8 -0
- package/dist/utils/user-context-scanner.d.ts.map +1 -1
- package/dist/utils/user-context-scanner.js +4 -2
- package/dist/utils/user-context-scanner.js.map +1 -1
- package/dist/utils/validate-help-files.d.ts.map +1 -1
- package/dist/utils/validate-help-files.js +12 -6
- package/dist/utils/validate-help-files.js.map +1 -1
- package/dist/utils/vat-bin-path.d.ts.map +1 -1
- package/dist/utils/vat-bin-path.js +0 -1
- package/dist/utils/vat-bin-path.js.map +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -3
- package/dist/version.js.map +1 -1
- package/docs/audit.md +141 -37
- package/docs/doctor.md +7 -6
- package/docs/index.md +19 -11
- package/docs/rag.md +3 -2
- package/docs/resources.md +5 -2
- package/docs/skill-test.md +10 -9
- package/docs/skills.md +53 -69
- package/package.json +24 -29
- package/schemas/ard-emit.json +149 -0
- package/schemas/claude-budget.json +197 -0
- package/schemas/okf-validate.json +170 -0
- package/schemas/resources-check.json +186 -0
- package/schemas/skill-review.json +230 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The run-integrity refusal: ONE mechanism for every gate that must never
|
|
3
|
+
* answer `success` after checking nothing.
|
|
4
|
+
*
|
|
5
|
+
* ## The class this closes
|
|
6
|
+
*
|
|
7
|
+
* A gate that checked nothing produces the same document as a gate that was
|
|
8
|
+
* removed. `vat resources check` shipped it (no `checks:` block → `status:
|
|
9
|
+
* success`, exit 0), then `vat claude budget` (a path matching no working
|
|
10
|
+
* location), then the repo's own audit quality gate (a green path over zero
|
|
11
|
+
* parsed findings), then `vat resources validate` (a `--collection` matching
|
|
12
|
+
* nothing → `filesScanned: 0`, exit 0), `vat claude marketplace validate` (no
|
|
13
|
+
* `plugins/` to walk, no count published), `vat corpus scan` (an empty tree
|
|
14
|
+
* "audits cleanly"), `vat verify`'s `packaged-content` phase (a typo'd glob
|
|
15
|
+
* discovers no bundle and the phase reports `success`), then `vat skills
|
|
16
|
+
* validate` (the same typo'd glob: one info line, no document, exit 0 — and
|
|
17
|
+
* `vat validate` folded that into `success`) and `vat audit` (an existing tree
|
|
18
|
+
* with nothing auditable: `status: success` over `filesScanned: 0`). Nine
|
|
19
|
+
* instances of one shape, and each was first fixed by hand at its own site.
|
|
20
|
+
* This module is where that hand-fixing stops: every site derives its refusal
|
|
21
|
+
* through the same three functions, so the invariants below are properties of
|
|
22
|
+
* the mechanism rather than of each author's memory.
|
|
23
|
+
*
|
|
24
|
+
* ## The invariants
|
|
25
|
+
*
|
|
26
|
+
* 1. **Code {@link RUN_INTEGRITY_CODE} — `RESOURCE_CHECK_BROKEN` — and never a
|
|
27
|
+
* sibling per site.** It is the registry's one run-integrity claim — *these
|
|
28
|
+
* assertions did not execute meaningfully, so the green means nothing* — and
|
|
29
|
+
* `ValidationConfigSchema` refuses it as a `severity` key, which is what makes
|
|
30
|
+
* it non-overridable by construction. A code per site would buy a consumer
|
|
31
|
+
* nothing the message does not already say while adding one more thing an
|
|
32
|
+
* adopter's CI has to know to look for.
|
|
33
|
+
* 2. **Severity `error`, and not a parameter.** The one thing that must never be
|
|
34
|
+
* configurable about "the gate did not do its job" is whether it gates.
|
|
35
|
+
* 3. **Derived inside the DOCUMENT builder, never asserted in a handler.** The
|
|
36
|
+
* builder is the one function every lane's document passes through, so
|
|
37
|
+
* deriving the refusal there lands it after `resolveIssueSeverity` and
|
|
38
|
+
* `applyAllowFilter` and makes "denominator zero, status clean"
|
|
39
|
+
* unrepresentable rather than merely unwritten. A pure function, unit-testable
|
|
40
|
+
* without I/O.
|
|
41
|
+
* 4. **ONE finding per run**, however many things went unmatched. The claim is
|
|
42
|
+
* about the RUN; one per argument is per-finding duplication.
|
|
43
|
+
* 5. **The message says what did not run and what the operator can do.** It
|
|
44
|
+
* must not claim the corpus is broken — it claims the run is not a verdict.
|
|
45
|
+
* 6. **stderr may still carry a human warning; the document and the exit code
|
|
46
|
+
* must agree with it.** The human channel and the machine channel were what
|
|
47
|
+
* disagreed in every shipped instance, and only the machine channel gates.
|
|
48
|
+
*/
|
|
49
|
+
/**
|
|
50
|
+
* The code every run-integrity refusal carries.
|
|
51
|
+
*
|
|
52
|
+
* 🔑 **One code for every refusal, on purpose.** A statement that would not
|
|
53
|
+
* compile, a corpus with no members, a run with no rules, a run that was killed,
|
|
54
|
+
* a scan that matched no file, a walk that missed a declared plugin, a phase that
|
|
55
|
+
* found no bundle — all are the same claim to a consumer, and they need the
|
|
56
|
+
* identical non-overridability, which
|
|
57
|
+
* `ValidationConfigSchema` grants by refusing this code as a `severity` key.
|
|
58
|
+
*/
|
|
59
|
+
export const RUN_INTEGRITY_CODE = 'RESOURCE_CHECK_BROKEN';
|
|
60
|
+
/**
|
|
61
|
+
* A run-integrity refusal: the non-overridable code, at `error`, always.
|
|
62
|
+
*
|
|
63
|
+
* The severity is not a parameter and must not become one. Every caller is
|
|
64
|
+
* reporting that the gate did not do its job, and the one thing that must never
|
|
65
|
+
* be configurable about that report is whether it gates.
|
|
66
|
+
*
|
|
67
|
+
* @param message - What did not run, and what the operator can do about it
|
|
68
|
+
* @returns The finding
|
|
69
|
+
*/
|
|
70
|
+
export function runIntegrityFinding(message) {
|
|
71
|
+
return { code: RUN_INTEGRITY_CODE, severity: 'error', message };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The refusal for a run whose denominator is zero — nothing was checked.
|
|
75
|
+
*
|
|
76
|
+
* 🪤 **It asks the DENOMINATOR, never the config.** A builder cannot see why
|
|
77
|
+
* nothing ran and deliberately does not ask. An absent config block, a filter
|
|
78
|
+
* that matched nothing, a glob with a typo, a directory that was never built —
|
|
79
|
+
* all arrive as the same document, and all of them are a gate that asserted
|
|
80
|
+
* nothing. The message is where a site names the likely causes and the remedy.
|
|
81
|
+
*
|
|
82
|
+
* 🪤 **One report per situation.** A run that already carries a run-integrity
|
|
83
|
+
* finding (an interrupted run, say) has the more specific of the two claims on
|
|
84
|
+
* the document, so this stands down rather than handing the operator two reports
|
|
85
|
+
* about one situation. Nothing weaker is needed: every such finding is `error`,
|
|
86
|
+
* so the status is already refused.
|
|
87
|
+
*
|
|
88
|
+
* @param denominator - How many things the run actually checked
|
|
89
|
+
* @param issues - What the run already found, so an existing run-integrity
|
|
90
|
+
* report is not duplicated
|
|
91
|
+
* @param message - The site's own account of what did not run and what to do;
|
|
92
|
+
* evaluated lazily so a populated run pays nothing for it
|
|
93
|
+
* @returns The one finding, or nothing when at least one thing was checked
|
|
94
|
+
*/
|
|
95
|
+
export function nothingCheckedFinding(denominator, issues, message) {
|
|
96
|
+
if (denominator > 0)
|
|
97
|
+
return [];
|
|
98
|
+
if (issues.some((issue) => issue.code === RUN_INTEGRITY_CODE))
|
|
99
|
+
return [];
|
|
100
|
+
return [runIntegrityFinding(message())];
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=run-integrity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-integrity.js","sourceRoot":"","sources":["../../src/utils/run-integrity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAIH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAE1D;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAClE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,qBAAqB,CACnC,WAAmB,EACnB,MAAkC,EAClC,OAAqB;IAErB,IAAI,WAAW,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC;QAAE,OAAO,EAAE,CAAC;IACzE,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -26,6 +26,33 @@ import type { SkillsConfig } from '@vibe-agent-toolkit/resources';
|
|
|
26
26
|
* the build did — the exact class of divergence this module exists to prevent.
|
|
27
27
|
*/
|
|
28
28
|
export declare function mergeSkillPackagingConfig(defaults: Record<string, unknown> | undefined, perSkillOverrides: Record<string, unknown> | undefined): SkillPackagingConfig;
|
|
29
|
+
/**
|
|
30
|
+
* Is this skill distributed through the POOL (`dist/skills/<name>`)?
|
|
31
|
+
*
|
|
32
|
+
* THE predicate for `publish`, read off the MERGED config so that
|
|
33
|
+
* `skills.defaults.publish` counts; every lane that decides whether a pool bundle
|
|
34
|
+
* is built, expected or assigned asks this and nothing else. The consistency
|
|
35
|
+
* check used to read `skills.config.<name>.publish` alone, so a project-wide
|
|
36
|
+
* `skills.defaults.publish: false` parsed and changed nothing — and `vat build`
|
|
37
|
+
* and `vat verify` never read the flag at all: two contracts for one key.
|
|
38
|
+
*
|
|
39
|
+
* `publish: false` names an IN-PLACE skill: validated at source by `vat validate`
|
|
40
|
+
* / `vat skills validate`, never bundled by `vat build`, never expected by
|
|
41
|
+
* `vat verify`. Default `true`.
|
|
42
|
+
*
|
|
43
|
+
* `publish` scopes the POOL only. A plugin-local skill (one under a plugin's
|
|
44
|
+
* `skills/` directory — see `computeTreeCopiedSkillLocations`) ships with its
|
|
45
|
+
* plugin by LOCATION: the claude phase packages it and verify expects it whatever
|
|
46
|
+
* this returns. A skill that is both discovered by `skills.include` and
|
|
47
|
+
* plugin-local therefore skips the pool with `publish: false` and still ships in
|
|
48
|
+
* its plugin.
|
|
49
|
+
*
|
|
50
|
+
* `publish` is a distribution flag, not a packaging knob — the packaging
|
|
51
|
+
* validator never reads it — so it is declared on the project-config schema and
|
|
52
|
+
* carried through the merge generically like every other key; it is read here
|
|
53
|
+
* off the merged record rather than off a typed field of the validator's config.
|
|
54
|
+
*/
|
|
55
|
+
export declare function isSkillPublished(packaging: SkillPackagingConfig): boolean;
|
|
29
56
|
/**
|
|
30
57
|
* The PROJECT's declared eval suites: one {@link DeclaredEvalSuite} per discovered
|
|
31
58
|
* skill, from the same discovery + merge every lane already runs.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-packaging-config.d.ts","sourceRoot":"","sources":["../../src/utils/skill-packaging-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAoB,KAAK,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACvH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGlE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACrD,oBAAoB,CAmBtB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,YAAY,GAAG,SAAS,EACtC,UAAU,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9D,iBAAiB,EAAE,CAUrB"}
|
|
1
|
+
{"version":3,"file":"skill-packaging-config.d.ts","sourceRoot":"","sources":["../../src/utils/skill-packaging-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAoB,KAAK,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACvH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGlE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACrD,oBAAoB,CAmBtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,oBAAoB,GAAG,OAAO,CAGzE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,YAAY,GAAG,SAAS,EACtC,UAAU,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9D,iBAAiB,EAAE,CAUrB"}
|
|
@@ -43,6 +43,36 @@ export function mergeSkillPackagingConfig(defaults, perSkillOverrides) {
|
|
|
43
43
|
}
|
|
44
44
|
return packagingConfig;
|
|
45
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Is this skill distributed through the POOL (`dist/skills/<name>`)?
|
|
48
|
+
*
|
|
49
|
+
* THE predicate for `publish`, read off the MERGED config so that
|
|
50
|
+
* `skills.defaults.publish` counts; every lane that decides whether a pool bundle
|
|
51
|
+
* is built, expected or assigned asks this and nothing else. The consistency
|
|
52
|
+
* check used to read `skills.config.<name>.publish` alone, so a project-wide
|
|
53
|
+
* `skills.defaults.publish: false` parsed and changed nothing — and `vat build`
|
|
54
|
+
* and `vat verify` never read the flag at all: two contracts for one key.
|
|
55
|
+
*
|
|
56
|
+
* `publish: false` names an IN-PLACE skill: validated at source by `vat validate`
|
|
57
|
+
* / `vat skills validate`, never bundled by `vat build`, never expected by
|
|
58
|
+
* `vat verify`. Default `true`.
|
|
59
|
+
*
|
|
60
|
+
* `publish` scopes the POOL only. A plugin-local skill (one under a plugin's
|
|
61
|
+
* `skills/` directory — see `computeTreeCopiedSkillLocations`) ships with its
|
|
62
|
+
* plugin by LOCATION: the claude phase packages it and verify expects it whatever
|
|
63
|
+
* this returns. A skill that is both discovered by `skills.include` and
|
|
64
|
+
* plugin-local therefore skips the pool with `publish: false` and still ships in
|
|
65
|
+
* its plugin.
|
|
66
|
+
*
|
|
67
|
+
* `publish` is a distribution flag, not a packaging knob — the packaging
|
|
68
|
+
* validator never reads it — so it is declared on the project-config schema and
|
|
69
|
+
* carried through the merge generically like every other key; it is read here
|
|
70
|
+
* off the merged record rather than off a typed field of the validator's config.
|
|
71
|
+
*/
|
|
72
|
+
export function isSkillPublished(packaging) {
|
|
73
|
+
const { publish } = packaging;
|
|
74
|
+
return publish ?? true;
|
|
75
|
+
}
|
|
46
76
|
/**
|
|
47
77
|
* The PROJECT's declared eval suites: one {@link DeclaredEvalSuite} per discovered
|
|
48
78
|
* skill, from the same discovery + merge every lane already runs.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-packaging-config.js","sourceRoot":"","sources":["../../src/utils/skill-packaging-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAqD,MAAM,kCAAkC,CAAC;AAEvH,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAA6C,EAC7C,iBAAsD;IAEtD,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACrD,MAAM,eAAe,GAAyB,EAAE,CAAC;IACjD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACvB,eAA2C,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,EAAE,CAAC,OAAO,CAAkC,CAAC;IAC1E,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC,OAAO,CAAkC,CAAC;IACpF,IAAI,YAAY,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAC9D,MAAM,WAAW,GAAG,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAClE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,eAAe,CAAC,KAAK,GAAG,WAAW,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,yBAAyB,CACvC,YAAsC,EACtC,UAA+D;IAE/D,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1C,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC;IAC1D,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC;QAClD,MAAM,EAAE,yBAAyB,CAC/B,QAA+C,EAC/C,cAAc,EAAE,CAAC,KAAK,CAAC,IAAI,CAAwC,CACpE;KACF,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"skill-packaging-config.js","sourceRoot":"","sources":["../../src/utils/skill-packaging-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAqD,MAAM,kCAAkC,CAAC;AAEvH,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAA6C,EAC7C,iBAAsD;IAEtD,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACrD,MAAM,eAAe,GAAyB,EAAE,CAAC;IACjD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACvB,eAA2C,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,EAAE,CAAC,OAAO,CAAkC,CAAC;IAC1E,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC,OAAO,CAAkC,CAAC;IACpF,IAAI,YAAY,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAC9D,MAAM,WAAW,GAAG,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAClE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,eAAe,CAAC,KAAK,GAAG,WAAW,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAA+B;IAC9D,MAAM,EAAE,OAAO,EAAE,GAAG,SAAkC,CAAC;IACvD,OAAO,OAAO,IAAI,IAAI,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,yBAAyB,CACvC,YAAsC,EACtC,UAA+D;IAE/D,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1C,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC;IAC1D,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC;QAClD,MAAM,EAAE,yBAAyB,CAC/B,QAA+C,EAC/C,cAAc,EAAE,CAAC,KAAK,CAAC,IAAI,CAAwC,CACpE;KACF,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter for the one `ExperimentalWarning` `node:sqlite` emits at load.
|
|
3
|
+
*
|
|
4
|
+
* ## Whose obligation this is, and why it lands here
|
|
5
|
+
*
|
|
6
|
+
* `@vibe-agent-toolkit/projection-sqlite` imports `node:sqlite`, which loads
|
|
7
|
+
* without a flag from Node 22.13.0 — but **unflagged is not silent**: Node
|
|
8
|
+
* still emits one `ExperimentalWarning` per process. That package deliberately
|
|
9
|
+
* does not suppress it, and says why in its own header: a blanket
|
|
10
|
+
* `NODE_NO_WARNINGS` would hide real ones. It assigns the work instead —
|
|
11
|
+
* *"any caller that turns this backend on by default has to filter that one
|
|
12
|
+
* warning by name at its own boundary."*
|
|
13
|
+
*
|
|
14
|
+
* The CLI is that caller. `openEphemeralQueryStore()` is the query lane's
|
|
15
|
+
* fallback when no store is selected, which is the default, so a user running
|
|
16
|
+
* `vat resources query` gets the warning on a perfectly ordinary run with no
|
|
17
|
+
* way to silence it short of silencing everything.
|
|
18
|
+
*
|
|
19
|
+
* Measured on Node v24.13.1 against the built CLI, before this filter existed:
|
|
20
|
+
*
|
|
21
|
+
* | Command | `ExperimentalWarning`s printed |
|
|
22
|
+
* |---|---|
|
|
23
|
+
* | `vat resources query "SELECT …"` | **1** |
|
|
24
|
+
* | `vat resources check`, no checks declared | **0** |
|
|
25
|
+
*
|
|
26
|
+
* ⚠️ That second row corrects a claim in `projection-store.ts`, which says
|
|
27
|
+
* `node:sqlite` is required "on every default run of those two commands".
|
|
28
|
+
* True of `query`; too strong for `check`, which never opens a store when the
|
|
29
|
+
* project declares no checks for it to evaluate. The obligation is real either
|
|
30
|
+
* way — it just fires on one command rather than two.
|
|
31
|
+
*
|
|
32
|
+
* ## Why the predicate is deliberately narrow
|
|
33
|
+
*
|
|
34
|
+
* The failure being avoided is not "a warning printed"; it is "a warning
|
|
35
|
+
* suppressed that someone needed to see". So the match requires BOTH the
|
|
36
|
+
* `ExperimentalWarning` type and SQLite's own message, and every near miss —
|
|
37
|
+
* another experimental builtin, a `DeprecationWarning` that mentions SQLite, an
|
|
38
|
+
* untyped string — is passed straight through. The test suite spends most of
|
|
39
|
+
* its assertions on what this does *not* swallow, because that is the property
|
|
40
|
+
* worth defending.
|
|
41
|
+
*
|
|
42
|
+
* ⛔ Do not widen this to "any ExperimentalWarning". The next experimental
|
|
43
|
+
* builtin VAT starts loading is one a maintainer should be told about.
|
|
44
|
+
*/
|
|
45
|
+
/**
|
|
46
|
+
* Does this warning look like the `node:sqlite` load warning, and nothing else?
|
|
47
|
+
*
|
|
48
|
+
* @param warning - The warning value `process.emitWarning` was called with
|
|
49
|
+
* @param type - The `type` argument, when the caller passed a bare string
|
|
50
|
+
* @returns `true` only for SQLite's experimental-load warning
|
|
51
|
+
*/
|
|
52
|
+
export declare function isSqliteExperimentalWarning(warning: unknown, type?: unknown): boolean;
|
|
53
|
+
/** Restores the emitter this filter replaced. */
|
|
54
|
+
export type RestoreWarningEmitter = () => void;
|
|
55
|
+
/**
|
|
56
|
+
* Wrap `process.emitWarning` so SQLite's load warning is dropped and every
|
|
57
|
+
* other warning is emitted unchanged.
|
|
58
|
+
*
|
|
59
|
+
* Patching the emitter is what makes this filter *by name*. The alternatives
|
|
60
|
+
* are both worse: `NODE_NO_WARNINGS` is global and hides real warnings, and
|
|
61
|
+
* replacing the `'warning'` listener means re-implementing Node's default
|
|
62
|
+
* formatting, which then drifts from it silently.
|
|
63
|
+
*
|
|
64
|
+
* @param host - The process-like object to patch; injected so the behaviour is
|
|
65
|
+
* testable without mutating the real process
|
|
66
|
+
* @returns A function restoring the previous emitter
|
|
67
|
+
*/
|
|
68
|
+
export declare function installSqliteWarningFilter(host?: Pick<NodeJS.Process, 'emitWarning'>): RestoreWarningEmitter;
|
|
69
|
+
//# sourceMappingURL=sqlite-experimental-warning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-experimental-warning.d.ts","sourceRoot":"","sources":["../../src/utils/sqlite-experimental-warning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAQH;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAOrF;AAED,iDAAiD;AACjD,MAAM,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC;AAwC/C;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,GAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAW,GAClD,qBAAqB,CAwBvB"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter for the one `ExperimentalWarning` `node:sqlite` emits at load.
|
|
3
|
+
*
|
|
4
|
+
* ## Whose obligation this is, and why it lands here
|
|
5
|
+
*
|
|
6
|
+
* `@vibe-agent-toolkit/projection-sqlite` imports `node:sqlite`, which loads
|
|
7
|
+
* without a flag from Node 22.13.0 — but **unflagged is not silent**: Node
|
|
8
|
+
* still emits one `ExperimentalWarning` per process. That package deliberately
|
|
9
|
+
* does not suppress it, and says why in its own header: a blanket
|
|
10
|
+
* `NODE_NO_WARNINGS` would hide real ones. It assigns the work instead —
|
|
11
|
+
* *"any caller that turns this backend on by default has to filter that one
|
|
12
|
+
* warning by name at its own boundary."*
|
|
13
|
+
*
|
|
14
|
+
* The CLI is that caller. `openEphemeralQueryStore()` is the query lane's
|
|
15
|
+
* fallback when no store is selected, which is the default, so a user running
|
|
16
|
+
* `vat resources query` gets the warning on a perfectly ordinary run with no
|
|
17
|
+
* way to silence it short of silencing everything.
|
|
18
|
+
*
|
|
19
|
+
* Measured on Node v24.13.1 against the built CLI, before this filter existed:
|
|
20
|
+
*
|
|
21
|
+
* | Command | `ExperimentalWarning`s printed |
|
|
22
|
+
* |---|---|
|
|
23
|
+
* | `vat resources query "SELECT …"` | **1** |
|
|
24
|
+
* | `vat resources check`, no checks declared | **0** |
|
|
25
|
+
*
|
|
26
|
+
* ⚠️ That second row corrects a claim in `projection-store.ts`, which says
|
|
27
|
+
* `node:sqlite` is required "on every default run of those two commands".
|
|
28
|
+
* True of `query`; too strong for `check`, which never opens a store when the
|
|
29
|
+
* project declares no checks for it to evaluate. The obligation is real either
|
|
30
|
+
* way — it just fires on one command rather than two.
|
|
31
|
+
*
|
|
32
|
+
* ## Why the predicate is deliberately narrow
|
|
33
|
+
*
|
|
34
|
+
* The failure being avoided is not "a warning printed"; it is "a warning
|
|
35
|
+
* suppressed that someone needed to see". So the match requires BOTH the
|
|
36
|
+
* `ExperimentalWarning` type and SQLite's own message, and every near miss —
|
|
37
|
+
* another experimental builtin, a `DeprecationWarning` that mentions SQLite, an
|
|
38
|
+
* untyped string — is passed straight through. The test suite spends most of
|
|
39
|
+
* its assertions on what this does *not* swallow, because that is the property
|
|
40
|
+
* worth defending.
|
|
41
|
+
*
|
|
42
|
+
* ⛔ Do not widen this to "any ExperimentalWarning". The next experimental
|
|
43
|
+
* builtin VAT starts loading is one a maintainer should be told about.
|
|
44
|
+
*/
|
|
45
|
+
/** Node's own text for the SQLite warning, matched as a substring. */
|
|
46
|
+
const SQLITE_WARNING_FRAGMENT = 'SQLite is an experimental feature';
|
|
47
|
+
/** The warning type Node tags it with. */
|
|
48
|
+
const EXPERIMENTAL_WARNING_NAME = 'ExperimentalWarning';
|
|
49
|
+
/**
|
|
50
|
+
* Does this warning look like the `node:sqlite` load warning, and nothing else?
|
|
51
|
+
*
|
|
52
|
+
* @param warning - The warning value `process.emitWarning` was called with
|
|
53
|
+
* @param type - The `type` argument, when the caller passed a bare string
|
|
54
|
+
* @returns `true` only for SQLite's experimental-load warning
|
|
55
|
+
*/
|
|
56
|
+
export function isSqliteExperimentalWarning(warning, type) {
|
|
57
|
+
const isError = warning instanceof Error;
|
|
58
|
+
const name = isError ? warning.name : type;
|
|
59
|
+
if (name !== EXPERIMENTAL_WARNING_NAME)
|
|
60
|
+
return false;
|
|
61
|
+
const message = isError ? warning.message : warning;
|
|
62
|
+
return typeof message === 'string' && message.includes(SQLITE_WARNING_FRAGMENT);
|
|
63
|
+
}
|
|
64
|
+
/** Marks a function as one of this module's filters, so a chain can be walked. */
|
|
65
|
+
const FILTER_BRAND = Symbol('sqliteWarningFilter');
|
|
66
|
+
/** Is this one of our filters, rather than the host's own emitter? */
|
|
67
|
+
function isFilterEmitter(value) {
|
|
68
|
+
return typeof value === 'function' && FILTER_BRAND in value;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Wrap `process.emitWarning` so SQLite's load warning is dropped and every
|
|
72
|
+
* other warning is emitted unchanged.
|
|
73
|
+
*
|
|
74
|
+
* Patching the emitter is what makes this filter *by name*. The alternatives
|
|
75
|
+
* are both worse: `NODE_NO_WARNINGS` is global and hides real warnings, and
|
|
76
|
+
* replacing the `'warning'` listener means re-implementing Node's default
|
|
77
|
+
* formatting, which then drifts from it silently.
|
|
78
|
+
*
|
|
79
|
+
* @param host - The process-like object to patch; injected so the behaviour is
|
|
80
|
+
* testable without mutating the real process
|
|
81
|
+
* @returns A function restoring the previous emitter
|
|
82
|
+
*/
|
|
83
|
+
export function installSqliteWarningFilter(host = process) {
|
|
84
|
+
const filtered = ((...args) => {
|
|
85
|
+
if (!filtered.retired && isSqliteExperimentalWarning(args[0], args[1]))
|
|
86
|
+
return;
|
|
87
|
+
// Read through the node, not through a captured local: `previous` is
|
|
88
|
+
// rewritten when a filter below this one is spliced out.
|
|
89
|
+
Reflect.apply(filtered.previous, host, args);
|
|
90
|
+
});
|
|
91
|
+
// Stored UNBOUND so chain identity survives — a `.bind()` here would make each
|
|
92
|
+
// filter delegate to a fresh wrapper, and no restore could then recognise the
|
|
93
|
+
// node it needs to splice out.
|
|
94
|
+
filtered.previous = host.emitWarning;
|
|
95
|
+
filtered.retired = false;
|
|
96
|
+
Object.defineProperty(filtered, FILTER_BRAND, { value: true });
|
|
97
|
+
host.emitWarning = filtered;
|
|
98
|
+
return () => {
|
|
99
|
+
// Retire FIRST, and unconditionally. Splicing is the tidy outcome; ceasing
|
|
100
|
+
// to filter is the one the caller actually asked for, and it is the only one
|
|
101
|
+
// that can always be delivered.
|
|
102
|
+
filtered.retired = true;
|
|
103
|
+
removeFromChain(host, filtered);
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Take one filter out of the emitter chain, wherever it currently sits.
|
|
108
|
+
*
|
|
109
|
+
* Doing nothing when the filter is already gone is the correct answer, not a
|
|
110
|
+
* swallowed failure: a second `restore()` call, or a host whose emitter was
|
|
111
|
+
* replaced wholesale by something else, both mean this filter is no longer
|
|
112
|
+
* reached at all — which is exactly what the caller asked for.
|
|
113
|
+
*
|
|
114
|
+
* ⚠️ **There is a third case, and it is NOT covered here.** The walk can only
|
|
115
|
+
* step through nodes carrying {@link FILTER_BRAND}, so any *delegating* wrapper
|
|
116
|
+
* installed above us — an APM shim, another library's warning filter, an
|
|
117
|
+
* unrestored spy — ends the walk with our node still in the chain. That is not
|
|
118
|
+
* an oversight that can be fixed: the foreign wrapper holds its link to the
|
|
119
|
+
* emitter beneath it in a closure, and nothing outside it can rewrite that link.
|
|
120
|
+
* Splicing through it is genuinely impossible, not merely unimplemented.
|
|
121
|
+
*
|
|
122
|
+
* So the leak is closed at the other end: `restore()` sets `retired` before
|
|
123
|
+
* calling this, and a retired node forwards everything. The chain may keep a
|
|
124
|
+
* dead link in it — harmless — but no unreachable filter goes on eating the
|
|
125
|
+
* warning it was installed to hide, which was the real defect (a
|
|
126
|
+
* `vat resources query` run under an APM agent would have lost SQLite's
|
|
127
|
+
* experimental warning permanently, with no way to get it back short of
|
|
128
|
+
* restarting the process).
|
|
129
|
+
*/
|
|
130
|
+
function removeFromChain(host, filter) {
|
|
131
|
+
if (host.emitWarning === filter) {
|
|
132
|
+
host.emitWarning = filter.previous;
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
let node = host.emitWarning;
|
|
136
|
+
while (isFilterEmitter(node)) {
|
|
137
|
+
if (node.previous === filter) {
|
|
138
|
+
node.previous = filter.previous;
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
node = node.previous;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=sqlite-experimental-warning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-experimental-warning.js","sourceRoot":"","sources":["../../src/utils/sqlite-experimental-warning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,sEAAsE;AACtE,MAAM,uBAAuB,GAAG,mCAAmC,CAAC;AAEpE,0CAA0C;AAC1C,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAgB,EAAE,IAAc;IAC1E,MAAM,OAAO,GAAG,OAAO,YAAY,KAAK,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,IAAI,IAAI,KAAK,yBAAyB;QAAE,OAAO,KAAK,CAAC;IAErD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACpD,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAClF,CAAC;AAQD,kFAAkF;AAClF,MAAM,YAAY,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AA6BnD,sEAAsE;AACtE,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,UAAU,IAAI,YAAY,IAAI,KAAK,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAA4C,OAAO;IAEnD,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAe,EAAQ,EAAE;QAC7C,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO;QAC/E,qEAAqE;QACrE,yDAAyD;QACzD,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAkB,CAAC;IAEpB,+EAA+E;IAC/E,8EAA8E;IAC9E,+BAA+B;IAC/B,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,WAA0B,CAAC;IACpD,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;IACzB,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,IAAI,CAAC,WAAW,GAAG,QAAoD,CAAC;IAExE,OAAO,GAAG,EAAE;QACV,2EAA2E;QAC3E,6EAA6E;QAC7E,gCAAgC;QAChC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAS,eAAe,CAAC,IAAyC,EAAE,MAAqB;IACvF,IAAK,IAAI,CAAC,WAAuB,KAAK,MAAM,EAAE,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,QAAyC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,IAAI,IAAI,GAAY,IAAI,CAAC,WAAW,CAAC;IACrC,OAAO,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,QAAQ,KAAM,MAAiC,EAAE,CAAC;YACzD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAChC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-redact.d.ts","sourceRoot":"","sources":["../../src/utils/url-redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"url-redact.d.ts","sourceRoot":"","sources":["../../src/utils/url-redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAaxD"}
|
package/dist/utils/url-redact.js
CHANGED
|
@@ -26,13 +26,11 @@
|
|
|
26
26
|
* @returns The input with any URL-format credentials removed.
|
|
27
27
|
*/
|
|
28
28
|
export function redactUrlCredentials(url) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
29
|
+
// Not a URL: nothing to redact. Asked as a question rather than caught as a
|
|
30
|
+
// throw, so the only thing that reads as "not a URL" is exactly that.
|
|
31
|
+
if (!URL.canParse(url))
|
|
34
32
|
return url;
|
|
35
|
-
|
|
33
|
+
const parsed = new URL(url);
|
|
36
34
|
if (parsed.username === '' && parsed.password === '') {
|
|
37
35
|
return url;
|
|
38
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-redact.js","sourceRoot":"","sources":["../../src/utils/url-redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,
|
|
1
|
+
{"version":3,"file":"url-redact.js","sourceRoot":"","sources":["../../src/utils/url-redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,4EAA4E;IAC5E,sEAAsE;IACtE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAE5B,IAAI,MAAM,CAAC,QAAQ,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;QACrD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Scan user-level Claude directories for plugins, skills, and marketplaces.
|
|
5
5
|
*/
|
|
6
6
|
import { type ScanResult } from '@vibe-agent-toolkit/discovery';
|
|
7
|
+
import type { DirectoryRefusal } from '@vibe-agent-toolkit/utils/crawl';
|
|
7
8
|
/**
|
|
8
9
|
* Scan user-level Claude directories for skills and plugins
|
|
9
10
|
*
|
|
@@ -27,5 +28,12 @@ export declare function scanUserContext(): Promise<{
|
|
|
27
28
|
plugins: ScanResult[];
|
|
28
29
|
skills: ScanResult[];
|
|
29
30
|
marketplaces: ScanResult[];
|
|
31
|
+
/**
|
|
32
|
+
* Directories under either tree that could not be listed — carried through
|
|
33
|
+
* from `ScanSummary.unreadable`, because a `~/.claude/plugins` with one
|
|
34
|
+
* root-owned directory is ordinary and every caller must say what it could
|
|
35
|
+
* not see rather than list fewer skills.
|
|
36
|
+
*/
|
|
37
|
+
unreadable: DirectoryRefusal[];
|
|
30
38
|
}>;
|
|
31
39
|
//# sourceMappingURL=user-context-scanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-context-scanner.d.ts","sourceRoot":"","sources":["../../src/utils/user-context-scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"user-context-scanner.d.ts","sourceRoot":"","sources":["../../src/utils/user-context-scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGxE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAC/C,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC,CAAC,CAqCD"}
|
|
@@ -27,9 +27,9 @@ import { scan } from '@vibe-agent-toolkit/discovery';
|
|
|
27
27
|
*/
|
|
28
28
|
export async function scanUserContext() {
|
|
29
29
|
const { pluginsDir, skillsDir } = getClaudeUserPaths();
|
|
30
|
+
const unreadable = [];
|
|
30
31
|
// Scan plugins directory (SKILL.md and .claude-plugin directories)
|
|
31
32
|
let plugins = [];
|
|
32
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- User's home directory is safe
|
|
33
33
|
if (existsSync(pluginsDir)) {
|
|
34
34
|
const pluginsScan = await scan({
|
|
35
35
|
path: pluginsDir,
|
|
@@ -37,10 +37,10 @@ export async function scanUserContext() {
|
|
|
37
37
|
include: ['**/SKILL.md', '**/.claude-plugin/**'],
|
|
38
38
|
});
|
|
39
39
|
plugins = pluginsScan.results;
|
|
40
|
+
unreadable.push(...pluginsScan.unreadable);
|
|
40
41
|
}
|
|
41
42
|
// Scan skills directory (SKILL.md files)
|
|
42
43
|
let skills = [];
|
|
43
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- User's home directory is safe
|
|
44
44
|
if (existsSync(skillsDir)) {
|
|
45
45
|
const skillsScan = await scan({
|
|
46
46
|
path: skillsDir,
|
|
@@ -48,6 +48,7 @@ export async function scanUserContext() {
|
|
|
48
48
|
include: ['**/SKILL.md'],
|
|
49
49
|
});
|
|
50
50
|
skills = skillsScan.results;
|
|
51
|
+
unreadable.push(...skillsScan.unreadable);
|
|
51
52
|
}
|
|
52
53
|
// Marketplaces reserved for future use
|
|
53
54
|
const marketplaces = [];
|
|
@@ -55,6 +56,7 @@ export async function scanUserContext() {
|
|
|
55
56
|
plugins,
|
|
56
57
|
skills,
|
|
57
58
|
marketplaces,
|
|
59
|
+
unreadable,
|
|
58
60
|
};
|
|
59
61
|
}
|
|
60
62
|
//# sourceMappingURL=user-context-scanner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-context-scanner.js","sourceRoot":"","sources":["../../src/utils/user-context-scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAmB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"user-context-scanner.js","sourceRoot":"","sources":["../../src/utils/user-context-scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAmB,MAAM,+BAA+B,CAAC;AAItE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IAYnC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,kBAAkB,EAAE,CAAC;IACvD,MAAM,UAAU,GAAuB,EAAE,CAAC;IAE1C,mEAAmE;IACnE,IAAI,OAAO,GAAiB,EAAE,CAAC;IAC/B,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;YAC7B,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,CAAC,aAAa,EAAE,sBAAsB,CAAC;SACjD,CAAC,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;QAC9B,UAAU,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,yCAAyC;IACzC,IAAI,MAAM,GAAiB,EAAE,CAAC;IAC9B,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC;YAC5B,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,CAAC,aAAa,CAAC;SACzB,CAAC,CAAC;QACH,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;QAC5B,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,uCAAuC;IACvC,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,OAAO;QACL,OAAO;QACP,MAAM;QACN,YAAY;QACZ,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-help-files.d.ts","sourceRoot":"","sources":["../../src/utils/validate-help-files.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"validate-help-files.d.ts","sourceRoot":"","sources":["../../src/utils/validate-help-files.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4CH;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAgDxC"}
|
|
@@ -7,8 +7,10 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { existsSync, readdirSync } from 'node:fs';
|
|
9
9
|
import { dirname } from 'node:path';
|
|
10
|
-
import { fileURLToPath
|
|
10
|
+
import { fileURLToPath } from 'node:url';
|
|
11
|
+
import { ExitCode } from '@vibe-agent-toolkit/schema';
|
|
11
12
|
import { safePath } from '@vibe-agent-toolkit/utils';
|
|
13
|
+
import { isEntrypoint } from '@vibe-agent-toolkit/utils/process';
|
|
12
14
|
/**
|
|
13
15
|
* Files `loadVerboseHelp()` is actually asked for by a command.
|
|
14
16
|
*
|
|
@@ -54,7 +56,6 @@ export function validateHelpFiles() {
|
|
|
54
56
|
const missingFiles = [];
|
|
55
57
|
for (const filename of REQUIRED_HELP_FILES) {
|
|
56
58
|
const helpPath = safePath.join(docsDir, filename);
|
|
57
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- path is constructed from known safe components
|
|
58
59
|
if (!existsSync(helpPath)) {
|
|
59
60
|
missingFiles.push(filename);
|
|
60
61
|
}
|
|
@@ -67,7 +68,6 @@ export function validateHelpFiles() {
|
|
|
67
68
|
}
|
|
68
69
|
// Reverse direction: a doc nobody serves and nobody classified.
|
|
69
70
|
const required = new Set(REQUIRED_HELP_FILES);
|
|
70
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- docsDir is derived from this module's own location
|
|
71
71
|
const present = readdirSync(docsDir).filter(f => f.endsWith('.md'));
|
|
72
72
|
const unclassified = present.filter(f => !required.has(f) && !PROSE_ONLY_HELP_FILES.has(f));
|
|
73
73
|
if (unclassified.length > 0) {
|
|
@@ -89,17 +89,23 @@ export function validateHelpFiles() {
|
|
|
89
89
|
/**
|
|
90
90
|
* Run validation if this file is executed directly
|
|
91
91
|
* (via tsx or node during build process)
|
|
92
|
+
*
|
|
93
|
+
* ⛔ NOT `import.meta.url === pathToFileURL(process.argv[1]).href`, which is what
|
|
94
|
+
* this used to be. That compare has no realpath pass, so it is false whenever
|
|
95
|
+
* the build reaches this script through a symlink — and a build-time validator
|
|
96
|
+
* whose guard is false does not fail the build, it exits 0 having validated
|
|
97
|
+
* nothing, which is the exact opposite of the "fail fast" this file exists for.
|
|
92
98
|
*/
|
|
93
|
-
if (
|
|
99
|
+
if (isEntrypoint(import.meta.url)) {
|
|
94
100
|
try {
|
|
95
101
|
validateHelpFiles();
|
|
96
102
|
console.log('✓ All required help documentation files exist');
|
|
97
|
-
process.exit(
|
|
103
|
+
process.exit(ExitCode.OK);
|
|
98
104
|
}
|
|
99
105
|
catch (error) {
|
|
100
106
|
console.error('✗ Help file validation failed:');
|
|
101
107
|
console.error(error.message);
|
|
102
|
-
process.exit(
|
|
108
|
+
process.exit(ExitCode.FINDINGS);
|
|
103
109
|
}
|
|
104
110
|
}
|
|
105
111
|
//# sourceMappingURL=validate-help-files.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-help-files.js","sourceRoot":"","sources":["../../src/utils/validate-help-files.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"validate-help-files.js","sourceRoot":"","sources":["../../src/utils/validate-help-files.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,mBAAmB,GAAG;IAC1B,UAAU,EAAO,iDAAiD;IAClE,cAAc,EAAG,kEAAkE;IACnF,QAAQ,EAAS,sDAAsD;IACvE,UAAU,EAAO,0DAA0D;CACnE,CAAC;AAEX;;;;;;;;;;GAUG;AACH,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,UAAU;IACV,WAAW;IACX,QAAQ;IACR,WAAW;IACX,eAAe;CAChB,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAEnD,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,+CAA+C,QAAQ,MAAM;YAC7D,uEAAuE;YACvE,8CAA8C,CAC/C,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,mBAAmB,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5F,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,2CAA2C,QAAQ,MAAM;YACzD,yEAAyE;YACzE,sEAAsE;YACtE,2EAA2E;YAC3E,8EAA8E;YAC9E,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,MAAM,iBAAiB,GAAG,CAAC,GAAG,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,2DAA2D;YAC3D,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACtD,+BAA+B,CAChC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,iBAAiB,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,OAAO,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat-bin-path.d.ts","sourceRoot":"","sources":["../../src/utils/vat-bin-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAUH;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"vat-bin-path.d.ts","sourceRoot":"","sources":["../../src/utils/vat-bin-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAUH;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C"}
|
|
@@ -40,7 +40,6 @@ const HERE = dirname(fileURLToPath(import.meta.url));
|
|
|
40
40
|
export function resolveVatBinPath() {
|
|
41
41
|
// Compiled tree: packages/cli/dist/utils/vat-bin-path.js → packages/cli/dist/bin.js
|
|
42
42
|
const compiled = safePath.resolve(HERE, '../bin.js');
|
|
43
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- internal path
|
|
44
43
|
if (existsSync(compiled))
|
|
45
44
|
return compiled;
|
|
46
45
|
// Source tree (vitest): packages/cli/src/utils/vat-bin-path.ts → packages/cli/dist/bin.js
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat-bin-path.js","sourceRoot":"","sources":["../../src/utils/vat-bin-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAErD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,oFAAoF;IACpF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrD,
|
|
1
|
+
{"version":3,"file":"vat-bin-path.js","sourceRoot":"","sources":["../../src/utils/vat-bin-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAErD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,oFAAoF;IACpF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC1C,0FAA0F;IAC1F,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AACrD,CAAC"}
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,eAAO,MAAM,OAAO,EAAE,MAA4B,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAuBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,cAAc,GAAG,IAAI,EAC9B,UAAU,EAAE,MAAM,GACjB,MAAM,CAER"}
|