@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,339 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import { diagnostic } from "../types.js";
|
|
3
|
+
import { profileFor } from "../targets/index.js";
|
|
4
|
+
import { packageName, packageVersion } from "../../version.js";
|
|
5
|
+
import { archive } from "./tar.js";
|
|
6
|
+
export const PACKAGE_REPORT = "package-report.json";
|
|
7
|
+
export const CHECKSUMS = "checksums.sha256";
|
|
8
|
+
export const SBOM = "sbom.json";
|
|
9
|
+
function sha256(content) {
|
|
10
|
+
return crypto.createHash("sha256").update(content).digest("hex");
|
|
11
|
+
}
|
|
12
|
+
function error(code, message, extra = {}) {
|
|
13
|
+
return { ...diagnostic(code, message, "unsupported", extra), severity: "error" };
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Names the bundle key behind a catalog field, which is not always the catalog
|
|
17
|
+
* key: Claude Code's `owner` and Cursor's `author` both come from
|
|
18
|
+
* `marketplace.publisher`, so pointing at the catalog name would send an author
|
|
19
|
+
* to a key that does not exist.
|
|
20
|
+
*/
|
|
21
|
+
function sourceField(field) {
|
|
22
|
+
switch (field.source.from) {
|
|
23
|
+
case "marketplace":
|
|
24
|
+
return `marketplace.${field.source.field}`;
|
|
25
|
+
case "manifest":
|
|
26
|
+
return field.source.field;
|
|
27
|
+
case "computed":
|
|
28
|
+
return field.name;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Reshapes a resolved value into the form the target's catalog declares. */
|
|
32
|
+
function reshape(value, transform) {
|
|
33
|
+
switch (transform ?? "identity") {
|
|
34
|
+
case "name":
|
|
35
|
+
return value && typeof value === "object" ? value.name : value;
|
|
36
|
+
case "first":
|
|
37
|
+
return Array.isArray(value) ? value[0] : value;
|
|
38
|
+
case "identity":
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** Resolves one catalog field from the manifest, the marketplace block, or the layout. */
|
|
43
|
+
function resolveField(field, bundle, source) {
|
|
44
|
+
switch (field.source.from) {
|
|
45
|
+
case "computed":
|
|
46
|
+
return reshape(source, field.transform);
|
|
47
|
+
case "manifest":
|
|
48
|
+
return reshape(bundle.manifest[field.source.field], field.transform);
|
|
49
|
+
case "marketplace":
|
|
50
|
+
return reshape(bundle.marketplace?.[field.source.field], field.transform);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Fills one catalog object from a field list, reporting AB500 per missing
|
|
55
|
+
* requirement. Shared by the document and its entries so a target's identity
|
|
56
|
+
* fields resolve by exactly the rules its plugin fields do.
|
|
57
|
+
*/
|
|
58
|
+
function collectFields(fields, bundle, source, onMissing) {
|
|
59
|
+
const result = {};
|
|
60
|
+
for (const field of fields) {
|
|
61
|
+
const value = resolveField(field, bundle, source);
|
|
62
|
+
if (empty(value)) {
|
|
63
|
+
if (field.required)
|
|
64
|
+
onMissing(field);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
result[field.name] = value;
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
function empty(value) {
|
|
72
|
+
if (value === undefined || value === null)
|
|
73
|
+
return true;
|
|
74
|
+
if (typeof value === "string")
|
|
75
|
+
return value.trim() === "";
|
|
76
|
+
if (Array.isArray(value))
|
|
77
|
+
return value.length === 0;
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Reads image dimensions from a PNG or JPEG header.
|
|
82
|
+
*
|
|
83
|
+
* Header parsing only — pulling in an image library to answer "is this a PNG"
|
|
84
|
+
* would be a dependency for a validation nicety.
|
|
85
|
+
*/
|
|
86
|
+
export function imageKind(content) {
|
|
87
|
+
if (content.length > 8 && content.subarray(0, 8).equals(Buffer.from("89504e470d0a1a0a", "hex")))
|
|
88
|
+
return "png";
|
|
89
|
+
if (content.length > 3 && content[0] === 0xff && content[1] === 0xd8)
|
|
90
|
+
return "jpeg";
|
|
91
|
+
if (content.subarray(0, 512).toString("utf8").includes("<svg"))
|
|
92
|
+
return "svg";
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Builds a marketplace catalog per selected target, covering every bundle given.
|
|
97
|
+
*
|
|
98
|
+
* Field names and requirements come from the target profile, so the packager
|
|
99
|
+
* itself contains no per-target branching and a catalog change is a data edit.
|
|
100
|
+
* `AB500` and `AB501` fire from here for every caller — `agent package` with one
|
|
101
|
+
* bundle, `agent marketplace` with a collection — so a consumer's suppression
|
|
102
|
+
* list means the same thing whichever command produced the catalog.
|
|
103
|
+
*/
|
|
104
|
+
export function buildCatalogs(bundles, targets, profiles, mode, options = {}) {
|
|
105
|
+
const list = Array.isArray(bundles) ? bundles : [bundles];
|
|
106
|
+
const artifacts = [];
|
|
107
|
+
const entries = [];
|
|
108
|
+
const diagnostics = [];
|
|
109
|
+
if (mode === "none")
|
|
110
|
+
return { artifacts, entries, diagnostics };
|
|
111
|
+
for (const target of targets) {
|
|
112
|
+
const spec = profileFor(target).marketplace;
|
|
113
|
+
if (!spec)
|
|
114
|
+
continue;
|
|
115
|
+
const location = spec.catalog[mode];
|
|
116
|
+
if (!location) {
|
|
117
|
+
diagnostics.push(diagnostic("AB507", `${target} has no ${mode} marketplace catalog`, "unsupported", {
|
|
118
|
+
target,
|
|
119
|
+
}));
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
for (const profile of profiles) {
|
|
123
|
+
if (profile !== "plugin")
|
|
124
|
+
continue;
|
|
125
|
+
const at = (bundle) => (options.attributeToBundle ? { path: bundle.root } : {});
|
|
126
|
+
const missing = (bundle) => (field) => {
|
|
127
|
+
diagnostics.push(error("AB500", `Catalog field '${field.name}' is required by ${target}`, {
|
|
128
|
+
target,
|
|
129
|
+
profile,
|
|
130
|
+
...at(bundle),
|
|
131
|
+
remediation: `Set ${sourceField(field)} in agent-bundle.yaml.`,
|
|
132
|
+
}));
|
|
133
|
+
};
|
|
134
|
+
const collected = [];
|
|
135
|
+
for (const bundle of list) {
|
|
136
|
+
const source = options.sourceFor?.(bundle, target, profile) ?? `./${target}/${profile}`;
|
|
137
|
+
const entry = collectFields(spec.entryFields, bundle, source, missing(bundle));
|
|
138
|
+
// A catalog naming a version the manifest disagrees with would install
|
|
139
|
+
// one thing and advertise another.
|
|
140
|
+
if (entry.version !== undefined && entry.version !== bundle.version)
|
|
141
|
+
diagnostics.push(error("AB501", `Catalog version '${String(entry.version)}' disagrees with the bundle`, {
|
|
142
|
+
target,
|
|
143
|
+
profile,
|
|
144
|
+
...at(bundle),
|
|
145
|
+
}));
|
|
146
|
+
collected.push(entry);
|
|
147
|
+
}
|
|
148
|
+
// Document identity comes from the first bundle unless a caller supplies
|
|
149
|
+
// it. `source` is irrelevant to document fields, so any value serves.
|
|
150
|
+
const document = options.document ??
|
|
151
|
+
collectFields(spec.documentFields ?? [], list[0], `./${target}/${profile}`, missing(list[0]));
|
|
152
|
+
const catalogPath = options.catalogPathFor?.(target, profile, location) ??
|
|
153
|
+
`${target}/${profile}/${location.directory}/${location.file}`;
|
|
154
|
+
artifacts.push({
|
|
155
|
+
path: catalogPath,
|
|
156
|
+
content: Buffer.from(JSON.stringify({ ...document, [spec.entriesKey]: collected }, null, 2) + "\n"),
|
|
157
|
+
mode: 0o644,
|
|
158
|
+
});
|
|
159
|
+
entries.push({ target, profile, path: catalogPath });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return { artifacts, entries, diagnostics };
|
|
163
|
+
}
|
|
164
|
+
/** Validates declared marketplace assets against the target's asset rules. */
|
|
165
|
+
export function checkAssets(bundle, targets, payload) {
|
|
166
|
+
const diagnostics = [];
|
|
167
|
+
const byName = new Map(payload.map((artifact) => [artifact.path, artifact]));
|
|
168
|
+
for (const target of targets) {
|
|
169
|
+
const spec = profileFor(target).marketplace;
|
|
170
|
+
if (!spec)
|
|
171
|
+
continue;
|
|
172
|
+
for (const rule of spec.assets) {
|
|
173
|
+
const declared = rule.role === "icon"
|
|
174
|
+
? bundle.marketplace?.icon
|
|
175
|
+
? [bundle.marketplace.icon]
|
|
176
|
+
: []
|
|
177
|
+
: (bundle.marketplace?.screenshots ?? []);
|
|
178
|
+
if (!declared.length) {
|
|
179
|
+
if (rule.required)
|
|
180
|
+
diagnostics.push(error("AB502", `${target} requires a marketplace ${rule.role}`, {
|
|
181
|
+
target,
|
|
182
|
+
remediation: `Set marketplace.${rule.role === "icon" ? "icon" : "screenshots"}.`,
|
|
183
|
+
}));
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
for (const reference of declared) {
|
|
187
|
+
const found = [...byName.entries()].find(([candidate]) => candidate.endsWith(`/${reference}`))?.[1];
|
|
188
|
+
if (!found) {
|
|
189
|
+
diagnostics.push(error("AB502", `Marketplace ${rule.role} '${reference}' is not in the package`, {
|
|
190
|
+
target,
|
|
191
|
+
remediation: "Add it under the bundle's assets directory.",
|
|
192
|
+
}));
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
if (!rule.extensions.some((extension) => reference.toLowerCase().endsWith(extension)))
|
|
196
|
+
diagnostics.push(diagnostic("AB503", `Marketplace ${rule.role} '${reference}' is not one of ${rule.extensions.join(", ")}`, "approximate", { target }));
|
|
197
|
+
else if (imageKind(found.content) === null)
|
|
198
|
+
diagnostics.push(diagnostic("AB503", `Marketplace ${rule.role} '${reference}' does not look like an image`, "approximate", { target }));
|
|
199
|
+
if (rule.maxBytes !== null && found.content.length > rule.maxBytes)
|
|
200
|
+
diagnostics.push(diagnostic("AB503", `Marketplace ${rule.role} '${reference}' exceeds ${rule.maxBytes} bytes`, "approximate", { target }));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return diagnostics;
|
|
205
|
+
}
|
|
206
|
+
/** Flags executable files outside the directories where a script belongs. */
|
|
207
|
+
export function checkExecutables(payload) {
|
|
208
|
+
return payload
|
|
209
|
+
.filter((artifact) => (artifact.mode & 0o111) !== 0)
|
|
210
|
+
.filter((artifact) => !/(^|\/)(hooks|scripts|bin)\//.test(artifact.path))
|
|
211
|
+
.map((artifact) => diagnostic("AB504", `Executable file outside hooks/, scripts/, or bin/: ${artifact.path}`, "approximate", { path: artifact.path, remediation: "Move it, or clear the execute bit." }));
|
|
212
|
+
}
|
|
213
|
+
/** Flags paths that collide when the filesystem is case-insensitive. */
|
|
214
|
+
export function checkCaseCollisions(payload) {
|
|
215
|
+
const seen = new Map();
|
|
216
|
+
const diagnostics = [];
|
|
217
|
+
for (const artifact of payload) {
|
|
218
|
+
const key = artifact.path.toLowerCase();
|
|
219
|
+
const existing = seen.get(key);
|
|
220
|
+
if (existing && existing !== artifact.path)
|
|
221
|
+
diagnostics.push(error("AB505", `Paths collide case-insensitively: '${existing}' and '${artifact.path}'`, {
|
|
222
|
+
path: artifact.path,
|
|
223
|
+
}));
|
|
224
|
+
else
|
|
225
|
+
seen.set(key, artifact.path);
|
|
226
|
+
}
|
|
227
|
+
return diagnostics;
|
|
228
|
+
}
|
|
229
|
+
/** Notes MCP servers invoked through an unpinned package specifier. */
|
|
230
|
+
export function checkPinning(bundle) {
|
|
231
|
+
const servers = bundle.mcp?.value.mcpServers;
|
|
232
|
+
if (!servers || typeof servers !== "object")
|
|
233
|
+
return [];
|
|
234
|
+
const diagnostics = [];
|
|
235
|
+
for (const [name, value] of Object.entries(servers)) {
|
|
236
|
+
if (!value || typeof value !== "object")
|
|
237
|
+
continue;
|
|
238
|
+
const server = value;
|
|
239
|
+
if (server.command !== "npx" || !Array.isArray(server.args))
|
|
240
|
+
continue;
|
|
241
|
+
const spec = server.args.map(String).find((arg) => !arg.startsWith("-"));
|
|
242
|
+
// A bare package name resolves to whatever is newest at install time.
|
|
243
|
+
if (spec && !/.@[^/]+$/.test(spec))
|
|
244
|
+
diagnostics.push(diagnostic("AB506", `MCP server '${name}' invokes an unpinned package: ${spec}`, "exact", {
|
|
245
|
+
path: bundle.mcp?.path,
|
|
246
|
+
remediation: "Pin a version, for example package@1.2.3.",
|
|
247
|
+
}));
|
|
248
|
+
}
|
|
249
|
+
return diagnostics;
|
|
250
|
+
}
|
|
251
|
+
/** `sha256sum -c` compatible, sorted by byte order for reproducibility. */
|
|
252
|
+
export function buildChecksums(payload) {
|
|
253
|
+
const lines = payload
|
|
254
|
+
.map((artifact) => `${sha256(artifact.content)} ${artifact.path}`)
|
|
255
|
+
.sort((a, b) => (a.slice(66) < b.slice(66) ? -1 : 1));
|
|
256
|
+
return { path: CHECKSUMS, content: Buffer.from(lines.join("\n") + "\n"), mode: 0o644 };
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Content-derived file type, as recorded in `sbom.json`. Exported because
|
|
260
|
+
* `agent audit --baseline` reads that `type` field back and must classify the
|
|
261
|
+
* current side by the same rule.
|
|
262
|
+
*/
|
|
263
|
+
export function classify(artifact) {
|
|
264
|
+
if ((artifact.mode & 0o111) !== 0)
|
|
265
|
+
return artifact.content.subarray(0, 2).toString("utf8") === "#!" ? "script" : "executable";
|
|
266
|
+
if (artifact.content.includes(0))
|
|
267
|
+
return "binary";
|
|
268
|
+
if (/\.(json|ya?ml|toml)$/i.test(artifact.path))
|
|
269
|
+
return "config";
|
|
270
|
+
if (/\.md$/i.test(artifact.path))
|
|
271
|
+
return "document";
|
|
272
|
+
return "asset";
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* A file inventory, deliberately not a CycloneDX claim.
|
|
276
|
+
*
|
|
277
|
+
* `bomFormat` and `specVersion` identify it as this tool's own format so a
|
|
278
|
+
* later `--sbom cyclonedx` can be added without changing what this one means.
|
|
279
|
+
*/
|
|
280
|
+
export function buildSbom(bundle, payload) {
|
|
281
|
+
const document = {
|
|
282
|
+
bomFormat: "cairn-inventory",
|
|
283
|
+
specVersion: "1",
|
|
284
|
+
generator: { name: packageName, version: packageVersion },
|
|
285
|
+
subject: { name: bundle.name, version: bundle.version },
|
|
286
|
+
components: payload.map((artifact) => ({
|
|
287
|
+
path: artifact.path,
|
|
288
|
+
type: classify(artifact),
|
|
289
|
+
sha256: sha256(artifact.content),
|
|
290
|
+
bytes: artifact.content.length,
|
|
291
|
+
mode: `0${artifact.mode.toString(8)}`,
|
|
292
|
+
origin: artifact.origin ?? "portable",
|
|
293
|
+
})),
|
|
294
|
+
};
|
|
295
|
+
return {
|
|
296
|
+
path: SBOM,
|
|
297
|
+
content: Buffer.from(JSON.stringify(document, null, 2) + "\n"),
|
|
298
|
+
mode: 0o644,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/** One deterministic archive per target and profile. */
|
|
302
|
+
export function buildArchives(bundle, payload, targets, profiles) {
|
|
303
|
+
const artifacts = [];
|
|
304
|
+
const archives = [];
|
|
305
|
+
for (const target of targets) {
|
|
306
|
+
const spec = profileFor(target).marketplace;
|
|
307
|
+
if (!spec)
|
|
308
|
+
continue;
|
|
309
|
+
for (const profile of profiles) {
|
|
310
|
+
const prefix = `${target}/${profile}/`;
|
|
311
|
+
const entries = payload
|
|
312
|
+
.filter((artifact) => artifact.path.startsWith(prefix))
|
|
313
|
+
.map((artifact) => ({
|
|
314
|
+
path: artifact.path.slice(prefix.length),
|
|
315
|
+
content: artifact.content,
|
|
316
|
+
mode: artifact.mode,
|
|
317
|
+
}));
|
|
318
|
+
if (!entries.length)
|
|
319
|
+
continue;
|
|
320
|
+
const name = spec.archiveName
|
|
321
|
+
.replace("{name}", bundle.name)
|
|
322
|
+
.replace("{version}", bundle.version)
|
|
323
|
+
.replace("{target}", target)
|
|
324
|
+
.replace("{profile}", profile);
|
|
325
|
+
const content = archive(entries);
|
|
326
|
+
const destination = `archives/${name}`;
|
|
327
|
+
artifacts.push({ path: destination, content, mode: 0o644 });
|
|
328
|
+
archives.push({
|
|
329
|
+
target,
|
|
330
|
+
profile,
|
|
331
|
+
path: destination,
|
|
332
|
+
sha256: sha256(content),
|
|
333
|
+
bytes: content.length,
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return { artifacts, archives };
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/package/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface TarEntry {
|
|
2
|
+
/** POSIX path inside the archive. */
|
|
3
|
+
path: string;
|
|
4
|
+
content: Buffer;
|
|
5
|
+
mode: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class TarPathTooLongError extends Error {
|
|
8
|
+
readonly path: string;
|
|
9
|
+
constructor(path: string);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Normalizes a mode to one of two values.
|
|
13
|
+
*
|
|
14
|
+
* This drops group/other write bits and setuid, so a stray 0o777 in a bundle
|
|
15
|
+
* cannot ship inside an archive.
|
|
16
|
+
*/
|
|
17
|
+
export declare function normalizeMode(mode: number, directory: boolean): number;
|
|
18
|
+
/**
|
|
19
|
+
* Builds a deterministic ustar archive.
|
|
20
|
+
*
|
|
21
|
+
* Every field that could vary between machines or runs is pinned: mtime, uid,
|
|
22
|
+
* gid, uname, gname, mode, and entry order. Ordering is a byte comparison
|
|
23
|
+
* rather than `localeCompare`, which is ICU-build and locale dependent and
|
|
24
|
+
* would otherwise reorder the archive on a differently configured CI runner.
|
|
25
|
+
*/
|
|
26
|
+
export declare function tarball(entries: TarEntry[]): Buffer;
|
|
27
|
+
/**
|
|
28
|
+
* Gzips deterministically.
|
|
29
|
+
*
|
|
30
|
+
* Node already writes a zero mtime, but the OS byte is a compile-time zlib
|
|
31
|
+
* constant that differs across platforms. Normalizing it keeps the archive
|
|
32
|
+
* byte-identical on macOS, Linux, and Windows.
|
|
33
|
+
*/
|
|
34
|
+
export declare function gzipDeterministic(payload: Buffer): Buffer;
|
|
35
|
+
/** A deterministic `.tar.gz` for the given entries. */
|
|
36
|
+
export declare function archive(entries: TarEntry[]): Buffer;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import zlib from "node:zlib";
|
|
2
|
+
const BLOCK = 512;
|
|
3
|
+
/** GNU's default blocking factor; padding to it keeps every tar implementation happy. */
|
|
4
|
+
const RECORD = BLOCK * 20;
|
|
5
|
+
/** Longest name the ustar `name` field holds; longer paths use the `prefix` field. */
|
|
6
|
+
const NAME_LIMIT = 100;
|
|
7
|
+
const PREFIX_LIMIT = 155;
|
|
8
|
+
export class TarPathTooLongError extends Error {
|
|
9
|
+
path;
|
|
10
|
+
constructor(path) {
|
|
11
|
+
super(`Path does not fit the ustar header: ${path}`);
|
|
12
|
+
this.path = path;
|
|
13
|
+
this.name = "TarPathTooLongError";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function octal(value, width) {
|
|
17
|
+
return value.toString(8).padStart(width - 1, "0") + "\0";
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Splits a path across the ustar `name` and `prefix` fields.
|
|
21
|
+
*
|
|
22
|
+
* A path that will not fit is refused rather than escalated to a PAX header:
|
|
23
|
+
* PAX records carry their own name and mtime, which would need a separate
|
|
24
|
+
* determinism policy. Refusing is honest and can be relaxed later.
|
|
25
|
+
*/
|
|
26
|
+
function splitPath(value) {
|
|
27
|
+
if (Buffer.byteLength(value) <= NAME_LIMIT)
|
|
28
|
+
return { name: value, prefix: "" };
|
|
29
|
+
const segments = value.split("/");
|
|
30
|
+
for (let index = 1; index < segments.length; index++) {
|
|
31
|
+
const prefix = segments.slice(0, index).join("/");
|
|
32
|
+
const name = segments.slice(index).join("/");
|
|
33
|
+
if (Buffer.byteLength(prefix) <= PREFIX_LIMIT && Buffer.byteLength(name) <= NAME_LIMIT)
|
|
34
|
+
return { name, prefix };
|
|
35
|
+
}
|
|
36
|
+
throw new TarPathTooLongError(value);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Normalizes a mode to one of two values.
|
|
40
|
+
*
|
|
41
|
+
* This drops group/other write bits and setuid, so a stray 0o777 in a bundle
|
|
42
|
+
* cannot ship inside an archive.
|
|
43
|
+
*/
|
|
44
|
+
export function normalizeMode(mode, directory) {
|
|
45
|
+
if (directory)
|
|
46
|
+
return 0o755;
|
|
47
|
+
return (mode & 0o111) !== 0 ? 0o755 : 0o644;
|
|
48
|
+
}
|
|
49
|
+
function header(entry) {
|
|
50
|
+
const block = Buffer.alloc(BLOCK, 0);
|
|
51
|
+
const { name, prefix } = splitPath(entry.directory ? `${entry.path}/` : entry.path);
|
|
52
|
+
block.write(name, 0, NAME_LIMIT, "utf8");
|
|
53
|
+
block.write(octal(entry.mode, 8), 100, 8, "utf8");
|
|
54
|
+
// uid/gid zero and uname/gname empty: a nonempty uname would embed the
|
|
55
|
+
// building machine's user in the archive bytes.
|
|
56
|
+
block.write(octal(0, 8), 108, 8, "utf8");
|
|
57
|
+
block.write(octal(0, 8), 116, 8, "utf8");
|
|
58
|
+
block.write(octal(entry.size, 12), 124, 12, "utf8");
|
|
59
|
+
block.write(octal(0, 12), 136, 12, "utf8"); // mtime
|
|
60
|
+
block.write(" ", 148, 8, "utf8"); // checksum placeholder: eight spaces
|
|
61
|
+
block.write(entry.directory ? "5" : "0", 156, 1, "utf8");
|
|
62
|
+
block.write("ustar\0", 257, 6, "utf8");
|
|
63
|
+
block.write("00", 263, 2, "utf8");
|
|
64
|
+
block.write(octal(0, 8), 329, 8, "utf8"); // devmajor
|
|
65
|
+
block.write(octal(0, 8), 337, 8, "utf8"); // devminor
|
|
66
|
+
if (prefix)
|
|
67
|
+
block.write(prefix, 345, PREFIX_LIMIT, "utf8");
|
|
68
|
+
let checksum = 0;
|
|
69
|
+
for (const byte of block)
|
|
70
|
+
checksum += byte;
|
|
71
|
+
block.write(checksum.toString(8).padStart(6, "0") + "\0 ", 148, 8, "utf8");
|
|
72
|
+
return block;
|
|
73
|
+
}
|
|
74
|
+
function pad(size) {
|
|
75
|
+
const remainder = size % BLOCK;
|
|
76
|
+
return remainder === 0 ? Buffer.alloc(0) : Buffer.alloc(BLOCK - remainder, 0);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Builds a deterministic ustar archive.
|
|
80
|
+
*
|
|
81
|
+
* Every field that could vary between machines or runs is pinned: mtime, uid,
|
|
82
|
+
* gid, uname, gname, mode, and entry order. Ordering is a byte comparison
|
|
83
|
+
* rather than `localeCompare`, which is ICU-build and locale dependent and
|
|
84
|
+
* would otherwise reorder the archive on a differently configured CI runner.
|
|
85
|
+
*/
|
|
86
|
+
export function tarball(entries) {
|
|
87
|
+
const sorted = [...entries].sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
|
|
88
|
+
// Directory entries are emitted explicitly so `tar tf` lists a complete tree.
|
|
89
|
+
const directories = new Set();
|
|
90
|
+
for (const entry of sorted) {
|
|
91
|
+
const segments = entry.path.split("/");
|
|
92
|
+
for (let index = 1; index < segments.length; index++)
|
|
93
|
+
directories.add(segments.slice(0, index).join("/"));
|
|
94
|
+
}
|
|
95
|
+
const all = [
|
|
96
|
+
...[...directories].map((path) => ({
|
|
97
|
+
path,
|
|
98
|
+
content: Buffer.alloc(0),
|
|
99
|
+
mode: 0o755,
|
|
100
|
+
directory: true,
|
|
101
|
+
})),
|
|
102
|
+
...sorted.map((entry) => ({ ...entry, directory: false })),
|
|
103
|
+
].sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
|
|
104
|
+
const blocks = [];
|
|
105
|
+
for (const entry of all) {
|
|
106
|
+
blocks.push(header({
|
|
107
|
+
path: entry.path,
|
|
108
|
+
size: entry.content.length,
|
|
109
|
+
mode: normalizeMode(entry.mode, entry.directory),
|
|
110
|
+
directory: entry.directory,
|
|
111
|
+
}));
|
|
112
|
+
if (entry.content.length)
|
|
113
|
+
blocks.push(entry.content, pad(entry.content.length));
|
|
114
|
+
}
|
|
115
|
+
blocks.push(Buffer.alloc(BLOCK * 2, 0));
|
|
116
|
+
const body = Buffer.concat(blocks);
|
|
117
|
+
const remainder = body.length % RECORD;
|
|
118
|
+
return remainder === 0 ? body : Buffer.concat([body, Buffer.alloc(RECORD - remainder, 0)]);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Gzips deterministically.
|
|
122
|
+
*
|
|
123
|
+
* Node already writes a zero mtime, but the OS byte is a compile-time zlib
|
|
124
|
+
* constant that differs across platforms. Normalizing it keeps the archive
|
|
125
|
+
* byte-identical on macOS, Linux, and Windows.
|
|
126
|
+
*/
|
|
127
|
+
export function gzipDeterministic(payload) {
|
|
128
|
+
const compressed = zlib.gzipSync(payload, { level: 9 });
|
|
129
|
+
compressed.writeUInt32LE(0, 4); // MTIME
|
|
130
|
+
compressed[9] = 0x03; // OS = Unix
|
|
131
|
+
return compressed;
|
|
132
|
+
}
|
|
133
|
+
/** A deterministic `.tar.gz` for the given entries. */
|
|
134
|
+
export function archive(entries) {
|
|
135
|
+
return gzipDeterministic(tarball(entries));
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=tar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tar.js","sourceRoot":"","sources":["../../../src/agent/package/tar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AgentBundle, SourceFile } from "./types.js";
|
|
2
|
+
export declare function readStructured(file: string): Record<string, unknown>;
|
|
3
|
+
export declare function splitFrontmatter(content: string, file: string): {
|
|
4
|
+
metadata: Record<string, unknown>;
|
|
5
|
+
body: string;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Every file under `directory`, with root-relative paths in the platform's
|
|
9
|
+
* separator. Refuses a symlink that resolves outside `directory`, which is why
|
|
10
|
+
* callers outside this module use it rather than walking the tree themselves.
|
|
11
|
+
*/
|
|
12
|
+
export declare function allFiles(directory: string): SourceFile[];
|
|
13
|
+
export declare function loadBundle(source: string): AgentBundle;
|