@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,28 @@
|
|
|
1
|
+
import { markdownlintFixer } from "./markdownlint-fixer.js";
|
|
2
|
+
import { relativeLinksFixer } from "./relative-links-fixer.js";
|
|
3
|
+
import { snippetsFixer } from "./snippets-fixer.js";
|
|
4
|
+
import { tocFixer } from "./toc-fixer.js";
|
|
5
|
+
export const FIXERS = [
|
|
6
|
+
markdownlintFixer,
|
|
7
|
+
relativeLinksFixer,
|
|
8
|
+
tocFixer,
|
|
9
|
+
snippetsFixer,
|
|
10
|
+
];
|
|
11
|
+
/**
|
|
12
|
+
* Resolves `--rule` names, defaulting to every offline default fixer.
|
|
13
|
+
*
|
|
14
|
+
* An unknown name is a usage error rather than a silent no-op, so
|
|
15
|
+
* `md fix --rule typo --check` can never exit 0 and look like a pass.
|
|
16
|
+
*/
|
|
17
|
+
export function selectFixers(names) {
|
|
18
|
+
if (!names.length)
|
|
19
|
+
return FIXERS.filter((fixer) => !fixer.network && fixer.default);
|
|
20
|
+
const available = FIXERS.map((fixer) => fixer.name).join(", ");
|
|
21
|
+
return names.map((name) => {
|
|
22
|
+
const fixer = FIXERS.find((candidate) => candidate.name === name);
|
|
23
|
+
if (!fixer)
|
|
24
|
+
throw new Error(`Unknown rule: ${name}. Available rules: ${available}`);
|
|
25
|
+
return fixer;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/fix/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAyC1C,MAAM,CAAC,MAAM,MAAM,GAAqB;IACtC,iBAAiB;IACjB,kBAAkB;IAClB,QAAQ;IACR,aAAa;CACd,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IACpF,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACpF,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Fixer } from "./registry.js";
|
|
2
|
+
/**
|
|
3
|
+
* Respells a local target so it resolves to exactly the same absolute path.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately narrow, so the result is deterministic, idempotent, and causes
|
|
6
|
+
* no churn on a first run over an existing repository:
|
|
7
|
+
*
|
|
8
|
+
* - the path is recomputed in the original's own addressing mode, which is what
|
|
9
|
+
* normalizes `a/../b.md`, `.//b.md`, and `docs/./api.md`;
|
|
10
|
+
* - a `./` prefix is preserved, never added and never removed — which of the
|
|
11
|
+
* two spellings is "canonical" is a style opinion, and flipping it would
|
|
12
|
+
* rewrite every link in a repository;
|
|
13
|
+
* - percent-encoding is preserved, never introduced. Encoding a link that
|
|
14
|
+
* already renders is churn, and `encodeURI` double-encodes a literal `%`;
|
|
15
|
+
* - backslash separators become `/`, which is a real correctness fix;
|
|
16
|
+
* - query and fragment are preserved byte for byte.
|
|
17
|
+
*
|
|
18
|
+
* Returns undefined when the target is already canonical.
|
|
19
|
+
*/
|
|
20
|
+
export declare function canonicalLocalTarget(rawTarget: string, sourceFile: string, root: string): string | undefined;
|
|
21
|
+
export declare const relativeLinksFixer: Fixer;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { extractLinks, parseMarkdown } from "../markdown-ast.js";
|
|
3
|
+
import { composeTarget, escapeTargetParens, resolveLocalPath, splitLocalTarget, targetStyle, } from "../link-target.js";
|
|
4
|
+
/** A target naming another protocol, which is never a workspace path. */
|
|
5
|
+
const SCHEME = /^[a-z][a-z0-9+.-]*:/i;
|
|
6
|
+
/**
|
|
7
|
+
* Respells a local target so it resolves to exactly the same absolute path.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately narrow, so the result is deterministic, idempotent, and causes
|
|
10
|
+
* no churn on a first run over an existing repository:
|
|
11
|
+
*
|
|
12
|
+
* - the path is recomputed in the original's own addressing mode, which is what
|
|
13
|
+
* normalizes `a/../b.md`, `.//b.md`, and `docs/./api.md`;
|
|
14
|
+
* - a `./` prefix is preserved, never added and never removed — which of the
|
|
15
|
+
* two spellings is "canonical" is a style opinion, and flipping it would
|
|
16
|
+
* rewrite every link in a repository;
|
|
17
|
+
* - percent-encoding is preserved, never introduced. Encoding a link that
|
|
18
|
+
* already renders is churn, and `encodeURI` double-encodes a literal `%`;
|
|
19
|
+
* - backslash separators become `/`, which is a real correctness fix;
|
|
20
|
+
* - query and fragment are preserved byte for byte.
|
|
21
|
+
*
|
|
22
|
+
* Returns undefined when the target is already canonical.
|
|
23
|
+
*/
|
|
24
|
+
export function canonicalLocalTarget(rawTarget, sourceFile, root) {
|
|
25
|
+
const split = splitLocalTarget(rawTarget);
|
|
26
|
+
if (!split.path)
|
|
27
|
+
return undefined;
|
|
28
|
+
const style = targetStyle(rawTarget);
|
|
29
|
+
const forwardSlashed = split.path.split("\\").join("/");
|
|
30
|
+
const absolute = resolveLocalPath(sourceFile, forwardSlashed, root);
|
|
31
|
+
let nextPath;
|
|
32
|
+
if (style.rootRelative) {
|
|
33
|
+
nextPath = `/${path.relative(root, absolute).split(path.sep).join("/")}`;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
nextPath = path.relative(path.dirname(sourceFile), absolute).split(path.sep).join("/");
|
|
37
|
+
if (!nextPath)
|
|
38
|
+
nextPath = path.basename(absolute);
|
|
39
|
+
}
|
|
40
|
+
const next = composeTarget(nextPath, split, style);
|
|
41
|
+
return next === rawTarget ? undefined : next;
|
|
42
|
+
}
|
|
43
|
+
export const relativeLinksFixer = {
|
|
44
|
+
name: "relative-links",
|
|
45
|
+
description: "Normalize local link paths without changing what they point at",
|
|
46
|
+
network: false,
|
|
47
|
+
default: true,
|
|
48
|
+
plan(files, context) {
|
|
49
|
+
const edits = [];
|
|
50
|
+
for (const file of files) {
|
|
51
|
+
const snapshot = context.snapshot(file);
|
|
52
|
+
const content = snapshot.content;
|
|
53
|
+
// Several links can share one reference definition, so a destination span
|
|
54
|
+
// must only be edited once.
|
|
55
|
+
const seen = new Set();
|
|
56
|
+
for (const link of extractLinks(parseMarkdown(content), content)) {
|
|
57
|
+
if (link.isExternal || link.isAnchorOnly)
|
|
58
|
+
continue;
|
|
59
|
+
if (link.destinationStart === undefined || link.destinationEnd === undefined)
|
|
60
|
+
continue;
|
|
61
|
+
if (SCHEME.test(link.target))
|
|
62
|
+
continue;
|
|
63
|
+
const raw = content.slice(link.destinationStart, link.destinationEnd);
|
|
64
|
+
// Where the source text and the parsed target diverge the offsets do not
|
|
65
|
+
// delimit a plain target and there is nothing safe to rewrite. Escaped
|
|
66
|
+
// parentheses are the one legitimate divergence: the span is still
|
|
67
|
+
// exactly the target, just written with backslashes, and the escaping is
|
|
68
|
+
// restored on output.
|
|
69
|
+
if (raw.replace(/\\([()])/g, "$1") !== link.target)
|
|
70
|
+
continue;
|
|
71
|
+
const key = `${link.destinationStart}:${link.destinationEnd}`;
|
|
72
|
+
if (seen.has(key))
|
|
73
|
+
continue;
|
|
74
|
+
const next = canonicalLocalTarget(link.target, file, context.root);
|
|
75
|
+
if (!next)
|
|
76
|
+
continue;
|
|
77
|
+
seen.add(key);
|
|
78
|
+
edits.push({
|
|
79
|
+
file,
|
|
80
|
+
start: link.destinationStart,
|
|
81
|
+
end: link.destinationEnd,
|
|
82
|
+
expected: raw,
|
|
83
|
+
replacement: escapeTargetParens(next, targetStyle(link.target, raw)),
|
|
84
|
+
value: escapeTargetParens(next, targetStyle(link.target, raw)),
|
|
85
|
+
diagnostic: {
|
|
86
|
+
rule: "relative-links",
|
|
87
|
+
line: link.destinationLine,
|
|
88
|
+
message: `Link path is not canonical: ${raw} -> ${next}`,
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return Promise.resolve({ edits, unfixable: [] });
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=relative-links-fixer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-links-fixer.js","sourceRoot":"","sources":["../../src/fix/relative-links-fixer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { extractCodeBlocks, parseMarkdown } from "../markdown-ast.js";
|
|
2
|
+
import { createSourceReader, snippetEdits, synchronizeSnippets } from "../snippets.js";
|
|
3
|
+
import { runtime } from "../runtime.js";
|
|
4
|
+
export const snippetsFixer = {
|
|
5
|
+
name: "snippets",
|
|
6
|
+
description: "Refresh fenced blocks that declare a source file and region",
|
|
7
|
+
network: false,
|
|
8
|
+
// Opt-in: `md fix --write` with no --rule runs every default fixer, and that
|
|
9
|
+
// command must not silently start reading arbitrary source files and
|
|
10
|
+
// rewriting documentation bodies from them. `md check-snippets` is the
|
|
11
|
+
// command that does this by default.
|
|
12
|
+
default: false,
|
|
13
|
+
plan(files, context) {
|
|
14
|
+
const edits = [];
|
|
15
|
+
const unfixable = [];
|
|
16
|
+
// Deliberately not `context.root`. That is the containment root for
|
|
17
|
+
// *writes*, which for `md fix docs` is docs/ and would reject every source
|
|
18
|
+
// under src/. Reads are bounded by the workspace instead.
|
|
19
|
+
const readRoot = runtime().config.root;
|
|
20
|
+
const read = createSourceReader(readRoot);
|
|
21
|
+
for (const file of files) {
|
|
22
|
+
const snapshot = context.snapshot(file);
|
|
23
|
+
const document = runtime().workspace.document(file);
|
|
24
|
+
// Offsets address the snapshot's bytes, so the cached tree is only safe
|
|
25
|
+
// to reuse when it was parsed from exactly those bytes.
|
|
26
|
+
const blocks = document.content === snapshot.content
|
|
27
|
+
? extractCodeBlocks(document.tree)
|
|
28
|
+
: extractCodeBlocks(parseMarkdown(snapshot.content));
|
|
29
|
+
const results = synchronizeSnippets(snapshot.content, blocks, {
|
|
30
|
+
file,
|
|
31
|
+
root: readRoot,
|
|
32
|
+
read,
|
|
33
|
+
});
|
|
34
|
+
edits.push(...snippetEdits(file, snapshot.content, results));
|
|
35
|
+
for (const result of results) {
|
|
36
|
+
if (result.status === "current")
|
|
37
|
+
continue;
|
|
38
|
+
if (result.status === "stale") {
|
|
39
|
+
// A stale block with a write plan is handled by the edit; only one
|
|
40
|
+
// the fence cannot accept is reported here.
|
|
41
|
+
if (result.write)
|
|
42
|
+
continue;
|
|
43
|
+
unfixable.push({
|
|
44
|
+
file,
|
|
45
|
+
line: result.line,
|
|
46
|
+
rule: "snippets",
|
|
47
|
+
message: `Snippet is out of date with ${result.target}`,
|
|
48
|
+
reason: result.unwritable.reason,
|
|
49
|
+
});
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
unfixable.push({
|
|
53
|
+
file,
|
|
54
|
+
line: result.line,
|
|
55
|
+
rule: "snippets",
|
|
56
|
+
message: result.message,
|
|
57
|
+
reason: result.reason,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return Promise.resolve({ edits, unfixable });
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=snippets-fixer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snippets-fixer.js","sourceRoot":"","sources":["../../src/fix/snippets-fixer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIxC,MAAM,CAAC,MAAM,aAAa,GAAU;IAClC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,6DAA6D;IAC1E,OAAO,EAAE,KAAK;IACd,6EAA6E;IAC7E,qEAAqE;IACrE,uEAAuE;IACvE,qCAAqC;IACrC,OAAO,EAAE,KAAK;IAEd,IAAI,CAAC,KAAwB,EAAE,OAAqB;QAClD,MAAM,KAAK,GAAkB,EAAE,CAAC;QAChC,MAAM,SAAS,GAAuB,EAAE,CAAC;QACzC,oEAAoE;QACpE,2EAA2E;QAC3E,0DAA0D;QAC1D,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;QACvC,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpD,wEAAwE;YACxE,wDAAwD;YACxD,MAAM,MAAM,GACV,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO;gBACnC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAClC,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAEzD,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE;gBAC5D,IAAI;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI;aACL,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAE7D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;oBAAE,SAAS;gBAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBAC9B,mEAAmE;oBACnE,4CAA4C;oBAC5C,IAAI,MAAM,CAAC,KAAK;wBAAE,SAAS;oBAC3B,SAAS,CAAC,IAAI,CAAC;wBACb,IAAI;wBACJ,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,+BAA+B,MAAM,CAAC,MAAM,EAAE;wBACvD,MAAM,EAAE,MAAM,CAAC,UAAW,CAAC,MAAM;qBAClC,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBACD,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI;oBACJ,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/C,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { minimatch } from "minimatch";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { extractCodeBlocks } from "../markdown-ast.js";
|
|
4
|
+
import { renderToc, synchronizeToc, TOC_START } from "../toc.js";
|
|
5
|
+
import { runtime } from "../runtime.js";
|
|
6
|
+
/** 1-based line containing `offset`. */
|
|
7
|
+
function lineAt(content, offset) {
|
|
8
|
+
let line = 1;
|
|
9
|
+
for (let index = 0; index < offset && index < content.length; index++) {
|
|
10
|
+
if (content[index] === "\n")
|
|
11
|
+
line++;
|
|
12
|
+
}
|
|
13
|
+
return line;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Whether this document is one the project asks to keep a TOC in.
|
|
17
|
+
*
|
|
18
|
+
* With `toc.files` configured the globs decide, matching `md audit`. Without
|
|
19
|
+
* it, only documents that already carry a marker pair are considered — `md fix`
|
|
20
|
+
* never decides on its own that a document should gain a table of contents.
|
|
21
|
+
*/
|
|
22
|
+
function selected(file, content) {
|
|
23
|
+
const patterns = runtime().config.toc.files;
|
|
24
|
+
if (!patterns.length)
|
|
25
|
+
return content.includes(TOC_START);
|
|
26
|
+
const relative = path.relative(runtime().config.root, file).split(path.sep).join("/");
|
|
27
|
+
return patterns.some((pattern) => minimatch(relative, pattern, { dot: true, nonegate: true }));
|
|
28
|
+
}
|
|
29
|
+
export const tocFixer = {
|
|
30
|
+
name: "toc",
|
|
31
|
+
description: "Synchronize the generated block between TOC markers",
|
|
32
|
+
network: false,
|
|
33
|
+
default: true,
|
|
34
|
+
plan(files, context) {
|
|
35
|
+
const edits = [];
|
|
36
|
+
const unfixable = [];
|
|
37
|
+
for (const file of files) {
|
|
38
|
+
const snapshot = context.snapshot(file);
|
|
39
|
+
if (!selected(file, snapshot.content))
|
|
40
|
+
continue;
|
|
41
|
+
const document = runtime().workspace.document(file);
|
|
42
|
+
// Ranges address the snapshot's bytes while headings come from the
|
|
43
|
+
// workspace cache. If those ever disagree the offsets are meaningless,
|
|
44
|
+
// so the file is skipped rather than edited from stale structure.
|
|
45
|
+
if (document.content !== snapshot.content) {
|
|
46
|
+
unfixable.push({
|
|
47
|
+
file,
|
|
48
|
+
line: 1,
|
|
49
|
+
rule: "toc",
|
|
50
|
+
message: "Document changed while it was being planned",
|
|
51
|
+
reason: "stale workspace cache",
|
|
52
|
+
});
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const maxDepth = Math.min(6, Math.max(1, parseInt(context.toc.maxDepth, 10) || 6));
|
|
56
|
+
const minDepth = Math.min(6, Math.max(1, parseInt(context.toc.minDepth, 10) || 1));
|
|
57
|
+
const headings = document.headings.filter((heading) => heading.depth >= minDepth && heading.depth <= maxDepth);
|
|
58
|
+
const sync = synchronizeToc(snapshot.content, renderToc(headings, context.toc.ordered), extractCodeBlocks(document.tree));
|
|
59
|
+
// Inserting markers is an authoring decision, not a fix. A document whose
|
|
60
|
+
// only markers sit inside a fenced code sample lands here too, since
|
|
61
|
+
// synchronizeToc does not count those.
|
|
62
|
+
if (sync.status === "missing")
|
|
63
|
+
continue;
|
|
64
|
+
if (sync.status === "malformed") {
|
|
65
|
+
// A throw would let one bad document kill a whole-tree run.
|
|
66
|
+
unfixable.push({
|
|
67
|
+
file,
|
|
68
|
+
line: 1,
|
|
69
|
+
rule: "toc",
|
|
70
|
+
message: sync.message,
|
|
71
|
+
reason: "malformed markers",
|
|
72
|
+
});
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (sync.status === "current")
|
|
76
|
+
continue;
|
|
77
|
+
edits.push({
|
|
78
|
+
file,
|
|
79
|
+
start: sync.range.start,
|
|
80
|
+
end: sync.range.end,
|
|
81
|
+
expected: snapshot.content.slice(sync.range.start, sync.range.end),
|
|
82
|
+
replacement: sync.interior,
|
|
83
|
+
value: sync.interior,
|
|
84
|
+
diagnostic: {
|
|
85
|
+
rule: "toc",
|
|
86
|
+
line: lineAt(snapshot.content, sync.range.start),
|
|
87
|
+
message: "Generated TOC is stale",
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return Promise.resolve({ edits, unfixable });
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=toc-fixer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toc-fixer.js","sourceRoot":"","sources":["../../src/fix/toc-fixer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { OutputFormat } from "./types.js";
|
|
2
|
+
/** Every format the CLI can emit. */
|
|
3
|
+
export declare const ALL_FORMATS: readonly OutputFormat[];
|
|
4
|
+
/** Formats every command supports. */
|
|
5
|
+
export declare const BASE_FORMATS: readonly OutputFormat[];
|
|
6
|
+
/**
|
|
7
|
+
* `md` commands that additionally accept the automation formats. These emit
|
|
8
|
+
* `Issue` diagnostics, which are the only payload jsonl and sarif can represent.
|
|
9
|
+
*/
|
|
10
|
+
export declare const DIAGNOSTIC_FORMAT_COMMANDS: readonly string[];
|
|
11
|
+
export declare function supportsDiagnosticFormats(mdCommand: string): boolean;
|
|
12
|
+
/** Formats accepted by `md <mdCommand>`. */
|
|
13
|
+
export declare function formatsFor(mdCommand: string): readonly OutputFormat[];
|
|
14
|
+
/**
|
|
15
|
+
* `agent` subcommands that additionally accept SARIF.
|
|
16
|
+
*
|
|
17
|
+
* Deliberately not `ALL_FORMATS`: `jsonl`'s published `diagnostic-record`
|
|
18
|
+
* schema is the `Issue` shape, which an `AgentDiagnostic` does not fit.
|
|
19
|
+
*/
|
|
20
|
+
export declare const AGENT_SARIF_COMMANDS: readonly string[];
|
|
21
|
+
/** Formats accepted by `agent <agentCommand>`. */
|
|
22
|
+
export declare function agentFormatsFor(agentCommand: string): readonly OutputFormat[];
|
package/dist/formats.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Every format the CLI can emit. */
|
|
2
|
+
export const ALL_FORMATS = ["llm", "human", "json", "jsonl", "sarif"];
|
|
3
|
+
/** Formats every command supports. */
|
|
4
|
+
export const BASE_FORMATS = ["llm", "human", "json"];
|
|
5
|
+
/**
|
|
6
|
+
* `md` commands that additionally accept the automation formats. These emit
|
|
7
|
+
* `Issue` diagnostics, which are the only payload jsonl and sarif can represent.
|
|
8
|
+
*/
|
|
9
|
+
export const DIAGNOSTIC_FORMAT_COMMANDS = [
|
|
10
|
+
"lint",
|
|
11
|
+
"lint-dir",
|
|
12
|
+
"audit",
|
|
13
|
+
"validate-frontmatter",
|
|
14
|
+
"check-urls",
|
|
15
|
+
];
|
|
16
|
+
export function supportsDiagnosticFormats(mdCommand) {
|
|
17
|
+
return DIAGNOSTIC_FORMAT_COMMANDS.includes(mdCommand);
|
|
18
|
+
}
|
|
19
|
+
/** Formats accepted by `md <mdCommand>`. */
|
|
20
|
+
export function formatsFor(mdCommand) {
|
|
21
|
+
return supportsDiagnosticFormats(mdCommand) ? ALL_FORMATS : BASE_FORMATS;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* `agent` subcommands that additionally accept SARIF.
|
|
25
|
+
*
|
|
26
|
+
* Deliberately not `ALL_FORMATS`: `jsonl`'s published `diagnostic-record`
|
|
27
|
+
* schema is the `Issue` shape, which an `AgentDiagnostic` does not fit.
|
|
28
|
+
*/
|
|
29
|
+
export const AGENT_SARIF_COMMANDS = ["audit"];
|
|
30
|
+
/** Formats accepted by `agent <agentCommand>`. */
|
|
31
|
+
export function agentFormatsFor(agentCommand) {
|
|
32
|
+
return AGENT_SARIF_COMMANDS.includes(agentCommand) ? [...BASE_FORMATS, "sarif"] : BASE_FORMATS;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=formats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formats.js","sourceRoot":"","sources":["../src/formats.ts"],"names":[],"mappings":"AAEA,qCAAqC;AACrC,MAAM,CAAC,MAAM,WAAW,GAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAE/F,sCAAsC;AACtC,MAAM,CAAC,MAAM,YAAY,GAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC3D,MAAM;IACN,UAAU;IACV,OAAO;IACP,sBAAsB;IACtB,YAAY;CACb,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,SAAiB;IACzD,OAAO,0BAA0B,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACxD,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,OAAO,yBAAyB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;AAC3E,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAsB,CAAC,OAAO,CAAC,CAAC;AAEjE,kDAAkD;AAClD,MAAM,UAAU,eAAe,CAAC,YAAoB;IAClD,OAAO,oBAAoB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AACjG,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Issue, OutputFormat } from "./types.js";
|
|
2
|
+
import { type DiagnosticSummary } from "./automation.js";
|
|
3
|
+
/**
|
|
4
|
+
* Identifies the emitting command so `--envelope` can wrap the finding list.
|
|
5
|
+
* Omitted by callers that have no envelope option.
|
|
6
|
+
*/
|
|
7
|
+
export interface IssueContract {
|
|
8
|
+
command: string;
|
|
9
|
+
envelope?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function formatIssues(issues: Issue[], file: string, format: OutputFormat, summary?: Partial<DiagnosticSummary>, contract?: IssueContract): string;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { formatDiagnostics } from "./automation.js";
|
|
2
|
+
import { jsonPayload } from "./result.js";
|
|
3
|
+
function formatLlm(issues, file) {
|
|
4
|
+
if (issues.length === 0)
|
|
5
|
+
return "";
|
|
6
|
+
const lines = [`${issues.length} issue(s) in ${file}:`];
|
|
7
|
+
for (const i of issues) {
|
|
8
|
+
lines.push(` ${i.file}:${i.line} [${i.checker}] ${i.message}`);
|
|
9
|
+
}
|
|
10
|
+
return lines.join("\n");
|
|
11
|
+
}
|
|
12
|
+
function formatHuman(issues, file) {
|
|
13
|
+
if (issues.length === 0)
|
|
14
|
+
return "";
|
|
15
|
+
const lines = [`\n\x1b[1;31m✖ ${issues.length} issue(s) in ${file}\x1b[0m\n`];
|
|
16
|
+
for (const i of issues) {
|
|
17
|
+
const loc = `\x1b[36m${i.file}:${i.line}\x1b[0m`;
|
|
18
|
+
const rule = `\x1b[33m[${i.checker}]\x1b[0m`;
|
|
19
|
+
lines.push(` ${loc} ${rule} ${i.message}`);
|
|
20
|
+
}
|
|
21
|
+
return lines.join("\n");
|
|
22
|
+
}
|
|
23
|
+
function formatJson(issues, contract) {
|
|
24
|
+
if (!contract)
|
|
25
|
+
return JSON.stringify(issues, null, 2);
|
|
26
|
+
return jsonPayload(contract.command, issues, contract, {
|
|
27
|
+
exitCode: issues.length ? 2 : 0,
|
|
28
|
+
summary: { findings: issues.length },
|
|
29
|
+
}).trimEnd();
|
|
30
|
+
}
|
|
31
|
+
export function formatIssues(issues, file, format, summary = {}, contract) {
|
|
32
|
+
const automated = formatDiagnostics(issues, format, {
|
|
33
|
+
files: summary.files ?? (new Set(issues.map((issue) => issue.file)).size || 1),
|
|
34
|
+
findings: summary.findings ?? issues.length,
|
|
35
|
+
...summary,
|
|
36
|
+
});
|
|
37
|
+
if (automated !== undefined)
|
|
38
|
+
return automated;
|
|
39
|
+
switch (format) {
|
|
40
|
+
case "json":
|
|
41
|
+
return formatJson(issues, contract);
|
|
42
|
+
case "human":
|
|
43
|
+
return formatHuman(issues, file);
|
|
44
|
+
default:
|
|
45
|
+
return formatLlm(issues, file);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAA0B,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,SAAS,SAAS,CAAC,MAAe,EAAE,IAAY;IAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,gBAAgB,IAAI,GAAG,CAAC,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,MAAe,EAAE,IAAY;IAChD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,iBAAiB,MAAM,CAAC,MAAM,gBAAgB,IAAI,WAAW,CAAC,CAAC;IAC9E,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC;QACjD,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,OAAO,UAAU,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAWD,SAAS,UAAU,CAAC,MAAe,EAAE,QAAwB;IAC3D,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;QACrD,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;KACrC,CAAC,CAAC,OAAO,EAAE,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAAe,EACf,IAAY,EACZ,MAAoB,EACpB,UAAsC,EAAE,EACxC,QAAwB;IAExB,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE;QAClD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAC9E,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM;QAC3C,GAAG,OAAO;KACX,CAAC,CAAC;IACH,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACtC,KAAK,OAAO;YACV,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnC;YACE,OAAO,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FrontmatterRulesConfig } from "./config.js";
|
|
2
|
+
import type { Issue } from "./types.js";
|
|
3
|
+
import type { MarkdownDocument } from "./workspace.js";
|
|
4
|
+
export declare class FrontmatterValidator {
|
|
5
|
+
readonly rules: FrontmatterRulesConfig;
|
|
6
|
+
private readonly schema?;
|
|
7
|
+
private readonly formatValidators;
|
|
8
|
+
constructor(rules: FrontmatterRulesConfig, schemaPath?: string);
|
|
9
|
+
validate(document: MarkdownDocument): Issue[];
|
|
10
|
+
validateMany(documents: MarkdownDocument[]): Issue[];
|
|
11
|
+
}
|