@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,435 @@
|
|
|
1
|
+
import { addBucket, addTokens, bucketToolCalls, bucketTokens, classifyTool, emptyBucket, emptyTokens, sessionKey, totalTokens, } from "./events.js";
|
|
2
|
+
/**
|
|
3
|
+
* Rollups over scanned aggregates.
|
|
4
|
+
*
|
|
5
|
+
* Pure: every function here takes `FileAggregate[]` and returns rows. Nothing
|
|
6
|
+
* reads the filesystem, nothing knows which provider produced the input, and
|
|
7
|
+
* nothing formats anything — that is `src/commands/usage.ts`.
|
|
8
|
+
*/
|
|
9
|
+
export const TOKEN_DIMENSIONS = [
|
|
10
|
+
"model",
|
|
11
|
+
"day",
|
|
12
|
+
"week",
|
|
13
|
+
"month",
|
|
14
|
+
"project",
|
|
15
|
+
"session",
|
|
16
|
+
"provider",
|
|
17
|
+
];
|
|
18
|
+
export const TOOL_DIMENSIONS = ["name", "kind", "server", "day", "session", "provider"];
|
|
19
|
+
export const SESSION_SORTS = ["recent", "tokens", "tools", "duration"];
|
|
20
|
+
/**
|
|
21
|
+
* How `usage agents` groups.
|
|
22
|
+
*
|
|
23
|
+
* `role` is the reusable agent type, which is what `agentType` means for every
|
|
24
|
+
* provider. `path` is the task-specific identifier, which only some record.
|
|
25
|
+
*/
|
|
26
|
+
export const AGENT_DIMENSIONS = ["role", "path"];
|
|
27
|
+
/** Byte comparison, never `localeCompare`: generated order must not vary by ICU build. */
|
|
28
|
+
function byKey(a, b) {
|
|
29
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
30
|
+
}
|
|
31
|
+
function rankByTokens(rows) {
|
|
32
|
+
return rows.sort((a, b) => {
|
|
33
|
+
const left = a.tokens ? totalTokens(a.tokens) : 0;
|
|
34
|
+
const right = b.tokens ? totalTokens(b.tokens) : 0;
|
|
35
|
+
if (left !== right)
|
|
36
|
+
return right - left;
|
|
37
|
+
if (a.count !== b.count)
|
|
38
|
+
return b.count - a.count;
|
|
39
|
+
return byKey(a.key, b.key);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function rankByCount(rows) {
|
|
43
|
+
return rows.sort((a, b) => (b.count !== a.count ? b.count - a.count : byKey(a.key, b.key)));
|
|
44
|
+
}
|
|
45
|
+
class Rows {
|
|
46
|
+
rows = new Map();
|
|
47
|
+
get(key) {
|
|
48
|
+
let row = this.rows.get(key);
|
|
49
|
+
if (!row) {
|
|
50
|
+
row = { key, count: 0 };
|
|
51
|
+
this.rows.set(key, row);
|
|
52
|
+
}
|
|
53
|
+
return row;
|
|
54
|
+
}
|
|
55
|
+
tokensOf(key) {
|
|
56
|
+
const row = this.get(key);
|
|
57
|
+
return (row.tokens ??= emptyTokens());
|
|
58
|
+
}
|
|
59
|
+
values() {
|
|
60
|
+
return [...this.rows.values()];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** The Monday that starts the ISO week a UTC day falls in. */
|
|
64
|
+
export function weekOf(day) {
|
|
65
|
+
const date = new Date(`${day}T00:00:00Z`);
|
|
66
|
+
const weekday = (date.getUTCDay() + 6) % 7;
|
|
67
|
+
date.setUTCDate(date.getUTCDate() - weekday);
|
|
68
|
+
return date.toISOString().slice(0, 10);
|
|
69
|
+
}
|
|
70
|
+
export function totalsOf(files) {
|
|
71
|
+
const totals = emptyTokens();
|
|
72
|
+
for (const file of files) {
|
|
73
|
+
for (const bucket of Object.values(file.days))
|
|
74
|
+
addTokens(totals, bucketTokens(bucket));
|
|
75
|
+
}
|
|
76
|
+
return totals;
|
|
77
|
+
}
|
|
78
|
+
/** Every day bucket in the selection, merged. */
|
|
79
|
+
export function mergedBucket(files) {
|
|
80
|
+
const merged = emptyBucket();
|
|
81
|
+
for (const file of files) {
|
|
82
|
+
for (const bucket of Object.values(file.days))
|
|
83
|
+
addBucket(merged, bucket);
|
|
84
|
+
}
|
|
85
|
+
return merged;
|
|
86
|
+
}
|
|
87
|
+
export function summarize(files) {
|
|
88
|
+
const sessions = new Set();
|
|
89
|
+
const projects = new Set();
|
|
90
|
+
const kinds = { main: emptyTokens(), subagent: emptyTokens() };
|
|
91
|
+
const days = new Set();
|
|
92
|
+
let subagentTranscripts = 0;
|
|
93
|
+
for (const file of files) {
|
|
94
|
+
sessions.add(sessionKey(file));
|
|
95
|
+
if (file.project)
|
|
96
|
+
projects.add(file.project);
|
|
97
|
+
if (file.kind === "subagent")
|
|
98
|
+
subagentTranscripts += 1;
|
|
99
|
+
for (const [day, bucket] of Object.entries(file.days)) {
|
|
100
|
+
days.add(day);
|
|
101
|
+
addTokens(kinds[file.kind], bucketTokens(bucket));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const merged = mergedBucket(files);
|
|
105
|
+
const ordered = [...days].sort(byKey);
|
|
106
|
+
const tokens = emptyTokens();
|
|
107
|
+
addTokens(tokens, kinds.main);
|
|
108
|
+
addTokens(tokens, kinds.subagent);
|
|
109
|
+
let skills = 0;
|
|
110
|
+
for (const value of Object.values(merged.skills))
|
|
111
|
+
skills += value;
|
|
112
|
+
let subagents = 0;
|
|
113
|
+
for (const value of Object.values(merged.agents))
|
|
114
|
+
subagents += value.count;
|
|
115
|
+
let hooks = 0;
|
|
116
|
+
let hookFailures = 0;
|
|
117
|
+
for (const value of Object.values(merged.hooks)) {
|
|
118
|
+
hooks += value.count;
|
|
119
|
+
hookFailures += value.failures;
|
|
120
|
+
}
|
|
121
|
+
let slashCommands = 0;
|
|
122
|
+
for (const value of Object.values(merged.commands))
|
|
123
|
+
slashCommands += value;
|
|
124
|
+
let mcpCalls = 0;
|
|
125
|
+
for (const [name, calls] of Object.entries(merged.tools)) {
|
|
126
|
+
if (classifyTool(name).kind === "mcp")
|
|
127
|
+
mcpCalls += calls;
|
|
128
|
+
}
|
|
129
|
+
const models = new Rows();
|
|
130
|
+
for (const [model, totals] of Object.entries(merged.models)) {
|
|
131
|
+
const row = models.get(model);
|
|
132
|
+
row.count = totals.requests;
|
|
133
|
+
addTokens(models.tokensOf(model), totals);
|
|
134
|
+
}
|
|
135
|
+
const tools = new Rows();
|
|
136
|
+
for (const [name, calls] of Object.entries(merged.tools)) {
|
|
137
|
+
const row = tools.get(name);
|
|
138
|
+
row.count = calls;
|
|
139
|
+
row.kind = classifyTool(name).kind;
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
sessions: sessions.size,
|
|
143
|
+
transcripts: files.length,
|
|
144
|
+
subagentTranscripts,
|
|
145
|
+
projects: projects.size,
|
|
146
|
+
prompts: merged.prompts,
|
|
147
|
+
errors: merged.errors,
|
|
148
|
+
compactions: merged.compactions,
|
|
149
|
+
firstDay: ordered[0] ?? null,
|
|
150
|
+
lastDay: ordered[ordered.length - 1] ?? null,
|
|
151
|
+
days: ordered.length,
|
|
152
|
+
tokens,
|
|
153
|
+
tokensByKind: kinds,
|
|
154
|
+
models: rankByTokens(models.values()),
|
|
155
|
+
tools: rankByCount(tools.values()),
|
|
156
|
+
features: { skills, subagents, hooks, hookFailures, slashCommands, mcpCalls },
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
export function rollupTokens(files, dimension) {
|
|
160
|
+
const rows = new Rows();
|
|
161
|
+
const seen = new Map();
|
|
162
|
+
const keyFor = (file, day, model) => {
|
|
163
|
+
switch (dimension) {
|
|
164
|
+
case "model":
|
|
165
|
+
return model;
|
|
166
|
+
case "day":
|
|
167
|
+
return day;
|
|
168
|
+
case "week":
|
|
169
|
+
return weekOf(day);
|
|
170
|
+
case "month":
|
|
171
|
+
return day.slice(0, 7);
|
|
172
|
+
case "project":
|
|
173
|
+
return file.project || "(unknown)";
|
|
174
|
+
case "session":
|
|
175
|
+
return sessionKey(file);
|
|
176
|
+
case "provider":
|
|
177
|
+
return file.provider;
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
for (const file of files) {
|
|
181
|
+
for (const [day, bucket] of Object.entries(file.days)) {
|
|
182
|
+
for (const [model, totals] of Object.entries(bucket.models)) {
|
|
183
|
+
const key = keyFor(file, day, model);
|
|
184
|
+
const row = rows.get(key);
|
|
185
|
+
row.count += totals.requests;
|
|
186
|
+
addTokens(rows.tokensOf(key), totals);
|
|
187
|
+
const sessions = seen.get(key) ?? new Set();
|
|
188
|
+
sessions.add(sessionKey(file));
|
|
189
|
+
seen.set(key, sessions);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
for (const row of rows.values())
|
|
194
|
+
row.sessions = seen.get(row.key)?.size ?? 0;
|
|
195
|
+
const values = rows.values();
|
|
196
|
+
// Time dimensions read chronologically; everything else ranks by spend.
|
|
197
|
+
return dimension === "day" || dimension === "week" || dimension === "month"
|
|
198
|
+
? values.sort((a, b) => byKey(a.key, b.key))
|
|
199
|
+
: rankByTokens(values);
|
|
200
|
+
}
|
|
201
|
+
export function rollupTools(files, dimension, kind) {
|
|
202
|
+
const rows = new Rows();
|
|
203
|
+
for (const file of files) {
|
|
204
|
+
for (const [day, bucket] of Object.entries(file.days)) {
|
|
205
|
+
for (const [name, calls] of Object.entries(bucket.tools)) {
|
|
206
|
+
const classified = classifyTool(name);
|
|
207
|
+
if (kind && classified.kind !== kind)
|
|
208
|
+
continue;
|
|
209
|
+
let key;
|
|
210
|
+
switch (dimension) {
|
|
211
|
+
case "name":
|
|
212
|
+
key = name;
|
|
213
|
+
break;
|
|
214
|
+
case "kind":
|
|
215
|
+
key = classified.kind;
|
|
216
|
+
break;
|
|
217
|
+
case "server":
|
|
218
|
+
key = classified.server ?? "(builtin)";
|
|
219
|
+
break;
|
|
220
|
+
case "day":
|
|
221
|
+
key = day;
|
|
222
|
+
break;
|
|
223
|
+
case "session":
|
|
224
|
+
key = sessionKey(file);
|
|
225
|
+
break;
|
|
226
|
+
case "provider":
|
|
227
|
+
key = file.provider;
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
const row = rows.get(key);
|
|
231
|
+
row.count += calls;
|
|
232
|
+
if (dimension === "name") {
|
|
233
|
+
row.kind = classified.kind;
|
|
234
|
+
if (classified.server)
|
|
235
|
+
row.server = classified.server;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
const values = rows.values();
|
|
241
|
+
return dimension === "day" ? values.sort((a, b) => byKey(a.key, b.key)) : rankByCount(values);
|
|
242
|
+
}
|
|
243
|
+
export function rollupSessions(files, sort = "recent") {
|
|
244
|
+
const rows = new Map();
|
|
245
|
+
const models = new Map();
|
|
246
|
+
for (const file of files) {
|
|
247
|
+
// Grouped by the provider-qualified id, but shown by the bare one: the
|
|
248
|
+
// qualifier exists to stop two providers' sessions merging, not to be read.
|
|
249
|
+
const key = sessionKey(file);
|
|
250
|
+
let row = rows.get(key);
|
|
251
|
+
if (!row) {
|
|
252
|
+
row = {
|
|
253
|
+
key: file.sessionId,
|
|
254
|
+
provider: file.provider,
|
|
255
|
+
count: 0,
|
|
256
|
+
tokens: emptyTokens(),
|
|
257
|
+
toolCalls: 0,
|
|
258
|
+
subagents: 0,
|
|
259
|
+
};
|
|
260
|
+
rows.set(key, row);
|
|
261
|
+
}
|
|
262
|
+
// Identity comes from the main transcript; a subagent file inherits the
|
|
263
|
+
// parent's cwd but carries no title of its own.
|
|
264
|
+
if (file.kind === "main") {
|
|
265
|
+
if (file.project)
|
|
266
|
+
row.project = file.project;
|
|
267
|
+
if (file.title)
|
|
268
|
+
row.title = file.title;
|
|
269
|
+
if (file.gitBranch)
|
|
270
|
+
row.gitBranch = file.gitBranch;
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
row.subagents = (row.subagents ?? 0) + 1;
|
|
274
|
+
if (!row.project && file.project)
|
|
275
|
+
row.project = file.project;
|
|
276
|
+
}
|
|
277
|
+
if (file.firstTs && (!row.firstTs || file.firstTs < row.firstTs))
|
|
278
|
+
row.firstTs = file.firstTs;
|
|
279
|
+
if (file.lastTs && (!row.lastTs || file.lastTs > row.lastTs))
|
|
280
|
+
row.lastTs = file.lastTs;
|
|
281
|
+
const names = models.get(key) ?? new Set();
|
|
282
|
+
for (const bucket of Object.values(file.days)) {
|
|
283
|
+
const tokens = bucketTokens(bucket);
|
|
284
|
+
addTokens(row.tokens, tokens);
|
|
285
|
+
row.count += tokens.requests;
|
|
286
|
+
row.toolCalls = (row.toolCalls ?? 0) + bucketToolCalls(bucket);
|
|
287
|
+
row.prompts = (row.prompts ?? 0) + bucket.prompts;
|
|
288
|
+
for (const model of Object.keys(bucket.models))
|
|
289
|
+
names.add(model);
|
|
290
|
+
}
|
|
291
|
+
models.set(key, names);
|
|
292
|
+
}
|
|
293
|
+
const values = [...rows.values()];
|
|
294
|
+
for (const row of values) {
|
|
295
|
+
row.models = [
|
|
296
|
+
...(models.get(sessionKey({ provider: row.provider, sessionId: row.key })) ?? []),
|
|
297
|
+
].sort(byKey);
|
|
298
|
+
if (row.firstTs && row.lastTs) {
|
|
299
|
+
row.durationMs = Math.max(0, Date.parse(row.lastTs) - Date.parse(row.firstTs));
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
switch (sort) {
|
|
303
|
+
case "tokens":
|
|
304
|
+
return rankByTokens(values);
|
|
305
|
+
case "tools":
|
|
306
|
+
return values.sort((a, b) => (b.toolCalls ?? 0) !== (a.toolCalls ?? 0)
|
|
307
|
+
? (b.toolCalls ?? 0) - (a.toolCalls ?? 0)
|
|
308
|
+
: byKey(a.key, b.key));
|
|
309
|
+
case "duration":
|
|
310
|
+
return values.sort((a, b) => (b.durationMs ?? 0) !== (a.durationMs ?? 0)
|
|
311
|
+
? (b.durationMs ?? 0) - (a.durationMs ?? 0)
|
|
312
|
+
: byKey(a.key, b.key));
|
|
313
|
+
case "recent":
|
|
314
|
+
default:
|
|
315
|
+
return values.sort((a, b) => byKey(b.lastTs ?? "", a.lastTs ?? ""));
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
export function rollupProjects(files) {
|
|
319
|
+
const rows = new Rows();
|
|
320
|
+
const sessions = new Map();
|
|
321
|
+
for (const file of files) {
|
|
322
|
+
const key = file.project || "(unknown)";
|
|
323
|
+
const row = rows.get(key);
|
|
324
|
+
const seen = sessions.get(key) ?? new Set();
|
|
325
|
+
seen.add(file.sessionId);
|
|
326
|
+
sessions.set(key, seen);
|
|
327
|
+
for (const bucket of Object.values(file.days)) {
|
|
328
|
+
const tokens = bucketTokens(bucket);
|
|
329
|
+
addTokens(rows.tokensOf(key), tokens);
|
|
330
|
+
row.count += tokens.requests;
|
|
331
|
+
row.toolCalls = (row.toolCalls ?? 0) + bucketToolCalls(bucket);
|
|
332
|
+
row.prompts = (row.prompts ?? 0) + bucket.prompts;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
for (const row of rows.values())
|
|
336
|
+
row.sessions = sessions.get(row.key)?.size ?? 0;
|
|
337
|
+
return rankByTokens(rows.values());
|
|
338
|
+
}
|
|
339
|
+
export function rollupSkills(files) {
|
|
340
|
+
const rows = new Rows();
|
|
341
|
+
const sessions = new Map();
|
|
342
|
+
for (const file of files) {
|
|
343
|
+
for (const bucket of Object.values(file.days)) {
|
|
344
|
+
for (const [name, calls] of Object.entries(bucket.skills)) {
|
|
345
|
+
rows.get(name).count += calls;
|
|
346
|
+
const seen = sessions.get(name) ?? new Set();
|
|
347
|
+
seen.add(sessionKey(file));
|
|
348
|
+
sessions.set(name, seen);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
for (const row of rows.values())
|
|
353
|
+
row.sessions = sessions.get(row.key)?.size ?? 0;
|
|
354
|
+
return rankByCount(rows.values());
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Subagent activity.
|
|
358
|
+
*
|
|
359
|
+
* Spawn counts come from the parent's `Agent` tool calls; tokens come from the
|
|
360
|
+
* subagent transcripts themselves, because the parent's `toolUseResult` records
|
|
361
|
+
* only the subagent's final message and understates real spend several-fold.
|
|
362
|
+
*/
|
|
363
|
+
export function rollupAgents(files, dimension = "role") {
|
|
364
|
+
const rows = new Rows();
|
|
365
|
+
const transcripts = new Map();
|
|
366
|
+
for (const file of files) {
|
|
367
|
+
// Spawn counts come from the parent's tool calls, which name the agent by
|
|
368
|
+
// its type. There is no per-path spawn record, so under `--by path` the
|
|
369
|
+
// transcript count is the spawn count.
|
|
370
|
+
if (dimension === "role") {
|
|
371
|
+
for (const bucket of Object.values(file.days)) {
|
|
372
|
+
for (const [type, totals] of Object.entries(bucket.agents)) {
|
|
373
|
+
rows.get(type).count += totals.count;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
if (file.kind !== "subagent")
|
|
378
|
+
continue;
|
|
379
|
+
const named = dimension === "path" ? (file.agentPath ?? file.agentType) : file.agentType;
|
|
380
|
+
const key = named ?? "(unrecorded)";
|
|
381
|
+
const row = rows.get(key);
|
|
382
|
+
transcripts.set(key, (transcripts.get(key) ?? 0) + 1);
|
|
383
|
+
if (dimension === "path")
|
|
384
|
+
row.count += 1;
|
|
385
|
+
if (typeof file.spawnDepth === "number") {
|
|
386
|
+
row.maxDepth = Math.max(row.maxDepth ?? 0, file.spawnDepth);
|
|
387
|
+
}
|
|
388
|
+
for (const bucket of Object.values(file.days)) {
|
|
389
|
+
addTokens(rows.tokensOf(key), bucketTokens(bucket));
|
|
390
|
+
row.toolCalls = (row.toolCalls ?? 0) + bucketToolCalls(bucket);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
for (const row of rows.values())
|
|
394
|
+
row.sessions = transcripts.get(row.key) ?? 0;
|
|
395
|
+
return rankByCount(rows.values());
|
|
396
|
+
}
|
|
397
|
+
export function rollupHooks(files) {
|
|
398
|
+
const rows = new Rows();
|
|
399
|
+
const durations = new Map();
|
|
400
|
+
for (const file of files) {
|
|
401
|
+
for (const bucket of Object.values(file.days)) {
|
|
402
|
+
for (const [name, totals] of Object.entries(bucket.hooks)) {
|
|
403
|
+
const row = rows.get(name);
|
|
404
|
+
row.count += totals.count;
|
|
405
|
+
row.failures = (row.failures ?? 0) + totals.failures;
|
|
406
|
+
row.cancelled = (row.cancelled ?? 0) + totals.cancelled;
|
|
407
|
+
row.maxMs = Math.max(row.maxMs ?? 0, totals.maxMs);
|
|
408
|
+
durations.set(name, (durations.get(name) ?? 0) + totals.totalMs);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
for (const row of rows.values()) {
|
|
413
|
+
const total = durations.get(row.key) ?? 0;
|
|
414
|
+
row.meanMs = row.count > 0 ? Math.round(total / row.count) : 0;
|
|
415
|
+
}
|
|
416
|
+
return rankByCount(rows.values());
|
|
417
|
+
}
|
|
418
|
+
export function rollupCommands(files) {
|
|
419
|
+
const rows = new Rows();
|
|
420
|
+
const sessions = new Map();
|
|
421
|
+
for (const file of files) {
|
|
422
|
+
for (const bucket of Object.values(file.days)) {
|
|
423
|
+
for (const [name, calls] of Object.entries(bucket.commands)) {
|
|
424
|
+
rows.get(name).count += calls;
|
|
425
|
+
const seen = sessions.get(name) ?? new Set();
|
|
426
|
+
seen.add(sessionKey(file));
|
|
427
|
+
sessions.set(name, seen);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
for (const row of rows.values())
|
|
432
|
+
row.sessions = sessions.get(row.key)?.size ?? 0;
|
|
433
|
+
return rankByCount(rows.values());
|
|
434
|
+
}
|
|
435
|
+
//# sourceMappingURL=aggregate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../src/usage/aggregate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export { getUsageDatabasePath, openUsageDatabase, DatabaseTooNewError } from "./open.js";
|
|
2
|
+
export type { OpenOptions, OpenResult } from "./open.js";
|
|
3
|
+
export { LATEST_VERSION, MIGRATIONS } from "./migrations.js";
|
|
4
|
+
export type { Migration } from "./migrations.js";
|
|
5
|
+
export { selectFiles, storedFiles, storeStatus, prepareWrites, writeParsedFile, deleteMissing, } from "./store.js";
|
|
6
|
+
export type { SelectFilter, StoredFile, StoreStatus, WriteStatements } from "./store.js";
|
|
7
|
+
/**
|
|
8
|
+
* What `usage index` reports.
|
|
9
|
+
*
|
|
10
|
+
* `shards` is retained at `0`. It described the JSON shard store that used to
|
|
11
|
+
* back this command, and there is no longer any such thing — but it is a
|
|
12
|
+
* required property of the published `usage-index` schema, and a consumer
|
|
13
|
+
* reading it would break if it vanished. Recording the inconsistency is this
|
|
14
|
+
* project's rule for exactly this situation; see `docs/contract.md`.
|
|
15
|
+
*
|
|
16
|
+
* `bytes` is the whole store's size on every entry rather than a per-provider
|
|
17
|
+
* share, because one SQLite file holds them all and a row's share of it is not a
|
|
18
|
+
* number that means anything. It is therefore *not* summed into the total.
|
|
19
|
+
*/
|
|
20
|
+
export interface IndexStatus {
|
|
21
|
+
root: string;
|
|
22
|
+
present: boolean;
|
|
23
|
+
shards: number;
|
|
24
|
+
entries: number;
|
|
25
|
+
bytes: number;
|
|
26
|
+
updatedAt: string | null;
|
|
27
|
+
/** Day buckets held, across the whole store. */
|
|
28
|
+
days: number;
|
|
29
|
+
/** Events held, across the whole store. */
|
|
30
|
+
events: number;
|
|
31
|
+
/** Schema version of the store on disk, or the version this build writes. */
|
|
32
|
+
schemaVersion: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Status of the store, optionally narrowed to one provider's rows.
|
|
36
|
+
*
|
|
37
|
+
* Never throws: a missing or unreadable store reports absent, exactly as the
|
|
38
|
+
* shard store's `cacheStatus` did, so `usage index` on a fresh machine prints a
|
|
39
|
+
* status rather than an error.
|
|
40
|
+
*/
|
|
41
|
+
export declare function databaseStatus(path: string, provider?: string): IndexStatus;
|
|
42
|
+
/**
|
|
43
|
+
* Drops a provider's rows, or the whole store when no provider is named.
|
|
44
|
+
*
|
|
45
|
+
* Returns transcripts removed. The space is not reclaimed: `VACUUM` rewrites the
|
|
46
|
+
* entire file, which on a multi-gigabyte store costs far more than the pages it
|
|
47
|
+
* frees, and SQLite reuses them for the next import anyway.
|
|
48
|
+
*/
|
|
49
|
+
export declare function clearDatabase(path: string, provider?: string): number;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { LATEST_VERSION } from "./migrations.js";
|
|
3
|
+
import { openUsageDatabase } from "./open.js";
|
|
4
|
+
import { storeStatus } from "./store.js";
|
|
5
|
+
export { getUsageDatabasePath, openUsageDatabase, DatabaseTooNewError } from "./open.js";
|
|
6
|
+
export { LATEST_VERSION, MIGRATIONS } from "./migrations.js";
|
|
7
|
+
export { selectFiles, storedFiles, storeStatus, prepareWrites, writeParsedFile, deleteMissing, } from "./store.js";
|
|
8
|
+
function databaseBytes(path) {
|
|
9
|
+
let total = 0;
|
|
10
|
+
// A WAL database is three files, and a large uncheckpointed WAL is real disk
|
|
11
|
+
// the user is entitled to see accounted for.
|
|
12
|
+
for (const suffix of ["", "-wal", "-shm"]) {
|
|
13
|
+
try {
|
|
14
|
+
total += fs.statSync(`${path}${suffix}`).size;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// A sidecar that is absent contributes nothing.
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return total;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Status of the store, optionally narrowed to one provider's rows.
|
|
24
|
+
*
|
|
25
|
+
* Never throws: a missing or unreadable store reports absent, exactly as the
|
|
26
|
+
* shard store's `cacheStatus` did, so `usage index` on a fresh machine prints a
|
|
27
|
+
* status rather than an error.
|
|
28
|
+
*/
|
|
29
|
+
export function databaseStatus(path, provider) {
|
|
30
|
+
const absent = {
|
|
31
|
+
root: path,
|
|
32
|
+
present: false,
|
|
33
|
+
shards: 0,
|
|
34
|
+
entries: 0,
|
|
35
|
+
bytes: 0,
|
|
36
|
+
updatedAt: null,
|
|
37
|
+
days: 0,
|
|
38
|
+
events: 0,
|
|
39
|
+
schemaVersion: LATEST_VERSION,
|
|
40
|
+
};
|
|
41
|
+
if (!fs.existsSync(path))
|
|
42
|
+
return absent;
|
|
43
|
+
let opened;
|
|
44
|
+
try {
|
|
45
|
+
opened = openUsageDatabase({ path, readOnly: true, migrate: false });
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return absent;
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const status = storeStatus(opened.db);
|
|
52
|
+
const entries = provider ? (status.providers[provider] ?? 0) : status.files;
|
|
53
|
+
return {
|
|
54
|
+
root: path,
|
|
55
|
+
present: true,
|
|
56
|
+
shards: 0,
|
|
57
|
+
entries,
|
|
58
|
+
bytes: databaseBytes(path),
|
|
59
|
+
updatedAt: status.updatedAt,
|
|
60
|
+
days: status.days,
|
|
61
|
+
events: status.events,
|
|
62
|
+
schemaVersion: status.schemaVersion,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return absent;
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
try {
|
|
70
|
+
opened.db.close();
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Closing a read-only handle is best-effort.
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Drops a provider's rows, or the whole store when no provider is named.
|
|
79
|
+
*
|
|
80
|
+
* Returns transcripts removed. The space is not reclaimed: `VACUUM` rewrites the
|
|
81
|
+
* entire file, which on a multi-gigabyte store costs far more than the pages it
|
|
82
|
+
* frees, and SQLite reuses them for the next import anyway.
|
|
83
|
+
*/
|
|
84
|
+
export function clearDatabase(path, provider) {
|
|
85
|
+
if (!fs.existsSync(path))
|
|
86
|
+
return 0;
|
|
87
|
+
let opened;
|
|
88
|
+
try {
|
|
89
|
+
opened = openUsageDatabase({ path, migrate: false });
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
const before = Number(opened.db
|
|
96
|
+
.prepare(provider
|
|
97
|
+
? "SELECT COUNT(*) AS n FROM file WHERE provider = ?"
|
|
98
|
+
: "SELECT COUNT(*) AS n FROM file")
|
|
99
|
+
.get(...(provider ? [provider] : []))?.n ?? 0);
|
|
100
|
+
if (provider)
|
|
101
|
+
opened.db.prepare("DELETE FROM file WHERE provider = ?").run(provider);
|
|
102
|
+
else
|
|
103
|
+
opened.db.exec("DELETE FROM file");
|
|
104
|
+
return before;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return 0;
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
try {
|
|
111
|
+
opened.db.close();
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Best-effort.
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/usage/db/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Migration } from "../../sqlite-store.js";
|
|
2
|
+
/**
|
|
3
|
+
* The usage store's schema versions.
|
|
4
|
+
*
|
|
5
|
+
* This is a **fifth hand-owned version**, and the first in this project that is
|
|
6
|
+
* migrated rather than discarded. `CACHE_VERSION` in the old JSON shard store
|
|
7
|
+
* and the one in `src/url-cache.ts` are private and self-invalidating: a
|
|
8
|
+
* mismatch throws the file away and costs a re-parse. This one cannot work that
|
|
9
|
+
* way. Once `archive run --include transcripts` has run and the source logs are
|
|
10
|
+
* pruned, the database is the only surviving record of that usage, so a version
|
|
11
|
+
* bump has to carry the data forward.
|
|
12
|
+
*
|
|
13
|
+
* That makes the rules different, and they are worth stating:
|
|
14
|
+
*
|
|
15
|
+
* - **Never edit a shipped migration.** A database in the field has already run
|
|
16
|
+
* it; changing it means two databases claim the same version with different
|
|
17
|
+
* shapes. Add a new one instead.
|
|
18
|
+
* - **A migration must be able to run on real data**, not just on an empty file.
|
|
19
|
+
* - **A database from the future is refused, not guessed at.** A newer `cairn`
|
|
20
|
+
* may have written columns this build knows nothing about, and opening it
|
|
21
|
+
* read-write risks dropping them on the next write.
|
|
22
|
+
*
|
|
23
|
+
* `PRAGMA user_version` is the store, because SQLite keeps it in the file header
|
|
24
|
+
* where it costs no table and cannot itself need migrating.
|
|
25
|
+
*/
|
|
26
|
+
export declare const MIGRATIONS: readonly Migration[];
|
|
27
|
+
/** The version a database this build writes ends up at. */
|
|
28
|
+
export declare const LATEST_VERSION: number;
|
|
29
|
+
export type { Migration } from "../../sqlite-store.js";
|