@cairn-tool/cairn 2.0.0
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/.markdownlintrc +7 -0
- package/LICENSE +21 -0
- package/README.md +1431 -0
- package/dist/agent/audit/baseline.d.ts +69 -0
- package/dist/agent/audit/baseline.js +128 -0
- package/dist/agent/audit/baseline.js.map +1 -0
- package/dist/agent/audit/index.d.ts +126 -0
- package/dist/agent/audit/index.js +625 -0
- package/dist/agent/audit/index.js.map +1 -0
- package/dist/agent/import/detect.d.ts +49 -0
- package/dist/agent/import/detect.js +159 -0
- package/dist/agent/import/detect.js.map +1 -0
- package/dist/agent/import/normalize.d.ts +72 -0
- package/dist/agent/import/normalize.js +475 -0
- package/dist/agent/import/normalize.js.map +1 -0
- package/dist/agent/install/index.d.ts +211 -0
- package/dist/agent/install/index.js +907 -0
- package/dist/agent/install/index.js.map +1 -0
- package/dist/agent/manifest.d.ts +75 -0
- package/dist/agent/manifest.js +210 -0
- package/dist/agent/manifest.js.map +1 -0
- package/dist/agent/marketplace/index.d.ts +69 -0
- package/dist/agent/marketplace/index.js +212 -0
- package/dist/agent/marketplace/index.js.map +1 -0
- package/dist/agent/marketplace/spec.d.ts +48 -0
- package/dist/agent/marketplace/spec.js +237 -0
- package/dist/agent/marketplace/spec.js.map +1 -0
- package/dist/agent/output.d.ts +36 -0
- package/dist/agent/output.js +56 -0
- package/dist/agent/output.js.map +1 -0
- package/dist/agent/overlays.d.ts +38 -0
- package/dist/agent/overlays.js +223 -0
- package/dist/agent/overlays.js.map +1 -0
- package/dist/agent/package/index.d.ts +105 -0
- package/dist/agent/package/index.js +339 -0
- package/dist/agent/package/index.js.map +1 -0
- package/dist/agent/package/tar.d.ts +36 -0
- package/dist/agent/package/tar.js +137 -0
- package/dist/agent/package/tar.js.map +1 -0
- package/dist/agent/parser.d.ts +13 -0
- package/dist/agent/parser.js +559 -0
- package/dist/agent/parser.js.map +1 -0
- package/dist/agent/render.d.ts +16 -0
- package/dist/agent/render.js +721 -0
- package/dist/agent/render.js.map +1 -0
- package/dist/agent/sarif.d.ts +18 -0
- package/dist/agent/sarif.js +56 -0
- package/dist/agent/sarif.js.map +1 -0
- package/dist/agent/scaffold.d.ts +86 -0
- package/dist/agent/scaffold.js +250 -0
- package/dist/agent/scaffold.js.map +1 -0
- package/dist/agent/targets/antigravity.d.ts +17 -0
- package/dist/agent/targets/antigravity.js +218 -0
- package/dist/agent/targets/antigravity.js.map +1 -0
- package/dist/agent/targets/claude-code.d.ts +2 -0
- package/dist/agent/targets/claude-code.js +220 -0
- package/dist/agent/targets/claude-code.js.map +1 -0
- package/dist/agent/targets/codex.d.ts +2 -0
- package/dist/agent/targets/codex.js +212 -0
- package/dist/agent/targets/codex.js.map +1 -0
- package/dist/agent/targets/cursor.d.ts +2 -0
- package/dist/agent/targets/cursor.js +210 -0
- package/dist/agent/targets/cursor.js.map +1 -0
- package/dist/agent/targets/index.d.ts +31 -0
- package/dist/agent/targets/index.js +64 -0
- package/dist/agent/targets/index.js.map +1 -0
- package/dist/agent/targets/opencode.d.ts +15 -0
- package/dist/agent/targets/opencode.js +215 -0
- package/dist/agent/targets/opencode.js.map +1 -0
- package/dist/agent/targets/schema.d.ts +315 -0
- package/dist/agent/targets/schema.js +179 -0
- package/dist/agent/targets/schema.js.map +1 -0
- package/dist/agent/test/assert.d.ts +46 -0
- package/dist/agent/test/assert.js +288 -0
- package/dist/agent/test/assert.js.map +1 -0
- package/dist/agent/test/index.d.ts +73 -0
- package/dist/agent/test/index.js +181 -0
- package/dist/agent/test/index.js.map +1 -0
- package/dist/agent/test/schema.d.ts +81 -0
- package/dist/agent/test/schema.js +235 -0
- package/dist/agent/test/schema.js.map +1 -0
- package/dist/agent/types.d.ts +204 -0
- package/dist/agent/types.js +11 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/agent/upgrade.d.ts +29 -0
- package/dist/agent/upgrade.js +72 -0
- package/dist/agent/upgrade.js.map +1 -0
- package/dist/agent/writer.d.ts +30 -0
- package/dist/agent/writer.js +73 -0
- package/dist/agent/writer.js.map +1 -0
- package/dist/archive/db.d.ts +20 -0
- package/dist/archive/db.js +98 -0
- package/dist/archive/db.js.map +1 -0
- package/dist/archive/progress.d.ts +62 -0
- package/dist/archive/progress.js +151 -0
- package/dist/archive/progress.js.map +1 -0
- package/dist/archive/query.d.ts +86 -0
- package/dist/archive/query.js +241 -0
- package/dist/archive/query.js.map +1 -0
- package/dist/archive/run.d.ts +91 -0
- package/dist/archive/run.js +331 -0
- package/dist/archive/run.js.map +1 -0
- package/dist/archive/segments.d.ts +89 -0
- package/dist/archive/segments.js +144 -0
- package/dist/archive/segments.js.map +1 -0
- package/dist/archive/sets.d.ts +58 -0
- package/dist/archive/sets.js +344 -0
- package/dist/archive/sets.js.map +1 -0
- package/dist/archive/tar-read.d.ts +35 -0
- package/dist/archive/tar-read.js +90 -0
- package/dist/archive/tar-read.js.map +1 -0
- package/dist/audit-baseline.d.ts +66 -0
- package/dist/audit-baseline.js +124 -0
- package/dist/audit-baseline.js.map +1 -0
- package/dist/automation.d.ts +16 -0
- package/dist/automation.js +38 -0
- package/dist/automation.js.map +1 -0
- package/dist/backlinks.d.ts +15 -0
- package/dist/backlinks.js +30 -0
- package/dist/backlinks.js.map +1 -0
- package/dist/checkers/katex.d.ts +3 -0
- package/dist/checkers/katex.js +71 -0
- package/dist/checkers/katex.js.map +1 -0
- package/dist/checkers/markdown-lint.d.ts +28 -0
- package/dist/checkers/markdown-lint.js +53 -0
- package/dist/checkers/markdown-lint.js.map +1 -0
- package/dist/checkers/mermaid.d.ts +6 -0
- package/dist/checkers/mermaid.js +53 -0
- package/dist/checkers/mermaid.js.map +1 -0
- package/dist/checkers/references.d.ts +3 -0
- package/dist/checkers/references.js +55 -0
- package/dist/checkers/references.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +1117 -0
- package/dist/cli.js.map +1 -0
- package/dist/command-result.d.ts +6 -0
- package/dist/command-result.js +13 -0
- package/dist/command-result.js.map +1 -0
- package/dist/commands/agent-audit.d.ts +21 -0
- package/dist/commands/agent-audit.js +119 -0
- package/dist/commands/agent-audit.js.map +1 -0
- package/dist/commands/agent-doctor.d.ts +25 -0
- package/dist/commands/agent-doctor.js +217 -0
- package/dist/commands/agent-doctor.js.map +1 -0
- package/dist/commands/agent-import.d.ts +21 -0
- package/dist/commands/agent-import.js +212 -0
- package/dist/commands/agent-import.js.map +1 -0
- package/dist/commands/agent-install.d.ts +18 -0
- package/dist/commands/agent-install.js +59 -0
- package/dist/commands/agent-install.js.map +1 -0
- package/dist/commands/agent-installed.d.ts +6 -0
- package/dist/commands/agent-installed.js +17 -0
- package/dist/commands/agent-installed.js.map +1 -0
- package/dist/commands/agent-marketplace.d.ts +11 -0
- package/dist/commands/agent-marketplace.js +178 -0
- package/dist/commands/agent-marketplace.js.map +1 -0
- package/dist/commands/agent-package.d.ts +16 -0
- package/dist/commands/agent-package.js +159 -0
- package/dist/commands/agent-package.js.map +1 -0
- package/dist/commands/agent-scaffold.d.ts +17 -0
- package/dist/commands/agent-scaffold.js +181 -0
- package/dist/commands/agent-scaffold.js.map +1 -0
- package/dist/commands/agent-specs.d.ts +7 -0
- package/dist/commands/agent-specs.js +20 -0
- package/dist/commands/agent-specs.js.map +1 -0
- package/dist/commands/agent-test.d.ts +21 -0
- package/dist/commands/agent-test.js +50 -0
- package/dist/commands/agent-test.js.map +1 -0
- package/dist/commands/agent-uninstall.d.ts +6 -0
- package/dist/commands/agent-uninstall.js +45 -0
- package/dist/commands/agent-uninstall.js.map +1 -0
- package/dist/commands/agent-upgrade.d.ts +5 -0
- package/dist/commands/agent-upgrade.js +105 -0
- package/dist/commands/agent-upgrade.js.map +1 -0
- package/dist/commands/agent.d.ts +27 -0
- package/dist/commands/agent.js +549 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/archive.d.ts +47 -0
- package/dist/commands/archive.js +311 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/audit.d.ts +25 -0
- package/dist/commands/audit.js +325 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/check-snippets.d.ts +58 -0
- package/dist/commands/check-snippets.js +247 -0
- package/dist/commands/check-snippets.js.map +1 -0
- package/dist/commands/check-urls.d.ts +52 -0
- package/dist/commands/check-urls.js +205 -0
- package/dist/commands/check-urls.js.map +1 -0
- package/dist/commands/code-blocks.d.ts +8 -0
- package/dist/commands/code-blocks.js +66 -0
- package/dist/commands/code-blocks.js.map +1 -0
- package/dist/commands/completion.d.ts +15 -0
- package/dist/commands/completion.js +20 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/context.d.ts +16 -0
- package/dist/commands/context.js +131 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/describe.d.ts +12 -0
- package/dist/commands/describe.js +62 -0
- package/dist/commands/describe.js.map +1 -0
- package/dist/commands/diff.d.ts +11 -0
- package/dist/commands/diff.js +185 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/fix.d.ts +59 -0
- package/dist/commands/fix.js +173 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/frontmatter.d.ts +7 -0
- package/dist/commands/frontmatter.js +84 -0
- package/dist/commands/frontmatter.js.map +1 -0
- package/dist/commands/graph.d.ts +12 -0
- package/dist/commands/graph.js +122 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/headers.d.ts +7 -0
- package/dist/commands/headers.js +48 -0
- package/dist/commands/headers.js.map +1 -0
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.js +32 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/links.d.ts +9 -0
- package/dist/commands/links.js +123 -0
- package/dist/commands/links.js.map +1 -0
- package/dist/commands/lint-dir.d.ts +15 -0
- package/dist/commands/lint-dir.js +156 -0
- package/dist/commands/lint-dir.js.map +1 -0
- package/dist/commands/lint.d.ts +14 -0
- package/dist/commands/lint.js +45 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/orphans.d.ts +10 -0
- package/dist/commands/orphans.js +74 -0
- package/dist/commands/orphans.js.map +1 -0
- package/dist/commands/outline.d.ts +7 -0
- package/dist/commands/outline.js +54 -0
- package/dist/commands/outline.js.map +1 -0
- package/dist/commands/query.d.ts +18 -0
- package/dist/commands/query.js +341 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/commands/refs-to.d.ts +8 -0
- package/dist/commands/refs-to.js +65 -0
- package/dist/commands/refs-to.js.map +1 -0
- package/dist/commands/refs.d.ts +10 -0
- package/dist/commands/refs.js +103 -0
- package/dist/commands/refs.js.map +1 -0
- package/dist/commands/rename-file.d.ts +16 -0
- package/dist/commands/rename-file.js +215 -0
- package/dist/commands/rename-file.js.map +1 -0
- package/dist/commands/rename-heading.d.ts +10 -0
- package/dist/commands/rename-heading.js +182 -0
- package/dist/commands/rename-heading.js.map +1 -0
- package/dist/commands/schema.d.ts +10 -0
- package/dist/commands/schema.js +34 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/scripts.d.ts +59 -0
- package/dist/commands/scripts.js +222 -0
- package/dist/commands/scripts.js.map +1 -0
- package/dist/commands/section.d.ts +9 -0
- package/dist/commands/section.js +49 -0
- package/dist/commands/section.js.map +1 -0
- package/dist/commands/serve.d.ts +6 -0
- package/dist/commands/serve.js +48 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/stats.d.ts +6 -0
- package/dist/commands/stats.js +109 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/structure.d.ts +6 -0
- package/dist/commands/structure.js +130 -0
- package/dist/commands/structure.js.map +1 -0
- package/dist/commands/tables.d.ts +8 -0
- package/dist/commands/tables.js +77 -0
- package/dist/commands/tables.js.map +1 -0
- package/dist/commands/tasks.d.ts +8 -0
- package/dist/commands/tasks.js +59 -0
- package/dist/commands/tasks.js.map +1 -0
- package/dist/commands/toc.d.ts +18 -0
- package/dist/commands/toc.js +105 -0
- package/dist/commands/toc.js.map +1 -0
- package/dist/commands/update-check.d.ts +36 -0
- package/dist/commands/update-check.js +119 -0
- package/dist/commands/update-check.js.map +1 -0
- package/dist/commands/usage.d.ts +56 -0
- package/dist/commands/usage.js +883 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/commands/validate-frontmatter.d.ts +13 -0
- package/dist/commands/validate-frontmatter.js +34 -0
- package/dist/commands/validate-frontmatter.js.map +1 -0
- package/dist/completion/model.d.ts +49 -0
- package/dist/completion/model.js +194 -0
- package/dist/completion/model.js.map +1 -0
- package/dist/completion/shells.d.ts +2 -0
- package/dist/completion/shells.js +280 -0
- package/dist/completion/shells.js.map +1 -0
- package/dist/config-schema.d.ts +15 -0
- package/dist/config-schema.js +44 -0
- package/dist/config-schema.js.map +1 -0
- package/dist/config.d.ts +102 -0
- package/dist/config.js +614 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +106 -0
- package/dist/context.js +202 -0
- package/dist/context.js.map +1 -0
- package/dist/contract/describe.d.ts +84 -0
- package/dist/contract/describe.js +104 -0
- package/dist/contract/describe.js.map +1 -0
- package/dist/contract/registry.d.ts +2 -0
- package/dist/contract/registry.js +622 -0
- package/dist/contract/registry.js.map +1 -0
- package/dist/contract/schemas/agent.d.ts +2 -0
- package/dist/contract/schemas/agent.js +572 -0
- package/dist/contract/schemas/agent.js.map +1 -0
- package/dist/contract/schemas/archive.d.ts +3 -0
- package/dist/contract/schemas/archive.js +227 -0
- package/dist/contract/schemas/archive.js.map +1 -0
- package/dist/contract/schemas/index.d.ts +11 -0
- package/dist/contract/schemas/index.js +49 -0
- package/dist/contract/schemas/index.js.map +1 -0
- package/dist/contract/schemas/markdown.d.ts +15 -0
- package/dist/contract/schemas/markdown.js +1035 -0
- package/dist/contract/schemas/markdown.js.map +1 -0
- package/dist/contract/schemas/meta.d.ts +5 -0
- package/dist/contract/schemas/meta.js +233 -0
- package/dist/contract/schemas/meta.js.map +1 -0
- package/dist/contract/schemas/scripts.d.ts +4 -0
- package/dist/contract/schemas/scripts.js +183 -0
- package/dist/contract/schemas/scripts.js.map +1 -0
- package/dist/contract/schemas/shared.d.ts +11 -0
- package/dist/contract/schemas/shared.js +26 -0
- package/dist/contract/schemas/shared.js.map +1 -0
- package/dist/contract/schemas/usage.d.ts +6 -0
- package/dist/contract/schemas/usage.js +489 -0
- package/dist/contract/schemas/usage.js.map +1 -0
- package/dist/contract/types.d.ts +63 -0
- package/dist/contract/types.js +2 -0
- package/dist/contract/types.js.map +1 -0
- package/dist/contract/version.d.ts +20 -0
- package/dist/contract/version.js +21 -0
- package/dist/contract/version.js.map +1 -0
- package/dist/diff.d.ts +156 -0
- package/dist/diff.js +500 -0
- package/dist/diff.js.map +1 -0
- package/dist/edit-plan.d.ts +133 -0
- package/dist/edit-plan.js +245 -0
- package/dist/edit-plan.js.map +1 -0
- package/dist/fix/markdownlint-fixer.d.ts +34 -0
- package/dist/fix/markdownlint-fixer.js +125 -0
- package/dist/fix/markdownlint-fixer.js.map +1 -0
- package/dist/fix/registry.d.ts +48 -0
- package/dist/fix/registry.js +28 -0
- package/dist/fix/registry.js.map +1 -0
- package/dist/fix/relative-links-fixer.d.ts +21 -0
- package/dist/fix/relative-links-fixer.js +96 -0
- package/dist/fix/relative-links-fixer.js.map +1 -0
- package/dist/fix/snippets-fixer.d.ts +2 -0
- package/dist/fix/snippets-fixer.js +64 -0
- package/dist/fix/snippets-fixer.js.map +1 -0
- package/dist/fix/toc-fixer.d.ts +2 -0
- package/dist/fix/toc-fixer.js +94 -0
- package/dist/fix/toc-fixer.js.map +1 -0
- package/dist/formats.d.ts +22 -0
- package/dist/formats.js +34 -0
- package/dist/formats.js.map +1 -0
- package/dist/formatters.d.ts +11 -0
- package/dist/formatters.js +48 -0
- package/dist/formatters.js.map +1 -0
- package/dist/frontmatter-validation.d.ts +11 -0
- package/dist/frontmatter-validation.js +188 -0
- package/dist/frontmatter-validation.js.map +1 -0
- package/dist/git.d.ts +40 -0
- package/dist/git.js +124 -0
- package/dist/git.js.map +1 -0
- package/dist/graph.d.ts +50 -0
- package/dist/graph.js +200 -0
- package/dist/graph.js.map +1 -0
- package/dist/input-selection.d.ts +9 -0
- package/dist/input-selection.js +122 -0
- package/dist/input-selection.js.map +1 -0
- package/dist/input.d.ts +2 -0
- package/dist/input.js +32 -0
- package/dist/input.js.map +1 -0
- package/dist/link-target.d.ts +39 -0
- package/dist/link-target.js +68 -0
- package/dist/link-target.js.map +1 -0
- package/dist/lint.d.ts +13 -0
- package/dist/lint.js +27 -0
- package/dist/lint.js.map +1 -0
- package/dist/markdown-ast.d.ts +73 -0
- package/dist/markdown-ast.js +187 -0
- package/dist/markdown-ast.js.map +1 -0
- package/dist/object-path.d.ts +14 -0
- package/dist/object-path.js +14 -0
- package/dist/object-path.js.map +1 -0
- package/dist/option-utils.d.ts +13 -0
- package/dist/option-utils.js +25 -0
- package/dist/option-utils.js.map +1 -0
- package/dist/outline.d.ts +16 -0
- package/dist/outline.js +32 -0
- package/dist/outline.js.map +1 -0
- package/dist/query/entities.d.ts +60 -0
- package/dist/query/entities.js +219 -0
- package/dist/query/entities.js.map +1 -0
- package/dist/query/execute.d.ts +22 -0
- package/dist/query/execute.js +0 -0
- package/dist/query/execute.js.map +1 -0
- package/dist/query/plan.d.ts +76 -0
- package/dist/query/plan.js +183 -0
- package/dist/query/plan.js.map +1 -0
- package/dist/query/render.d.ts +3 -0
- package/dist/query/render.js +39 -0
- package/dist/query/render.js.map +1 -0
- package/dist/refs.d.ts +19 -0
- package/dist/refs.js +10 -0
- package/dist/refs.js.map +1 -0
- package/dist/result.d.ts +49 -0
- package/dist/result.js +47 -0
- package/dist/result.js.map +1 -0
- package/dist/runtime.d.ts +35 -0
- package/dist/runtime.js +77 -0
- package/dist/runtime.js.map +1 -0
- package/dist/sarif.d.ts +36 -0
- package/dist/sarif.js +30 -0
- package/dist/sarif.js.map +1 -0
- package/dist/scripts/execute.d.ts +65 -0
- package/dist/scripts/execute.js +235 -0
- package/dist/scripts/execute.js.map +1 -0
- package/dist/scripts/registry.d.ts +55 -0
- package/dist/scripts/registry.js +103 -0
- package/dist/scripts/registry.js.map +1 -0
- package/dist/scripts/resolve.d.ts +90 -0
- package/dist/scripts/resolve.js +288 -0
- package/dist/scripts/resolve.js.map +1 -0
- package/dist/sections.d.ts +53 -0
- package/dist/sections.js +100 -0
- package/dist/sections.js.map +1 -0
- package/dist/serve/errors.d.ts +25 -0
- package/dist/serve/errors.js +45 -0
- package/dist/serve/errors.js.map +1 -0
- package/dist/serve/paths.d.ts +32 -0
- package/dist/serve/paths.js +71 -0
- package/dist/serve/paths.js.map +1 -0
- package/dist/serve/server.d.ts +31 -0
- package/dist/serve/server.js +123 -0
- package/dist/serve/server.js.map +1 -0
- package/dist/serve/tools.d.ts +19 -0
- package/dist/serve/tools.js +597 -0
- package/dist/serve/tools.js.map +1 -0
- package/dist/snippets.d.ts +184 -0
- package/dist/snippets.js +454 -0
- package/dist/snippets.js.map +1 -0
- package/dist/sqlite-store.d.ts +62 -0
- package/dist/sqlite-store.js +104 -0
- package/dist/sqlite-store.js.map +1 -0
- package/dist/sqlite.d.ts +59 -0
- package/dist/sqlite.js +51 -0
- package/dist/sqlite.js.map +1 -0
- package/dist/toc.d.ts +58 -0
- package/dist/toc.js +83 -0
- package/dist/toc.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/update-notifier.d.ts +95 -0
- package/dist/update-notifier.js +301 -0
- package/dist/update-notifier.js.map +1 -0
- package/dist/url-cache.d.ts +14 -0
- package/dist/url-cache.js +70 -0
- package/dist/url-cache.js.map +1 -0
- package/dist/usage/aggregate.d.ts +107 -0
- package/dist/usage/aggregate.js +435 -0
- package/dist/usage/aggregate.js.map +1 -0
- package/dist/usage/db/index.d.ts +49 -0
- package/dist/usage/db/index.js +118 -0
- package/dist/usage/db/index.js.map +1 -0
- package/dist/usage/db/migrations.d.ts +29 -0
- package/dist/usage/db/migrations.js +38 -0
- package/dist/usage/db/migrations.js.map +1 -0
- package/dist/usage/db/open.d.ts +33 -0
- package/dist/usage/db/open.js +37 -0
- package/dist/usage/db/open.js.map +1 -0
- package/dist/usage/db/schema.d.ts +18 -0
- package/dist/usage/db/schema.js +147 -0
- package/dist/usage/db/schema.js.map +1 -0
- package/dist/usage/db/store.d.ts +74 -0
- package/dist/usage/db/store.js +280 -0
- package/dist/usage/db/store.js.map +1 -0
- package/dist/usage/events.d.ts +202 -0
- package/dist/usage/events.js +243 -0
- package/dist/usage/events.js.map +1 -0
- package/dist/usage/filter.d.ts +43 -0
- package/dist/usage/filter.js +97 -0
- package/dist/usage/filter.js.map +1 -0
- package/dist/usage/providers/antigravity.d.ts +2 -0
- package/dist/usage/providers/antigravity.js +431 -0
- package/dist/usage/providers/antigravity.js.map +1 -0
- package/dist/usage/providers/claude-code.d.ts +2 -0
- package/dist/usage/providers/claude-code.js +400 -0
- package/dist/usage/providers/claude-code.js.map +1 -0
- package/dist/usage/providers/codex.d.ts +2 -0
- package/dist/usage/providers/codex.js +387 -0
- package/dist/usage/providers/codex.js.map +1 -0
- package/dist/usage/providers/gemini-cli.d.ts +2 -0
- package/dist/usage/providers/gemini-cli.js +466 -0
- package/dist/usage/providers/gemini-cli.js.map +1 -0
- package/dist/usage/providers/index.d.ts +23 -0
- package/dist/usage/providers/index.js +46 -0
- package/dist/usage/providers/index.js.map +1 -0
- package/dist/usage/providers/opencode.d.ts +2 -0
- package/dist/usage/providers/opencode.js +422 -0
- package/dist/usage/providers/opencode.js.map +1 -0
- package/dist/usage/providers/protobuf.d.ts +35 -0
- package/dist/usage/providers/protobuf.js +125 -0
- package/dist/usage/providers/protobuf.js.map +1 -0
- package/dist/usage/providers/types.d.ts +74 -0
- package/dist/usage/providers/types.js +2 -0
- package/dist/usage/providers/types.js.map +1 -0
- package/dist/usage/scan.d.ts +54 -0
- package/dist/usage/scan.js +216 -0
- package/dist/usage/scan.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/dist/workspace-index.d.ts +39 -0
- package/dist/workspace-index.js +265 -0
- package/dist/workspace-index.js.map +1 -0
- package/dist/workspace.d.ts +89 -0
- package/dist/workspace.js +219 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version of the target-profile shape itself. Hand-owned; unrelated to the
|
|
3
|
+
* semantic-release-managed package version. Bump only when the profile
|
|
4
|
+
* structure changes in a way consumers must react to.
|
|
5
|
+
*/
|
|
6
|
+
export const PROFILE_SCHEMA_VERSION = "2";
|
|
7
|
+
export const PORTABLE_HOOK_EVENTS = [
|
|
8
|
+
"session-start",
|
|
9
|
+
"pre-tool-use",
|
|
10
|
+
"post-tool-use",
|
|
11
|
+
"stop",
|
|
12
|
+
];
|
|
13
|
+
export const FEATURE_KEYS = [
|
|
14
|
+
"skills",
|
|
15
|
+
"agents",
|
|
16
|
+
"rules",
|
|
17
|
+
"hooks",
|
|
18
|
+
"policies",
|
|
19
|
+
"mcp",
|
|
20
|
+
"assets",
|
|
21
|
+
"placeholders",
|
|
22
|
+
"native",
|
|
23
|
+
];
|
|
24
|
+
function segmentToSource(segment) {
|
|
25
|
+
if (segment === "**")
|
|
26
|
+
return "(?:.+)?";
|
|
27
|
+
let source = "";
|
|
28
|
+
for (let index = 0; index < segment.length;) {
|
|
29
|
+
const char = segment[index];
|
|
30
|
+
if (char === "{") {
|
|
31
|
+
const close = segment.indexOf("}", index);
|
|
32
|
+
if (close !== -1) {
|
|
33
|
+
source += "[^/]+";
|
|
34
|
+
index = close + 1;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (char === "*") {
|
|
39
|
+
source += "[^/]*";
|
|
40
|
+
index++;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
source += char.replace(/[.+^${}()|[\]\\?]/, "\\$&");
|
|
44
|
+
index++;
|
|
45
|
+
}
|
|
46
|
+
return source;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Compiles an {@link OutputPattern} into an anchored regular expression.
|
|
50
|
+
* `**` is only meaningful as a whole trailing segment.
|
|
51
|
+
*/
|
|
52
|
+
export function outputPatternToRegExp(pattern) {
|
|
53
|
+
const source = pattern
|
|
54
|
+
.split("/")
|
|
55
|
+
.map(segmentToSource)
|
|
56
|
+
.join("/")
|
|
57
|
+
// A trailing `/**` must also match the bare directory prefix.
|
|
58
|
+
.replace(/\/\(\?:\.\+\)\?$/, "(?:/.+)?");
|
|
59
|
+
return new RegExp(`^${source}$`);
|
|
60
|
+
}
|
|
61
|
+
/** True when `candidate` is described by one of the target's declared output patterns. */
|
|
62
|
+
export function describesPath(profile, outputProfile, candidate) {
|
|
63
|
+
return (profile.outputs[outputProfile] ?? []).some((entry) => outputPatternToRegExp(entry.pattern).test(candidate));
|
|
64
|
+
}
|
|
65
|
+
export function parseSemver(value) {
|
|
66
|
+
const match = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/.exec(value.trim());
|
|
67
|
+
if (!match)
|
|
68
|
+
return null;
|
|
69
|
+
return {
|
|
70
|
+
major: Number(match[1]),
|
|
71
|
+
minor: Number(match[2]),
|
|
72
|
+
patch: Number(match[3]),
|
|
73
|
+
prerelease: match[4] ?? null,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Compares two plain versions. Deliberately not a range grammar — profiles
|
|
78
|
+
* record single bounds, so ordering is all that is needed.
|
|
79
|
+
*/
|
|
80
|
+
export function compareSemver(a, b) {
|
|
81
|
+
const left = parseSemver(a);
|
|
82
|
+
const right = parseSemver(b);
|
|
83
|
+
if (!left || !right)
|
|
84
|
+
throw new Error(`Invalid version: ${left ? b : a}`);
|
|
85
|
+
for (const key of ["major", "minor", "patch"]) {
|
|
86
|
+
if (left[key] !== right[key])
|
|
87
|
+
return left[key] < right[key] ? -1 : 1;
|
|
88
|
+
}
|
|
89
|
+
if (left.prerelease === right.prerelease)
|
|
90
|
+
return 0;
|
|
91
|
+
// A prerelease sorts below the matching release.
|
|
92
|
+
if (left.prerelease === null)
|
|
93
|
+
return 1;
|
|
94
|
+
if (right.prerelease === null)
|
|
95
|
+
return -1;
|
|
96
|
+
return left.prerelease < right.prerelease ? -1 : 1;
|
|
97
|
+
}
|
|
98
|
+
/** Returns the reasons a profile is internally inconsistent; empty when valid. */
|
|
99
|
+
export function validateProfile(profile) {
|
|
100
|
+
const problems = [];
|
|
101
|
+
if (profile.schemaVersion !== PROFILE_SCHEMA_VERSION)
|
|
102
|
+
problems.push(`schemaVersion is '${profile.schemaVersion}', expected '${PROFILE_SCHEMA_VERSION}'`);
|
|
103
|
+
if (!profile.profiles.length)
|
|
104
|
+
problems.push("declares no output profiles");
|
|
105
|
+
for (const key of FEATURE_KEYS) {
|
|
106
|
+
const feature = profile.features[key];
|
|
107
|
+
if (!feature) {
|
|
108
|
+
problems.push(`missing feature declaration '${key}'`);
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (!feature.summary.trim())
|
|
112
|
+
problems.push(`feature '${key}' has an empty summary`);
|
|
113
|
+
for (const code of feature.diagnostics)
|
|
114
|
+
if (!/^AB\d{3}$/.test(code))
|
|
115
|
+
problems.push(`feature '${key}' declares malformed diagnostic code '${code}'`);
|
|
116
|
+
for (const outputProfile of feature.profiles)
|
|
117
|
+
if (!profile.profiles.includes(outputProfile))
|
|
118
|
+
problems.push(`feature '${key}' names unsupported output profile '${outputProfile}'`);
|
|
119
|
+
}
|
|
120
|
+
for (const outputProfile of profile.profiles) {
|
|
121
|
+
const patterns = profile.outputs[outputProfile];
|
|
122
|
+
if (!patterns?.length) {
|
|
123
|
+
problems.push(`output profile '${outputProfile}' declares no output patterns`);
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
for (const entry of patterns) {
|
|
127
|
+
if (entry.pattern.startsWith("/") || entry.pattern.includes("\\"))
|
|
128
|
+
problems.push(`output pattern '${entry.pattern}' is not a POSIX relative path`);
|
|
129
|
+
if (entry.pattern.split("/").includes(".."))
|
|
130
|
+
problems.push(`output pattern '${entry.pattern}' escapes the target root`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const policyForms = [
|
|
134
|
+
"claude-permissions",
|
|
135
|
+
"codex-prefix-rules",
|
|
136
|
+
"cursor-hooks",
|
|
137
|
+
"opencode-permission",
|
|
138
|
+
];
|
|
139
|
+
if (profile.policies.form !== null && !policyForms.includes(profile.policies.form))
|
|
140
|
+
problems.push(`policies.form '${profile.policies.form}' is not a known form`);
|
|
141
|
+
const invocationForms = ["frontmatter-flag", "openai-yaml", "advisory"];
|
|
142
|
+
if (profile.skills.invocationPolicy !== null &&
|
|
143
|
+
!invocationForms.includes(profile.skills.invocationPolicy))
|
|
144
|
+
problems.push(`skills.invocationPolicy '${profile.skills.invocationPolicy}' is not a known form`);
|
|
145
|
+
for (const event of profile.hooks.matcherEvents)
|
|
146
|
+
if (!PORTABLE_HOOK_EVENTS.includes(event))
|
|
147
|
+
problems.push(`hooks.matcherEvents names unknown event '${event}'`);
|
|
148
|
+
if (profile.hooks.handlerShape === "nested-for-matcher-events" &&
|
|
149
|
+
!profile.hooks.matcherEvents.length)
|
|
150
|
+
problems.push("hooks.handlerShape is 'nested-for-matcher-events' but matcherEvents is empty");
|
|
151
|
+
for (const version of [profile.host.minimumVersion, profile.host.verifiedThrough])
|
|
152
|
+
if (version !== null && !parseSemver(version))
|
|
153
|
+
problems.push(`host version '${version}' is not a valid semantic version`);
|
|
154
|
+
if (profile.host.minimumVersion &&
|
|
155
|
+
profile.host.verifiedThrough &&
|
|
156
|
+
compareSemver(profile.host.minimumVersion, profile.host.verifiedThrough) > 0)
|
|
157
|
+
problems.push("host minimumVersion is greater than verifiedThrough");
|
|
158
|
+
if (profile.install) {
|
|
159
|
+
for (const scope of ["user", "project"]) {
|
|
160
|
+
const location = profile.install[scope];
|
|
161
|
+
if (!location)
|
|
162
|
+
continue;
|
|
163
|
+
if (!["plugin-dir", "merge", "marketplace"].includes(location.layout))
|
|
164
|
+
problems.push(`install.${scope}.layout '${location.layout}' is not a known layout`);
|
|
165
|
+
if (!profile.profiles.includes(location.profile))
|
|
166
|
+
problems.push(`install.${scope} names unsupported output profile '${location.profile}'`);
|
|
167
|
+
if (location.root.split(/[/\\]/).includes(".."))
|
|
168
|
+
problems.push(`install.${scope}.root escapes its scope`);
|
|
169
|
+
if (location.activation) {
|
|
170
|
+
if (location.activation.form !== "claude-enabled-plugins")
|
|
171
|
+
problems.push(`install.${scope}.activation.form is unknown`);
|
|
172
|
+
if (!location.activation.file.trim())
|
|
173
|
+
problems.push(`install.${scope}.activation.file is empty`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return problems;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/agent/targets/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { AgentDiagnostic, AgentProfile, AgentTarget, Artifact } from "../types.js";
|
|
2
|
+
import type { CaseExpectations } from "./schema.js";
|
|
3
|
+
/** Codes every run evaluates, in the order the checks apply. */
|
|
4
|
+
export declare const TEST_CHECKS: string[];
|
|
5
|
+
/** One unmet expectation, for one target and profile. */
|
|
6
|
+
export interface TestFailure {
|
|
7
|
+
code: string;
|
|
8
|
+
/** Which expectation failed, e.g. `paths.present` or `files[0].includes`. */
|
|
9
|
+
assertion: string;
|
|
10
|
+
message: string;
|
|
11
|
+
expected: string;
|
|
12
|
+
actual: string;
|
|
13
|
+
}
|
|
14
|
+
/** A rendered `<target>/<profile>` tree, with the prefix already stripped. */
|
|
15
|
+
export interface RenderedTree {
|
|
16
|
+
target: AgentTarget;
|
|
17
|
+
profile: AgentProfile;
|
|
18
|
+
/** Artifacts keyed by path relative to `<target>/<profile>/`. */
|
|
19
|
+
artifacts: Artifact[];
|
|
20
|
+
diagnostics: AgentDiagnostic[];
|
|
21
|
+
}
|
|
22
|
+
export declare function sha256(content: Buffer): string;
|
|
23
|
+
/**
|
|
24
|
+
* Golden digest over a rendered tree.
|
|
25
|
+
*
|
|
26
|
+
* The serialization is part of the command's contract — authors paste the value
|
|
27
|
+
* into a test file — so it is spelled out here and in the documentation rather
|
|
28
|
+
* than left as "whatever the hash function was fed". Artifacts are ordered by
|
|
29
|
+
* byte comparison of path, never `localeCompare`, so the value cannot depend on
|
|
30
|
+
* the ICU build of the machine that produced it.
|
|
31
|
+
*/
|
|
32
|
+
export declare function treeDigest(artifacts: Artifact[]): string;
|
|
33
|
+
/**
|
|
34
|
+
* Recursive containment.
|
|
35
|
+
*
|
|
36
|
+
* An object matches when every expected key is present and matches; an array
|
|
37
|
+
* matches when every expected element has a counterpart somewhere in the actual
|
|
38
|
+
* array, order-independent; anything else must be strictly equal. That is what
|
|
39
|
+
* `contains` means in a test file, and it is why asserting a manifest fragment
|
|
40
|
+
* does not require restating the whole document.
|
|
41
|
+
*/
|
|
42
|
+
export declare function contains(actual: unknown, expected: unknown): boolean;
|
|
43
|
+
/** How many individual expectations a case states, for the assertion counts. */
|
|
44
|
+
export declare function countAssertions(expect: CaseExpectations): number;
|
|
45
|
+
/** Every expectation of a case, evaluated against one rendered tree. */
|
|
46
|
+
export declare function evaluate(expect: CaseExpectations, tree: RenderedTree): TestFailure[];
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import { outputPatternToRegExp } from "../targets/schema.js";
|
|
3
|
+
import { SEVERITIES } from "./schema.js";
|
|
4
|
+
/** Codes every run evaluates, in the order the checks apply. */
|
|
5
|
+
export const TEST_CHECKS = ["AB710", "AB711", "AB712", "AB713", "AB714", "AB715"];
|
|
6
|
+
export function sha256(content) {
|
|
7
|
+
return crypto.createHash("sha256").update(content).digest("hex");
|
|
8
|
+
}
|
|
9
|
+
function byPath(a, b) {
|
|
10
|
+
return a.path < b.path ? -1 : a.path > b.path ? 1 : 0;
|
|
11
|
+
}
|
|
12
|
+
function octal(mode) {
|
|
13
|
+
return `0${mode.toString(8)}`;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Golden digest over a rendered tree.
|
|
17
|
+
*
|
|
18
|
+
* The serialization is part of the command's contract — authors paste the value
|
|
19
|
+
* into a test file — so it is spelled out here and in the documentation rather
|
|
20
|
+
* than left as "whatever the hash function was fed". Artifacts are ordered by
|
|
21
|
+
* byte comparison of path, never `localeCompare`, so the value cannot depend on
|
|
22
|
+
* the ICU build of the machine that produced it.
|
|
23
|
+
*/
|
|
24
|
+
export function treeDigest(artifacts) {
|
|
25
|
+
const lines = [...artifacts]
|
|
26
|
+
.sort(byPath)
|
|
27
|
+
.map((artifact) => `${artifact.path}\n${octal(artifact.mode)}\n${sha256(artifact.content)}\n`);
|
|
28
|
+
return sha256(Buffer.from(lines.join(""), "utf8"));
|
|
29
|
+
}
|
|
30
|
+
function sameDigest(expected, actual) {
|
|
31
|
+
return expected.trim().toLowerCase() === actual.toLowerCase();
|
|
32
|
+
}
|
|
33
|
+
function find(tree, file) {
|
|
34
|
+
return tree.artifacts.find((artifact) => artifact.path === file);
|
|
35
|
+
}
|
|
36
|
+
function matching(tree, pattern) {
|
|
37
|
+
const expression = outputPatternToRegExp(pattern);
|
|
38
|
+
return tree.artifacts.filter((artifact) => expression.test(artifact.path)).map((a) => a.path);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Recursive containment.
|
|
42
|
+
*
|
|
43
|
+
* An object matches when every expected key is present and matches; an array
|
|
44
|
+
* matches when every expected element has a counterpart somewhere in the actual
|
|
45
|
+
* array, order-independent; anything else must be strictly equal. That is what
|
|
46
|
+
* `contains` means in a test file, and it is why asserting a manifest fragment
|
|
47
|
+
* does not require restating the whole document.
|
|
48
|
+
*/
|
|
49
|
+
export function contains(actual, expected) {
|
|
50
|
+
if (Array.isArray(expected))
|
|
51
|
+
return (Array.isArray(actual) &&
|
|
52
|
+
expected.every((item) => actual.some((candidate) => contains(candidate, item))));
|
|
53
|
+
if (expected && typeof expected === "object")
|
|
54
|
+
return (Boolean(actual) &&
|
|
55
|
+
typeof actual === "object" &&
|
|
56
|
+
!Array.isArray(actual) &&
|
|
57
|
+
Object.entries(expected).every(([key, value]) => contains(actual[key], value)));
|
|
58
|
+
return actual === expected;
|
|
59
|
+
}
|
|
60
|
+
function severityRank(severity) {
|
|
61
|
+
return SEVERITIES.indexOf(severity);
|
|
62
|
+
}
|
|
63
|
+
function checkPaths(expect, tree) {
|
|
64
|
+
const failures = [];
|
|
65
|
+
for (const pattern of expect.paths.present)
|
|
66
|
+
if (!matching(tree, pattern).length)
|
|
67
|
+
failures.push({
|
|
68
|
+
code: "AB710",
|
|
69
|
+
assertion: "paths.present",
|
|
70
|
+
message: `No rendered path matches '${pattern}'`,
|
|
71
|
+
expected: pattern,
|
|
72
|
+
actual: "no match",
|
|
73
|
+
});
|
|
74
|
+
for (const pattern of expect.paths.absent) {
|
|
75
|
+
const hits = matching(tree, pattern);
|
|
76
|
+
if (hits.length)
|
|
77
|
+
failures.push({
|
|
78
|
+
code: "AB711",
|
|
79
|
+
assertion: "paths.absent",
|
|
80
|
+
message: `Rendered path '${hits[0]}' matches '${pattern}', which was expected to be absent`,
|
|
81
|
+
expected: `no match for ${pattern}`,
|
|
82
|
+
actual: hits.join(", "),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return failures;
|
|
86
|
+
}
|
|
87
|
+
function checkFiles(expect, tree) {
|
|
88
|
+
const failures = [];
|
|
89
|
+
for (const [index, expectation] of expect.files.entries()) {
|
|
90
|
+
const label = `files[${index}]`;
|
|
91
|
+
const artifact = find(tree, expectation.path);
|
|
92
|
+
if (!artifact) {
|
|
93
|
+
failures.push({
|
|
94
|
+
code: "AB712",
|
|
95
|
+
assertion: `${label}.path`,
|
|
96
|
+
message: `'${expectation.path}' was not rendered`,
|
|
97
|
+
expected: expectation.path,
|
|
98
|
+
actual: "not rendered",
|
|
99
|
+
});
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (expectation.mode !== undefined && expectation.mode !== octal(artifact.mode))
|
|
103
|
+
failures.push({
|
|
104
|
+
code: "AB712",
|
|
105
|
+
assertion: `${label}.mode`,
|
|
106
|
+
message: `'${expectation.path}' has mode ${octal(artifact.mode)}`,
|
|
107
|
+
expected: expectation.mode,
|
|
108
|
+
actual: octal(artifact.mode),
|
|
109
|
+
});
|
|
110
|
+
const text = artifact.content.toString("utf8");
|
|
111
|
+
for (const needle of expectation.includes)
|
|
112
|
+
if (!text.includes(needle))
|
|
113
|
+
failures.push({
|
|
114
|
+
code: "AB712",
|
|
115
|
+
assertion: `${label}.includes`,
|
|
116
|
+
message: `'${expectation.path}' does not contain the expected text`,
|
|
117
|
+
expected: needle,
|
|
118
|
+
actual: "absent",
|
|
119
|
+
});
|
|
120
|
+
for (const needle of expectation.excludes)
|
|
121
|
+
if (text.includes(needle))
|
|
122
|
+
failures.push({
|
|
123
|
+
code: "AB712",
|
|
124
|
+
assertion: `${label}.excludes`,
|
|
125
|
+
message: `'${expectation.path}' contains text that was expected to be absent`,
|
|
126
|
+
expected: `absent: ${needle}`,
|
|
127
|
+
actual: needle,
|
|
128
|
+
});
|
|
129
|
+
for (const source of expectation.matches)
|
|
130
|
+
if (!new RegExp(source).test(text))
|
|
131
|
+
failures.push({
|
|
132
|
+
code: "AB712",
|
|
133
|
+
assertion: `${label}.matches`,
|
|
134
|
+
message: `'${expectation.path}' does not match the expected pattern`,
|
|
135
|
+
expected: source,
|
|
136
|
+
actual: "no match",
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return failures;
|
|
140
|
+
}
|
|
141
|
+
function checkJson(expect, tree) {
|
|
142
|
+
const failures = [];
|
|
143
|
+
for (const [index, expectation] of expect.json.entries()) {
|
|
144
|
+
const label = `json[${index}]`;
|
|
145
|
+
const artifact = find(tree, expectation.path);
|
|
146
|
+
if (!artifact) {
|
|
147
|
+
failures.push({
|
|
148
|
+
code: "AB713",
|
|
149
|
+
assertion: `${label}.path`,
|
|
150
|
+
message: `'${expectation.path}' was not rendered`,
|
|
151
|
+
expected: expectation.path,
|
|
152
|
+
actual: "not rendered",
|
|
153
|
+
});
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
let document;
|
|
157
|
+
try {
|
|
158
|
+
document = JSON.parse(artifact.content.toString("utf8"));
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
failures.push({
|
|
162
|
+
code: "AB713",
|
|
163
|
+
assertion: `${label}.path`,
|
|
164
|
+
message: `'${expectation.path}' is not valid JSON: ${error.message}`,
|
|
165
|
+
expected: "valid JSON",
|
|
166
|
+
actual: "unparsable",
|
|
167
|
+
});
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
for (const [key, value] of Object.entries(expectation.contains))
|
|
171
|
+
if (!contains(document?.[key], value))
|
|
172
|
+
failures.push({
|
|
173
|
+
code: "AB713",
|
|
174
|
+
assertion: `${label}.contains.${key}`,
|
|
175
|
+
message: `'${expectation.path}' does not contain the expected value at '${key}'`,
|
|
176
|
+
expected: JSON.stringify(value),
|
|
177
|
+
actual: JSON.stringify(document?.[key] ?? null),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
return failures;
|
|
181
|
+
}
|
|
182
|
+
function checkDiagnostics(expect, tree) {
|
|
183
|
+
const expectation = expect.diagnostics;
|
|
184
|
+
if (!expectation)
|
|
185
|
+
return [];
|
|
186
|
+
const failures = [];
|
|
187
|
+
const codes = new Set(tree.diagnostics.map((item) => item.code));
|
|
188
|
+
for (const code of expectation.includes)
|
|
189
|
+
if (!codes.has(code))
|
|
190
|
+
failures.push({
|
|
191
|
+
code: "AB714",
|
|
192
|
+
assertion: "diagnostics.includes",
|
|
193
|
+
message: `Diagnostic ${code} was expected but not reported`,
|
|
194
|
+
expected: code,
|
|
195
|
+
actual: "not reported",
|
|
196
|
+
});
|
|
197
|
+
for (const code of expectation.excludes)
|
|
198
|
+
if (codes.has(code))
|
|
199
|
+
failures.push({
|
|
200
|
+
code: "AB714",
|
|
201
|
+
assertion: "diagnostics.excludes",
|
|
202
|
+
message: `Diagnostic ${code} was reported but was expected to be absent`,
|
|
203
|
+
expected: `absent: ${code}`,
|
|
204
|
+
actual: code,
|
|
205
|
+
});
|
|
206
|
+
if (expectation.maxSeverity) {
|
|
207
|
+
const ceiling = severityRank(expectation.maxSeverity);
|
|
208
|
+
for (const item of tree.diagnostics)
|
|
209
|
+
if (severityRank(item.severity) > ceiling)
|
|
210
|
+
failures.push({
|
|
211
|
+
code: "AB714",
|
|
212
|
+
assertion: "diagnostics.maxSeverity",
|
|
213
|
+
message: `${item.code} is ${item.severity}, above the expected ceiling`,
|
|
214
|
+
expected: expectation.maxSeverity,
|
|
215
|
+
actual: `${item.severity} (${item.code})`,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return failures;
|
|
219
|
+
}
|
|
220
|
+
function checkDigests(expect, tree) {
|
|
221
|
+
const expectation = expect.digest;
|
|
222
|
+
if (!expectation)
|
|
223
|
+
return [];
|
|
224
|
+
const failures = [];
|
|
225
|
+
if (expectation.tree !== undefined) {
|
|
226
|
+
const actual = treeDigest(tree.artifacts);
|
|
227
|
+
if (!sameDigest(expectation.tree, actual))
|
|
228
|
+
failures.push({
|
|
229
|
+
code: "AB715",
|
|
230
|
+
assertion: "digest.tree",
|
|
231
|
+
message: `The rendered tree digest changed`,
|
|
232
|
+
expected: expectation.tree.trim(),
|
|
233
|
+
actual,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
for (const [file, expected] of Object.entries(expectation.files)) {
|
|
237
|
+
const artifact = find(tree, file);
|
|
238
|
+
if (!artifact) {
|
|
239
|
+
failures.push({
|
|
240
|
+
code: "AB715",
|
|
241
|
+
assertion: `digest.files['${file}']`,
|
|
242
|
+
message: `'${file}' was not rendered`,
|
|
243
|
+
expected: expected.trim(),
|
|
244
|
+
actual: "not rendered",
|
|
245
|
+
});
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
const actual = sha256(artifact.content);
|
|
249
|
+
if (!sameDigest(expected, actual))
|
|
250
|
+
failures.push({
|
|
251
|
+
code: "AB715",
|
|
252
|
+
assertion: `digest.files['${file}']`,
|
|
253
|
+
message: `'${file}' changed`,
|
|
254
|
+
expected: expected.trim(),
|
|
255
|
+
actual,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
return failures;
|
|
259
|
+
}
|
|
260
|
+
/** How many individual expectations a case states, for the assertion counts. */
|
|
261
|
+
export function countAssertions(expect) {
|
|
262
|
+
const files = expect.files.reduce((total, item) => total +
|
|
263
|
+
(item.mode === undefined ? 0 : 1) +
|
|
264
|
+
item.includes.length +
|
|
265
|
+
item.excludes.length +
|
|
266
|
+
item.matches.length, 0);
|
|
267
|
+
const json = expect.json.reduce((total, item) => total + Object.keys(item.contains).length, 0);
|
|
268
|
+
const diagnostics = expect.diagnostics
|
|
269
|
+
? expect.diagnostics.includes.length +
|
|
270
|
+
expect.diagnostics.excludes.length +
|
|
271
|
+
(expect.diagnostics.maxSeverity ? 1 : 0)
|
|
272
|
+
: 0;
|
|
273
|
+
const digest = expect.digest
|
|
274
|
+
? (expect.digest.tree === undefined ? 0 : 1) + Object.keys(expect.digest.files).length
|
|
275
|
+
: 0;
|
|
276
|
+
return (expect.paths.present.length + expect.paths.absent.length + files + json + diagnostics + digest);
|
|
277
|
+
}
|
|
278
|
+
/** Every expectation of a case, evaluated against one rendered tree. */
|
|
279
|
+
export function evaluate(expect, tree) {
|
|
280
|
+
return [
|
|
281
|
+
...checkPaths(expect, tree),
|
|
282
|
+
...checkFiles(expect, tree),
|
|
283
|
+
...checkJson(expect, tree),
|
|
284
|
+
...checkDiagnostics(expect, tree),
|
|
285
|
+
...checkDigests(expect, tree),
|
|
286
|
+
];
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=assert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.js","sourceRoot":"","sources":["../../../src/agent/test/assert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { AgentBundle, AgentDiagnostic, AgentProfile, AgentTarget } from "../types.js";
|
|
2
|
+
import type { TestFailure } from "./assert.js";
|
|
3
|
+
export * from "./assert.js";
|
|
4
|
+
export * from "./schema.js";
|
|
5
|
+
/** One unmet expectation, located in the tree it was evaluated against. */
|
|
6
|
+
export interface TestCaseFailure extends TestFailure {
|
|
7
|
+
target: AgentTarget;
|
|
8
|
+
profile: AgentProfile;
|
|
9
|
+
}
|
|
10
|
+
export interface TestCaseResult {
|
|
11
|
+
name: string;
|
|
12
|
+
/** Test file the case came from, bundle-relative POSIX. */
|
|
13
|
+
file: string;
|
|
14
|
+
status: "passed" | "failed" | "skipped";
|
|
15
|
+
/** The target and profile selection actually evaluated, after every filter. */
|
|
16
|
+
targets: AgentTarget[];
|
|
17
|
+
profiles: AgentProfile[];
|
|
18
|
+
assertions: {
|
|
19
|
+
total: number;
|
|
20
|
+
passed: number;
|
|
21
|
+
failed: number;
|
|
22
|
+
};
|
|
23
|
+
failures: TestCaseFailure[];
|
|
24
|
+
/** Why a case was skipped. Present only on `skipped`. */
|
|
25
|
+
reason?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface TestReport {
|
|
28
|
+
/** The test-file format this release reads. */
|
|
29
|
+
schemaVersion: string;
|
|
30
|
+
/** Test files loaded, bundle-relative POSIX. */
|
|
31
|
+
files: string[];
|
|
32
|
+
/**
|
|
33
|
+
* Assertion codes this run can report. Like `audit.checks`, this is what
|
|
34
|
+
* distinguishes "every expectation held" from "nothing was expected".
|
|
35
|
+
*/
|
|
36
|
+
checks: string[];
|
|
37
|
+
counts: {
|
|
38
|
+
cases: number;
|
|
39
|
+
passed: number;
|
|
40
|
+
failed: number;
|
|
41
|
+
skipped: number;
|
|
42
|
+
assertions: number;
|
|
43
|
+
};
|
|
44
|
+
cases: TestCaseResult[];
|
|
45
|
+
/**
|
|
46
|
+
* Reserved for evidence from a host's own validator. Always empty: `agent
|
|
47
|
+
* test` never spawns a process, so its result does not depend on what happens
|
|
48
|
+
* to be installed. `agent specs` publishes the validator commands to run
|
|
49
|
+
* yourself.
|
|
50
|
+
*/
|
|
51
|
+
native: never[];
|
|
52
|
+
}
|
|
53
|
+
export interface RunTestsOptions {
|
|
54
|
+
/** `--tests`: a file or directory, bundle-relative or absolute. */
|
|
55
|
+
tests?: string;
|
|
56
|
+
/** `--target`: intersected with each case's own selection. Empty means all. */
|
|
57
|
+
targets: AgentTarget[];
|
|
58
|
+
/** `--profile`: intersected with each case's own selection. */
|
|
59
|
+
profiles: AgentProfile[];
|
|
60
|
+
/** `--case`: exact names. Empty means every case. */
|
|
61
|
+
cases: string[];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Runs the contract tests stored with a bundle.
|
|
65
|
+
*
|
|
66
|
+
* Nothing here executes: every expectation is evaluated against the same
|
|
67
|
+
* in-memory render `agent convert` would write.
|
|
68
|
+
*/
|
|
69
|
+
export declare function runTests(bundle: AgentBundle, options: RunTestsOptions): {
|
|
70
|
+
report: TestReport;
|
|
71
|
+
diagnostics: AgentDiagnostic[];
|
|
72
|
+
forwarded: AgentDiagnostic[];
|
|
73
|
+
};
|