@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,204 @@
|
|
|
1
|
+
import type { BundleMarketplace } from "./manifest.js";
|
|
2
|
+
import type { UpgradeReport } from "./upgrade.js";
|
|
3
|
+
import type { ImportReport } from "./import/normalize.js";
|
|
4
|
+
import type { PackageReport } from "./package/index.js";
|
|
5
|
+
import type { AuditReport } from "./audit/index.js";
|
|
6
|
+
import type { TestReport } from "./test/index.js";
|
|
7
|
+
import type { InstallReport } from "./install/index.js";
|
|
8
|
+
import type { MarketplaceReport } from "./marketplace/index.js";
|
|
9
|
+
export declare const TARGETS: readonly ["claude-code", "codex", "cursor", "antigravity", "opencode"];
|
|
10
|
+
export type AgentTarget = (typeof TARGETS)[number];
|
|
11
|
+
export type AgentProfile = "plugin" | "project";
|
|
12
|
+
export type MappingQuality = "exact" | "approximate" | "unsupported";
|
|
13
|
+
export interface AgentDiagnostic {
|
|
14
|
+
code: string;
|
|
15
|
+
severity: "notice" | "warning" | "error";
|
|
16
|
+
message: string;
|
|
17
|
+
component?: string;
|
|
18
|
+
path?: string;
|
|
19
|
+
target?: AgentTarget;
|
|
20
|
+
profile?: AgentProfile;
|
|
21
|
+
quality: MappingQuality;
|
|
22
|
+
remediation?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface SourceFile {
|
|
25
|
+
path: string;
|
|
26
|
+
content: Buffer;
|
|
27
|
+
mode: number;
|
|
28
|
+
}
|
|
29
|
+
export interface MarkdownComponent {
|
|
30
|
+
name: string;
|
|
31
|
+
description: string;
|
|
32
|
+
path: string;
|
|
33
|
+
metadata: Record<string, unknown>;
|
|
34
|
+
body: string;
|
|
35
|
+
files: SourceFile[];
|
|
36
|
+
}
|
|
37
|
+
export interface BundleRule extends MarkdownComponent {
|
|
38
|
+
activation: "always" | "files" | "model" | "manual";
|
|
39
|
+
globs: string[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* A target-native overlay: files copied verbatim into one target's output,
|
|
43
|
+
* keyed by the output profile they belong to. This is how a platform-only
|
|
44
|
+
* feature reaches the generated tree without being given a false portable
|
|
45
|
+
* abstraction.
|
|
46
|
+
*/
|
|
47
|
+
export interface NativeOverlay {
|
|
48
|
+
target: AgentTarget;
|
|
49
|
+
/** Absolute path to the overlay root. */
|
|
50
|
+
root: string;
|
|
51
|
+
/** Overlay files, POSIX-relative to `root/<profile>`, per output profile. */
|
|
52
|
+
files: Record<AgentProfile, SourceFile[]>;
|
|
53
|
+
/** `native/<target>/manifest.json`, merged over the generated plugin manifest. */
|
|
54
|
+
manifest?: Record<string, unknown>;
|
|
55
|
+
/**
|
|
56
|
+
* What happens when an overlay file claims a path a portable artifact already
|
|
57
|
+
* produced. Defaults to `overlay-wins`: an overlay is a deliberate,
|
|
58
|
+
* target-specific statement, so honoring it and reporting AB181 beats
|
|
59
|
+
* discarding it silently. `error` refuses the whole conversion instead.
|
|
60
|
+
*/
|
|
61
|
+
onCollision: "overlay-wins" | "error";
|
|
62
|
+
}
|
|
63
|
+
export interface AgentBundle {
|
|
64
|
+
schemaVersion: string;
|
|
65
|
+
name: string;
|
|
66
|
+
version: string;
|
|
67
|
+
description: string;
|
|
68
|
+
root: string;
|
|
69
|
+
legacy: boolean;
|
|
70
|
+
manifest: Record<string, unknown>;
|
|
71
|
+
/** Declared listing metadata. Read by `agent package`; ignored by `agent convert`. */
|
|
72
|
+
marketplace?: BundleMarketplace;
|
|
73
|
+
/** Loaded native overlays. Always empty on a v1 or legacy bundle. */
|
|
74
|
+
overlays: NativeOverlay[];
|
|
75
|
+
skills: MarkdownComponent[];
|
|
76
|
+
agents: MarkdownComponent[];
|
|
77
|
+
rules: BundleRule[];
|
|
78
|
+
hooks?: {
|
|
79
|
+
path: string;
|
|
80
|
+
value: Record<string, unknown>;
|
|
81
|
+
};
|
|
82
|
+
hookFiles: SourceFile[];
|
|
83
|
+
policies: Array<{
|
|
84
|
+
path: string;
|
|
85
|
+
value: Record<string, unknown>;
|
|
86
|
+
}>;
|
|
87
|
+
mcp?: {
|
|
88
|
+
path: string;
|
|
89
|
+
value: Record<string, unknown>;
|
|
90
|
+
};
|
|
91
|
+
assets: SourceFile[];
|
|
92
|
+
diagnostics: AgentDiagnostic[];
|
|
93
|
+
graph: Record<string, string[]>;
|
|
94
|
+
}
|
|
95
|
+
export type ArtifactOrigin = "portable" | "native";
|
|
96
|
+
export interface Artifact {
|
|
97
|
+
path: string;
|
|
98
|
+
content: Buffer;
|
|
99
|
+
mode: number;
|
|
100
|
+
/**
|
|
101
|
+
* Absent means "portable". Only overlay-sourced artifacts set it, which is
|
|
102
|
+
* what keeps `conversion-report.json` byte-identical for every bundle that
|
|
103
|
+
* has no overlay.
|
|
104
|
+
*/
|
|
105
|
+
origin?: ArtifactOrigin;
|
|
106
|
+
}
|
|
107
|
+
export type HostStatus = "unknown" | "unverified" | "below-minimum" | "verified" | "newer";
|
|
108
|
+
export interface HostReport {
|
|
109
|
+
target: AgentTarget;
|
|
110
|
+
/** The version supplied via `--host-version`, or `null` when none was given. */
|
|
111
|
+
requested: string | null;
|
|
112
|
+
minimumVersion: string | null;
|
|
113
|
+
verifiedThrough: string | null;
|
|
114
|
+
documentationRevision: string;
|
|
115
|
+
status: HostStatus;
|
|
116
|
+
}
|
|
117
|
+
export interface DoctorReport {
|
|
118
|
+
/** One row per selected target, present even when no host version is known. */
|
|
119
|
+
hosts: HostReport[];
|
|
120
|
+
/** Populated only when `--output` was given. */
|
|
121
|
+
output?: {
|
|
122
|
+
root: string;
|
|
123
|
+
missing: string[];
|
|
124
|
+
changed: string[];
|
|
125
|
+
unmanaged: string[];
|
|
126
|
+
};
|
|
127
|
+
/** Rendered paths no target profile describes. */
|
|
128
|
+
undeclared: Array<{
|
|
129
|
+
target: AgentTarget;
|
|
130
|
+
profile: AgentProfile;
|
|
131
|
+
path: string;
|
|
132
|
+
}>;
|
|
133
|
+
/**
|
|
134
|
+
* Paths contributed by a native overlay. These are exempt from the declared
|
|
135
|
+
* path check by design — being outside the profile is what an overlay is for —
|
|
136
|
+
* so they are reported positively here rather than as `undeclared` findings.
|
|
137
|
+
*/
|
|
138
|
+
overlays: Array<{
|
|
139
|
+
target: AgentTarget;
|
|
140
|
+
profile: AgentProfile;
|
|
141
|
+
path: string;
|
|
142
|
+
}>;
|
|
143
|
+
/**
|
|
144
|
+
* Reserved for evidence from a host's own validator. Always empty in this
|
|
145
|
+
* release: `agent doctor` never spawns a process, so its result does not
|
|
146
|
+
* depend on what happens to be installed.
|
|
147
|
+
*/
|
|
148
|
+
native: never[];
|
|
149
|
+
}
|
|
150
|
+
export type PlanAction = "create" | "update" | "skip";
|
|
151
|
+
export interface PlanOperation {
|
|
152
|
+
action: PlanAction;
|
|
153
|
+
/** POSIX path relative to the plan root. */
|
|
154
|
+
path: string;
|
|
155
|
+
kind: string;
|
|
156
|
+
bytes: number;
|
|
157
|
+
/** Octal file mode, spelled as in `artifacts[].mode`. */
|
|
158
|
+
mode: string;
|
|
159
|
+
/** Why a `skip`, or what an `update` changes. */
|
|
160
|
+
reason?: string;
|
|
161
|
+
}
|
|
162
|
+
export interface AgentPlan {
|
|
163
|
+
root: string;
|
|
164
|
+
operations: PlanOperation[];
|
|
165
|
+
}
|
|
166
|
+
export interface AgentResult {
|
|
167
|
+
command: "convert" | "validate" | "inspect" | "compat" | "doctor" | "specs" | "init" | "add" | "upgrade" | "import" | "package" | "audit" | "test" | "install" | "uninstall" | "installed" | "marketplace";
|
|
168
|
+
ok: boolean;
|
|
169
|
+
source?: string;
|
|
170
|
+
targets: AgentTarget[];
|
|
171
|
+
profiles?: AgentProfile[];
|
|
172
|
+
artifacts: Array<{
|
|
173
|
+
path: string;
|
|
174
|
+
bytes: number;
|
|
175
|
+
mode: string;
|
|
176
|
+
}>;
|
|
177
|
+
diagnostics: AgentDiagnostic[];
|
|
178
|
+
bundle?: unknown;
|
|
179
|
+
compatibility?: unknown;
|
|
180
|
+
/** The full target conformance profiles, emitted by `agent specs`. */
|
|
181
|
+
specs?: unknown;
|
|
182
|
+
/** Conformance findings, emitted by `agent doctor`. */
|
|
183
|
+
doctor?: DoctorReport;
|
|
184
|
+
/** What a writing command did or would do, emitted by `agent init` and `agent add`. */
|
|
185
|
+
plan?: AgentPlan;
|
|
186
|
+
/** Migration result, emitted by `agent upgrade`. */
|
|
187
|
+
upgrade?: UpgradeReport;
|
|
188
|
+
/** Provenance report, emitted by `agent import`. */
|
|
189
|
+
import?: ImportReport;
|
|
190
|
+
/** Packaging result, emitted by `agent package`. */
|
|
191
|
+
package?: PackageReport;
|
|
192
|
+
/** Review surface and findings summary, emitted by `agent audit`. */
|
|
193
|
+
audit?: AuditReport;
|
|
194
|
+
/** Contract test results, emitted by `agent test`. */
|
|
195
|
+
test?: TestReport;
|
|
196
|
+
/** Install, uninstall, or listing result, emitted by the install commands. */
|
|
197
|
+
install?: InstallReport;
|
|
198
|
+
/** Collection build result, emitted by `agent marketplace`. */
|
|
199
|
+
marketplace?: MarketplaceReport;
|
|
200
|
+
dryRun?: boolean;
|
|
201
|
+
check?: boolean;
|
|
202
|
+
stale?: boolean;
|
|
203
|
+
}
|
|
204
|
+
export declare function diagnostic(code: string, message: string, quality: MappingQuality, extra?: Partial<AgentDiagnostic>): AgentDiagnostic;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const TARGETS = ["claude-code", "codex", "cursor", "antigravity", "opencode"];
|
|
2
|
+
export function diagnostic(code, message, quality, extra = {}) {
|
|
3
|
+
return {
|
|
4
|
+
code,
|
|
5
|
+
severity: quality === "unsupported" ? "warning" : quality === "approximate" ? "warning" : "notice",
|
|
6
|
+
message,
|
|
7
|
+
quality,
|
|
8
|
+
...extra,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAU,CAAC;AA0M9F,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,OAAe,EACf,OAAuB,EACvB,QAAkC,EAAE;IAEpC,OAAO;QACL,IAAI;QACJ,QAAQ,EACN,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAC1F,OAAO;QACP,OAAO;QACP,GAAG,KAAK;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { AgentBundle, AgentDiagnostic } from "./types.js";
|
|
2
|
+
export interface MigrationChange {
|
|
3
|
+
field: string;
|
|
4
|
+
from: unknown;
|
|
5
|
+
to: unknown;
|
|
6
|
+
}
|
|
7
|
+
export interface UpgradeReport {
|
|
8
|
+
/** Source schema layer, spelled as the manifest spells it. */
|
|
9
|
+
from: string;
|
|
10
|
+
to: string;
|
|
11
|
+
changes: MigrationChange[];
|
|
12
|
+
/** Items a human should decide, mirrored as AB221 notices. */
|
|
13
|
+
notes: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface UpgradePlan {
|
|
16
|
+
report: UpgradeReport;
|
|
17
|
+
/** The migrated manifest, or `null` when nothing needs to change. */
|
|
18
|
+
content: Buffer | null;
|
|
19
|
+
diagnostics: AgentDiagnostic[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Plans a 1 -> 2 migration of `agent-bundle.yaml`.
|
|
23
|
+
*
|
|
24
|
+
* Only the manifest is rewritten; no component file is touched. Schema 2 is a
|
|
25
|
+
* strict superset of schema 1, so the migration is additive by construction —
|
|
26
|
+
* which is what makes the byte-identity guarantee checkable rather than hoped
|
|
27
|
+
* for. The caller verifies it by rendering before and after.
|
|
28
|
+
*/
|
|
29
|
+
export declare function planUpgrade(bundle: AgentBundle, source: string, to: string): UpgradePlan;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { parseDocument } from "yaml";
|
|
2
|
+
import { diagnostic } from "./types.js";
|
|
3
|
+
import { COMPONENT_KEYS, CURRENT_BUNDLE_SCHEMA } from "./manifest.js";
|
|
4
|
+
import { YAML_OPTIONS } from "./scaffold.js";
|
|
5
|
+
function notice(code, message, path, remediation) {
|
|
6
|
+
return diagnostic(code, message, "exact", {
|
|
7
|
+
path,
|
|
8
|
+
...(remediation ? { remediation } : {}),
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function error(code, message, path, remediation) {
|
|
12
|
+
return {
|
|
13
|
+
...diagnostic(code, message, "unsupported", { path, ...(remediation ? { remediation } : {}) }),
|
|
14
|
+
severity: "error",
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Plans a 1 -> 2 migration of `agent-bundle.yaml`.
|
|
19
|
+
*
|
|
20
|
+
* Only the manifest is rewritten; no component file is touched. Schema 2 is a
|
|
21
|
+
* strict superset of schema 1, so the migration is additive by construction —
|
|
22
|
+
* which is what makes the byte-identity guarantee checkable rather than hoped
|
|
23
|
+
* for. The caller verifies it by rendering before and after.
|
|
24
|
+
*/
|
|
25
|
+
export function planUpgrade(bundle, source, to) {
|
|
26
|
+
const manifestPath = `${bundle.root}/agent-bundle.yaml`;
|
|
27
|
+
const diagnostics = [];
|
|
28
|
+
const report = {
|
|
29
|
+
from: bundle.schemaVersion,
|
|
30
|
+
to,
|
|
31
|
+
changes: [],
|
|
32
|
+
notes: [],
|
|
33
|
+
};
|
|
34
|
+
if (to !== CURRENT_BUNDLE_SCHEMA) {
|
|
35
|
+
diagnostics.push(error("AB222", `Unsupported target schema '${to}'`, manifestPath, `Use --to-schema ${CURRENT_BUNDLE_SCHEMA}.`));
|
|
36
|
+
return { report, content: null, diagnostics };
|
|
37
|
+
}
|
|
38
|
+
if (bundle.legacy) {
|
|
39
|
+
diagnostics.push(error("AB223", "A legacy Claude plugin has no neutral manifest to upgrade", manifestPath, "Run agent import to produce a portable bundle first."));
|
|
40
|
+
return { report, content: null, diagnostics };
|
|
41
|
+
}
|
|
42
|
+
if (bundle.schemaVersion === CURRENT_BUNDLE_SCHEMA) {
|
|
43
|
+
diagnostics.push(notice("AB220", `Bundle is already at schemaVersion ${to}`, manifestPath));
|
|
44
|
+
return { report, content: null, diagnostics };
|
|
45
|
+
}
|
|
46
|
+
const document = parseDocument(source);
|
|
47
|
+
document.setIn(["schemaVersion"], to);
|
|
48
|
+
report.changes.push({ field: "schemaVersion", from: bundle.schemaVersion, to });
|
|
49
|
+
// v1 allowed component paths both at the top level and under `components`.
|
|
50
|
+
// v2 prefers the nested form, so hoist them; the parser still honors either.
|
|
51
|
+
for (const key of COMPONENT_KEYS) {
|
|
52
|
+
const value = document.getIn([key]);
|
|
53
|
+
if (value === undefined)
|
|
54
|
+
continue;
|
|
55
|
+
if (document.getIn(["components", key]) === undefined) {
|
|
56
|
+
document.setIn(["components", key], value);
|
|
57
|
+
report.changes.push({ field: `components.${key}`, from: undefined, to: value });
|
|
58
|
+
}
|
|
59
|
+
document.deleteIn([key]);
|
|
60
|
+
report.changes.push({ field: key, from: value, to: undefined });
|
|
61
|
+
}
|
|
62
|
+
// Marketplace metadata is deliberately not synthesized. A half-filled block
|
|
63
|
+
// would look like a decision nobody made, and `agent package` would then
|
|
64
|
+
// report findings against values this migration invented.
|
|
65
|
+
if (!bundle.marketplace) {
|
|
66
|
+
report.notes.push("Add a marketplace: block before packaging; displayName, categories, publisher, and license cannot be derived.");
|
|
67
|
+
diagnostics.push(notice("AB221", "Marketplace metadata cannot be derived from a v1 bundle", manifestPath, "Add a marketplace: block before running agent package."));
|
|
68
|
+
}
|
|
69
|
+
report.notes.push("Native overlays are now available under native/<target>/; nothing was created because none existed.");
|
|
70
|
+
return { report, content: Buffer.from(document.toString(YAML_OPTIONS)), diagnostics };
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/agent/upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Artifact } from "./types.js";
|
|
2
|
+
export interface WriteOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Directories, relative to the output root, that this write owns entirely.
|
|
5
|
+
* Each is replaced wholesale, so a component removed from the source stops
|
|
6
|
+
* existing in the output instead of lingering as an orphan.
|
|
7
|
+
*/
|
|
8
|
+
managedRoots: string[];
|
|
9
|
+
/** Artifacts at the output root that are replaced individually, not by directory. */
|
|
10
|
+
looseFiles?: string[];
|
|
11
|
+
/** Replace a nonempty managed root instead of refusing. */
|
|
12
|
+
force: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Writes every artifact under `root` through a staging directory.
|
|
16
|
+
*
|
|
17
|
+
* The staging directory is a sibling of the output root rather than a temp
|
|
18
|
+
* directory, so it is on the same filesystem and the final `rename` is atomic.
|
|
19
|
+
* Nothing is visible at the destination until every artifact has been written
|
|
20
|
+
* successfully.
|
|
21
|
+
*/
|
|
22
|
+
export declare function writeArtifactsAtomically(root: string, artifacts: Artifact[], options: WriteOptions): void;
|
|
23
|
+
/**
|
|
24
|
+
* Places `linkPath` as a symlink to `target`.
|
|
25
|
+
*
|
|
26
|
+
* Replaces whatever is already at `linkPath`. Occupancy checks belong to the
|
|
27
|
+
* caller; this is the write. The target is stored as an absolute path so the
|
|
28
|
+
* link keeps working after the process changes directory.
|
|
29
|
+
*/
|
|
30
|
+
export declare function placeSymlink(linkPath: string, target: string): void;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
function nonempty(directory) {
|
|
4
|
+
if (!fs.existsSync(directory))
|
|
5
|
+
return false;
|
|
6
|
+
return !fs.statSync(directory).isDirectory() || fs.readdirSync(directory).length > 0;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Writes every artifact under `root` through a staging directory.
|
|
10
|
+
*
|
|
11
|
+
* The staging directory is a sibling of the output root rather than a temp
|
|
12
|
+
* directory, so it is on the same filesystem and the final `rename` is atomic.
|
|
13
|
+
* Nothing is visible at the destination until every artifact has been written
|
|
14
|
+
* successfully.
|
|
15
|
+
*/
|
|
16
|
+
export function writeArtifactsAtomically(root, artifacts, options) {
|
|
17
|
+
for (const managed of options.managedRoots) {
|
|
18
|
+
const destination = path.join(root, managed);
|
|
19
|
+
if (nonempty(destination) && !options.force)
|
|
20
|
+
throw new Error(`Destination is nonempty: ${destination} (use --force)`);
|
|
21
|
+
}
|
|
22
|
+
const parent = path.dirname(root);
|
|
23
|
+
fs.mkdirSync(parent, { recursive: true });
|
|
24
|
+
const staging = fs.mkdtempSync(path.join(parent, `.${path.basename(root)}.staging-`));
|
|
25
|
+
try {
|
|
26
|
+
for (const artifact of artifacts) {
|
|
27
|
+
const destination = path.join(staging, artifact.path);
|
|
28
|
+
fs.mkdirSync(path.dirname(destination), { recursive: true });
|
|
29
|
+
fs.writeFileSync(destination, artifact.content, { mode: artifact.mode });
|
|
30
|
+
fs.chmodSync(destination, artifact.mode);
|
|
31
|
+
}
|
|
32
|
+
fs.mkdirSync(root, { recursive: true });
|
|
33
|
+
for (const managed of options.managedRoots) {
|
|
34
|
+
const destination = path.join(root, managed);
|
|
35
|
+
const staged = path.join(staging, managed);
|
|
36
|
+
if (fs.existsSync(destination))
|
|
37
|
+
fs.rmSync(destination, { recursive: true, force: true });
|
|
38
|
+
fs.mkdirSync(path.dirname(destination), { recursive: true });
|
|
39
|
+
if (fs.existsSync(staged))
|
|
40
|
+
fs.renameSync(staged, destination);
|
|
41
|
+
else
|
|
42
|
+
fs.mkdirSync(destination, { recursive: true });
|
|
43
|
+
}
|
|
44
|
+
for (const loose of options.looseFiles ?? []) {
|
|
45
|
+
const destination = path.join(root, loose);
|
|
46
|
+
const staged = path.join(staging, loose);
|
|
47
|
+
if (!fs.existsSync(staged))
|
|
48
|
+
continue;
|
|
49
|
+
if (fs.existsSync(destination))
|
|
50
|
+
fs.rmSync(destination, { recursive: true, force: true });
|
|
51
|
+
fs.mkdirSync(path.dirname(destination), { recursive: true });
|
|
52
|
+
fs.renameSync(staged, destination);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
fs.rmSync(staging, { recursive: true, force: true });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Places `linkPath` as a symlink to `target`.
|
|
61
|
+
*
|
|
62
|
+
* Replaces whatever is already at `linkPath`. Occupancy checks belong to the
|
|
63
|
+
* caller; this is the write. The target is stored as an absolute path so the
|
|
64
|
+
* link keeps working after the process changes directory.
|
|
65
|
+
*/
|
|
66
|
+
export function placeSymlink(linkPath, target) {
|
|
67
|
+
const resolved = path.resolve(target);
|
|
68
|
+
fs.mkdirSync(path.dirname(linkPath), { recursive: true });
|
|
69
|
+
if (fs.lstatSync(linkPath, { throwIfNoEntry: false }))
|
|
70
|
+
fs.rmSync(linkPath, { recursive: true, force: true });
|
|
71
|
+
fs.symlinkSync(resolved, linkPath);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/agent/writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Migration, StoreHandle } from "../sqlite-store.js";
|
|
2
|
+
export declare const MIGRATIONS: readonly Migration[];
|
|
3
|
+
export declare const LATEST_VERSION: number;
|
|
4
|
+
/**
|
|
5
|
+
* Where the archive lives.
|
|
6
|
+
*
|
|
7
|
+
* Under `XDG_DATA_HOME` like the usage store, and for a stronger version of the
|
|
8
|
+
* same reason: this one holds the only copy of files whose originals may since
|
|
9
|
+
* have been deleted. `--archive` points it somewhere else — external or network
|
|
10
|
+
* storage — which is the expected shape once transcripts are included.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getArchiveRoot(env?: NodeJS.ProcessEnv, homedir?: string): string;
|
|
13
|
+
export declare function indexPath(root: string): string;
|
|
14
|
+
export declare function segmentsDirectory(root: string): string;
|
|
15
|
+
export interface OpenArchiveOptions {
|
|
16
|
+
root: string;
|
|
17
|
+
readOnly?: boolean;
|
|
18
|
+
migrate?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function openArchive(options: OpenArchiveOptions): StoreHandle;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { latestVersion, openStore } from "../sqlite-store.js";
|
|
4
|
+
/**
|
|
5
|
+
* The archive index.
|
|
6
|
+
*
|
|
7
|
+
* Content-addressed, which is what makes the archive incremental in both
|
|
8
|
+
* directions at once. A file whose bytes have not changed is already a `blob`
|
|
9
|
+
* and is not stored again; a file whose bytes *have* changed gets a second
|
|
10
|
+
* `artifact` row against a new blob, so the archive keeps every version it ever
|
|
11
|
+
* saw without anyone asking it to.
|
|
12
|
+
*
|
|
13
|
+
* The index is a convenience, not the archive. Every segment is a plain
|
|
14
|
+
* `.tar.gz` whose members are named by their own hash, so `tar tzf` recovers the
|
|
15
|
+
* contents with no database and no `cairn` — which is the whole point of
|
|
16
|
+
* choosing a standard container for something meant to outlive the tool.
|
|
17
|
+
*/
|
|
18
|
+
const SCHEMA_V1 = `
|
|
19
|
+
CREATE TABLE meta(
|
|
20
|
+
key TEXT PRIMARY KEY,
|
|
21
|
+
value TEXT NOT NULL
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
CREATE TABLE segment(
|
|
25
|
+
id INTEGER PRIMARY KEY,
|
|
26
|
+
name TEXT NOT NULL UNIQUE,
|
|
27
|
+
bytes INTEGER NOT NULL,
|
|
28
|
+
blobs INTEGER NOT NULL,
|
|
29
|
+
sha256 TEXT NOT NULL,
|
|
30
|
+
sealed_at TEXT NOT NULL
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
CREATE TABLE blob(
|
|
34
|
+
sha256 TEXT PRIMARY KEY,
|
|
35
|
+
size INTEGER NOT NULL,
|
|
36
|
+
segment_id INTEGER NOT NULL REFERENCES segment(id),
|
|
37
|
+
offset INTEGER NOT NULL,
|
|
38
|
+
stored_at TEXT NOT NULL
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
CREATE TABLE artifact(
|
|
42
|
+
id INTEGER PRIMARY KEY,
|
|
43
|
+
provider TEXT NOT NULL,
|
|
44
|
+
set_id TEXT NOT NULL,
|
|
45
|
+
class TEXT NOT NULL,
|
|
46
|
+
path TEXT NOT NULL,
|
|
47
|
+
sha256 TEXT NOT NULL REFERENCES blob(sha256),
|
|
48
|
+
size INTEGER NOT NULL,
|
|
49
|
+
mtime_ms REAL NOT NULL,
|
|
50
|
+
mode INTEGER NOT NULL,
|
|
51
|
+
first_seen TEXT NOT NULL,
|
|
52
|
+
last_seen TEXT NOT NULL,
|
|
53
|
+
UNIQUE(provider, path, sha256)
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
CREATE INDEX artifact_path ON artifact(provider, path);
|
|
57
|
+
CREATE INDEX artifact_class ON artifact(class, last_seen);
|
|
58
|
+
CREATE INDEX blob_segment ON blob(segment_id);
|
|
59
|
+
`;
|
|
60
|
+
export const MIGRATIONS = [
|
|
61
|
+
{
|
|
62
|
+
version: 1,
|
|
63
|
+
description: "Initial schema: segments, blobs, and artifact path history",
|
|
64
|
+
up(db) {
|
|
65
|
+
db.exec(SCHEMA_V1);
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
export const LATEST_VERSION = latestVersion(MIGRATIONS);
|
|
70
|
+
/**
|
|
71
|
+
* Where the archive lives.
|
|
72
|
+
*
|
|
73
|
+
* Under `XDG_DATA_HOME` like the usage store, and for a stronger version of the
|
|
74
|
+
* same reason: this one holds the only copy of files whose originals may since
|
|
75
|
+
* have been deleted. `--archive` points it somewhere else — external or network
|
|
76
|
+
* storage — which is the expected shape once transcripts are included.
|
|
77
|
+
*/
|
|
78
|
+
export function getArchiveRoot(env = process.env, homedir = os.homedir()) {
|
|
79
|
+
const configured = env.XDG_DATA_HOME?.trim();
|
|
80
|
+
const base = configured ? configured : path.join(homedir, ".local", "share");
|
|
81
|
+
return path.join(base, "cairn", "archive");
|
|
82
|
+
}
|
|
83
|
+
export function indexPath(root) {
|
|
84
|
+
return path.join(root, "archive.db");
|
|
85
|
+
}
|
|
86
|
+
export function segmentsDirectory(root) {
|
|
87
|
+
return path.join(root, "segments");
|
|
88
|
+
}
|
|
89
|
+
export function openArchive(options) {
|
|
90
|
+
return openStore({
|
|
91
|
+
path: indexPath(options.root),
|
|
92
|
+
migrations: MIGRATIONS,
|
|
93
|
+
label: "archive index",
|
|
94
|
+
...(options.readOnly === true ? { readOnly: true } : {}),
|
|
95
|
+
...(options.migrate === false ? { migrate: false } : {}),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/archive/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE9D;;;;;;;;;;;;;GAaG;AACH,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCjB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAyB;IAC9C;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,4DAA4D;QACzE,EAAE,CAAC,EAAE;YACH,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrB,CAAC;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAW,aAAa,CAAC,UAAU,CAAC,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAyB,OAAO,CAAC,GAAG,EACpC,UAAkB,EAAE,CAAC,OAAO,EAAE;IAE9B,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACrC,CAAC;AAQD,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,OAAO,SAAS,CAAC;QACf,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;QAC7B,UAAU,EAAE,UAAU;QACtB,KAAK,EAAE,eAAe;QACtB,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress reporting for a long archive run.
|
|
3
|
+
*
|
|
4
|
+
* A full run is tens of thousands of files and several gigabytes, and without
|
|
5
|
+
* this it printed nothing at all until it finished. Two levels, because they
|
|
6
|
+
* answer different questions:
|
|
7
|
+
*
|
|
8
|
+
* - the **transient line** answers "is it still going, and how far in" — it
|
|
9
|
+
* rewrites itself in place, so it belongs only on a terminal
|
|
10
|
+
* - **verbose** answers "what exactly did it do to which file" — one durable
|
|
11
|
+
* line per artifact, so it is worth redirecting to a file and grepping later
|
|
12
|
+
*
|
|
13
|
+
* The transient line is gated the same way the update notifier is: stderr must
|
|
14
|
+
* be a TTY, the format must not be machine-readable, and `CI` must be unset.
|
|
15
|
+
* Those gates exist because a `\r`-rewritten line is corruption in a log file
|
|
16
|
+
* and noise in a CI transcript. Verbose has no such gate — being redirectable is
|
|
17
|
+
* the whole point of it.
|
|
18
|
+
*/
|
|
19
|
+
export type Disposition = "stored" | "duplicate" | "unchanged" | "skipped";
|
|
20
|
+
export interface FileEvent {
|
|
21
|
+
path: string;
|
|
22
|
+
class: string;
|
|
23
|
+
size: number;
|
|
24
|
+
disposition: Disposition;
|
|
25
|
+
/** Absent for `unchanged`, which is decided without opening the file. */
|
|
26
|
+
sha256?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface SegmentEvent {
|
|
29
|
+
name: string;
|
|
30
|
+
bytes: number;
|
|
31
|
+
blobs: number;
|
|
32
|
+
}
|
|
33
|
+
/** What `runArchive` reports as it goes. Every hook is optional. */
|
|
34
|
+
export interface RunReporter {
|
|
35
|
+
start?(total: {
|
|
36
|
+
files: number;
|
|
37
|
+
bytes: number;
|
|
38
|
+
}): void;
|
|
39
|
+
file?(event: FileEvent): void;
|
|
40
|
+
segment?(event: SegmentEvent): void;
|
|
41
|
+
failure?(event: {
|
|
42
|
+
file: string;
|
|
43
|
+
reason: string;
|
|
44
|
+
}): void;
|
|
45
|
+
finish?(): void;
|
|
46
|
+
}
|
|
47
|
+
export interface ReporterOptions {
|
|
48
|
+
/** Draw the transient status line. */
|
|
49
|
+
progress: boolean;
|
|
50
|
+
/** Emit one durable line per artifact. */
|
|
51
|
+
verbose: boolean;
|
|
52
|
+
stream?: NodeJS.WriteStream;
|
|
53
|
+
now?: () => number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Decides whether the transient line may be drawn.
|
|
57
|
+
*
|
|
58
|
+
* Kept separate from the reporter so the command can report the decision, and
|
|
59
|
+
* so the rule is testable without a terminal.
|
|
60
|
+
*/
|
|
61
|
+
export declare function progressAllowed(format: string, stream?: NodeJS.WriteStream, env?: NodeJS.ProcessEnv): boolean;
|
|
62
|
+
export declare function createReporter(options: ReporterOptions): RunReporter;
|