@vibe-agent-toolkit/cli 0.1.42 → 0.2.0-rc.10
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 +95 -28
- package/dist/bin/vat.js +95 -28
- package/dist/bin/vat.js.map +1 -1
- package/dist/bin.js +137 -76
- package/dist/bin.js.map +1 -1
- package/dist/command-loaders.d.ts +44 -0
- package/dist/command-loaders.d.ts.map +1 -0
- package/dist/command-loaders.js +60 -0
- package/dist/command-loaders.js.map +1 -0
- 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/index.js +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 +66 -13
- 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 +60 -2
- package/dist/commands/audit/distributed-tree.d.ts.map +1 -1
- package/dist/commands/audit/distributed-tree.js +73 -1
- package/dist/commands/audit/distributed-tree.js.map +1 -1
- package/dist/commands/audit/git-url-clone.d.ts +1 -1
- package/dist/commands/audit/git-url-clone.d.ts.map +1 -1
- package/dist/commands/audit/git-url-clone.js.map +1 -1
- package/dist/commands/audit/hierarchical-output.d.ts +1 -1
- package/dist/commands/audit/hierarchical-output.d.ts.map +1 -1
- package/dist/commands/audit/hierarchical-output.js +1 -1
- package/dist/commands/audit/hierarchical-output.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 +98 -8
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +1133 -395
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/build.d.ts +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +40 -36
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/cache/cache-control.d.ts +82 -0
- package/dist/commands/cache/cache-control.d.ts.map +1 -0
- package/dist/commands/cache/cache-control.js +86 -0
- package/dist/commands/cache/cache-control.js.map +1 -0
- package/dist/commands/cache/clear.d.ts +105 -0
- package/dist/commands/cache/clear.d.ts.map +1 -0
- package/dist/commands/cache/clear.js +248 -0
- package/dist/commands/cache/clear.js.map +1 -0
- package/dist/commands/cache/index.d.ts +18 -0
- package/dist/commands/cache/index.d.ts.map +1 -0
- package/dist/commands/cache/index.js +94 -0
- package/dist/commands/cache/index.js.map +1 -0
- package/dist/commands/claude/claude-config.d.ts.map +1 -1
- package/dist/commands/claude/claude-config.js +6 -0
- package/dist/commands/claude/claude-config.js.map +1 -1
- package/dist/commands/claude/context.d.ts +340 -0
- package/dist/commands/claude/context.d.ts.map +1 -0
- package/dist/commands/claude/context.js +1080 -0
- package/dist/commands/claude/context.js.map +1 -0
- package/dist/commands/claude/index.d.ts +14 -0
- package/dist/commands/claude/index.d.ts.map +1 -1
- package/dist/commands/claude/index.js +22 -2
- 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 +40 -31
- 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 +73 -22
- package/dist/commands/claude/marketplace/validate.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/validate.js +407 -72
- 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 +54 -1
- package/dist/commands/claude/org/helpers.d.ts.map +1 -1
- package/dist/commands/claude/org/helpers.js +42 -7
- package/dist/commands/claude/org/helpers.js.map +1 -1
- package/dist/commands/claude/org/index.d.ts.map +1 -1
- package/dist/commands/claude/org/index.js +24 -16
- package/dist/commands/claude/org/index.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 +527 -0
- package/dist/commands/claude/org/skills.d.ts.map +1 -1
- package/dist/commands/claude/org/skills.js +1414 -108
- 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 +6 -3
- 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 +11 -7
- package/dist/commands/claude/org/workspaces.js.map +1 -1
- package/dist/commands/claude/plugin/build.d.ts +41 -3
- package/dist/commands/claude/plugin/build.d.ts.map +1 -1
- package/dist/commands/claude/plugin/build.js +147 -80
- 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 +2 -7
- 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 +93 -62
- 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/marketplace-json.d.ts +24 -9
- package/dist/commands/claude/plugin/marketplace-json.d.ts.map +1 -1
- package/dist/commands/claude/plugin/marketplace-json.js +10 -9
- package/dist/commands/claude/plugin/marketplace-json.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 +73 -0
- package/dist/commands/claude/plugin/tree-copy.d.ts.map +1 -1
- package/dist/commands/claude/plugin/tree-copy.js +221 -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 +152 -106
- 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 +1 -2
- 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 +95 -41
- 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 +20 -12
- 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 +50 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +245 -52
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/inventory.d.ts +13 -1
- package/dist/commands/inventory.d.ts.map +1 -1
- package/dist/commands/inventory.js +128 -17
- package/dist/commands/inventory.js.map +1 -1
- package/dist/commands/mcp/collections.d.ts +1 -1
- package/dist/commands/mcp/collections.d.ts.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 +182 -114
- package/dist/commands/phase-utils.d.ts.map +1 -1
- package/dist/commands/phase-utils.js +154 -163
- 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 +3 -2
- 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 +64 -0
- package/dist/commands/rag/index-command.d.ts.map +1 -1
- package/dist/commands/rag/index-command.js +72 -6
- 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 +23 -10
- 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/builtin-help.d.ts +27 -0
- package/dist/commands/resources/builtin-help.d.ts.map +1 -0
- package/dist/commands/resources/builtin-help.js +46 -0
- package/dist/commands/resources/builtin-help.js.map +1 -0
- package/dist/commands/resources/check-progress.d.ts +154 -0
- package/dist/commands/resources/check-progress.d.ts.map +1 -0
- package/dist/commands/resources/check-progress.js +222 -0
- package/dist/commands/resources/check-progress.js.map +1 -0
- package/dist/commands/resources/check-supervisor.d.ts +465 -0
- package/dist/commands/resources/check-supervisor.d.ts.map +1 -0
- package/dist/commands/resources/check-supervisor.js +573 -0
- package/dist/commands/resources/check-supervisor.js.map +1 -0
- package/dist/commands/resources/check.d.ts +593 -0
- package/dist/commands/resources/check.d.ts.map +1 -0
- package/dist/commands/resources/check.js +1365 -0
- package/dist/commands/resources/check.js.map +1 -0
- package/dist/commands/resources/index.d.ts.map +1 -1
- package/dist/commands/resources/index.js +425 -6
- package/dist/commands/resources/index.js.map +1 -1
- package/dist/commands/resources/query.d.ts +106 -0
- package/dist/commands/resources/query.d.ts.map +1 -0
- package/dist/commands/resources/query.js +177 -0
- package/dist/commands/resources/query.js.map +1 -0
- package/dist/commands/resources/scan.d.ts +24 -0
- package/dist/commands/resources/scan.d.ts.map +1 -1
- package/dist/commands/resources/scan.js +17 -8
- package/dist/commands/resources/scan.js.map +1 -1
- package/dist/commands/resources/validate.d.ts +57 -4
- package/dist/commands/resources/validate.d.ts.map +1 -1
- package/dist/commands/resources/validate.js +224 -56
- 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 +40 -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 +99 -62
- package/dist/commands/skill/review.js.map +1 -1
- package/dist/commands/skill/test/configure.d.ts +56 -0
- package/dist/commands/skill/test/configure.d.ts.map +1 -1
- package/dist/commands/skill/test/configure.js +75 -16
- package/dist/commands/skill/test/configure.js.map +1 -1
- package/dist/commands/skill/test/run.d.ts +63 -10
- package/dist/commands/skill/test/run.d.ts.map +1 -1
- package/dist/commands/skill/test/run.js +258 -77
- package/dist/commands/skill/test/run.js.map +1 -1
- package/dist/commands/skills/build.d.ts +94 -4
- package/dist/commands/skills/build.d.ts.map +1 -1
- package/dist/commands/skills/build.js +325 -97
- 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 -31
- 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 +24 -3
- package/dist/commands/skills/package.d.ts.map +1 -1
- package/dist/commands/skills/package.js +42 -17
- 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 +3 -5
- 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 +47 -6
- package/dist/commands/skills/skill-discovery.d.ts.map +1 -1
- package/dist/commands/skills/skill-discovery.js +66 -16
- 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 +140 -4
- package/dist/commands/skills/validate.d.ts.map +1 -1
- package/dist/commands/skills/validate.js +224 -67
- package/dist/commands/skills/validate.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 +63 -27
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/verify.d.ts +119 -15
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +357 -142
- 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/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 +55 -57
- 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 +7 -4
- 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 +144 -7
- package/dist/utils/command-error.d.ts.map +1 -1
- package/dist/utils/command-error.js +179 -16
- 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 +40 -14
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/corpus-target.d.ts +26 -0
- package/dist/utils/corpus-target.d.ts.map +1 -0
- package/dist/utils/corpus-target.js +35 -0
- package/dist/utils/corpus-target.js.map +1 -0
- 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-anchor.d.ts +2 -2
- package/dist/utils/issue-anchor.d.ts.map +1 -1
- package/dist/utils/issue-anchor.js +1 -1
- package/dist/utils/issue-rendering.d.ts +3 -3
- package/dist/utils/issue-rendering.d.ts.map +1 -1
- package/dist/utils/issue-rendering.js +3 -3
- package/dist/utils/issue-rendering.js.map +1 -1
- package/dist/utils/issue-severity.d.ts +12 -5
- package/dist/utils/issue-severity.d.ts.map +1 -1
- package/dist/utils/issue-severity.js +1 -1
- package/dist/utils/issue-severity.js.map +1 -1
- package/dist/utils/optional-backend.d.ts +78 -0
- package/dist/utils/optional-backend.d.ts.map +1 -0
- package/dist/utils/optional-backend.js +117 -0
- package/dist/utils/optional-backend.js.map +1 -0
- package/dist/utils/output.d.ts +26 -0
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +35 -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/population-wiring.d.ts +100 -0
- package/dist/utils/population-wiring.d.ts.map +1 -0
- package/dist/utils/population-wiring.js +98 -0
- package/dist/utils/population-wiring.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-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 +324 -0
- package/dist/utils/projection-query.d.ts.map +1 -0
- package/dist/utils/projection-query.js +357 -0
- package/dist/utils/projection-query.js.map +1 -0
- package/dist/utils/projection-store.d.ts +335 -0
- package/dist/utils/projection-store.d.ts.map +1 -0
- package/dist/utils/projection-store.js +522 -0
- package/dist/utils/projection-store.js.map +1 -0
- 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/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 +132 -2
- package/dist/utils/resource-loader.d.ts.map +1 -1
- package/dist/utils/resource-loader.js +288 -27
- 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-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/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 +36 -0
- package/dist/utils/vat-bin-path.d.ts.map +1 -0
- package/dist/utils/vat-bin-path.js +48 -0
- package/dist/utils/vat-bin-path.js.map +1 -0
- package/dist/utils/verdict-helpers.d.ts +1 -1
- package/dist/utils/verdict-helpers.d.ts.map +1 -1
- package/dist/utils/verdict-helpers.js +1 -1
- package/dist/utils/verdict-helpers.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/agent.md +2 -2
- package/docs/audit.md +141 -37
- package/docs/doctor.md +7 -6
- package/docs/index.md +40 -12
- package/docs/mcp.md +2 -2
- package/docs/rag.md +3 -2
- package/docs/resources.md +13 -3
- package/docs/skill-test.md +10 -9
- package/docs/skills.md +53 -69
- package/package.json +38 -27
- 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/resources/command-helpers.d.ts +0 -5
- package/dist/commands/resources/command-helpers.d.ts.map +0 -1
- package/dist/commands/resources/command-helpers.js +0 -6
- package/dist/commands/resources/command-helpers.js.map +0 -1
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Selecting, opening and keying the **projection store** — the cross-process
|
|
3
|
+
* cache that makes a second population of an unchanged tree cheap.
|
|
4
|
+
*
|
|
5
|
+
* ## Why the CLI owns this and `resources` does not
|
|
6
|
+
*
|
|
7
|
+
* `@vibe-agent-toolkit/resources` states the {@link ProjectionStore} contract
|
|
8
|
+
* and never picks a backend, for the same reason it states the parse contract
|
|
9
|
+
* and never picks a parser: it is the toolkit's most widely installed package,
|
|
10
|
+
* and a storage engine is a *choice*. The choice is made here, at the edge that
|
|
11
|
+
* already owns every other optional backend — see `optional-backend.ts`, whose
|
|
12
|
+
* header names a projection store as one of the shapes it exists for.
|
|
13
|
+
*
|
|
14
|
+
* So `populate()` takes a {@link PopulationCache} it is handed, and this module
|
|
15
|
+
* is the only place in the toolkit that knows `@vibe-agent-toolkit/projection-
|
|
16
|
+
* sqlite` exists.
|
|
17
|
+
*
|
|
18
|
+
* ## The key, and why it is a whole-repository tree hash
|
|
19
|
+
*
|
|
20
|
+
* A stored extent is filed under `(rootId, treeHash)`. `populate()` derives the
|
|
21
|
+
* root id itself so a caller cannot file one root's contents under another's;
|
|
22
|
+
* this module supplies the other half.
|
|
23
|
+
*
|
|
24
|
+
* {@link gitTreeSnapshot} answers it with `git write-tree` against a throwaway
|
|
25
|
+
* index, which covers staged edits, unstaged edits and untracked files, and
|
|
26
|
+
* carries **no timestamp** — byte-identical content always produces the same
|
|
27
|
+
* hash. 🪤 Never `git stash create`: a stash is a *commit*, so two calls over
|
|
28
|
+
* identical content agree only within the same wall-clock second, and every
|
|
29
|
+
* read would miss.
|
|
30
|
+
*
|
|
31
|
+
* ⚠️ That hash covers the whole **repository**, not the subtree the root names.
|
|
32
|
+
* An edit anywhere in the repository therefore cools the cache for every root
|
|
33
|
+
* inside it. This is conservative in the safe direction and cheap to be
|
|
34
|
+
* conservative about — `git write-tree` against a throwaway index is the same
|
|
35
|
+
* call `vibe-validate` makes on every commit.
|
|
36
|
+
*
|
|
37
|
+
* ## An opted-in cache that quietly does nothing is worse than no cache
|
|
38
|
+
*
|
|
39
|
+
* Every failure here is loud, and that is deliberate rather than harsh. A
|
|
40
|
+
* selector nobody honours produces a measurement arm that believes it is
|
|
41
|
+
* testing a cache and is testing an ordinary cold run — the "subject that
|
|
42
|
+
* exercises nothing looks like a clean result" failure that has already cost
|
|
43
|
+
* this project one whole A/B. So an uninstalled backend exits with the seam's
|
|
44
|
+
* standard legible error, and a tree that cannot be keyed says so on stderr
|
|
45
|
+
* rather than silently declining.
|
|
46
|
+
*/
|
|
47
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
48
|
+
import { parseEnvBoolean } from '@vibe-agent-toolkit/utils';
|
|
49
|
+
import { freshGitTreeSnapshot, gitTreeSnapshot, withGitSnapshotCache } from '@vibe-agent-toolkit/utils/git';
|
|
50
|
+
import { isModuleMissing, reportMissingBackend } from './optional-backend.js';
|
|
51
|
+
import { installSqliteWarningFilter } from './sqlite-experimental-warning.js';
|
|
52
|
+
/**
|
|
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.
|
|
62
|
+
*
|
|
63
|
+
* An environment switch rather than a config field, for the same reason
|
|
64
|
+
* `VAT_INVENTORY_CRAWL` and `VAT_RESOURCES_CRAWL` are: it selects which
|
|
65
|
+
* INSTRUMENT runs, not what the project means, and it has to be reachable from
|
|
66
|
+
* the lab, which spawns the binary and controls its environment. A config field
|
|
67
|
+
* would put the A and B arms inside the subject's own tree, where a measurement
|
|
68
|
+
* edits the thing it measures.
|
|
69
|
+
*
|
|
70
|
+
* 🔑 It is read from the environment, and **every phase now runs in the process
|
|
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.
|
|
75
|
+
*/
|
|
76
|
+
export const PROJECTION_STORE_ENV = 'VAT_PROJECTION_STORE';
|
|
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
|
+
*/
|
|
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';
|
|
93
|
+
/**
|
|
94
|
+
* Where the projection store's database lives, overriding the default.
|
|
95
|
+
*
|
|
96
|
+
* The default is `tmpdir/.vat-cache/<version>/projection-<shapeDigest>` — one
|
|
97
|
+
* database per VAT release, shared by every root on the machine. This names a
|
|
98
|
+
* different one **explicitly**, which is what an adopter with a per-job cache
|
|
99
|
+
* directory, a shared build agent running two jobs at once, or a test arm that
|
|
100
|
+
* must not touch the developer's live cache actually needs.
|
|
101
|
+
*
|
|
102
|
+
* 🪤 **What it replaces is redirecting `TMPDIR`, which works and is the wrong
|
|
103
|
+
* instrument.** `defaultStoreDirectory()` resolves through
|
|
104
|
+
* `vatCacheNamespaceRoot()` → `normalizedTmpdir()`, so pointing the OS temp
|
|
105
|
+
* directory elsewhere does move the store — along with every other temp
|
|
106
|
+
* consumer in the process, on a variable whose name is not the same on both
|
|
107
|
+
* platforms (`TMPDIR` on POSIX; `TEMP`, then `TMP`, on Windows, so setting one
|
|
108
|
+
* is silently inert on the other). It relocates the store as a side effect of
|
|
109
|
+
* relocating something larger. This variable says the one thing meant.
|
|
110
|
+
*
|
|
111
|
+
* ⚠️ It does **not** consult `XDG_CACHE_HOME` or `HOME`. A caller that set
|
|
112
|
+
* those believed it had its own database and was writing into the shared one;
|
|
113
|
+
* the fix is to name the directory here, not to add more implicit roots.
|
|
114
|
+
*
|
|
115
|
+
* An environment variable rather than a config field, for the same reason
|
|
116
|
+
* {@link PROJECTION_STORE_ENV} is one: it says where an INSTRUMENT keeps its
|
|
117
|
+
* scratch space, not what the project means, and it has to be reachable from a
|
|
118
|
+
* harness that spawns the binary.
|
|
119
|
+
*/
|
|
120
|
+
export const PROJECTION_STORE_DIR_ENV = 'VAT_PROJECTION_STORE_DIR';
|
|
121
|
+
/**
|
|
122
|
+
* The env var that turns VAT's disk caches off for a run.
|
|
123
|
+
*
|
|
124
|
+
* Not this module's invention — `ParseCache` has read it since the parse cache
|
|
125
|
+
* shipped, and `vat`'s root `--no-cache` exports it from a `preAction` hook so
|
|
126
|
+
* the decision reaches every spawned phase. Named here rather than spelled
|
|
127
|
+
* inline so the projection store is visibly the same tenant as the caches the
|
|
128
|
+
* flag was written for.
|
|
129
|
+
*/
|
|
130
|
+
export const CACHE_ENV = 'VAT_CACHE';
|
|
131
|
+
/**
|
|
132
|
+
* The backend as a user is told to install it.
|
|
133
|
+
*
|
|
134
|
+
* Named separately from the RAG backend's entry because the *reason* it ships
|
|
135
|
+
* apart is different, and the install message is the only place a user learns
|
|
136
|
+
* it: RAG carries a platform-native binary, while this one carries a Node
|
|
137
|
+
* version floor.
|
|
138
|
+
*/
|
|
139
|
+
/** What Node throws for `import('node:sqlite')` when it is absent or still flagged. */
|
|
140
|
+
const UNKNOWN_BUILTIN_MODULE = 'ERR_UNKNOWN_BUILTIN_MODULE';
|
|
141
|
+
const PROJECTION_STORE_BACKEND = {
|
|
142
|
+
feature: 'The projection store',
|
|
143
|
+
packageName: '@vibe-agent-toolkit/projection-sqlite',
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Whether this process should read and write a projection store.
|
|
147
|
+
*
|
|
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.
|
|
151
|
+
*
|
|
152
|
+
* Read from the environment at each call rather than memoized at module load:
|
|
153
|
+
* `vitest.setup.js` deletes every `VAT_*` variable before any test module
|
|
154
|
+
* loads, so a module-level binding would make the switch unobservable to every
|
|
155
|
+
* test that sets it.
|
|
156
|
+
*
|
|
157
|
+
* ## The two switches are AND-ed, and the second one is a veto
|
|
158
|
+
*
|
|
159
|
+
* {@link PROJECTION_STORE_ENV} turns off THIS cache; {@link CACHE_ENV} says
|
|
160
|
+
* whether this run caches at all. A store selected while `VAT_CACHE=0` was
|
|
161
|
+
* measured writing a 9.8 MB, 18,079-row store on this repository and hitting it
|
|
162
|
+
* on the next run — a user who asked for no cache silently got one, and
|
|
163
|
+
* `vat cache`'s own help text described three caches while a fourth was being
|
|
164
|
+
* written beside them.
|
|
165
|
+
*
|
|
166
|
+
* 🪤 Read through `parseEnvBoolean`, never for truthiness — `VAT_CACHE=1` is
|
|
167
|
+
* the value an operator writes to turn caching ON, and a truthiness test would
|
|
168
|
+
* read it as a reason to decline. It was previously a comparison against the
|
|
169
|
+
* literal `'0'`, which is the same shape `ParseCache` carried and the same
|
|
170
|
+
* defect: `VAT_CACHE=false` disabled nothing. The two now share one parser
|
|
171
|
+
* (`@vibe-agent-toolkit/utils`) so the variable cannot be read two ways again.
|
|
172
|
+
*
|
|
173
|
+
* Only an explicit `false` vetoes. `parseEnvBoolean` returns `undefined` for a
|
|
174
|
+
* value it cannot read, and an unreadable value is not something the operator
|
|
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.
|
|
178
|
+
*
|
|
179
|
+
* @returns `true` when a store is selected
|
|
180
|
+
*/
|
|
181
|
+
export function projectionStoreSelected() {
|
|
182
|
+
if (parseEnvBoolean(process.env[CACHE_ENV]) === false)
|
|
183
|
+
return false;
|
|
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;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Open the projection store this process selected, keyed to one tree.
|
|
196
|
+
*
|
|
197
|
+
* Returns `undefined` when no store is selected, and when the tree cannot be
|
|
198
|
+
* keyed — the two "carry on without a cache" answers. It does **not** return
|
|
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.
|
|
202
|
+
*
|
|
203
|
+
* @param options - Where the corpus is
|
|
204
|
+
* @param options.root - The absolute corpus root. Used to find the repository;
|
|
205
|
+
* the resulting hash covers that whole repository, not this subtree
|
|
206
|
+
* @returns The cache and its closer, or `undefined` to populate uncached
|
|
207
|
+
*/
|
|
208
|
+
export async function openPopulationCache(options) {
|
|
209
|
+
if (!projectionStoreSelected())
|
|
210
|
+
return undefined;
|
|
211
|
+
// Before the import, so a corpus outside a repository costs nothing and says
|
|
212
|
+
// why. `gitTreeSnapshot` returns null for every "git could not answer" case —
|
|
213
|
+
// no `git` on PATH, not a repository, a bare or unreadable one — and an empty
|
|
214
|
+
// snapshot of an initialized repository stays distinguishable from it.
|
|
215
|
+
const snapshot = gitTreeSnapshot({ cwd: options.root });
|
|
216
|
+
if (snapshot === null) {
|
|
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`
|
|
220
|
+
+ ' repository, so there is no deterministic key to store a projection under.'
|
|
221
|
+
+ ` Populating without a cache. Set ${PROJECTION_STORE_ENV}=${PROJECTION_STORE_OFF} to silence this.\n`);
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
const store = await loadStore();
|
|
225
|
+
const cwd = options.root;
|
|
226
|
+
return {
|
|
227
|
+
cache: {
|
|
228
|
+
store,
|
|
229
|
+
treeHash: snapshot.hash,
|
|
230
|
+
treeUnchanged: () => freshGitTreeSnapshot({ cwd })?.hash === snapshot.hash,
|
|
231
|
+
},
|
|
232
|
+
close: () => store.close(),
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Load the selected backend, or report it as uninstalled and exit.
|
|
237
|
+
*
|
|
238
|
+
* 🪤 Only `ERR_MODULE_NOT_FOUND` means "not installed". A Node older than
|
|
239
|
+
* 22.13.0 has no `node:sqlite` at all and fails with a *different* code, which
|
|
240
|
+
* must propagate as itself: "install this package" would be the wrong repair
|
|
241
|
+
* for "upgrade Node", and diagnosing a version floor as a missing dependency
|
|
242
|
+
* sends a user round a loop that cannot terminate.
|
|
243
|
+
*
|
|
244
|
+
* @returns The opened store, typed as the engine-free contract — the SQLite
|
|
245
|
+
* backend really does return a `SqlQueryableStore`, and this narrows it away
|
|
246
|
+
* on purpose so the population path cannot grow a query
|
|
247
|
+
*/
|
|
248
|
+
async function loadStore() {
|
|
249
|
+
const directory = process.env[PROJECTION_STORE_DIR_ENV];
|
|
250
|
+
// Spread rather than passed, because the backend defaults the field when it is
|
|
251
|
+
// ABSENT and an explicit `undefined` is a different argument under
|
|
252
|
+
// `exactOptionalPropertyTypes`. Empty string is treated as unset: an unset
|
|
253
|
+
// variable and one exported as `''` are the same intent, and `''` would
|
|
254
|
+
// otherwise resolve to the process cwd.
|
|
255
|
+
return (await loadBackend()).openSqliteProjectionStore(directory === undefined || directory === '' ? {} : { directory });
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Open a store that lives only in this process's memory.
|
|
259
|
+
*
|
|
260
|
+
* 🔑 **This is what keeps the query surface an ANSWER rather than a privilege.**
|
|
261
|
+
* A caller with no store selected — CI's first run, or a developer who never set
|
|
262
|
+
* the selector — still gets the same SQL over the same schema; the on-disk store
|
|
263
|
+
* only makes the second run cheap. Without it, "what does this tree contain"
|
|
264
|
+
* would be answerable only where a cache happened to exist, and two callers
|
|
265
|
+
* would hold differently-shaped views of one tree.
|
|
266
|
+
*
|
|
267
|
+
* It is a cache that cannot hit: nothing survives the close, so a caller must
|
|
268
|
+
* write the projection into it before asking anything.
|
|
269
|
+
*
|
|
270
|
+
* @returns An open, empty store; close it when done
|
|
271
|
+
*/
|
|
272
|
+
export async function openEphemeralQueryStore() {
|
|
273
|
+
return (await loadBackend()).openEphemeralProjectionStore();
|
|
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
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Load the selected backend module, or report it as uninstalled and exit.
|
|
289
|
+
*
|
|
290
|
+
* @returns The backend's module namespace
|
|
291
|
+
*/
|
|
292
|
+
async function loadBackend() {
|
|
293
|
+
// `node:sqlite` emits one ExperimentalWarning as it loads, even on a Node that
|
|
294
|
+
// needs no flag for it. `projection-sqlite` refuses to suppress that itself —
|
|
295
|
+
// correctly, since a blanket NODE_NO_WARNINGS hides real warnings — and
|
|
296
|
+
// assigns the filter to whichever caller turns the backend on by default.
|
|
297
|
+
// That caller is this module, and this import is the boundary.
|
|
298
|
+
//
|
|
299
|
+
// Restored immediately afterwards: the warning fires at module evaluation, so
|
|
300
|
+
// holding the filter open any longer would start hiding warnings this import
|
|
301
|
+
// did not cause.
|
|
302
|
+
const restoreWarnings = installSqliteWarningFilter();
|
|
303
|
+
try {
|
|
304
|
+
return await import('@vibe-agent-toolkit/projection-sqlite');
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
const floor = nodeSqliteFloorFailure(error);
|
|
308
|
+
if (floor !== undefined)
|
|
309
|
+
throw floor;
|
|
310
|
+
if (!isModuleMissing(error))
|
|
311
|
+
throw error;
|
|
312
|
+
reportMissingBackend(PROJECTION_STORE_BACKEND);
|
|
313
|
+
}
|
|
314
|
+
finally {
|
|
315
|
+
restoreWarnings();
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* The legible failure for "your Node is too old", or `undefined` when this is
|
|
320
|
+
* some other failure — including "the package is absent".
|
|
321
|
+
*
|
|
322
|
+
* Exported, and returning the error rather than throwing it, so the DIAGNOSIS
|
|
323
|
+
* is unit-testable without a mocked dynamic import. A test cannot make a mocked
|
|
324
|
+
* `import()` reject with a plain `{ code }` — the test runner wraps whatever a
|
|
325
|
+
* module factory throws in its own error, so the code never survives to be
|
|
326
|
+
* read — and the branch's whole value is the message it produces.
|
|
327
|
+
*
|
|
328
|
+
* 🪤 The two are **different error codes**, and only one of them reaches
|
|
329
|
+
* {@link isModuleMissing}. `@vibe-agent-toolkit/projection-sqlite` imports
|
|
330
|
+
* `node:sqlite`, which loads unflagged from Node 22.13.0 (it was added in 22.5.0
|
|
331
|
+
* behind `--experimental-sqlite`); on 22.0–22.12 an ordinary import fails
|
|
332
|
+
* with `ERR_UNKNOWN_BUILTIN_MODULE`, not `ERR_MODULE_NOT_FOUND`. Without this
|
|
333
|
+
* branch the user gets a bare `No such built-in module: node:sqlite` — which
|
|
334
|
+
* names neither the version floor nor the fix.
|
|
335
|
+
*
|
|
336
|
+
* ⚠️ It is reachable on an ordinary run and is not a corner: the query lane has
|
|
337
|
+
* always fallen back to {@link openEphemeralQueryStore} when no store is
|
|
338
|
+
* selected, which is the default, so `node:sqlite` is required on a default
|
|
339
|
+
* `vat resources query` whichever way the lane resolves its store.
|
|
340
|
+
*
|
|
341
|
+
* 🪤 This used to say "EVERY `vat resources query`/`check` run", and that was
|
|
342
|
+
* too strong for `check`. Measured against the built CLI on Node v24.13.1 by
|
|
343
|
+
* counting the `ExperimentalWarning` `node:sqlite` emits at load — the only
|
|
344
|
+
* externally visible tell that the module was reached at all:
|
|
345
|
+
*
|
|
346
|
+
* | Command | Warnings | Backend loaded? |
|
|
347
|
+
* |---|---|---|
|
|
348
|
+
* | `vat resources query "SELECT …"` | 1 | yes |
|
|
349
|
+
* | `vat resources check`, no checks declared | 0 | **no** |
|
|
350
|
+
*
|
|
351
|
+
* `check` reaches a store only when the project declares checks for it to
|
|
352
|
+
* evaluate, so a repo with none never loads the backend and never needed the
|
|
353
|
+
* floor for that command. The floor argument is unaffected — `query` alone
|
|
354
|
+
* establishes it — but "every default run of those two commands" was a claim
|
|
355
|
+
* nothing had counted.
|
|
356
|
+
*
|
|
357
|
+
* ✅ **VAT's declared floor is now `>=22.13.0`, so this no longer fires on a
|
|
358
|
+
* SUPPORTED Node.** It used to: the manifests said `>=22.0.0` while these two
|
|
359
|
+
* commands could not run below 22.13.0, which meant thirteen Node patch
|
|
360
|
+
* releases were advertised as supported and hard-failed here. The floor was
|
|
361
|
+
* raised to stop advertising what VAT cannot do. The branch stays load-bearing
|
|
362
|
+
* for the Node that is merely *installed* rather than supported — `engines` is
|
|
363
|
+
* a warning in npm and nothing at all under most runners, so a user on 22.4
|
|
364
|
+
* still reaches this and still deserves to be told which number is wrong.
|
|
365
|
+
*
|
|
366
|
+
* The repair stays distinct from the missing-package one on purpose:
|
|
367
|
+
* "install this package" is the wrong instruction for "upgrade Node", and
|
|
368
|
+
* sending someone round that loop cannot terminate.
|
|
369
|
+
*
|
|
370
|
+
* @param error - Whatever the dynamic import threw
|
|
371
|
+
* @returns The error to raise when Node itself lacks the builtin; `undefined`
|
|
372
|
+
* when this failure is something else and the caller should keep diagnosing
|
|
373
|
+
*/
|
|
374
|
+
export function nodeSqliteFloorFailure(error) {
|
|
375
|
+
const isFloor = typeof error === 'object'
|
|
376
|
+
&& error !== null
|
|
377
|
+
&& 'code' in error
|
|
378
|
+
&& error.code === UNKNOWN_BUILTIN_MODULE;
|
|
379
|
+
if (!isFloor)
|
|
380
|
+
return undefined;
|
|
381
|
+
return new Error('The projection store needs `node:sqlite`, which this Node does not have.'
|
|
382
|
+
// States the NODE fact (when the module arrived), never VAT's floor. The
|
|
383
|
+
// floor lives in `engines.node` and `vat doctor` derives it from there
|
|
384
|
+
// precisely so it has one home; restating it in a string would be the
|
|
385
|
+
// second copy that change exists to remove, and it would go stale silently
|
|
386
|
+
// the next time the floor moves.
|
|
387
|
+
+ ` \`node:sqlite\` loads unflagged from Node 22.13.0 (added in 22.5.0 behind`
|
|
388
|
+
+ ` \`--experimental-sqlite\`) — you are on ${process.version}.`
|
|
389
|
+
+ ' Upgrade Node to 22.13.0 or newer. Installing a package will not help:'
|
|
390
|
+
+ ' the module is built into Node, not published to npm.');
|
|
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
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Run one command's work with a projection store open for its whole duration,
|
|
453
|
+
* and closed however it ends.
|
|
454
|
+
*
|
|
455
|
+
* A scope rather than a bare open/close pair, because the store must outlive the
|
|
456
|
+
* call that builds a population source and not merely the call that uses it: the
|
|
457
|
+
* inventory extractor MEMOIZES its population provider and may reach it well
|
|
458
|
+
* after the frame that supplied it has returned. A store closed at the end of
|
|
459
|
+
* that frame would be closed under its own consumer.
|
|
460
|
+
*
|
|
461
|
+
* It is also the `withGitSnapshotCache` bracket for the work inside it, so the
|
|
462
|
+
* key and the extent filed under it come from ONE git snapshot — see the note
|
|
463
|
+
* in the body.
|
|
464
|
+
*
|
|
465
|
+
* `undefined` on a run with no store selected, which is the shape every
|
|
466
|
+
* population lane wants: no store means re-derive, not fail.
|
|
467
|
+
*
|
|
468
|
+
* ⚠️ A caller that wants to run SQL must NOT query this store. It is one
|
|
469
|
+
* database per VAT release, shared by every root on the machine, so arbitrary
|
|
470
|
+
* SQL over it answers from other repositories — see `projection-query.ts`.
|
|
471
|
+
* That is also why this is the ONLY scope over the opened store: there is no
|
|
472
|
+
* separate "opened handle" bracket for a caller wanting more than the cache,
|
|
473
|
+
* because there is nothing legitimate for such a caller to want.
|
|
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
|
+
*
|
|
488
|
+
* @param options - Where the corpus is
|
|
489
|
+
* @param options.root - The absolute corpus root
|
|
490
|
+
* @param work - Given the cache, or `undefined` when there is none to give
|
|
491
|
+
* @returns Whatever `work` returned
|
|
492
|
+
*/
|
|
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
|
+
}
|
|
503
|
+
// ONE git snapshot for the whole scope, and this is the level that gets it:
|
|
504
|
+
// `openPopulationCache` below takes one to derive the store key, and the crawl
|
|
505
|
+
// that runs inside `work` takes another to enumerate the extent — same
|
|
506
|
+
// repository, sequentially, ~195 ms and ~159 ms measured on a large monorepo.
|
|
507
|
+
//
|
|
508
|
+
// The correctness half matters more than the saving. Taken separately, a
|
|
509
|
+
// working-tree edit landing between them makes the two snapshots DIFFERENT
|
|
510
|
+
// answers, and the extent from the second is then filed under the key from the
|
|
511
|
+
// first: a cache entry whose key does not describe its contents, written
|
|
512
|
+
// silently. The bracket closes that race rather than merely deduplicating.
|
|
513
|
+
//
|
|
514
|
+
// Opened here rather than around either consumer because it must enclose BOTH
|
|
515
|
+
// — a bracket opened deeper than one of them dedupes nothing while looking
|
|
516
|
+
// exactly like a bracket that works. Every CLI entry into the projection lane
|
|
517
|
+
// (`inventory`, `resource-loader`'s two) reaches the store through this scope,
|
|
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));
|
|
521
|
+
}
|
|
522
|
+
//# sourceMappingURL=projection-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|