@vibe-agent-toolkit/cli 0.2.0-rc.7 → 0.2.0-rc.9
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 +0 -1
- 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 +5 -2
- package/dist/bin.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 +72 -23
- package/dist/commands/ard/emit.d.ts.map +1 -1
- package/dist/commands/ard/emit.js +109 -56
- package/dist/commands/ard/emit.js.map +1 -1
- package/dist/commands/ard/index.d.ts +1 -1
- package/dist/commands/ard/index.d.ts.map +1 -1
- package/dist/commands/ard/index.js +4 -3
- package/dist/commands/ard/index.js.map +1 -1
- 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/provenance.d.ts.map +1 -1
- package/dist/commands/audit/provenance.js +4 -3
- package/dist/commands/audit/provenance.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 +16 -14
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +304 -389
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +25 -24
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/cache/clear.d.ts +17 -3
- package/dist/commands/cache/clear.d.ts.map +1 -1
- package/dist/commands/cache/clear.js +34 -13
- package/dist/commands/cache/clear.js.map +1 -1
- package/dist/commands/cache/index.d.ts.map +1 -1
- package/dist/commands/cache/index.js +19 -10
- package/dist/commands/cache/index.js.map +1 -1
- package/dist/commands/claude/context.d.ts +2 -2
- package/dist/commands/claude/context.d.ts.map +1 -1
- package/dist/commands/claude/context.js +7 -6
- package/dist/commands/claude/context.js.map +1 -1
- package/dist/commands/claude/index.d.ts +12 -11
- package/dist/commands/claude/index.d.ts.map +1 -1
- package/dist/commands/claude/index.js +14 -16
- package/dist/commands/claude/index.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 +22 -12
- 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.map +1 -1
- package/dist/commands/claude/marketplace/validate.js +26 -16
- 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 +19 -1
- package/dist/commands/claude/org/skills.d.ts.map +1 -1
- package/dist/commands/claude/org/skills.js +147 -111
- 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.map +1 -1
- package/dist/commands/claude/plugin/build.js +23 -52
- 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 +3 -6
- 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 +2 -1
- package/dist/commands/claude/plugin/tree-copy.d.ts.map +1 -1
- package/dist/commands/claude/plugin/tree-copy.js +15 -14
- 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 +17 -15
- package/dist/commands/consistency-check.d.ts.map +1 -1
- package/dist/commands/consistency-check.js +149 -104
- package/dist/commands/consistency-check.js.map +1 -1
- package/dist/commands/corpus/report.d.ts.map +1 -1
- package/dist/commands/corpus/report.js +1 -2
- package/dist/commands/corpus/report.js.map +1 -1
- package/dist/commands/corpus/runner.d.ts.map +1 -1
- package/dist/commands/corpus/runner.js +2 -6
- 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 -3
- 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.map +1 -1
- package/dist/commands/doctor.js +55 -37
- 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.map +1 -1
- package/dist/commands/okf/index.js +14 -2
- package/dist/commands/okf/index.js.map +1 -1
- package/dist/commands/okf/validate.d.ts +157 -48
- package/dist/commands/okf/validate.d.ts.map +1 -1
- package/dist/commands/okf/validate.js +109 -76
- package/dist/commands/okf/validate.js.map +1 -1
- package/dist/commands/phase-utils.d.ts +11 -10
- package/dist/commands/phase-utils.d.ts.map +1 -1
- package/dist/commands/phase-utils.js +30 -14
- 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.map +1 -1
- package/dist/commands/rag/index-command.js +4 -1
- package/dist/commands/rag/index-command.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 +6 -0
- package/dist/commands/resources/check-progress.d.ts.map +1 -1
- package/dist/commands/resources/check-progress.js +15 -4
- 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 +315 -205
- package/dist/commands/resources/check.d.ts.map +1 -1
- package/dist/commands/resources/check.js +368 -327
- 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 +159 -39
- package/dist/commands/resources/index.js.map +1 -1
- package/dist/commands/resources/query.d.ts +2 -2
- package/dist/commands/resources/query.d.ts.map +1 -1
- package/dist/commands/resources/query.js +24 -18
- 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 +1 -1
- package/dist/commands/resources/validate.d.ts.map +1 -1
- package/dist/commands/resources/validate.js +0 -1
- 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 +90 -60
- 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 +120 -65
- package/dist/commands/skill/test/run.js.map +1 -1
- package/dist/commands/skills/build.d.ts +83 -3
- package/dist/commands/skills/build.d.ts.map +1 -1
- package/dist/commands/skills/build.js +162 -40
- 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.map +1 -1
- package/dist/commands/skills/list.js +14 -18
- 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 +15 -13
- package/dist/commands/skills/skill-discovery.d.ts.map +1 -1
- package/dist/commands/skills/skill-discovery.js +23 -5
- 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/validate.d.ts +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +39 -14
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/verify.d.ts +17 -5
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +161 -104
- 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 +100 -0
- package/dist/report-schemas.js.map +1 -0
- package/dist/skill-resolution/classify.js +2 -2
- package/dist/skill-resolution/classify.js.map +1 -1
- package/dist/skill-resolution/resolve-skill-reference.d.ts.map +1 -1
- package/dist/skill-resolution/resolve-skill-reference.js +50 -55
- 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/claude-context-lens.d.ts +34 -0
- package/dist/utils/claude-context-lens.d.ts.map +1 -0
- package/dist/utils/claude-context-lens.js +39 -0
- package/dist/utils/claude-context-lens.js.map +1 -0
- package/dist/utils/command-error.d.ts +63 -62
- package/dist/utils/command-error.d.ts.map +1 -1
- package/dist/utils/command-error.js +80 -76
- 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/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/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.map +1 -1
- package/dist/utils/optional-backend.js +2 -1
- 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.map +1 -1
- package/dist/utils/project-root-policy.js +0 -2
- package/dist/utils/project-root-policy.js.map +1 -1
- package/dist/utils/projection-lenses.d.ts +98 -0
- package/dist/utils/projection-lenses.d.ts.map +1 -0
- package/dist/utils/projection-lenses.js +203 -0
- package/dist/utils/projection-lenses.js.map +1 -0
- package/dist/utils/projection-query.d.ts +38 -14
- package/dist/utils/projection-query.d.ts.map +1 -1
- package/dist/utils/projection-query.js +78 -17
- package/dist/utils/projection-query.js.map +1 -1
- package/dist/utils/projection-store.d.ts +61 -42
- package/dist/utils/projection-store.d.ts.map +1 -1
- package/dist/utils/projection-store.js +155 -59
- package/dist/utils/projection-store.js.map +1 -1
- package/dist/utils/relation-limits.d.ts +50 -0
- package/dist/utils/relation-limits.d.ts.map +1 -0
- package/dist/utils/relation-limits.js +50 -0
- package/dist/utils/relation-limits.js.map +1 -0
- package/dist/utils/resource-loader.js +2 -2
- package/dist/utils/resource-loader.js.map +1 -1
- package/dist/utils/skill-discovery.d.ts.map +1 -1
- package/dist/utils/skill-discovery.js +2 -1
- package/dist/utils/skill-discovery.js.map +1 -1
- package/dist/utils/skill-packaging-config.d.ts +63 -1
- package/dist/utils/skill-packaging-config.d.ts.map +1 -1
- package/dist/utils/skill-packaging-config.js +56 -1
- package/dist/utils/skill-packaging-config.js.map +1 -1
- 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.map +1 -1
- package/dist/utils/user-context-scanner.js +0 -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 +3 -4
- 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 +44 -53
- package/docs/doctor.md +1 -0
- package/docs/index.md +18 -10
- package/docs/rag.md +0 -1
- package/docs/resources.md +0 -1
- package/docs/skill-test.md +10 -9
- package/docs/skills.md +6 -7
- package/package.json +23 -28
- package/schemas/ard-emit.json +149 -0
- package/schemas/okf-validate.json +170 -0
- package/schemas/resources-check.json +229 -0
- package/schemas/skill-review.json +230 -0
- package/dist/commands/claude/budget.d.ts +0 -170
- package/dist/commands/claude/budget.d.ts.map +0 -1
- package/dist/commands/claude/budget.js +0 -464
- package/dist/commands/claude/budget.js.map +0 -1
- package/dist/utils/context-budget-issues.d.ts +0 -108
- package/dist/utils/context-budget-issues.d.ts.map +0 -1
- package/dist/utils/context-budget-issues.js +0 -280
- package/dist/utils/context-budget-issues.js.map +0 -1
|
@@ -44,12 +44,21 @@
|
|
|
44
44
|
* standard legible error, and a tree that cannot be keyed says so on stderr
|
|
45
45
|
* rather than silently declining.
|
|
46
46
|
*/
|
|
47
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
47
48
|
import { parseEnvBoolean } from '@vibe-agent-toolkit/utils';
|
|
48
|
-
import { gitTreeSnapshot, withGitSnapshotCache } from '@vibe-agent-toolkit/utils/git';
|
|
49
|
+
import { freshGitTreeSnapshot, gitTreeSnapshot, withGitSnapshotCache } from '@vibe-agent-toolkit/utils/git';
|
|
49
50
|
import { isModuleMissing, reportMissingBackend } from './optional-backend.js';
|
|
50
51
|
import { installSqliteWarningFilter } from './sqlite-experimental-warning.js';
|
|
51
52
|
/**
|
|
52
|
-
* The env var that selects a projection store for this
|
|
53
|
+
* The env var that selects — or now, DESELECTS — a projection store for this
|
|
54
|
+
* process.
|
|
55
|
+
*
|
|
56
|
+
* 🔑 **The store is on by default, so this is the escape hatch rather than the
|
|
57
|
+
* selector.** Same shape and same reason as `VAT_RESOURCES_CRAWL`: any value the
|
|
58
|
+
* off-parser does not read as false leaves the store selected, including the
|
|
59
|
+
* historical `sqlite`, so every script and lab arm that names it explicitly
|
|
60
|
+
* keeps working and keeps MEANING the same thing. See
|
|
61
|
+
* {@link PROJECTION_STORE_OFF} for the one way out.
|
|
53
62
|
*
|
|
54
63
|
* An environment switch rather than a config field, for the same reason
|
|
55
64
|
* `VAT_INVENTORY_CRAWL` and `VAT_RESOURCES_CRAWL` are: it selects which
|
|
@@ -59,40 +68,28 @@ import { installSqliteWarningFilter } from './sqlite-experimental-warning.js';
|
|
|
59
68
|
* edits the thing it measures.
|
|
60
69
|
*
|
|
61
70
|
* 🔑 It is read from the environment, and **every phase now runs in the process
|
|
62
|
-
* that read it
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* 🔑 **That sharing has a within-verb instance.** `vat build`'s two
|
|
68
|
-
* phases — `skills build` and `claude plugin build` — both reach the lane
|
|
69
|
-
* through `withResourcePopulationSource` (see `resource-loader.ts`), and both
|
|
70
|
-
* root their population at the same directory, so phase 2 reads the extent
|
|
71
|
-
* phase 1 wrote. Measured on `packages/vat-development-agents` with
|
|
72
|
-
* `VAT_CRAWL_TIMING`: with a cold store phase 1 files `builtin:filesystem`
|
|
73
|
-
* 39.2 ms and `projection-store:write` 10.1 ms, phase 2 files neither and its
|
|
74
|
-
* `resource-registry:enumerate` reads 3.6 ms against phase 1's 66.6 ms.
|
|
75
|
-
*
|
|
76
|
-
* It did NOT need the closure to emit reasons, which is what an earlier reading
|
|
77
|
-
* of this expected: the packaging lanes consume `resource_realizations` and let
|
|
78
|
-
* `walkLinkGraph` keep running on top of the registry, so the base extent alone
|
|
79
|
-
* answers them — the same shape `buildResourcePopulation` already had.
|
|
80
|
-
*
|
|
81
|
-
* The cross-INVOCATION win is unchanged and independent: `vat validate` and
|
|
82
|
-
* `vat verify` spawn a byte-identical `resources validate` child, so the second
|
|
83
|
-
* hits the store.
|
|
84
|
-
*
|
|
85
|
-
* ⚠️ One packaging enumeration is still on the walk: `vat claude plugin build`'s
|
|
86
|
-
* per-skill post-build validation, which reaches `crawlAndResolveRegistry` in
|
|
87
|
-
* `packaging-validator.ts` without a source — its `withResourcePopulationSource`
|
|
88
|
-
* bracket closes around `createProjectRegistry` and does not span the
|
|
89
|
-
* marketplace loop. `vat skills build` no longer does: it holds one bracket over
|
|
90
|
-
* the whole run, and the registry memo is keyed on the population source, so
|
|
91
|
-
* both of its registries source from the projection.
|
|
71
|
+
* that read it**, so `vat validate`'s phases cannot fail to see the selection
|
|
72
|
+
* their orchestrator did. Which lanes share a store within one verb and across
|
|
73
|
+
* invocations, with the measurements, and the ⚠️ one packaging enumeration still
|
|
74
|
+
* on the walk: `docs/architecture/resource-scanning-and-caching.md` §3.7.
|
|
92
75
|
*/
|
|
93
76
|
export const PROJECTION_STORE_ENV = 'VAT_PROJECTION_STORE';
|
|
94
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* {@link PROJECTION_STORE_ENV}'s value that names the SQLite backend. Redundant
|
|
79
|
+
* with the default now, and kept — see
|
|
80
|
+
* `docs/architecture/resource-scanning-and-caching.md` §3.7.
|
|
81
|
+
*/
|
|
95
82
|
export const PROJECTION_STORE_SQLITE = 'sqlite';
|
|
83
|
+
/**
|
|
84
|
+
* The value that turns the store OFF while leaving VAT's other caches on.
|
|
85
|
+
*
|
|
86
|
+
* Read through the same {@link parseEnvBoolean} as every other VAT switch, so
|
|
87
|
+
* `0`, `false`, `no` and `n` work too. The empty string joins them: unlike
|
|
88
|
+
* {@link PROJECTION_STORE_DIR_ENV}, where empty falls back to a default
|
|
89
|
+
* directory that means something, there is nothing else for a cleared selector
|
|
90
|
+
* to mean.
|
|
91
|
+
*/
|
|
92
|
+
export const PROJECTION_STORE_OFF = 'off';
|
|
96
93
|
/**
|
|
97
94
|
* Where the projection store's database lives, overriding the default.
|
|
98
95
|
*
|
|
@@ -148,11 +145,9 @@ const PROJECTION_STORE_BACKEND = {
|
|
|
148
145
|
/**
|
|
149
146
|
* Whether this process should read and write a projection store.
|
|
150
147
|
*
|
|
151
|
-
* **
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
* claim about cost, and a default flipped before the cost is measured on real
|
|
155
|
-
* corpora is a claim nobody checked.
|
|
148
|
+
* **On unless turned off.** It used to be the opposite; the measurement that
|
|
149
|
+
* paid for the flip, and the blob-tier bound that had to land first, are in
|
|
150
|
+
* `docs/architecture/resource-scanning-and-caching.md` §3.7.
|
|
156
151
|
*
|
|
157
152
|
* Read from the environment at each call rather than memoized at module load:
|
|
158
153
|
* `vitest.setup.js` deletes every `VAT_*` variable before any test module
|
|
@@ -161,7 +156,7 @@ const PROJECTION_STORE_BACKEND = {
|
|
|
161
156
|
*
|
|
162
157
|
* ## The two switches are AND-ed, and the second one is a veto
|
|
163
158
|
*
|
|
164
|
-
* {@link PROJECTION_STORE_ENV}
|
|
159
|
+
* {@link PROJECTION_STORE_ENV} turns off THIS cache; {@link CACHE_ENV} says
|
|
165
160
|
* whether this run caches at all. A store selected while `VAT_CACHE=0` was
|
|
166
161
|
* measured writing a 9.8 MB, 18,079-row store on this repository and hitting it
|
|
167
162
|
* on the next run — a user who asked for no cache silently got one, and
|
|
@@ -177,23 +172,33 @@ const PROJECTION_STORE_BACKEND = {
|
|
|
177
172
|
*
|
|
178
173
|
* Only an explicit `false` vetoes. `parseEnvBoolean` returns `undefined` for a
|
|
179
174
|
* value it cannot read, and an unreadable value is not something the operator
|
|
180
|
-
* said — the veto has to be a statement, not a shrug.
|
|
175
|
+
* said — the veto has to be a statement, not a shrug. That reading is why both
|
|
176
|
+
* variables can be read through ONE parser even though they now sit on
|
|
177
|
+
* opposite default sides: each asks only whether the operator SAID no.
|
|
181
178
|
*
|
|
182
179
|
* @returns `true` when a store is selected
|
|
183
180
|
*/
|
|
184
181
|
export function projectionStoreSelected() {
|
|
185
182
|
if (parseEnvBoolean(process.env[CACHE_ENV]) === false)
|
|
186
183
|
return false;
|
|
187
|
-
|
|
184
|
+
const selector = process.env[PROJECTION_STORE_ENV];
|
|
185
|
+
// Unset is the default and the default is on.
|
|
186
|
+
if (selector === undefined)
|
|
187
|
+
return true;
|
|
188
|
+
// `VAT_PROJECTION_STORE=` — see PROJECTION_STORE_OFF on why empty is off here
|
|
189
|
+
// and unset-equivalent in the directory variable.
|
|
190
|
+
if (selector.trim() === '')
|
|
191
|
+
return false;
|
|
192
|
+
return parseEnvBoolean(selector) !== false;
|
|
188
193
|
}
|
|
189
194
|
/**
|
|
190
195
|
* Open the projection store this process selected, keyed to one tree.
|
|
191
196
|
*
|
|
192
197
|
* Returns `undefined` when no store is selected, and when the tree cannot be
|
|
193
198
|
* keyed — the two "carry on without a cache" answers. It does **not** return
|
|
194
|
-
* `undefined` for an uninstalled backend:
|
|
195
|
-
*
|
|
196
|
-
*
|
|
199
|
+
* `undefined` for an uninstalled backend: the store is on unless a user turned it
|
|
200
|
+
* off, and answering that by silently not having one is how a default-on cache
|
|
201
|
+
* becomes an unmeasured one.
|
|
197
202
|
*
|
|
198
203
|
* @param options - Where the corpus is
|
|
199
204
|
* @param options.root - The absolute corpus root. Used to find the repository;
|
|
@@ -209,14 +214,21 @@ export async function openPopulationCache(options) {
|
|
|
209
214
|
// snapshot of an initialized repository stays distinguishable from it.
|
|
210
215
|
const snapshot = gitTreeSnapshot({ cwd: options.root });
|
|
211
216
|
if (snapshot === null) {
|
|
212
|
-
|
|
217
|
+
// Not "the selector is set": the store is on by default, so most users who
|
|
218
|
+
// see this never wrote the variable.
|
|
219
|
+
process.stderr.write(`The projection store is on, but ${options.root} is not inside a readable git`
|
|
213
220
|
+ ' repository, so there is no deterministic key to store a projection under.'
|
|
214
|
-
+
|
|
221
|
+
+ ` Populating without a cache. Set ${PROJECTION_STORE_ENV}=${PROJECTION_STORE_OFF} to silence this.\n`);
|
|
215
222
|
return undefined;
|
|
216
223
|
}
|
|
217
224
|
const store = await loadStore();
|
|
225
|
+
const cwd = options.root;
|
|
218
226
|
return {
|
|
219
|
-
cache: {
|
|
227
|
+
cache: {
|
|
228
|
+
store,
|
|
229
|
+
treeHash: snapshot.hash,
|
|
230
|
+
treeUnchanged: () => freshGitTreeSnapshot({ cwd })?.hash === snapshot.hash,
|
|
231
|
+
},
|
|
220
232
|
close: () => store.close(),
|
|
221
233
|
};
|
|
222
234
|
}
|
|
@@ -260,6 +272,18 @@ async function loadStore() {
|
|
|
260
272
|
export async function openEphemeralQueryStore() {
|
|
261
273
|
return (await loadBackend()).openEphemeralProjectionStore();
|
|
262
274
|
}
|
|
275
|
+
/**
|
|
276
|
+
* Open a compile-only probe over the full queryable schema, derived relations
|
|
277
|
+
* included — for checking statements BEFORE any population or lens has run.
|
|
278
|
+
*
|
|
279
|
+
* ⚠️ Not {@link openEphemeralQueryStore}: that store has no table for a derived
|
|
280
|
+
* relation until a lens fills it, which is how an unevaluated one is refused.
|
|
281
|
+
*
|
|
282
|
+
* @returns An open probe; close it when done
|
|
283
|
+
*/
|
|
284
|
+
export async function openCompileProbe() {
|
|
285
|
+
return (await loadBackend()).openProjectionCompileProbe();
|
|
286
|
+
}
|
|
263
287
|
/**
|
|
264
288
|
* Load the selected backend module, or report it as uninstalled and exit.
|
|
265
289
|
*
|
|
@@ -365,6 +389,65 @@ export function nodeSqliteFloorFailure(error) {
|
|
|
365
389
|
+ ' Upgrade Node to 22.13.0 or newer. Installing a package will not help:'
|
|
366
390
|
+ ' the module is built into Node, not published to npm.');
|
|
367
391
|
}
|
|
392
|
+
/**
|
|
393
|
+
* The population scope this async context is already inside, if any.
|
|
394
|
+
*
|
|
395
|
+
* `AsyncLocalStorage` and not a module-level variable, for the reason
|
|
396
|
+
* `withGitSnapshotCache` uses one: a scope has to end when its own frame ends
|
|
397
|
+
* and not when some other frame happens to finish, and a plain binding would
|
|
398
|
+
* leak the outer scope into anything that ran after it in the same tick.
|
|
399
|
+
*/
|
|
400
|
+
const populationScope = new AsyncLocalStorage();
|
|
401
|
+
/**
|
|
402
|
+
* The already-open cache this scope may join, or `undefined` to open its own.
|
|
403
|
+
*
|
|
404
|
+
* Wrapped in a one-field object rather than returned bare, because `undefined`
|
|
405
|
+
* is a legitimate thing to JOIN — a run with the store off — and a bare return
|
|
406
|
+
* could not tell that from "open your own".
|
|
407
|
+
*
|
|
408
|
+
* @param active - The scope already open in this async context
|
|
409
|
+
* @param root - The corpus root the nested caller named
|
|
410
|
+
* @returns The cache to reuse (possibly `undefined`), or `undefined` to open
|
|
411
|
+
*/
|
|
412
|
+
function joinableCache(active, root) {
|
|
413
|
+
// No store in this process, so there is nothing to key and every scope's
|
|
414
|
+
// answer is the same `undefined`. Also keeps uncached nesting free: no
|
|
415
|
+
// snapshot, no `gitFindRoot`.
|
|
416
|
+
if (!projectionStoreSelected())
|
|
417
|
+
return { cache: undefined };
|
|
418
|
+
// Selected, but the enclosing scope could not key its own root — outside a
|
|
419
|
+
// readable repository. That says nothing about THIS root, so ask again.
|
|
420
|
+
if (active === undefined)
|
|
421
|
+
return undefined;
|
|
422
|
+
// Memoized by the enclosing `withGitSnapshotCache` bracket, so a map lookup
|
|
423
|
+
// for a repository it has visited and a real snapshot only for one it has not.
|
|
424
|
+
const snapshot = gitTreeSnapshot({ cwd: root });
|
|
425
|
+
// 🔑 The tree hash, never "a scope is open". An extent is filed under
|
|
426
|
+
// `(rootId, treeHash)`, so a lane in another repository handed this one's hash
|
|
427
|
+
// would file its extent under a key that does not describe it — silently. Two
|
|
428
|
+
// roots inside ONE repository do share a hash: the key covers the repository.
|
|
429
|
+
return snapshot !== null && snapshot.hash === active.cache.treeHash ? { cache: active.cache } : undefined;
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Open a store for this scope, run the work inside it, and close it.
|
|
433
|
+
*
|
|
434
|
+
* @param options - Where the corpus is
|
|
435
|
+
* @param options.root - The absolute corpus root
|
|
436
|
+
* @param work - Given the cache, or `undefined` when there is none to give
|
|
437
|
+
* @returns Whatever `work` returned
|
|
438
|
+
*/
|
|
439
|
+
async function runOwnedScope(options, work) {
|
|
440
|
+
const opened = await openPopulationCache(options);
|
|
441
|
+
try {
|
|
442
|
+
// Registered even when nothing was opened, so a nested scope can tell "no
|
|
443
|
+
// store in this process" from "no scope above me" — and so the nested scope
|
|
444
|
+
// stays inside THIS scope's git-snapshot memo either way.
|
|
445
|
+
return await populationScope.run({ opened }, () => work(opened?.cache));
|
|
446
|
+
}
|
|
447
|
+
finally {
|
|
448
|
+
await opened?.close();
|
|
449
|
+
}
|
|
450
|
+
}
|
|
368
451
|
/**
|
|
369
452
|
* Run one command's work with a projection store open for its whole duration,
|
|
370
453
|
* and closed however it ends.
|
|
@@ -389,12 +472,34 @@ export function nodeSqliteFloorFailure(error) {
|
|
|
389
472
|
* separate "opened handle" bracket for a caller wanting more than the cache,
|
|
390
473
|
* because there is nothing legitimate for such a caller to want.
|
|
391
474
|
*
|
|
475
|
+
* ## 🔑 It NESTS, and the outermost scope wins
|
|
476
|
+
*
|
|
477
|
+
* A scope opened inside another over the same repository **joins** it: same
|
|
478
|
+
* cache by identity, no second database, no second `git write-tree`, and the
|
|
479
|
+
* inner scope does not close what it did not open. That lets an orchestrator
|
|
480
|
+
* hold one bracket over a whole run (`vat validate` does) while each lane
|
|
481
|
+
* underneath keeps its own and stays correct run alone. Reuse is gated on the
|
|
482
|
+
* TREE HASH, never on "a scope is open" — see {@link joinableCache}.
|
|
483
|
+
*
|
|
484
|
+
* ⚠️ The whole nest shares ONE snapshot, so work that must see its own edits as
|
|
485
|
+
* they land must not run inside a single scope. That is why a hoist is a
|
|
486
|
+
* decision rather than a refactor.
|
|
487
|
+
*
|
|
392
488
|
* @param options - Where the corpus is
|
|
393
489
|
* @param options.root - The absolute corpus root
|
|
394
490
|
* @param work - Given the cache, or `undefined` when there is none to give
|
|
395
491
|
* @returns Whatever `work` returned
|
|
396
492
|
*/
|
|
397
493
|
export async function withPopulationCache(options, work) {
|
|
494
|
+
const active = populationScope.getStore();
|
|
495
|
+
if (active !== undefined) {
|
|
496
|
+
const joinable = joinableCache(active.opened, options.root);
|
|
497
|
+
// 🪤 No new git bracket on either path: an inner scope stays inside the
|
|
498
|
+
// outer one's memo, which is where the deduplication lives. A fresh bracket
|
|
499
|
+
// here would start an empty memo and re-snapshot the same repository — a
|
|
500
|
+
// dedupe that does nothing while looking exactly like one that works.
|
|
501
|
+
return joinable === undefined ? runOwnedScope(options, work) : work(joinable.cache);
|
|
502
|
+
}
|
|
398
503
|
// ONE git snapshot for the whole scope, and this is the level that gets it:
|
|
399
504
|
// `openPopulationCache` below takes one to derive the store key, and the crawl
|
|
400
505
|
// that runs inside `work` takes another to enumerate the extent — same
|
|
@@ -410,17 +515,8 @@ export async function withPopulationCache(options, work) {
|
|
|
410
515
|
// — a bracket opened deeper than one of them dedupes nothing while looking
|
|
411
516
|
// exactly like a bracket that works. Every CLI entry into the projection lane
|
|
412
517
|
// (`inventory`, `resource-loader`'s two) reaches the store through this scope,
|
|
413
|
-
//
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
if (opened === undefined)
|
|
417
|
-
return work(undefined);
|
|
418
|
-
try {
|
|
419
|
-
return await work(opened.cache);
|
|
420
|
-
}
|
|
421
|
-
finally {
|
|
422
|
-
await opened.close();
|
|
423
|
-
}
|
|
424
|
-
});
|
|
518
|
+
// and `vat validate`'s orchestrator holds one OUTSIDE all of them, which the
|
|
519
|
+
// nesting above is what makes safe.
|
|
520
|
+
return withGitSnapshotCache(() => runOwnedScope(options, work));
|
|
425
521
|
}
|
|
426
522
|
//# sourceMappingURL=projection-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection-store.js","sourceRoot":"","sources":["../../src/utils/projection-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;
|
|
1
|
+
{"version":3,"file":"projection-store.js","sourceRoot":"","sources":["../../src/utils/projection-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The stated bounds a SQL answer over the derived relations is published with.
|
|
3
|
+
*
|
|
4
|
+
* ## Why the SQL route states bounds at all
|
|
5
|
+
*
|
|
6
|
+
* `vat claude context` attaches `CLAUDE_CONTEXT_LIMITS` to every answer it
|
|
7
|
+
* gives, on the rule spelled in that module: *a limit a reader has to go and
|
|
8
|
+
* find is a limit that does not reach the person acting on the number.* The
|
|
9
|
+
* same measurement is reachable as `claude_context_chains` /
|
|
10
|
+
* `claude_context_loads` rows, and this route published none of them — so the
|
|
11
|
+
* lane an adopter can make GATE their build was the lane with no caveats
|
|
12
|
+
* attached, which is the wrong way round. VAT ships no context budget of its
|
|
13
|
+
* own; the adopter's `resources.checks` statement is the budget, and this is
|
|
14
|
+
* the list it is owed beside the number it thresholds.
|
|
15
|
+
*
|
|
16
|
+
* ## Keyed on the LENS, never on the statement's text
|
|
17
|
+
*
|
|
18
|
+
* The limits bound what the relations MEAN, so they ride exactly when a row
|
|
19
|
+
* from them could be in the answer: the run evaluated the claude-context lens.
|
|
20
|
+
* Reading the statement for a table name would be a second implementation of
|
|
21
|
+
* lens selection, and the two would disagree the first time one of them missed
|
|
22
|
+
* a spelling — the defect class this release already fixed once, by deleting
|
|
23
|
+
* the refusal that re-scanned the SQL and letting SQLite answer instead.
|
|
24
|
+
*
|
|
25
|
+
* ⛔ They belong to the REPORT, once, never to a row or a finding. A per-row
|
|
26
|
+
* copy is invisible to any assertion that checks presence rather than counting
|
|
27
|
+
* occurrences, and it is the defect the context lane shipped once already.
|
|
28
|
+
*/
|
|
29
|
+
import { type StatedLimit } from '@vibe-agent-toolkit/resources';
|
|
30
|
+
/** What a report carries when a lens with stated bounds was evaluated. */
|
|
31
|
+
interface RelationBounds {
|
|
32
|
+
/** The prose frame the limits are read under, stated once. */
|
|
33
|
+
readonly boundsStatement?: string;
|
|
34
|
+
/** The signed, directional list — what the rows do NOT settle. */
|
|
35
|
+
readonly limits?: readonly StatedLimit[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The bounds to publish beside an answer, given the lenses the run evaluated.
|
|
39
|
+
*
|
|
40
|
+
* Spread into the payload: a run that evaluated no bounded lens contributes no
|
|
41
|
+
* keys at all, rather than an empty list a reader has to interpret. An empty
|
|
42
|
+
* `limits: []` would read as "nothing bounds this answer", which is a stronger
|
|
43
|
+
* claim than "this answer contains no row anything bounds".
|
|
44
|
+
*
|
|
45
|
+
* @param lensesEvaluated - The run's `lensesEvaluated`, as the provenance names them
|
|
46
|
+
* @returns The bounds keys, or an empty object
|
|
47
|
+
*/
|
|
48
|
+
export declare function relationBoundsFor(lensesEvaluated: readonly string[]): RelationBounds;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=relation-limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation-limits.d.ts","sourceRoot":"","sources":["../../src/utils/relation-limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AAIvC,0EAA0E;AAC1E,UAAU,cAAc;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,kEAAkE;IAClE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAC1C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAMpF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The stated bounds a SQL answer over the derived relations is published with.
|
|
3
|
+
*
|
|
4
|
+
* ## Why the SQL route states bounds at all
|
|
5
|
+
*
|
|
6
|
+
* `vat claude context` attaches `CLAUDE_CONTEXT_LIMITS` to every answer it
|
|
7
|
+
* gives, on the rule spelled in that module: *a limit a reader has to go and
|
|
8
|
+
* find is a limit that does not reach the person acting on the number.* The
|
|
9
|
+
* same measurement is reachable as `claude_context_chains` /
|
|
10
|
+
* `claude_context_loads` rows, and this route published none of them — so the
|
|
11
|
+
* lane an adopter can make GATE their build was the lane with no caveats
|
|
12
|
+
* attached, which is the wrong way round. VAT ships no context budget of its
|
|
13
|
+
* own; the adopter's `resources.checks` statement is the budget, and this is
|
|
14
|
+
* the list it is owed beside the number it thresholds.
|
|
15
|
+
*
|
|
16
|
+
* ## Keyed on the LENS, never on the statement's text
|
|
17
|
+
*
|
|
18
|
+
* The limits bound what the relations MEAN, so they ride exactly when a row
|
|
19
|
+
* from them could be in the answer: the run evaluated the claude-context lens.
|
|
20
|
+
* Reading the statement for a table name would be a second implementation of
|
|
21
|
+
* lens selection, and the two would disagree the first time one of them missed
|
|
22
|
+
* a spelling — the defect class this release already fixed once, by deleting
|
|
23
|
+
* the refusal that re-scanned the SQL and letting SQLite answer instead.
|
|
24
|
+
*
|
|
25
|
+
* ⛔ They belong to the REPORT, once, never to a row or a finding. A per-row
|
|
26
|
+
* copy is invisible to any assertion that checks presence rather than counting
|
|
27
|
+
* occurrences, and it is the defect the context lane shipped once already.
|
|
28
|
+
*/
|
|
29
|
+
import { CLAUDE_CONTEXT_BOUNDS_STATEMENT, CLAUDE_CONTEXT_RELATION_LIMITS, } from '@vibe-agent-toolkit/resources';
|
|
30
|
+
import { CLAUDE_CONTEXT_LENS } from './projection-lenses.js';
|
|
31
|
+
/**
|
|
32
|
+
* The bounds to publish beside an answer, given the lenses the run evaluated.
|
|
33
|
+
*
|
|
34
|
+
* Spread into the payload: a run that evaluated no bounded lens contributes no
|
|
35
|
+
* keys at all, rather than an empty list a reader has to interpret. An empty
|
|
36
|
+
* `limits: []` would read as "nothing bounds this answer", which is a stronger
|
|
37
|
+
* claim than "this answer contains no row anything bounds".
|
|
38
|
+
*
|
|
39
|
+
* @param lensesEvaluated - The run's `lensesEvaluated`, as the provenance names them
|
|
40
|
+
* @returns The bounds keys, or an empty object
|
|
41
|
+
*/
|
|
42
|
+
export function relationBoundsFor(lensesEvaluated) {
|
|
43
|
+
if (!lensesEvaluated.includes(CLAUDE_CONTEXT_LENS.name))
|
|
44
|
+
return {};
|
|
45
|
+
return {
|
|
46
|
+
boundsStatement: CLAUDE_CONTEXT_BOUNDS_STATEMENT,
|
|
47
|
+
limits: CLAUDE_CONTEXT_RELATION_LIMITS,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=relation-limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation-limits.js","sourceRoot":"","sources":["../../src/utils/relation-limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,GAE/B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAU7D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,eAAkC;IAClE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACnE,OAAO;QACL,eAAe,EAAE,+BAA+B;QAChD,MAAM,EAAE,8BAA8B;KACvC,CAAC;AACJ,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Utilities for loading and crawling resources
|
|
3
3
|
*/
|
|
4
4
|
import { buildLinkAuthEngineConfig, buildResourcePopulation, DEFAULT_RESOURCE_INCLUDE, gitExtentSelected, ResourceRegistry, } from '@vibe-agent-toolkit/resources';
|
|
5
|
-
import { safePath, toForwardSlash } from '@vibe-agent-toolkit/utils';
|
|
5
|
+
import { relativeEscapesRoot, safePath, toForwardSlash } from '@vibe-agent-toolkit/utils';
|
|
6
6
|
import { GitTracker, gitTreeSnapshot } from '@vibe-agent-toolkit/utils/git';
|
|
7
7
|
import { loadConfig } from './config-loader.js';
|
|
8
8
|
import { collectionsOption } from './population-wiring.js';
|
|
@@ -68,7 +68,7 @@ function crawlOptionsForPath(pathArg, projectRoot, config, logger) {
|
|
|
68
68
|
// safePath.relative already normalizes, but toForwardSlash makes the
|
|
69
69
|
// separator assumption in the `../` test below explicit on Windows too.
|
|
70
70
|
const normalizedRelDir = toForwardSlash(safePath.relative(projectRoot, resolved));
|
|
71
|
-
if (normalizedRelDir
|
|
71
|
+
if (relativeEscapesRoot(normalizedRelDir)) {
|
|
72
72
|
// Outside the project root, so the config's root-relative globs describe a
|
|
73
73
|
// different tree and genuinely cannot apply. Say so rather than dropping
|
|
74
74
|
// them silently — silent dropping is the bug this function exists to fix.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-loader.js","sourceRoot":"","sources":["../../src/utils/resource-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,GAOjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"resource-loader.js","sourceRoot":"","sources":["../../src/utils/resource-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-discovery.d.ts","sourceRoot":"","sources":["../../src/utils/skill-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-discovery.d.ts","sourceRoot":"","sources":["../../src/utils/skill-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAgBhE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAEpE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG;IACxD,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAiBA"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Uses case-insensitive matching for discovery but validates proper casing.
|
|
6
6
|
*/
|
|
7
7
|
import { basename } from 'node:path';
|
|
8
|
+
import { toForwardSlash } from '@vibe-agent-toolkit/utils';
|
|
8
9
|
import picomatch from 'picomatch';
|
|
9
10
|
/**
|
|
10
11
|
* Case-insensitive matcher for SKILL.md files
|
|
@@ -57,7 +58,7 @@ export function discoverSkills(resources) {
|
|
|
57
58
|
*/
|
|
58
59
|
export function validateSkillFilename(skillPath) {
|
|
59
60
|
// Normalize path separators for cross-platform support
|
|
60
|
-
const normalizedPath = skillPath
|
|
61
|
+
const normalizedPath = toForwardSlash(skillPath);
|
|
61
62
|
const filename = basename(normalizedPath);
|
|
62
63
|
if (filename === 'SKILL.md') {
|
|
63
64
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-discovery.js","sourceRoot":"","sources":["../../src/utils/skill-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC;;;;;GAKG;AACH,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,EAAE;IAC3C,MAAM,EAAE,IAAI,EAAO,4BAA4B;IAC/C,SAAS,EAAE,IAAI,EAAI,kCAAkC;IACrD,GAAG,EAAE,IAAI,EAAU,2DAA2D;CAC/E,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,cAAc,CAAC,SAAuB;IACpD,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAiB;IAKrD,uDAAuD;IACvD,MAAM,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"skill-discovery.js","sourceRoot":"","sources":["../../src/utils/skill-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC;;;;;GAKG;AACH,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,EAAE;IAC3C,MAAM,EAAE,IAAI,EAAO,4BAA4B;IAC/C,SAAS,EAAE,IAAI,EAAI,kCAAkC;IACrD,GAAG,EAAE,IAAI,EAAU,2DAA2D;CAC/E,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,cAAc,CAAC,SAAuB;IACpD,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAiB;IAKrD,uDAAuD;IACvD,MAAM,cAAc,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;IAE1C,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO;YACL,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,QAAQ;SACnB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,gEAAgE,QAAQ,2FAA2F;KAC7K,CAAC;AACJ,CAAC"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* Most fields are a shallow override: a per-skill value replaces the default
|
|
10
10
|
* outright. `files:` is the exception — see below.
|
|
11
11
|
*/
|
|
12
|
-
import { type DeclaredEvalSuite, type SkillPackagingConfig } from '@vibe-agent-toolkit/agent-skills';
|
|
12
|
+
import { type DeclaredEvalSuite, type PluginLocalSkillIndex, type SkillPackagingConfig } from '@vibe-agent-toolkit/agent-skills';
|
|
13
13
|
import type { SkillsConfig } from '@vibe-agent-toolkit/resources';
|
|
14
14
|
/**
|
|
15
15
|
* Merge defaults with per-skill overrides, dropping undefined values.
|
|
@@ -26,6 +26,67 @@ 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
|
+
* THE `skills.config` entry a plugin-local skill packages under, for both lanes that
|
|
31
|
+
* ask: the Claude plugin build that packages it and `vat verify` that checks what it
|
|
32
|
+
* packaged. Keyed by the skill's declared name; its directory path under the plugin's
|
|
33
|
+
* `skills/` (`group/nested`) and that path's trailing segment are fallbacks for a
|
|
34
|
+
* config keyed by directory. Two lookups were two effective configs for one skill —
|
|
35
|
+
* verify checked `files:` dests and severity overrides the build never applied.
|
|
36
|
+
*/
|
|
37
|
+
export declare function pluginLocalSkillConfigEntry<T>(config: Readonly<Record<string, T>> | undefined, skill: {
|
|
38
|
+
readonly skillName: string;
|
|
39
|
+
readonly skillDirPath: string;
|
|
40
|
+
}): T | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Is this skill distributed through the POOL (`dist/skills/<name>`)?
|
|
43
|
+
*
|
|
44
|
+
* THE predicate for `publish`, read off the MERGED config so that
|
|
45
|
+
* `skills.defaults.publish` counts; every lane that decides whether a pool bundle
|
|
46
|
+
* is built, expected or assigned asks this and nothing else. The consistency
|
|
47
|
+
* check used to read `skills.config.<name>.publish` alone, so a project-wide
|
|
48
|
+
* `skills.defaults.publish: false` parsed and changed nothing — and `vat build`
|
|
49
|
+
* and `vat verify` never read the flag at all: two contracts for one key.
|
|
50
|
+
*
|
|
51
|
+
* `publish: false` names an IN-PLACE skill: validated at source by `vat validate`
|
|
52
|
+
* / `vat skills validate`, never bundled by `vat build`, never expected by
|
|
53
|
+
* `vat verify`. Default `true`.
|
|
54
|
+
*
|
|
55
|
+
* `publish` scopes the POOL only. A plugin-local skill (a git-tracked skill directory
|
|
56
|
+
* under a plugin's `skills/` — see `indexPluginLocalSkills`) ships with its
|
|
57
|
+
* plugin by LOCATION: the claude phase packages it and verify expects it whatever
|
|
58
|
+
* this returns. A skill that is both discovered by `skills.include` and
|
|
59
|
+
* plugin-local therefore skips the pool with `publish: false` and still ships in
|
|
60
|
+
* its plugin.
|
|
61
|
+
*
|
|
62
|
+
* `publish` is a distribution flag, not a packaging knob — the packaging
|
|
63
|
+
* validator never reads it — so it is declared on the project-config schema and
|
|
64
|
+
* carried through the merge generically like every other key; it is read here
|
|
65
|
+
* off the merged record rather than off a typed field of the validator's config.
|
|
66
|
+
*/
|
|
67
|
+
export declare function isSkillPublished(packaging: SkillPackagingConfig): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Where `publish` sends a discovered skill:
|
|
70
|
+
* - `pool` — published: bundled into `dist/skills/<name>` (a plugin-local one ALSO ships in its plugin);
|
|
71
|
+
* - `plugin-only` — `publish: false` but plugin-local: out of the pool, still shipped by its plugin;
|
|
72
|
+
* - `in-place` — `publish: false` and not plugin-local: used from the repo, distributed nowhere.
|
|
73
|
+
*
|
|
74
|
+
* `plugin-only` is deliberately not `SkillDistribution`'s `plugin-local`: that names WHERE a
|
|
75
|
+
* skill's plugin build output lands whatever `publish` says; this names a skill that ships
|
|
76
|
+
* ONLY there, which a published plugin-local skill does not.
|
|
77
|
+
*/
|
|
78
|
+
type PublishScope = 'pool' | 'plugin-only' | 'in-place';
|
|
79
|
+
/**
|
|
80
|
+
* Classify one discovered skill — {@link isSkillPublished} over its merged config, then
|
|
81
|
+
* plugin-local by the directory holding its `SKILL.md` (`pluginLocal`, from
|
|
82
|
+
* `indexPluginLocalSkills`: the skill dirs the plugin build actually packages). A
|
|
83
|
+
* plugin-local skill is never `in-place`: it ships with its plugin, so every lane that
|
|
84
|
+
* reports in-place skills (`vat build`, `vat verify`, the consistency check) asks this,
|
|
85
|
+
* not the flag alone.
|
|
86
|
+
*/
|
|
87
|
+
export declare function publishScope(skill: {
|
|
88
|
+
sourcePath: string;
|
|
89
|
+
}, packaging: SkillPackagingConfig, pluginLocal: PluginLocalSkillIndex): PublishScope;
|
|
29
90
|
/**
|
|
30
91
|
* The PROJECT's declared eval suites: one {@link DeclaredEvalSuite} per discovered
|
|
31
92
|
* skill, from the same discovery + merge every lane already runs.
|
|
@@ -46,4 +107,5 @@ export declare function collectDeclaredEvalSuites(skillsConfig: SkillsConfig | u
|
|
|
46
107
|
name: string;
|
|
47
108
|
sourcePath: string;
|
|
48
109
|
}>): DeclaredEvalSuite[];
|
|
110
|
+
export {};
|
|
49
111
|
//# sourceMappingURL=skill-packaging-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-packaging-config.d.ts","sourceRoot":"","sources":["../../src/utils/skill-packaging-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"skill-packaging-config.d.ts","sourceRoot":"","sources":["../../src/utils/skill-packaging-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAC1B,MAAM,kCAAkC,CAAC;AAC1C,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;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,EAC/C,KAAK,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACnE,CAAC,GAAG,SAAS,CAEf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,oBAAoB,GAAG,OAAO,CAGzE;AAED;;;;;;;;;GASG;AACH,KAAK,YAAY,GAAG,MAAM,GAAG,aAAa,GAAG,UAAU,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,EAC7B,SAAS,EAAE,oBAAoB,EAC/B,WAAW,EAAE,qBAAqB,GACjC,YAAY,CAGd;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"}
|