@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,466 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import readline from "node:readline";
|
|
4
|
+
import { createReadStream } from "node:fs";
|
|
5
|
+
import { addTokens, emptyBucket, emptyTokens, utcDay } from "../events.js";
|
|
6
|
+
/**
|
|
7
|
+
* Google Gemini CLI chat transcripts.
|
|
8
|
+
*
|
|
9
|
+
* ```
|
|
10
|
+
* tmp/<slug>/chats/session-<local stamp>-<short id>.jsonl main
|
|
11
|
+
* tmp/<slug>/chats/<parent session uuid>/<short id>.jsonl subagent
|
|
12
|
+
* tmp/<slug>/.project_root the absolute project root
|
|
13
|
+
* tmp/<slug>/logs.json prompts and slash commands
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* **This provider shares `~/.gemini` with `antigravity` and must not collide
|
|
17
|
+
* with it.** That one roots at `~/.gemini/antigravity-cli`; this one roots at
|
|
18
|
+
* `~/.gemini` and guards on `tmp/`, so neither can claim the other's tree.
|
|
19
|
+
*
|
|
20
|
+
* Line 1 is normally a header — `{sessionId, projectHash, startTime,
|
|
21
|
+
* lastUpdated, kind}`, plus `directories` on a subagent — but not always: at
|
|
22
|
+
* least one file in a real corpus begins with an ordinary record, so the header
|
|
23
|
+
* is detected rather than assumed. Later lines are either
|
|
24
|
+
* `{id, timestamp, type, content, toolCalls?, model, tokens?}` or a `$set`
|
|
25
|
+
* patch record.
|
|
26
|
+
*
|
|
27
|
+
* **It is the only provider that has to undo two distortions at once**, and a
|
|
28
|
+
* third on top:
|
|
29
|
+
*
|
|
30
|
+
* 1. `tokens.cached` is contained *inside* `tokens.input`, as Codex's is, so
|
|
31
|
+
* the cached part is subtracted out and reported as a cache read. Left
|
|
32
|
+
* merged, input reads several times high.
|
|
33
|
+
* 2. `tokens.input` is a **per-request context size and not a running total**,
|
|
34
|
+
* as Antigravity's is — it falls whenever context is trimmed, so it is
|
|
35
|
+
* summed. Differencing it produces nonsense.
|
|
36
|
+
* 3. One assistant turn is written **two to five times under a single `id`**,
|
|
37
|
+
* each copy carrying identical `tokens`. Counting every copy roughly doubles
|
|
38
|
+
* every figure, so tokens are deduplicated on `id`.
|
|
39
|
+
*
|
|
40
|
+
* `total === input + output + thoughts` holds on every record of a real corpus
|
|
41
|
+
* and is used as a validity guard. Unlike Antigravity's — where a wholesale
|
|
42
|
+
* protobuf renumbering would poison every field at once, so the whole file's
|
|
43
|
+
* token column is abandoned — these fields are *named*, so a record that fails
|
|
44
|
+
* the guard is only ever one bad record. It contributes no tokens and the rest
|
|
45
|
+
* of the file is kept.
|
|
46
|
+
*/
|
|
47
|
+
/** The discovery root under the Gemini home; also what `root()` guards on. */
|
|
48
|
+
const TMP = "tmp";
|
|
49
|
+
const CHATS = "chats";
|
|
50
|
+
const PROJECT_ROOT = ".project_root";
|
|
51
|
+
const LOGS = "logs.json";
|
|
52
|
+
/**
|
|
53
|
+
* The guard's upper bound on one request's context.
|
|
54
|
+
*
|
|
55
|
+
* Comfortably above any real Gemini context window, and low enough that a
|
|
56
|
+
* misread field is caught rather than summed into the totals.
|
|
57
|
+
*/
|
|
58
|
+
const MAX_CONTEXT_TOKENS = 4_000_000;
|
|
59
|
+
/** A finite number, or null when the field is absent or the wrong shape. */
|
|
60
|
+
function num(value) {
|
|
61
|
+
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
62
|
+
}
|
|
63
|
+
function text(value) {
|
|
64
|
+
return typeof value === "string" && value ? value : null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Normalizes one record's `tokens`, or returns null when it fails the guard.
|
|
68
|
+
*
|
|
69
|
+
* `cached` is subtracted out of `input` because Gemini counts a cache read
|
|
70
|
+
* inside its input figure, and reported separately. There is no cache-*write*
|
|
71
|
+
* counter anywhere on disk, so `cacheWrite` is always zero — the same shape
|
|
72
|
+
* Codex reports for a request that wrote no cache.
|
|
73
|
+
*/
|
|
74
|
+
function readUsage(raw) {
|
|
75
|
+
const input = num(raw.input);
|
|
76
|
+
const output = num(raw.output);
|
|
77
|
+
const thoughts = num(raw.thoughts);
|
|
78
|
+
const cached = num(raw.cached);
|
|
79
|
+
const total = num(raw.total);
|
|
80
|
+
if (input === null || output === null || thoughts === null || total === null)
|
|
81
|
+
return null;
|
|
82
|
+
if (cached === null || cached < 0 || cached > input)
|
|
83
|
+
return null;
|
|
84
|
+
if (input < 0 || output < 0 || thoughts < 0)
|
|
85
|
+
return null;
|
|
86
|
+
if (input > MAX_CONTEXT_TOKENS)
|
|
87
|
+
return null;
|
|
88
|
+
if (total !== input + output + thoughts)
|
|
89
|
+
return null;
|
|
90
|
+
return {
|
|
91
|
+
input: input - cached,
|
|
92
|
+
output,
|
|
93
|
+
cacheRead: cached,
|
|
94
|
+
cacheWrite: 0,
|
|
95
|
+
cacheWrite5m: 0,
|
|
96
|
+
cacheWrite1h: 0,
|
|
97
|
+
thinking: thoughts,
|
|
98
|
+
webSearch: 0,
|
|
99
|
+
webFetch: 0,
|
|
100
|
+
requests: 1,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function emit(state, event) {
|
|
104
|
+
state.events.push({ ts: state.ts, ...event });
|
|
105
|
+
}
|
|
106
|
+
function bucketFor(state, timestamp) {
|
|
107
|
+
const day = timestamp ? utcDay(timestamp) : null;
|
|
108
|
+
if (!day)
|
|
109
|
+
return null;
|
|
110
|
+
const aggregate = state.aggregate;
|
|
111
|
+
if (!aggregate.firstTs || timestamp < aggregate.firstTs)
|
|
112
|
+
aggregate.firstTs = timestamp;
|
|
113
|
+
if (!aggregate.lastTs || timestamp > aggregate.lastTs)
|
|
114
|
+
aggregate.lastTs = timestamp;
|
|
115
|
+
return (aggregate.days[day] ??= emptyBucket());
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Counts one flushed tool call.
|
|
119
|
+
*
|
|
120
|
+
* The name is kept exactly as Gemini wrote it. `invoke_agent` and
|
|
121
|
+
* `activate_skill` are this assistant's own builtins and are counted as such in
|
|
122
|
+
* `tools`, while also filling `agents` and `skills` — the same split
|
|
123
|
+
* `claude-code.ts` makes for `Agent` and `Skill`, and `codex.ts` for
|
|
124
|
+
* `spawn_agent`. Renaming them to Claude Code's vocabulary would print a tool
|
|
125
|
+
* that does not appear in the transcript.
|
|
126
|
+
*/
|
|
127
|
+
function applyToolCall(state, bucket, call) {
|
|
128
|
+
const name = text(call.name);
|
|
129
|
+
if (!name)
|
|
130
|
+
return;
|
|
131
|
+
bucket.tools[name] = (bucket.tools[name] ?? 0) + 1;
|
|
132
|
+
emit(state, { kind: "tool_use", tool: name });
|
|
133
|
+
if (name === "invoke_agent") {
|
|
134
|
+
const role = text(call.args?.agent_name) ?? "(unrecorded)";
|
|
135
|
+
const totals = (bucket.agents[role] ??= { count: 0, maxDepth: 0 });
|
|
136
|
+
totals.count += 1;
|
|
137
|
+
emit(state, { kind: "agent", name: role });
|
|
138
|
+
}
|
|
139
|
+
else if (name === "activate_skill") {
|
|
140
|
+
const skill = text(call.args?.name);
|
|
141
|
+
if (skill) {
|
|
142
|
+
bucket.skills[skill] = (bucket.skills[skill] ?? 0) + 1;
|
|
143
|
+
emit(state, { kind: "skill", name: skill });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// `cancelled` is deliberately not counted: `DayBucket` has no cancelled
|
|
147
|
+
// counter outside `hooks`, and folding one into `errors` would report a
|
|
148
|
+
// user's interruption as a failure.
|
|
149
|
+
if (text(call.status) === "error") {
|
|
150
|
+
bucket.errors += 1;
|
|
151
|
+
emit(state, { kind: "error" });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
function flushTools(state) {
|
|
155
|
+
for (const pending of state.pendingTools.values()) {
|
|
156
|
+
const bucket = bucketFor(state, pending.ts);
|
|
157
|
+
if (!bucket)
|
|
158
|
+
continue;
|
|
159
|
+
state.ts = pending.ts;
|
|
160
|
+
for (const call of pending.calls)
|
|
161
|
+
applyToolCall(state, bucket, call);
|
|
162
|
+
}
|
|
163
|
+
state.pendingTools.clear();
|
|
164
|
+
}
|
|
165
|
+
function applyRecord(state, record) {
|
|
166
|
+
// A `$set` patch never carries tokens or tool calls — only `lastUpdated`,
|
|
167
|
+
// `summary` (the session title, not a context reset), and `memoryScratchpad`.
|
|
168
|
+
// Its timestamp would otherwise open a spurious day bucket.
|
|
169
|
+
if (record.$set)
|
|
170
|
+
return;
|
|
171
|
+
const timestamp = text(record.timestamp);
|
|
172
|
+
const bucket = bucketFor(state, timestamp ?? undefined);
|
|
173
|
+
if (!bucket)
|
|
174
|
+
return;
|
|
175
|
+
state.ts = timestamp;
|
|
176
|
+
const id = text(record.id);
|
|
177
|
+
if (record.tokens && id && !state.tokenIds.has(id)) {
|
|
178
|
+
state.tokenIds.add(id);
|
|
179
|
+
const tokens = readUsage(record.tokens);
|
|
180
|
+
if (tokens) {
|
|
181
|
+
const model = text(record.model) ?? "(unknown)";
|
|
182
|
+
addTokens((bucket.models[model] ??= emptyTokens()), tokens);
|
|
183
|
+
emit(state, { kind: "response", model, tokens });
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (Array.isArray(record.toolCalls) && id) {
|
|
187
|
+
state.pendingTools.set(id, { ts: timestamp, calls: record.toolCalls });
|
|
188
|
+
}
|
|
189
|
+
// A subagent transcript's `user` record is the spawn instruction its parent
|
|
190
|
+
// injected, not a human turn. On a real corpus those outnumber real prompts
|
|
191
|
+
// fourteen to one, so counting them would make the prompt figure meaningless.
|
|
192
|
+
if (record.type === "user" && state.aggregate.kind === "main") {
|
|
193
|
+
bucket.prompts += 1;
|
|
194
|
+
emit(state, { kind: "prompt" });
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/** Applies line 1 when it is a header rather than an ordinary record. */
|
|
198
|
+
function applyHeader(aggregate, record) {
|
|
199
|
+
const session = text(record.sessionId);
|
|
200
|
+
if (session)
|
|
201
|
+
aggregate.sessionId = session;
|
|
202
|
+
if (Array.isArray(record.directories)) {
|
|
203
|
+
const first = text(record.directories[0]);
|
|
204
|
+
if (first)
|
|
205
|
+
aggregate.project = first;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function isHeader(record) {
|
|
209
|
+
return typeof record.sessionId === "string" && record.type === undefined;
|
|
210
|
+
}
|
|
211
|
+
function listDirectory(directory) {
|
|
212
|
+
try {
|
|
213
|
+
return fs.readdirSync(directory, { withFileTypes: true });
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
return [];
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function statOf(file) {
|
|
220
|
+
try {
|
|
221
|
+
const stats = fs.statSync(file);
|
|
222
|
+
return stats.isFile() ? stats : null;
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* The absolute project root for one slug directory, memoized.
|
|
230
|
+
*
|
|
231
|
+
* `.project_root` is exact where Claude Code's directory slug is lossy, so
|
|
232
|
+
* there is no need to reconstruct anything. `projectHash` in the header is a
|
|
233
|
+
* sha256 of this same path — a cross-check, not a source, since a hash cannot
|
|
234
|
+
* be read back — and `~/.gemini/projects.json` duplicates it from outside the
|
|
235
|
+
* shard, so neither is used.
|
|
236
|
+
*/
|
|
237
|
+
const projectRoots = new Map();
|
|
238
|
+
function readProjectRoot(shardDirectory) {
|
|
239
|
+
const cached = projectRoots.get(shardDirectory);
|
|
240
|
+
if (cached !== undefined)
|
|
241
|
+
return cached;
|
|
242
|
+
let value = "";
|
|
243
|
+
try {
|
|
244
|
+
value = fs.readFileSync(path.join(shardDirectory, PROJECT_ROOT), "utf-8").trim();
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
// No `.project_root`: the project is left unattributed rather than guessed
|
|
248
|
+
// at from the slug, which is lossy.
|
|
249
|
+
}
|
|
250
|
+
projectRoots.set(shardDirectory, value);
|
|
251
|
+
return value;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Slash commands for one slug directory, memoized, keyed by session id.
|
|
255
|
+
*
|
|
256
|
+
* The transcript keeps only the *expanded* prompt: `/opplan-convert foo`
|
|
257
|
+
* reaches the chat as `foo`, so the command's name survives nowhere but
|
|
258
|
+
* `logs.json`. Each entry carries its own timestamp, so a command lands on the
|
|
259
|
+
* day it was used rather than on the session's first day.
|
|
260
|
+
*
|
|
261
|
+
* Two limits worth knowing, both inherent rather than defects. A cached
|
|
262
|
+
* aggregate keys on the *chat file's* size and mtime, so a command written
|
|
263
|
+
* after that file last changed is not seen until it changes again. And
|
|
264
|
+
* `logs.json` outlives the transcripts — `/clear` keeps the session id while
|
|
265
|
+
* truncating the chat — so commands belonging to a session with no surviving
|
|
266
|
+
* transcript have no aggregate to attach to and are dropped.
|
|
267
|
+
*/
|
|
268
|
+
const projectCommands = new Map();
|
|
269
|
+
function readProjectCommands(shardDirectory) {
|
|
270
|
+
const cached = projectCommands.get(shardDirectory);
|
|
271
|
+
if (cached)
|
|
272
|
+
return cached;
|
|
273
|
+
const found = new Map();
|
|
274
|
+
try {
|
|
275
|
+
const parsed = JSON.parse(fs.readFileSync(path.join(shardDirectory, LOGS), "utf-8"));
|
|
276
|
+
for (const entry of Array.isArray(parsed) ? parsed : []) {
|
|
277
|
+
const record = entry;
|
|
278
|
+
const session = text(record.sessionId);
|
|
279
|
+
const message = text(record.message);
|
|
280
|
+
const ts = text(record.timestamp);
|
|
281
|
+
if (!session || !message || !ts || !message.startsWith("/"))
|
|
282
|
+
continue;
|
|
283
|
+
const name = message.trim().split(/\s+/)[0];
|
|
284
|
+
if (!name || name === "/")
|
|
285
|
+
continue;
|
|
286
|
+
const list = found.get(session) ?? [];
|
|
287
|
+
list.push({ ts, name });
|
|
288
|
+
found.set(session, list);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
// No history, or a torn file. Commands are one counter among many.
|
|
293
|
+
}
|
|
294
|
+
projectCommands.set(shardDirectory, found);
|
|
295
|
+
return found;
|
|
296
|
+
}
|
|
297
|
+
export const geminiCliProvider = {
|
|
298
|
+
name: "gemini-cli",
|
|
299
|
+
title: "Gemini CLI",
|
|
300
|
+
// No environment override exists: the CLI was checked for one and none is
|
|
301
|
+
// honoured for the data root, so `--logs` is the only way to point it elsewhere.
|
|
302
|
+
source: "Chat transcripts under ~/.gemini/tmp (no environment override; use --logs)",
|
|
303
|
+
capabilities: {
|
|
304
|
+
tokens: true,
|
|
305
|
+
// `cached` is a real, measured cache read, contained inside `input` and
|
|
306
|
+
// subtracted back out. No cache-*write* figure exists anywhere on disk, so
|
|
307
|
+
// that counter is always zero.
|
|
308
|
+
cacheTokens: true,
|
|
309
|
+
tools: true,
|
|
310
|
+
// `activate_skill` names the skill in `args.name`.
|
|
311
|
+
skills: true,
|
|
312
|
+
// Subagent transcripts nest one level under `chats/`, and outnumber main
|
|
313
|
+
// transcripts by more than an order of magnitude.
|
|
314
|
+
subagents: true,
|
|
315
|
+
// Hooks are configured in ~/.gemini/settings.json, but no execution of one
|
|
316
|
+
// is written to any transcript record.
|
|
317
|
+
hooks: false,
|
|
318
|
+
// A tool call records a bare name and nothing else, so an MCP tool cannot
|
|
319
|
+
// be told from a builtin and there is no server to attribute it to.
|
|
320
|
+
mcp: false,
|
|
321
|
+
// From logs.json, which is the only place a command is named.
|
|
322
|
+
slashCommands: true,
|
|
323
|
+
projects: true,
|
|
324
|
+
},
|
|
325
|
+
root(context) {
|
|
326
|
+
const candidate = context.override?.trim() || path.join(context.home, ".gemini");
|
|
327
|
+
try {
|
|
328
|
+
return fs.statSync(path.join(candidate, TMP)).isDirectory() ? candidate : null;
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
return null;
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
discover(root, options) {
|
|
335
|
+
const tmp = path.join(root, TMP);
|
|
336
|
+
const found = [];
|
|
337
|
+
const accept = (file, shard, kind, stats) => {
|
|
338
|
+
if (options.modifiedSince !== undefined && stats.mtimeMs < options.modifiedSince)
|
|
339
|
+
return;
|
|
340
|
+
found.push({
|
|
341
|
+
file,
|
|
342
|
+
relative: path.relative(tmp, file),
|
|
343
|
+
shard,
|
|
344
|
+
kind,
|
|
345
|
+
size: stats.size,
|
|
346
|
+
mtimeMs: stats.mtimeMs,
|
|
347
|
+
});
|
|
348
|
+
};
|
|
349
|
+
for (const slug of listDirectory(tmp)) {
|
|
350
|
+
if (!slug.isDirectory())
|
|
351
|
+
continue;
|
|
352
|
+
// Requiring a `chats/` directory is what keeps `tmp/bin/` out: the CLI
|
|
353
|
+
// downloads helper binaries there, beside the projects.
|
|
354
|
+
const chats = path.join(tmp, slug.name, CHATS);
|
|
355
|
+
for (const entry of listDirectory(chats)) {
|
|
356
|
+
const full = path.join(chats, entry.name);
|
|
357
|
+
if (entry.isFile() && entry.name.endsWith(".jsonl")) {
|
|
358
|
+
const stats = statOf(full);
|
|
359
|
+
if (stats)
|
|
360
|
+
accept(full, slug.name, "main", stats);
|
|
361
|
+
continue;
|
|
362
|
+
}
|
|
363
|
+
if (!entry.isDirectory() || !options.subagents)
|
|
364
|
+
continue;
|
|
365
|
+
for (const agent of listDirectory(full)) {
|
|
366
|
+
if (!agent.isFile() || !agent.name.endsWith(".jsonl"))
|
|
367
|
+
continue;
|
|
368
|
+
const agentFile = path.join(full, agent.name);
|
|
369
|
+
const stats = statOf(agentFile);
|
|
370
|
+
if (stats)
|
|
371
|
+
accept(agentFile, slug.name, "subagent", stats);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
// Byte comparison, never localeCompare: the order must not depend on the
|
|
376
|
+
// ICU build of the machine that ran the scan.
|
|
377
|
+
found.sort((a, b) => (a.relative < b.relative ? -1 : a.relative > b.relative ? 1 : 0));
|
|
378
|
+
return found;
|
|
379
|
+
},
|
|
380
|
+
async read(file) {
|
|
381
|
+
return (await geminiCliProvider.parse(file)).aggregate;
|
|
382
|
+
},
|
|
383
|
+
async parse(file) {
|
|
384
|
+
const subagent = file.kind === "subagent";
|
|
385
|
+
// A subagent's parent is its containing directory, exactly as it is for
|
|
386
|
+
// Claude Code, so neither id needs reading out of the file.
|
|
387
|
+
const sessionId = path.basename(file.file, ".jsonl");
|
|
388
|
+
const shardDirectory = subagent
|
|
389
|
+
? path.dirname(path.dirname(path.dirname(file.file)))
|
|
390
|
+
: path.dirname(path.dirname(file.file));
|
|
391
|
+
const aggregate = {
|
|
392
|
+
file: file.file,
|
|
393
|
+
size: file.size,
|
|
394
|
+
mtimeMs: file.mtimeMs,
|
|
395
|
+
provider: geminiCliProvider.name,
|
|
396
|
+
sessionId,
|
|
397
|
+
kind: file.kind,
|
|
398
|
+
project: readProjectRoot(shardDirectory),
|
|
399
|
+
firstTs: "",
|
|
400
|
+
lastTs: "",
|
|
401
|
+
days: {},
|
|
402
|
+
malformedLines: 0,
|
|
403
|
+
};
|
|
404
|
+
if (subagent) {
|
|
405
|
+
aggregate.parentSessionId = path.basename(path.dirname(file.file));
|
|
406
|
+
// `agentType` is deliberately left unset. A subagent transcript records
|
|
407
|
+
// no role of its own; the role lives in the parent's `invoke_agent` call,
|
|
408
|
+
// which a single-transcript parse cannot reach. The spawn counts and
|
|
409
|
+
// names are still exact, because the parent fills `agents` from that same
|
|
410
|
+
// call — this only means `usage agents --by role` has nothing extra to
|
|
411
|
+
// learn from the child. Claude Code has the same gap when a subagent's
|
|
412
|
+
// `.meta.json` is missing.
|
|
413
|
+
aggregate.agentId = sessionId;
|
|
414
|
+
}
|
|
415
|
+
const state = {
|
|
416
|
+
aggregate,
|
|
417
|
+
events: [],
|
|
418
|
+
ts: "",
|
|
419
|
+
tokenIds: new Set(),
|
|
420
|
+
pendingTools: new Map(),
|
|
421
|
+
};
|
|
422
|
+
const lines = readline.createInterface({
|
|
423
|
+
input: createReadStream(file.file, { encoding: "utf-8" }),
|
|
424
|
+
crlfDelay: Infinity,
|
|
425
|
+
});
|
|
426
|
+
let first = true;
|
|
427
|
+
for await (const line of lines) {
|
|
428
|
+
if (!line)
|
|
429
|
+
continue;
|
|
430
|
+
let record;
|
|
431
|
+
try {
|
|
432
|
+
record = JSON.parse(line);
|
|
433
|
+
}
|
|
434
|
+
catch {
|
|
435
|
+
aggregate.malformedLines += 1;
|
|
436
|
+
continue;
|
|
437
|
+
}
|
|
438
|
+
if (!record || typeof record !== "object")
|
|
439
|
+
continue;
|
|
440
|
+
if (first) {
|
|
441
|
+
first = false;
|
|
442
|
+
// Not every file has one: at least one transcript in a real corpus
|
|
443
|
+
// begins with an ordinary record, so the header is detected rather
|
|
444
|
+
// than assumed and a file without one parses normally.
|
|
445
|
+
if (isHeader(record)) {
|
|
446
|
+
applyHeader(aggregate, record);
|
|
447
|
+
continue;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
applyRecord(state, record);
|
|
451
|
+
}
|
|
452
|
+
flushTools(state);
|
|
453
|
+
if (!subagent) {
|
|
454
|
+
for (const command of readProjectCommands(shardDirectory).get(aggregate.sessionId) ?? []) {
|
|
455
|
+
const bucket = bucketFor(state, command.ts);
|
|
456
|
+
if (!bucket)
|
|
457
|
+
continue;
|
|
458
|
+
state.ts = command.ts;
|
|
459
|
+
bucket.commands[command.name] = (bucket.commands[command.name] ?? 0) + 1;
|
|
460
|
+
emit(state, { kind: "command", name: command.name });
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
return { aggregate, events: state.events };
|
|
464
|
+
},
|
|
465
|
+
};
|
|
466
|
+
//# sourceMappingURL=gemini-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-cli.js","sourceRoot":"","sources":["../../../src/usage/providers/gemini-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { UsageProvider } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Every provider whose logs `usage` can report on.
|
|
4
|
+
*
|
|
5
|
+
* Registering another assistant is a new module plus a line here. Nothing in
|
|
6
|
+
* `src/commands/usage.ts` may branch on a provider's name: what a provider can
|
|
7
|
+
* answer is read from its `capabilities`, the same rule that keeps
|
|
8
|
+
* `src/agent/render.ts` free of per-target conditionals.
|
|
9
|
+
*/
|
|
10
|
+
export declare const PROVIDERS: readonly UsageProvider[];
|
|
11
|
+
export declare const DEFAULT_PROVIDER: string;
|
|
12
|
+
/** Selects every registered provider rather than one. */
|
|
13
|
+
export declare const ALL_PROVIDERS = "all";
|
|
14
|
+
export declare function providerNames(): string[];
|
|
15
|
+
/**
|
|
16
|
+
* Resolves `--provider` to the providers a report covers.
|
|
17
|
+
*
|
|
18
|
+
* `all` returns every registered provider; whether each has anything on this
|
|
19
|
+
* machine is decided later, by `root()`, so that an unavailable one is simply
|
|
20
|
+
* absent from the results rather than an error.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveProviders(name: string | undefined): UsageProvider[];
|
|
23
|
+
export type { UsageProvider } from "./types.js";
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { antigravityProvider } from "./antigravity.js";
|
|
2
|
+
import { claudeCodeProvider } from "./claude-code.js";
|
|
3
|
+
import { codexProvider } from "./codex.js";
|
|
4
|
+
import { geminiCliProvider } from "./gemini-cli.js";
|
|
5
|
+
import { opencodeProvider } from "./opencode.js";
|
|
6
|
+
/**
|
|
7
|
+
* Every provider whose logs `usage` can report on.
|
|
8
|
+
*
|
|
9
|
+
* Registering another assistant is a new module plus a line here. Nothing in
|
|
10
|
+
* `src/commands/usage.ts` may branch on a provider's name: what a provider can
|
|
11
|
+
* answer is read from its `capabilities`, the same rule that keeps
|
|
12
|
+
* `src/agent/render.ts` free of per-target conditionals.
|
|
13
|
+
*/
|
|
14
|
+
export const PROVIDERS = [
|
|
15
|
+
claudeCodeProvider,
|
|
16
|
+
codexProvider,
|
|
17
|
+
antigravityProvider,
|
|
18
|
+
// Appended, never inserted: `usage providers` reports in registry order and
|
|
19
|
+
// the e2e suite pins the earlier entries by position.
|
|
20
|
+
geminiCliProvider,
|
|
21
|
+
opencodeProvider,
|
|
22
|
+
];
|
|
23
|
+
export const DEFAULT_PROVIDER = claudeCodeProvider.name;
|
|
24
|
+
/** Selects every registered provider rather than one. */
|
|
25
|
+
export const ALL_PROVIDERS = "all";
|
|
26
|
+
export function providerNames() {
|
|
27
|
+
return PROVIDERS.map((provider) => provider.name);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Resolves `--provider` to the providers a report covers.
|
|
31
|
+
*
|
|
32
|
+
* `all` returns every registered provider; whether each has anything on this
|
|
33
|
+
* machine is decided later, by `root()`, so that an unavailable one is simply
|
|
34
|
+
* absent from the results rather than an error.
|
|
35
|
+
*/
|
|
36
|
+
export function resolveProviders(name) {
|
|
37
|
+
const wanted = name ?? DEFAULT_PROVIDER;
|
|
38
|
+
if (wanted === ALL_PROVIDERS)
|
|
39
|
+
return [...PROVIDERS];
|
|
40
|
+
const provider = PROVIDERS.find((candidate) => candidate.name === wanted);
|
|
41
|
+
if (!provider) {
|
|
42
|
+
throw new Error(`Unknown provider: ${wanted} (known: ${[...providerNames(), ALL_PROVIDERS].join(", ")})`);
|
|
43
|
+
}
|
|
44
|
+
return [provider];
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/usage/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAA6B;IACjD,kBAAkB;IAClB,aAAa;IACb,mBAAmB;IACnB,4EAA4E;IAC5E,sDAAsD;IACtD,iBAAiB;IACjB,gBAAgB;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,IAAI,CAAC;AAExD,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AAEnC,MAAM,UAAU,aAAa;IAC3B,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAwB;IACvD,MAAM,MAAM,GAAG,IAAI,IAAI,gBAAgB,CAAC;IACxC,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC1E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,YAAY,CAAC,GAAG,aAAa,EAAE,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACzF,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC"}
|