@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 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/usage/db/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The normalized usage model.
|
|
3
|
+
*
|
|
4
|
+
* Nothing here touches the filesystem or knows which provider produced it: a
|
|
5
|
+
* provider's job is to turn its own on-disk format into these shapes, and every
|
|
6
|
+
* rollup in `aggregate.ts` reads only these. That split is what lets a second
|
|
7
|
+
* LLM's logs join the same reports without a single change to the commands.
|
|
8
|
+
*
|
|
9
|
+
* The unit of storage is a **day-bucketed per-file aggregate**. Keeping raw
|
|
10
|
+
* events would make the index unusable at corpus scale, and keeping flat
|
|
11
|
+
* per-file totals would make `usage tokens --by day` impossible; bucketing by
|
|
12
|
+
* UTC date costs almost nothing (a session rarely spans two days) and preserves
|
|
13
|
+
* every cross-tab the subcommands need.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Token counters for one bucket.
|
|
17
|
+
*
|
|
18
|
+
* `cacheWrite` is the authoritative total; `cacheWrite5m` and `cacheWrite1h`
|
|
19
|
+
* are a best-effort TTL split, which the oldest records do not carry. They can
|
|
20
|
+
* therefore sum to less than `cacheWrite`, and never to more — reporting the
|
|
21
|
+
* total separately is what keeps a legacy record from being silently filed
|
|
22
|
+
* under the wrong TTL.
|
|
23
|
+
*
|
|
24
|
+
* `requests` counts deduplicated API responses, not JSONL lines — see
|
|
25
|
+
* `providers/claude-code.ts` for why those differ by a factor of two.
|
|
26
|
+
*/
|
|
27
|
+
export interface TokenTotals {
|
|
28
|
+
input: number;
|
|
29
|
+
output: number;
|
|
30
|
+
cacheRead: number;
|
|
31
|
+
cacheWrite: number;
|
|
32
|
+
cacheWrite5m: number;
|
|
33
|
+
cacheWrite1h: number;
|
|
34
|
+
thinking: number;
|
|
35
|
+
webSearch: number;
|
|
36
|
+
webFetch: number;
|
|
37
|
+
requests: number;
|
|
38
|
+
}
|
|
39
|
+
export interface HookTotals {
|
|
40
|
+
count: number;
|
|
41
|
+
failures: number;
|
|
42
|
+
cancelled: number;
|
|
43
|
+
totalMs: number;
|
|
44
|
+
maxMs: number;
|
|
45
|
+
}
|
|
46
|
+
export interface AgentTotals {
|
|
47
|
+
count: number;
|
|
48
|
+
maxDepth: number;
|
|
49
|
+
}
|
|
50
|
+
/** Everything observed on one UTC calendar day within one transcript. */
|
|
51
|
+
export interface DayBucket {
|
|
52
|
+
models: Record<string, TokenTotals>;
|
|
53
|
+
tools: Record<string, number>;
|
|
54
|
+
skills: Record<string, number>;
|
|
55
|
+
agents: Record<string, AgentTotals>;
|
|
56
|
+
hooks: Record<string, HookTotals>;
|
|
57
|
+
commands: Record<string, number>;
|
|
58
|
+
prompts: number;
|
|
59
|
+
errors: number;
|
|
60
|
+
compactions: number;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* One transcript file, reduced.
|
|
64
|
+
*
|
|
65
|
+
* `size` and `mtimeMs` are the cache key: transcripts are append-only, so a file
|
|
66
|
+
* whose size and mtime are unchanged cannot have new records in it.
|
|
67
|
+
*/
|
|
68
|
+
export interface FileAggregate {
|
|
69
|
+
file: string;
|
|
70
|
+
size: number;
|
|
71
|
+
mtimeMs: number;
|
|
72
|
+
provider: string;
|
|
73
|
+
sessionId: string;
|
|
74
|
+
kind: TranscriptKind;
|
|
75
|
+
parentSessionId?: string;
|
|
76
|
+
agentId?: string;
|
|
77
|
+
agentType?: string;
|
|
78
|
+
/**
|
|
79
|
+
* The task-specific identifier for a subagent run, where the provider records
|
|
80
|
+
* one separately from its reusable type. Codex names both; Claude Code names
|
|
81
|
+
* only the type, so this is absent there.
|
|
82
|
+
*/
|
|
83
|
+
agentPath?: string;
|
|
84
|
+
spawnDepth?: number;
|
|
85
|
+
/** Absolute working directory, read from the records rather than the directory name. */
|
|
86
|
+
project: string;
|
|
87
|
+
title?: string;
|
|
88
|
+
gitBranch?: string;
|
|
89
|
+
toolVersion?: string;
|
|
90
|
+
firstTs: string;
|
|
91
|
+
lastTs: string;
|
|
92
|
+
days: Record<string, DayBucket>;
|
|
93
|
+
/** Lines that were not valid JSON. Reported, never thrown. */
|
|
94
|
+
malformedLines: number;
|
|
95
|
+
}
|
|
96
|
+
export type TranscriptKind = "main" | "subagent";
|
|
97
|
+
/** How a tool call is classified for `usage tools --by kind`. */
|
|
98
|
+
export type ToolKind = "builtin" | "mcp" | "agent" | "skill";
|
|
99
|
+
export declare const TOOL_KINDS: readonly ToolKind[];
|
|
100
|
+
export declare function emptyTokens(): TokenTotals;
|
|
101
|
+
export declare function addTokens(into: TokenTotals, from: TokenTotals): TokenTotals;
|
|
102
|
+
/**
|
|
103
|
+
* Every token that passed through the model, billable or not.
|
|
104
|
+
*
|
|
105
|
+
* Cache reads are included: they are what the request actually cost in context,
|
|
106
|
+
* and omitting them understates real usage by an order of magnitude.
|
|
107
|
+
*/
|
|
108
|
+
export declare function totalTokens(tokens: TokenTotals): number;
|
|
109
|
+
export declare function emptyBucket(): DayBucket;
|
|
110
|
+
export declare function addBucket(into: DayBucket, from: DayBucket): DayBucket;
|
|
111
|
+
/** Token totals across every model in a bucket. */
|
|
112
|
+
export declare function bucketTokens(bucket: DayBucket): TokenTotals;
|
|
113
|
+
/** Tool calls across every name in a bucket. */
|
|
114
|
+
export declare function bucketToolCalls(bucket: DayBucket): number;
|
|
115
|
+
/**
|
|
116
|
+
* Splits an MCP tool name into its server and tool halves.
|
|
117
|
+
*
|
|
118
|
+
* Claude Code names an MCP tool `mcp__<server>__<tool>`, and a server name may
|
|
119
|
+
* itself contain underscores, so the split is on the *first* `__` after the
|
|
120
|
+
* prefix and the remainder is the tool. Anything that does not match is a
|
|
121
|
+
* builtin.
|
|
122
|
+
*/
|
|
123
|
+
export declare function classifyTool(name: string): {
|
|
124
|
+
kind: ToolKind;
|
|
125
|
+
server?: string;
|
|
126
|
+
tool: string;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* A session's identity across providers.
|
|
130
|
+
*
|
|
131
|
+
* A session id is unique only within the provider that issued it — two
|
|
132
|
+
* assistants can and do mint the same UUID — so anything counting or grouping
|
|
133
|
+
* sessions while several providers are in scope must qualify it. The separator
|
|
134
|
+
* is a NUL, which cannot occur in either half.
|
|
135
|
+
*/
|
|
136
|
+
export declare function sessionKey(file: {
|
|
137
|
+
provider: string;
|
|
138
|
+
sessionId: string;
|
|
139
|
+
}): string;
|
|
140
|
+
/** The UTC calendar day an ISO timestamp falls on, or null when unparseable. */
|
|
141
|
+
export declare function utcDay(timestamp: string): string | null;
|
|
142
|
+
/**
|
|
143
|
+
* What one observed occurrence in a transcript was.
|
|
144
|
+
*
|
|
145
|
+
* Events are the per-occurrence decomposition of a {@link DayBucket}: the bucket
|
|
146
|
+
* is a sum, and this is what was summed. Storing both is deliberate. The bucket
|
|
147
|
+
* answers every report that exists today in 82k rows; the event stream answers
|
|
148
|
+
* the questions a day bucket cannot — anything sub-day, per-turn, or sequential —
|
|
149
|
+
* at roughly 2.5M rows.
|
|
150
|
+
*
|
|
151
|
+
* A provider emits these *alongside* the bucket it already builds rather than
|
|
152
|
+
* instead of it, so no published number depends on this type being complete.
|
|
153
|
+
* {@link foldDays} folds a stream back into buckets, and
|
|
154
|
+
* `tests/unit/usage-events.test.ts` asserts the fold reproduces what the
|
|
155
|
+
* provider built. That test is what makes the stream trustworthy; without it
|
|
156
|
+
* an event silently missing from a provider would be invisible.
|
|
157
|
+
*
|
|
158
|
+
* `hook_error` exists because a hook's failure count and its execution count can
|
|
159
|
+
* legitimately diverge: Claude Code's `stop_hook_summary` reports failures in a
|
|
160
|
+
* `hookErrors` array that carries no matching execution record, so a `hook`
|
|
161
|
+
* event per failure would invent executions that never ran.
|
|
162
|
+
*/
|
|
163
|
+
export type EventKind = "response" | "tool_use" | "agent" | "skill" | "command" | "prompt" | "error" | "compaction" | "hook" | "hook_error";
|
|
164
|
+
export interface UsageEvent {
|
|
165
|
+
/** ISO instant from the record itself. */
|
|
166
|
+
ts: string;
|
|
167
|
+
kind: EventKind;
|
|
168
|
+
/** `response` only. */
|
|
169
|
+
model?: string;
|
|
170
|
+
/** `response` only. Already corrected for each provider's distortions. */
|
|
171
|
+
tokens?: TokenTotals;
|
|
172
|
+
/** `tool_use` only: the raw tool name, before {@link classifyTool}. */
|
|
173
|
+
tool?: string;
|
|
174
|
+
/** `agent`, `skill`, `command`, `hook`, `hook_error`: the thing's name. */
|
|
175
|
+
name?: string;
|
|
176
|
+
/** `hook` only. */
|
|
177
|
+
status?: "ok" | "failed" | "cancelled";
|
|
178
|
+
/** `hook` only. */
|
|
179
|
+
durationMs?: number;
|
|
180
|
+
/** `agent` only, where the provider records a spawn depth on the call itself. */
|
|
181
|
+
depth?: number;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* One transcript, parsed.
|
|
185
|
+
*
|
|
186
|
+
* `aggregate` is exactly what {@link UsageProvider.read} has always returned;
|
|
187
|
+
* `events` is the same content decomposed. Both come out of one pass.
|
|
188
|
+
*/
|
|
189
|
+
export interface ParsedFile {
|
|
190
|
+
aggregate: FileAggregate;
|
|
191
|
+
events: UsageEvent[];
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Folds an event stream back into day buckets.
|
|
195
|
+
*
|
|
196
|
+
* `observedDays` seeds the result, because a provider opens a bucket for every
|
|
197
|
+
* timestamped record it sees — including records that increment nothing. Those
|
|
198
|
+
* all-zero days are real output: `usage tokens --by day` reports a row for a day
|
|
199
|
+
* a session touched but spent nothing on. Deriving days from events alone would
|
|
200
|
+
* drop them.
|
|
201
|
+
*/
|
|
202
|
+
export declare function foldDays(events: readonly UsageEvent[], observedDays?: readonly string[]): Record<string, DayBucket>;
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The normalized usage model.
|
|
3
|
+
*
|
|
4
|
+
* Nothing here touches the filesystem or knows which provider produced it: a
|
|
5
|
+
* provider's job is to turn its own on-disk format into these shapes, and every
|
|
6
|
+
* rollup in `aggregate.ts` reads only these. That split is what lets a second
|
|
7
|
+
* LLM's logs join the same reports without a single change to the commands.
|
|
8
|
+
*
|
|
9
|
+
* The unit of storage is a **day-bucketed per-file aggregate**. Keeping raw
|
|
10
|
+
* events would make the index unusable at corpus scale, and keeping flat
|
|
11
|
+
* per-file totals would make `usage tokens --by day` impossible; bucketing by
|
|
12
|
+
* UTC date costs almost nothing (a session rarely spans two days) and preserves
|
|
13
|
+
* every cross-tab the subcommands need.
|
|
14
|
+
*/
|
|
15
|
+
export const TOOL_KINDS = ["builtin", "mcp", "agent", "skill"];
|
|
16
|
+
export function emptyTokens() {
|
|
17
|
+
return {
|
|
18
|
+
input: 0,
|
|
19
|
+
output: 0,
|
|
20
|
+
cacheRead: 0,
|
|
21
|
+
cacheWrite: 0,
|
|
22
|
+
cacheWrite5m: 0,
|
|
23
|
+
cacheWrite1h: 0,
|
|
24
|
+
thinking: 0,
|
|
25
|
+
webSearch: 0,
|
|
26
|
+
webFetch: 0,
|
|
27
|
+
requests: 0,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function addTokens(into, from) {
|
|
31
|
+
into.input += from.input;
|
|
32
|
+
into.output += from.output;
|
|
33
|
+
into.cacheRead += from.cacheRead;
|
|
34
|
+
into.cacheWrite += from.cacheWrite;
|
|
35
|
+
into.cacheWrite5m += from.cacheWrite5m;
|
|
36
|
+
into.cacheWrite1h += from.cacheWrite1h;
|
|
37
|
+
into.thinking += from.thinking;
|
|
38
|
+
into.webSearch += from.webSearch;
|
|
39
|
+
into.webFetch += from.webFetch;
|
|
40
|
+
into.requests += from.requests;
|
|
41
|
+
return into;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Every token that passed through the model, billable or not.
|
|
45
|
+
*
|
|
46
|
+
* Cache reads are included: they are what the request actually cost in context,
|
|
47
|
+
* and omitting them understates real usage by an order of magnitude.
|
|
48
|
+
*/
|
|
49
|
+
export function totalTokens(tokens) {
|
|
50
|
+
return tokens.input + tokens.output + tokens.cacheRead + tokens.cacheWrite;
|
|
51
|
+
}
|
|
52
|
+
export function emptyBucket() {
|
|
53
|
+
return {
|
|
54
|
+
models: {},
|
|
55
|
+
tools: {},
|
|
56
|
+
skills: {},
|
|
57
|
+
agents: {},
|
|
58
|
+
hooks: {},
|
|
59
|
+
commands: {},
|
|
60
|
+
prompts: 0,
|
|
61
|
+
errors: 0,
|
|
62
|
+
compactions: 0,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function addCounts(into, from) {
|
|
66
|
+
for (const [key, value] of Object.entries(from))
|
|
67
|
+
into[key] = (into[key] ?? 0) + value;
|
|
68
|
+
}
|
|
69
|
+
export function addBucket(into, from) {
|
|
70
|
+
for (const [model, tokens] of Object.entries(from.models)) {
|
|
71
|
+
addTokens((into.models[model] ??= emptyTokens()), tokens);
|
|
72
|
+
}
|
|
73
|
+
addCounts(into.tools, from.tools);
|
|
74
|
+
addCounts(into.skills, from.skills);
|
|
75
|
+
addCounts(into.commands, from.commands);
|
|
76
|
+
for (const [name, totals] of Object.entries(from.agents)) {
|
|
77
|
+
const target = (into.agents[name] ??= { count: 0, maxDepth: 0 });
|
|
78
|
+
target.count += totals.count;
|
|
79
|
+
target.maxDepth = Math.max(target.maxDepth, totals.maxDepth);
|
|
80
|
+
}
|
|
81
|
+
for (const [name, totals] of Object.entries(from.hooks)) {
|
|
82
|
+
const target = (into.hooks[name] ??= {
|
|
83
|
+
count: 0,
|
|
84
|
+
failures: 0,
|
|
85
|
+
cancelled: 0,
|
|
86
|
+
totalMs: 0,
|
|
87
|
+
maxMs: 0,
|
|
88
|
+
});
|
|
89
|
+
target.count += totals.count;
|
|
90
|
+
target.failures += totals.failures;
|
|
91
|
+
target.cancelled += totals.cancelled;
|
|
92
|
+
target.totalMs += totals.totalMs;
|
|
93
|
+
target.maxMs = Math.max(target.maxMs, totals.maxMs);
|
|
94
|
+
}
|
|
95
|
+
into.prompts += from.prompts;
|
|
96
|
+
into.errors += from.errors;
|
|
97
|
+
into.compactions += from.compactions;
|
|
98
|
+
return into;
|
|
99
|
+
}
|
|
100
|
+
/** Token totals across every model in a bucket. */
|
|
101
|
+
export function bucketTokens(bucket) {
|
|
102
|
+
const totals = emptyTokens();
|
|
103
|
+
for (const tokens of Object.values(bucket.models))
|
|
104
|
+
addTokens(totals, tokens);
|
|
105
|
+
return totals;
|
|
106
|
+
}
|
|
107
|
+
/** Tool calls across every name in a bucket. */
|
|
108
|
+
export function bucketToolCalls(bucket) {
|
|
109
|
+
let total = 0;
|
|
110
|
+
for (const count of Object.values(bucket.tools))
|
|
111
|
+
total += count;
|
|
112
|
+
return total;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Splits an MCP tool name into its server and tool halves.
|
|
116
|
+
*
|
|
117
|
+
* Claude Code names an MCP tool `mcp__<server>__<tool>`, and a server name may
|
|
118
|
+
* itself contain underscores, so the split is on the *first* `__` after the
|
|
119
|
+
* prefix and the remainder is the tool. Anything that does not match is a
|
|
120
|
+
* builtin.
|
|
121
|
+
*/
|
|
122
|
+
export function classifyTool(name) {
|
|
123
|
+
if (name.startsWith("mcp__")) {
|
|
124
|
+
const rest = name.slice("mcp__".length);
|
|
125
|
+
const boundary = rest.indexOf("__");
|
|
126
|
+
if (boundary > 0) {
|
|
127
|
+
return { kind: "mcp", server: rest.slice(0, boundary), tool: rest.slice(boundary + 2) };
|
|
128
|
+
}
|
|
129
|
+
return { kind: "mcp", server: rest, tool: rest };
|
|
130
|
+
}
|
|
131
|
+
if (name === "Agent" || name === "Task")
|
|
132
|
+
return { kind: "agent", tool: name };
|
|
133
|
+
if (name === "Skill")
|
|
134
|
+
return { kind: "skill", tool: name };
|
|
135
|
+
return { kind: "builtin", tool: name };
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* A session's identity across providers.
|
|
139
|
+
*
|
|
140
|
+
* A session id is unique only within the provider that issued it — two
|
|
141
|
+
* assistants can and do mint the same UUID — so anything counting or grouping
|
|
142
|
+
* sessions while several providers are in scope must qualify it. The separator
|
|
143
|
+
* is a NUL, which cannot occur in either half.
|
|
144
|
+
*/
|
|
145
|
+
export function sessionKey(file) {
|
|
146
|
+
return `${file.provider}\u0000${file.sessionId}`;
|
|
147
|
+
}
|
|
148
|
+
/** The UTC calendar day an ISO timestamp falls on, or null when unparseable. */
|
|
149
|
+
export function utcDay(timestamp) {
|
|
150
|
+
const parsed = Date.parse(timestamp);
|
|
151
|
+
if (!Number.isFinite(parsed))
|
|
152
|
+
return null;
|
|
153
|
+
return new Date(parsed).toISOString().slice(0, 10);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Folds an event stream back into day buckets.
|
|
157
|
+
*
|
|
158
|
+
* `observedDays` seeds the result, because a provider opens a bucket for every
|
|
159
|
+
* timestamped record it sees — including records that increment nothing. Those
|
|
160
|
+
* all-zero days are real output: `usage tokens --by day` reports a row for a day
|
|
161
|
+
* a session touched but spent nothing on. Deriving days from events alone would
|
|
162
|
+
* drop them.
|
|
163
|
+
*/
|
|
164
|
+
export function foldDays(events, observedDays = []) {
|
|
165
|
+
const days = {};
|
|
166
|
+
for (const day of observedDays)
|
|
167
|
+
days[day] ??= emptyBucket();
|
|
168
|
+
for (const event of events) {
|
|
169
|
+
const day = utcDay(event.ts);
|
|
170
|
+
if (!day)
|
|
171
|
+
continue;
|
|
172
|
+
const bucket = (days[day] ??= emptyBucket());
|
|
173
|
+
switch (event.kind) {
|
|
174
|
+
case "response":
|
|
175
|
+
if (event.model && event.tokens) {
|
|
176
|
+
addTokens((bucket.models[event.model] ??= emptyTokens()), event.tokens);
|
|
177
|
+
}
|
|
178
|
+
break;
|
|
179
|
+
case "tool_use":
|
|
180
|
+
if (event.tool)
|
|
181
|
+
bucket.tools[event.tool] = (bucket.tools[event.tool] ?? 0) + 1;
|
|
182
|
+
break;
|
|
183
|
+
case "agent": {
|
|
184
|
+
if (!event.name)
|
|
185
|
+
break;
|
|
186
|
+
const totals = (bucket.agents[event.name] ??= { count: 0, maxDepth: 0 });
|
|
187
|
+
totals.count += 1;
|
|
188
|
+
if (typeof event.depth === "number") {
|
|
189
|
+
totals.maxDepth = Math.max(totals.maxDepth, event.depth);
|
|
190
|
+
}
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
case "skill":
|
|
194
|
+
if (event.name)
|
|
195
|
+
bucket.skills[event.name] = (bucket.skills[event.name] ?? 0) + 1;
|
|
196
|
+
break;
|
|
197
|
+
case "command":
|
|
198
|
+
if (event.name)
|
|
199
|
+
bucket.commands[event.name] = (bucket.commands[event.name] ?? 0) + 1;
|
|
200
|
+
break;
|
|
201
|
+
case "prompt":
|
|
202
|
+
bucket.prompts += 1;
|
|
203
|
+
break;
|
|
204
|
+
case "error":
|
|
205
|
+
bucket.errors += 1;
|
|
206
|
+
break;
|
|
207
|
+
case "compaction":
|
|
208
|
+
bucket.compactions += 1;
|
|
209
|
+
break;
|
|
210
|
+
case "hook": {
|
|
211
|
+
const totals = (bucket.hooks[event.name ?? "unknown"] ??= {
|
|
212
|
+
count: 0,
|
|
213
|
+
failures: 0,
|
|
214
|
+
cancelled: 0,
|
|
215
|
+
totalMs: 0,
|
|
216
|
+
maxMs: 0,
|
|
217
|
+
});
|
|
218
|
+
totals.count += 1;
|
|
219
|
+
if (event.status === "failed")
|
|
220
|
+
totals.failures += 1;
|
|
221
|
+
if (event.status === "cancelled")
|
|
222
|
+
totals.cancelled += 1;
|
|
223
|
+
const duration = event.durationMs ?? 0;
|
|
224
|
+
totals.totalMs += duration;
|
|
225
|
+
totals.maxMs = Math.max(totals.maxMs, duration);
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
case "hook_error": {
|
|
229
|
+
const totals = (bucket.hooks[event.name ?? "unknown"] ??= {
|
|
230
|
+
count: 0,
|
|
231
|
+
failures: 0,
|
|
232
|
+
cancelled: 0,
|
|
233
|
+
totalMs: 0,
|
|
234
|
+
maxMs: 0,
|
|
235
|
+
});
|
|
236
|
+
totals.failures += 1;
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return days;
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/usage/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { FileAggregate } from "./events.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves `--since` / `--until` to a UTC calendar day.
|
|
4
|
+
*
|
|
5
|
+
* Accepts a relative span (`7d`, `2w`, `3m`, `1y`) or an ISO date. Both resolve
|
|
6
|
+
* to a day rather than an instant: the index stores day buckets, so a finer
|
|
7
|
+
* boundary would be a promise the data cannot keep. `m` is 30 days and `y` is
|
|
8
|
+
* 365 — a span, not a calendar month or year.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseDay(value: string, label: string, now?: Date): string;
|
|
11
|
+
export interface Window {
|
|
12
|
+
since: string | null;
|
|
13
|
+
until: string | null;
|
|
14
|
+
}
|
|
15
|
+
export declare function resolveWindow(since: string | undefined, until: string | undefined, now?: Date): Window;
|
|
16
|
+
/** Both bounds are inclusive, which is what a day-granular window should mean. */
|
|
17
|
+
export declare function dayInWindow(day: string, window: Window): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* The earliest file mtime that could still hold a record inside the window.
|
|
20
|
+
*
|
|
21
|
+
* A transcript is append-only, so a file last modified before the start of the
|
|
22
|
+
* window has nothing in it. Pruning by mtime before opening anything is what
|
|
23
|
+
* makes `--since 7d` cheap over a corpus of thousands of files. One day of slack
|
|
24
|
+
* absorbs any timezone or clock skew between the record timestamps and the
|
|
25
|
+
* filesystem.
|
|
26
|
+
*/
|
|
27
|
+
export declare function modifiedSinceFor(window: Window): number | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Normalizes a `--project` selector.
|
|
30
|
+
*
|
|
31
|
+
* `.` and a relative path resolve against the working directory. A bare token
|
|
32
|
+
* with no separator is treated as a directory-name or slug fragment, so
|
|
33
|
+
* `--project cairn` works without spelling out the whole path.
|
|
34
|
+
*/
|
|
35
|
+
export interface ProjectSelector {
|
|
36
|
+
raw: string;
|
|
37
|
+
absolute: string | null;
|
|
38
|
+
fragment: string;
|
|
39
|
+
}
|
|
40
|
+
export declare function parseProject(value: string, cwd?: string): ProjectSelector;
|
|
41
|
+
export declare function matchesProject(project: string, selectors: readonly ProjectSelector[]): boolean;
|
|
42
|
+
/** Keeps only the day buckets inside the window; returns null when nothing remains. */
|
|
43
|
+
export declare function clipToWindow(aggregate: FileAggregate, window: Window): FileAggregate | null;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
/**
|
|
3
|
+
* Window and scope selection.
|
|
4
|
+
*
|
|
5
|
+
* Everything here is pure: it decides which day buckets and which files a report
|
|
6
|
+
* covers, without touching the filesystem.
|
|
7
|
+
*/
|
|
8
|
+
const RELATIVE = /^(\d+)\s*([dwmy])$/i;
|
|
9
|
+
const ISO_DAY = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
10
|
+
const UNIT_DAYS = { d: 1, w: 7, m: 30, y: 365 };
|
|
11
|
+
/**
|
|
12
|
+
* Resolves `--since` / `--until` to a UTC calendar day.
|
|
13
|
+
*
|
|
14
|
+
* Accepts a relative span (`7d`, `2w`, `3m`, `1y`) or an ISO date. Both resolve
|
|
15
|
+
* to a day rather than an instant: the index stores day buckets, so a finer
|
|
16
|
+
* boundary would be a promise the data cannot keep. `m` is 30 days and `y` is
|
|
17
|
+
* 365 — a span, not a calendar month or year.
|
|
18
|
+
*/
|
|
19
|
+
export function parseDay(value, label, now = new Date()) {
|
|
20
|
+
const trimmed = value.trim();
|
|
21
|
+
const relative = RELATIVE.exec(trimmed);
|
|
22
|
+
if (relative) {
|
|
23
|
+
const span = Number(relative[1]) * UNIT_DAYS[relative[2].toLowerCase()];
|
|
24
|
+
const day = new Date(now.getTime() - span * 86_400_000);
|
|
25
|
+
return day.toISOString().slice(0, 10);
|
|
26
|
+
}
|
|
27
|
+
if (ISO_DAY.test(trimmed)) {
|
|
28
|
+
const parsed = Date.parse(`${trimmed}T00:00:00Z`);
|
|
29
|
+
if (Number.isFinite(parsed))
|
|
30
|
+
return trimmed;
|
|
31
|
+
}
|
|
32
|
+
throw new Error(`Invalid ${label} value: ${value} (expected a relative span such as 7d, 2w, 3m, 1y, or an ISO date such as 2026-08-01)`);
|
|
33
|
+
}
|
|
34
|
+
export function resolveWindow(since, until, now = new Date()) {
|
|
35
|
+
const window = {
|
|
36
|
+
since: since === undefined ? null : parseDay(since, "--since", now),
|
|
37
|
+
until: until === undefined ? null : parseDay(until, "--until", now),
|
|
38
|
+
};
|
|
39
|
+
if (window.since && window.until && window.since > window.until) {
|
|
40
|
+
throw new Error(`--since ${window.since} is after --until ${window.until}`);
|
|
41
|
+
}
|
|
42
|
+
return window;
|
|
43
|
+
}
|
|
44
|
+
/** Both bounds are inclusive, which is what a day-granular window should mean. */
|
|
45
|
+
export function dayInWindow(day, window) {
|
|
46
|
+
if (window.since && day < window.since)
|
|
47
|
+
return false;
|
|
48
|
+
if (window.until && day > window.until)
|
|
49
|
+
return false;
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The earliest file mtime that could still hold a record inside the window.
|
|
54
|
+
*
|
|
55
|
+
* A transcript is append-only, so a file last modified before the start of the
|
|
56
|
+
* window has nothing in it. Pruning by mtime before opening anything is what
|
|
57
|
+
* makes `--since 7d` cheap over a corpus of thousands of files. One day of slack
|
|
58
|
+
* absorbs any timezone or clock skew between the record timestamps and the
|
|
59
|
+
* filesystem.
|
|
60
|
+
*/
|
|
61
|
+
export function modifiedSinceFor(window) {
|
|
62
|
+
if (!window.since)
|
|
63
|
+
return undefined;
|
|
64
|
+
return Date.parse(`${window.since}T00:00:00Z`) - 86_400_000;
|
|
65
|
+
}
|
|
66
|
+
export function parseProject(value, cwd = process.cwd()) {
|
|
67
|
+
const raw = value.trim();
|
|
68
|
+
if (raw === "." || raw.startsWith("/") || raw.startsWith("./") || raw.startsWith("~")) {
|
|
69
|
+
const expanded = raw.startsWith("~")
|
|
70
|
+
? path.join(process.env.HOME ?? "", raw.slice(1))
|
|
71
|
+
: path.resolve(cwd, raw);
|
|
72
|
+
return { raw, absolute: expanded, fragment: path.basename(expanded).toLowerCase() };
|
|
73
|
+
}
|
|
74
|
+
return { raw, absolute: null, fragment: raw.toLowerCase() };
|
|
75
|
+
}
|
|
76
|
+
export function matchesProject(project, selectors) {
|
|
77
|
+
if (selectors.length === 0)
|
|
78
|
+
return true;
|
|
79
|
+
const lower = project.toLowerCase();
|
|
80
|
+
return selectors.some((selector) => {
|
|
81
|
+
if (selector.absolute) {
|
|
82
|
+
return project === selector.absolute || project.startsWith(`${selector.absolute}/`);
|
|
83
|
+
}
|
|
84
|
+
return lower.includes(selector.fragment);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/** Keeps only the day buckets inside the window; returns null when nothing remains. */
|
|
88
|
+
export function clipToWindow(aggregate, window) {
|
|
89
|
+
if (!window.since && !window.until) {
|
|
90
|
+
return Object.keys(aggregate.days).length > 0 ? aggregate : null;
|
|
91
|
+
}
|
|
92
|
+
const days = Object.fromEntries(Object.entries(aggregate.days).filter(([day]) => dayInWindow(day, window)));
|
|
93
|
+
if (Object.keys(days).length === 0)
|
|
94
|
+
return null;
|
|
95
|
+
return { ...aggregate, days };
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/usage/filter.ts"],"names":[],"mappings":"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"}
|