kirograph 0.17.0 → 0.20.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/LICENSE +1 -1
- package/README.md +105 -1822
- package/dist/architecture/layers/dart.d.ts +10 -0
- package/dist/architecture/layers/dart.d.ts.map +1 -0
- package/dist/architecture/layers/dart.js +112 -0
- package/dist/architecture/layers/dart.js.map +7 -0
- package/dist/architecture/layers/elixir.d.ts +6 -0
- package/dist/architecture/layers/elixir.d.ts.map +1 -0
- package/dist/architecture/layers/index.d.ts.map +1 -1
- package/dist/architecture/layers/index.js +3 -1
- package/dist/architecture/layers/index.js.map +2 -2
- package/dist/architecture/layers/ocaml.d.ts +6 -0
- package/dist/architecture/layers/ocaml.d.ts.map +1 -0
- package/dist/architecture/layers/scala.d.ts +6 -0
- package/dist/architecture/layers/scala.d.ts.map +1 -0
- package/dist/architecture/layers/solidity.d.ts +6 -0
- package/dist/architecture/layers/solidity.d.ts.map +1 -0
- package/dist/architecture/layers/vue.d.ts +6 -0
- package/dist/architecture/layers/vue.d.ts.map +1 -0
- package/dist/architecture/manifest/elm.d.ts +3 -0
- package/dist/architecture/manifest/elm.d.ts.map +1 -0
- package/dist/architecture/manifest/index.d.ts.map +1 -1
- package/dist/architecture/manifest/ocaml.d.ts +3 -0
- package/dist/architecture/manifest/ocaml.d.ts.map +1 -0
- package/dist/architecture/manifest/scala.d.ts +3 -0
- package/dist/architecture/manifest/scala.d.ts.map +1 -0
- package/dist/bin/banner.d.ts.map +1 -1
- package/dist/bin/banner.js +74 -6
- package/dist/bin/banner.js.map +2 -2
- package/dist/bin/commands/affected.d.ts.map +1 -1
- package/dist/bin/commands/attack-surface.d.ts +3 -0
- package/dist/bin/commands/attack-surface.d.ts.map +1 -0
- package/dist/bin/commands/attack-surface.js +164 -0
- package/dist/bin/commands/attack-surface.js.map +7 -0
- package/dist/bin/commands/benchmark.d.ts +9 -0
- package/dist/bin/commands/benchmark.d.ts.map +1 -0
- package/dist/bin/commands/benchmark.js +206 -0
- package/dist/bin/commands/benchmark.js.map +7 -0
- package/dist/bin/commands/budget.d.ts +6 -0
- package/dist/bin/commands/budget.d.ts.map +1 -0
- package/dist/bin/commands/budget.js +70 -0
- package/dist/bin/commands/budget.js.map +7 -0
- package/dist/bin/commands/caveman.d.ts +7 -0
- package/dist/bin/commands/caveman.d.ts.map +1 -0
- package/dist/bin/commands/communities.d.ts +3 -0
- package/dist/bin/commands/communities.d.ts.map +1 -0
- package/dist/bin/commands/communities.js +77 -0
- package/dist/bin/commands/communities.js.map +7 -0
- package/dist/bin/commands/compression.d.ts +7 -0
- package/dist/bin/commands/compression.d.ts.map +1 -0
- package/dist/bin/commands/context.d.ts.map +1 -1
- package/dist/bin/commands/data.d.ts +3 -0
- package/dist/bin/commands/data.d.ts.map +1 -0
- package/dist/bin/commands/dead-code.d.ts +3 -0
- package/dist/bin/commands/dead-code.d.ts.map +1 -0
- package/dist/bin/commands/dep-confusion.d.ts +3 -0
- package/dist/bin/commands/dep-confusion.d.ts.map +1 -0
- package/dist/bin/commands/dep-confusion.js +119 -0
- package/dist/bin/commands/dep-confusion.js.map +7 -0
- package/dist/bin/commands/docs.d.ts +3 -0
- package/dist/bin/commands/docs.d.ts.map +1 -0
- package/dist/bin/commands/exec.d.ts +11 -0
- package/dist/bin/commands/exec.d.ts.map +1 -0
- package/dist/bin/commands/export.d.ts +3 -0
- package/dist/bin/commands/export.d.ts.map +1 -0
- package/dist/bin/commands/export.js +304 -10
- package/dist/bin/commands/export.js.map +2 -2
- package/dist/bin/commands/flows.d.ts +3 -0
- package/dist/bin/commands/flows.d.ts.map +1 -0
- package/dist/bin/commands/flows.js +97 -0
- package/dist/bin/commands/flows.js.map +7 -0
- package/dist/bin/commands/gain.d.ts +6 -0
- package/dist/bin/commands/gain.d.ts.map +1 -0
- package/dist/bin/commands/help.d.ts +7 -0
- package/dist/bin/commands/help.d.ts.map +1 -1
- package/dist/bin/commands/help.js +399 -101
- package/dist/bin/commands/help.js.map +2 -2
- package/dist/bin/commands/hotspots.d.ts +3 -0
- package/dist/bin/commands/hotspots.d.ts.map +1 -0
- package/dist/bin/commands/hotspots.js +94 -1
- package/dist/bin/commands/hotspots.js.map +3 -3
- package/dist/bin/commands/install.d.ts.map +1 -1
- package/dist/bin/commands/install.js +90 -8
- package/dist/bin/commands/install.js.map +2 -2
- package/dist/bin/commands/licenses.d.ts +3 -0
- package/dist/bin/commands/licenses.d.ts.map +1 -0
- package/dist/bin/commands/licenses.js +201 -0
- package/dist/bin/commands/licenses.js.map +7 -0
- package/dist/bin/commands/memory.d.ts +16 -0
- package/dist/bin/commands/memory.d.ts.map +1 -0
- package/dist/bin/commands/memory.js +151 -4
- package/dist/bin/commands/memory.js.map +2 -2
- package/dist/bin/commands/path.d.ts +3 -0
- package/dist/bin/commands/path.d.ts.map +1 -0
- package/dist/bin/commands/pattern.d.ts +3 -0
- package/dist/bin/commands/pattern.d.ts.map +1 -0
- package/dist/bin/commands/pattern.js +592 -0
- package/dist/bin/commands/pattern.js.map +7 -0
- package/dist/bin/commands/query.d.ts.map +1 -1
- package/dist/bin/commands/reachability.d.ts +3 -0
- package/dist/bin/commands/reachability.d.ts.map +1 -0
- package/dist/bin/commands/reachability.js +160 -0
- package/dist/bin/commands/reachability.js.map +7 -0
- package/dist/bin/commands/read.d.ts +6 -0
- package/dist/bin/commands/read.d.ts.map +1 -0
- package/dist/bin/commands/read.js +100 -0
- package/dist/bin/commands/read.js.map +7 -0
- package/dist/bin/commands/refactor.d.ts +3 -0
- package/dist/bin/commands/refactor.d.ts.map +1 -0
- package/dist/bin/commands/refactor.js +116 -0
- package/dist/bin/commands/refactor.js.map +7 -0
- package/dist/bin/commands/remediation.d.ts +3 -0
- package/dist/bin/commands/remediation.d.ts.map +1 -0
- package/dist/bin/commands/remediation.js +133 -0
- package/dist/bin/commands/remediation.js.map +7 -0
- package/dist/bin/commands/sbom.d.ts +3 -0
- package/dist/bin/commands/sbom.d.ts.map +1 -0
- package/dist/bin/commands/sbom.js +76 -0
- package/dist/bin/commands/sbom.js.map +7 -0
- package/dist/bin/commands/security-ci-report.d.ts +9 -0
- package/dist/bin/commands/security-ci-report.d.ts.map +1 -0
- package/dist/bin/commands/security-ci-report.js +267 -0
- package/dist/bin/commands/security-ci-report.js.map +7 -0
- package/dist/bin/commands/security-export.d.ts +2 -0
- package/dist/bin/commands/security-export.d.ts.map +1 -0
- package/dist/bin/commands/security-export.js +1349 -0
- package/dist/bin/commands/security-export.js.map +7 -0
- package/dist/bin/commands/security-flows.d.ts +3 -0
- package/dist/bin/commands/security-flows.d.ts.map +1 -0
- package/dist/bin/commands/security-flows.js +126 -0
- package/dist/bin/commands/security-flows.js.map +7 -0
- package/dist/bin/commands/security-secrets.d.ts +3 -0
- package/dist/bin/commands/security-secrets.d.ts.map +1 -0
- package/dist/bin/commands/security-secrets.js +170 -0
- package/dist/bin/commands/security-secrets.js.map +7 -0
- package/dist/bin/commands/security.d.ts +3 -0
- package/dist/bin/commands/security.d.ts.map +1 -0
- package/dist/bin/commands/security.js +208 -0
- package/dist/bin/commands/security.js.map +7 -0
- package/dist/bin/commands/snapshot.d.ts +3 -0
- package/dist/bin/commands/snapshot.d.ts.map +1 -0
- package/dist/bin/commands/staleness.d.ts +3 -0
- package/dist/bin/commands/staleness.d.ts.map +1 -0
- package/dist/bin/commands/staleness.js +144 -0
- package/dist/bin/commands/staleness.js.map +7 -0
- package/dist/bin/commands/status.d.ts.map +1 -1
- package/dist/bin/commands/status.js +129 -2
- package/dist/bin/commands/status.js.map +2 -2
- package/dist/bin/commands/supply-chain.d.ts +3 -0
- package/dist/bin/commands/supply-chain.d.ts.map +1 -0
- package/dist/bin/commands/supply-chain.js +138 -0
- package/dist/bin/commands/supply-chain.js.map +7 -0
- package/dist/bin/commands/surprising.d.ts +3 -0
- package/dist/bin/commands/surprising.d.ts.map +1 -0
- package/dist/bin/commands/sync.d.ts.map +1 -1
- package/dist/bin/commands/uninit.d.ts.map +1 -1
- package/dist/bin/commands/uninit.js +109 -60
- package/dist/bin/commands/uninit.js.map +2 -2
- package/dist/bin/commands/utils.d.ts +5 -0
- package/dist/bin/commands/utils.d.ts.map +1 -1
- package/dist/bin/commands/vex.d.ts +3 -0
- package/dist/bin/commands/vex.d.ts.map +1 -0
- package/dist/bin/commands/vex.js +76 -0
- package/dist/bin/commands/vex.js.map +7 -0
- package/dist/bin/commands/vuln-suppress.d.ts +3 -0
- package/dist/bin/commands/vuln-suppress.d.ts.map +1 -0
- package/dist/bin/commands/vuln-suppress.js +95 -0
- package/dist/bin/commands/vuln-suppress.js.map +7 -0
- package/dist/bin/commands/vulns.d.ts +3 -0
- package/dist/bin/commands/vulns.d.ts.map +1 -0
- package/dist/bin/commands/vulns.js +382 -0
- package/dist/bin/commands/vulns.js.map +7 -0
- package/dist/bin/installer/archive.d.ts +47 -0
- package/dist/bin/installer/archive.d.ts.map +1 -0
- package/dist/bin/installer/auto-detect.d.ts +16 -0
- package/dist/bin/installer/auto-detect.d.ts.map +1 -0
- package/dist/bin/installer/auto-detect.js +125 -0
- package/dist/bin/installer/auto-detect.js.map +7 -0
- package/dist/bin/installer/caveman.d.ts +12 -0
- package/dist/bin/installer/caveman.d.ts.map +1 -0
- package/dist/bin/installer/cli-agent.d.ts +7 -2
- package/dist/bin/installer/cli-agent.d.ts.map +1 -1
- package/dist/bin/installer/cli-agent.js +32 -5
- package/dist/bin/installer/cli-agent.js.map +2 -2
- package/dist/bin/installer/common.d.ts +36 -0
- package/dist/bin/installer/common.d.ts.map +1 -0
- package/dist/bin/installer/common.js +48 -0
- package/dist/bin/installer/common.js.map +2 -2
- package/dist/bin/installer/config-prompt.d.ts +1 -1
- package/dist/bin/installer/config-prompt.d.ts.map +1 -1
- package/dist/bin/installer/config-prompt.js +85 -2
- package/dist/bin/installer/config-prompt.js.map +2 -2
- package/dist/bin/installer/dashboard.d.ts.map +1 -1
- package/dist/bin/installer/detect.d.ts +30 -0
- package/dist/bin/installer/detect.d.ts.map +1 -0
- package/dist/bin/installer/detect.js +309 -0
- package/dist/bin/installer/detect.js.map +7 -0
- package/dist/bin/installer/hooks.d.ts +4 -1
- package/dist/bin/installer/hooks.d.ts.map +1 -1
- package/dist/bin/installer/hooks.js +34 -0
- package/dist/bin/installer/hooks.js.map +2 -2
- package/dist/bin/installer/index.d.ts +5 -4
- package/dist/bin/installer/index.d.ts.map +1 -1
- package/dist/bin/installer/index.js +46 -8
- package/dist/bin/installer/index.js.map +2 -2
- package/dist/bin/installer/instructions.d.ts +14 -0
- package/dist/bin/installer/instructions.d.ts.map +1 -0
- package/dist/bin/installer/instructions.js +209 -3
- package/dist/bin/installer/instructions.js.map +2 -2
- package/dist/bin/installer/mcp.d.ts.map +1 -1
- package/dist/bin/installer/prompts.d.ts +17 -0
- package/dist/bin/installer/prompts.d.ts.map +1 -1
- package/dist/bin/installer/qdrant-dashboard.d.ts.map +1 -1
- package/dist/bin/installer/steering.d.ts +14 -2
- package/dist/bin/installer/steering.d.ts.map +1 -1
- package/dist/bin/installer/steering.js +488 -0
- package/dist/bin/installer/steering.js.map +2 -2
- package/dist/bin/installer/targets/aider.d.ts +6 -0
- package/dist/bin/installer/targets/aider.d.ts.map +1 -0
- package/dist/bin/installer/targets/aider.js +3 -3
- package/dist/bin/installer/targets/aider.js.map +2 -2
- package/dist/bin/installer/targets/amp.d.ts +6 -0
- package/dist/bin/installer/targets/amp.d.ts.map +1 -0
- package/dist/bin/installer/targets/amp.js +3 -3
- package/dist/bin/installer/targets/amp.js.map +2 -2
- package/dist/bin/installer/targets/antigravity.d.ts +13 -0
- package/dist/bin/installer/targets/antigravity.d.ts.map +1 -0
- package/dist/bin/installer/targets/antigravity.js +35 -6
- package/dist/bin/installer/targets/antigravity.js.map +2 -2
- package/dist/bin/installer/targets/augment.d.ts +6 -0
- package/dist/bin/installer/targets/augment.d.ts.map +1 -0
- package/dist/bin/installer/targets/augment.js +3 -3
- package/dist/bin/installer/targets/augment.js.map +2 -2
- package/dist/bin/installer/targets/claude.d.ts +6 -0
- package/dist/bin/installer/targets/claude.d.ts.map +1 -0
- package/dist/bin/installer/targets/claude.js +49 -5
- package/dist/bin/installer/targets/claude.js.map +2 -2
- package/dist/bin/installer/targets/cline.d.ts +13 -0
- package/dist/bin/installer/targets/cline.d.ts.map +1 -0
- package/dist/bin/installer/targets/cline.js +32 -6
- package/dist/bin/installer/targets/cline.js.map +2 -2
- package/dist/bin/installer/targets/codex.d.ts +6 -0
- package/dist/bin/installer/targets/codex.d.ts.map +1 -0
- package/dist/bin/installer/targets/codex.js +64 -12
- package/dist/bin/installer/targets/codex.js.map +2 -2
- package/dist/bin/installer/targets/continue.d.ts +12 -0
- package/dist/bin/installer/targets/continue.d.ts.map +1 -0
- package/dist/bin/installer/targets/continue.js +2 -2
- package/dist/bin/installer/targets/continue.js.map +2 -2
- package/dist/bin/installer/targets/copilot-cli.d.ts +12 -0
- package/dist/bin/installer/targets/copilot-cli.d.ts.map +1 -0
- package/dist/bin/installer/targets/copilot-cli.js +101 -0
- package/dist/bin/installer/targets/copilot-cli.js.map +7 -0
- package/dist/bin/installer/targets/copilot.d.ts +6 -0
- package/dist/bin/installer/targets/copilot.d.ts.map +1 -0
- package/dist/bin/installer/targets/copilot.js +31 -5
- package/dist/bin/installer/targets/copilot.js.map +2 -2
- package/dist/bin/installer/targets/cursor.d.ts +6 -0
- package/dist/bin/installer/targets/cursor.d.ts.map +1 -0
- package/dist/bin/installer/targets/cursor.js +4 -4
- package/dist/bin/installer/targets/cursor.js.map +2 -2
- package/dist/bin/installer/targets/devin.d.ts +13 -0
- package/dist/bin/installer/targets/devin.d.ts.map +1 -0
- package/dist/bin/installer/targets/devin.js +2 -2
- package/dist/bin/installer/targets/devin.js.map +2 -2
- package/dist/bin/installer/targets/gemini-cli.d.ts +16 -0
- package/dist/bin/installer/targets/gemini-cli.d.ts.map +1 -0
- package/dist/bin/installer/targets/gemini-cli.js +2 -2
- package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
- package/dist/bin/installer/targets/generic.d.ts +59 -0
- package/dist/bin/installer/targets/generic.d.ts.map +1 -0
- package/dist/bin/installer/targets/generic.js +2 -14
- package/dist/bin/installer/targets/generic.js.map +2 -2
- package/dist/bin/installer/targets/goose.d.ts +6 -0
- package/dist/bin/installer/targets/goose.d.ts.map +1 -0
- package/dist/bin/installer/targets/goose.js +3 -3
- package/dist/bin/installer/targets/goose.js.map +2 -2
- package/dist/bin/installer/targets/index.d.ts +11 -0
- package/dist/bin/installer/targets/index.d.ts.map +1 -0
- package/dist/bin/installer/targets/index.js +250 -0
- package/dist/bin/installer/targets/index.js.map +2 -2
- package/dist/bin/installer/targets/junie.d.ts +13 -0
- package/dist/bin/installer/targets/junie.d.ts.map +1 -0
- package/dist/bin/installer/targets/junie.js +2 -2
- package/dist/bin/installer/targets/junie.js.map +2 -2
- package/dist/bin/installer/targets/kilo.d.ts +12 -0
- package/dist/bin/installer/targets/kilo.d.ts.map +1 -0
- package/dist/bin/installer/targets/kilo.js +2 -2
- package/dist/bin/installer/targets/kilo.js.map +2 -2
- package/dist/bin/installer/targets/kiro.d.ts +5 -0
- package/dist/bin/installer/targets/kiro.d.ts.map +1 -0
- package/dist/bin/installer/targets/kiro.js +4 -4
- package/dist/bin/installer/targets/kiro.js.map +2 -2
- package/dist/bin/installer/targets/opencode.d.ts +13 -0
- package/dist/bin/installer/targets/opencode.d.ts.map +1 -0
- package/dist/bin/installer/targets/opencode.js +2 -2
- package/dist/bin/installer/targets/opencode.js.map +2 -2
- package/dist/bin/installer/targets/openhands.d.ts +6 -0
- package/dist/bin/installer/targets/openhands.d.ts.map +1 -0
- package/dist/bin/installer/targets/openhands.js +3 -3
- package/dist/bin/installer/targets/openhands.js.map +2 -2
- package/dist/bin/installer/targets/qoder.d.ts +12 -0
- package/dist/bin/installer/targets/qoder.d.ts.map +1 -0
- package/dist/bin/installer/targets/qoder.js +91 -0
- package/dist/bin/installer/targets/qoder.js.map +7 -0
- package/dist/bin/installer/targets/qwen.d.ts +12 -0
- package/dist/bin/installer/targets/qwen.d.ts.map +1 -0
- package/dist/bin/installer/targets/qwen.js +96 -0
- package/dist/bin/installer/targets/qwen.js.map +7 -0
- package/dist/bin/installer/targets/replit.d.ts +6 -0
- package/dist/bin/installer/targets/replit.d.ts.map +1 -0
- package/dist/bin/installer/targets/replit.js +3 -3
- package/dist/bin/installer/targets/replit.js.map +2 -2
- package/dist/bin/installer/targets/roo.d.ts +13 -0
- package/dist/bin/installer/targets/roo.d.ts.map +1 -0
- package/dist/bin/installer/targets/roo.js +2 -2
- package/dist/bin/installer/targets/roo.js.map +2 -2
- package/dist/bin/installer/targets/tabnine.d.ts +6 -0
- package/dist/bin/installer/targets/tabnine.d.ts.map +1 -0
- package/dist/bin/installer/targets/tabnine.js +3 -3
- package/dist/bin/installer/targets/tabnine.js.map +2 -2
- package/dist/bin/installer/targets/trae.d.ts +6 -0
- package/dist/bin/installer/targets/trae.d.ts.map +1 -0
- package/dist/bin/installer/targets/trae.js +5 -5
- package/dist/bin/installer/targets/trae.js.map +2 -2
- package/dist/bin/installer/targets/warp.d.ts +12 -0
- package/dist/bin/installer/targets/warp.d.ts.map +1 -0
- package/dist/bin/installer/targets/warp.js +2 -2
- package/dist/bin/installer/targets/warp.js.map +2 -2
- package/dist/bin/installer/targets/windsurf.d.ts +13 -0
- package/dist/bin/installer/targets/windsurf.d.ts.map +1 -0
- package/dist/bin/installer/targets/windsurf.js +35 -6
- package/dist/bin/installer/targets/windsurf.js.map +2 -2
- package/dist/bin/kirograph.js +74 -6
- package/dist/bin/kirograph.js.map +3 -3
- package/dist/bin/progress.d.ts +16 -1
- package/dist/bin/progress.d.ts.map +1 -1
- package/dist/compression/filters/aws.d.ts +9 -0
- package/dist/compression/filters/aws.d.ts.map +1 -0
- package/dist/compression/filters/docker.d.ts +6 -0
- package/dist/compression/filters/docker.d.ts.map +1 -0
- package/dist/compression/filters/files.d.ts +6 -0
- package/dist/compression/filters/files.d.ts.map +1 -0
- package/dist/compression/filters/generic.d.ts +7 -0
- package/dist/compression/filters/generic.d.ts.map +1 -0
- package/dist/compression/filters/git.d.ts +6 -0
- package/dist/compression/filters/git.d.ts.map +1 -0
- package/dist/compression/filters/github.d.ts +6 -0
- package/dist/compression/filters/github.d.ts.map +1 -0
- package/dist/compression/filters/lint.d.ts +6 -0
- package/dist/compression/filters/lint.d.ts.map +1 -0
- package/dist/compression/filters/misc.d.ts +6 -0
- package/dist/compression/filters/misc.d.ts.map +1 -0
- package/dist/compression/filters/package.d.ts +6 -0
- package/dist/compression/filters/package.d.ts.map +1 -0
- package/dist/compression/filters/test.d.ts +6 -0
- package/dist/compression/filters/test.d.ts.map +1 -0
- package/dist/compression/index.d.ts +29 -0
- package/dist/compression/index.d.ts.map +1 -0
- package/dist/compression/naive-cost.d.ts +26 -0
- package/dist/compression/naive-cost.d.ts.map +1 -0
- package/dist/compression/tracker.d.ts +155 -0
- package/dist/compression/tracker.d.ts.map +1 -0
- package/dist/compression/tracker.js +80 -0
- package/dist/compression/tracker.js.map +2 -2
- package/dist/compression/types.d.ts +49 -0
- package/dist/compression/types.d.ts.map +1 -0
- package/dist/config.d.ts +90 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +144 -3
- package/dist/config.js.map +2 -2
- package/dist/core/lock-manager.d.ts +2 -0
- package/dist/core/lock-manager.d.ts.map +1 -1
- package/dist/core/pipeline.d.ts +4 -1
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/pipeline.js +78 -2
- package/dist/core/pipeline.js.map +2 -2
- package/dist/core/snapshot.d.ts +58 -0
- package/dist/core/snapshot.d.ts.map +1 -0
- package/dist/data/filters.d.ts +23 -0
- package/dist/data/filters.d.ts.map +1 -0
- package/dist/data/indexer.d.ts +25 -0
- package/dist/data/indexer.d.ts.map +1 -0
- package/dist/data/linker.d.ts +37 -0
- package/dist/data/linker.d.ts.map +1 -0
- package/dist/data/lint.d.ts +27 -0
- package/dist/data/lint.d.ts.map +1 -0
- package/dist/data/parsers/csv.d.ts +11 -0
- package/dist/data/parsers/csv.d.ts.map +1 -0
- package/dist/data/parsers/excel.d.ts +10 -0
- package/dist/data/parsers/excel.d.ts.map +1 -0
- package/dist/data/parsers/index.d.ts +28 -0
- package/dist/data/parsers/index.d.ts.map +1 -0
- package/dist/data/parsers/json-array.d.ts +9 -0
- package/dist/data/parsers/json-array.d.ts.map +1 -0
- package/dist/data/parsers/jsonl.d.ts +9 -0
- package/dist/data/parsers/jsonl.d.ts.map +1 -0
- package/dist/data/parsers/parquet.d.ts +10 -0
- package/dist/data/parsers/parquet.d.ts.map +1 -0
- package/dist/data/profiler.d.ts +29 -0
- package/dist/data/profiler.d.ts.map +1 -0
- package/dist/data/queries.d.ts +95 -0
- package/dist/data/queries.d.ts.map +1 -0
- package/dist/data/types.d.ts +103 -0
- package/dist/data/types.d.ts.map +1 -0
- package/dist/db/database.d.ts +57 -0
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +75 -5
- package/dist/db/database.js.map +2 -2
- package/dist/db/memory-schema.sql +5 -1
- package/dist/db/patterns-schema.sql +23 -0
- package/dist/db/schema.sql +3 -1
- package/dist/db/security-schema.sql +72 -0
- package/dist/docs/formats/asciidoc.d.ts +9 -0
- package/dist/docs/formats/asciidoc.d.ts.map +1 -0
- package/dist/docs/formats/html.d.ts +10 -0
- package/dist/docs/formats/html.d.ts.map +1 -0
- package/dist/docs/formats/index.d.ts +31 -0
- package/dist/docs/formats/index.d.ts.map +1 -0
- package/dist/docs/formats/markdown.d.ts +11 -0
- package/dist/docs/formats/markdown.d.ts.map +1 -0
- package/dist/docs/formats/openapi.d.ts +17 -0
- package/dist/docs/formats/openapi.d.ts.map +1 -0
- package/dist/docs/formats/org.d.ts +9 -0
- package/dist/docs/formats/org.d.ts.map +1 -0
- package/dist/docs/formats/plaintext.d.ts +11 -0
- package/dist/docs/formats/plaintext.d.ts.map +1 -0
- package/dist/docs/formats/rdoc.d.ts +10 -0
- package/dist/docs/formats/rdoc.d.ts.map +1 -0
- package/dist/docs/formats/rst.d.ts +11 -0
- package/dist/docs/formats/rst.d.ts.map +1 -0
- package/dist/docs/indexer.d.ts +49 -0
- package/dist/docs/indexer.d.ts.map +1 -0
- package/dist/docs/linker.d.ts +30 -0
- package/dist/docs/linker.d.ts.map +1 -0
- package/dist/docs/lint.d.ts +27 -0
- package/dist/docs/lint.d.ts.map +1 -0
- package/dist/docs/queries.d.ts +78 -0
- package/dist/docs/queries.d.ts.map +1 -0
- package/dist/docs/section-id.d.ts +48 -0
- package/dist/docs/section-id.d.ts.map +1 -0
- package/dist/docs/summarizer.d.ts +13 -0
- package/dist/docs/summarizer.d.ts.map +1 -0
- package/dist/docs/types.d.ts +71 -0
- package/dist/docs/types.d.ts.map +1 -0
- package/dist/docs/vectors.d.ts +54 -0
- package/dist/docs/vectors.d.ts.map +1 -0
- package/dist/extraction/extractor.d.ts +1 -1
- package/dist/extraction/extractor.d.ts.map +1 -1
- package/dist/extraction/extractor.js +81 -0
- package/dist/extraction/extractor.js.map +2 -2
- package/dist/extraction/grammars.d.ts +6 -0
- package/dist/extraction/grammars.d.ts.map +1 -1
- package/dist/extraction/grammars.js +32 -8
- package/dist/extraction/grammars.js.map +2 -2
- package/dist/extraction/languages.d.ts.map +1 -1
- package/dist/extraction/languages.js +43 -1
- package/dist/extraction/languages.js.map +2 -2
- package/dist/extraction/notebook.d.ts +14 -0
- package/dist/extraction/notebook.d.ts.map +1 -0
- package/dist/extraction/notebook.js +300 -0
- package/dist/extraction/notebook.js.map +7 -0
- package/dist/extraction/wasm/tree-sitter-astro.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-gdscript.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-julia.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-perl.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-powershell.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-sql.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-verilog.wasm +0 -0
- package/dist/frameworks/amplify.d.ts +9 -0
- package/dist/frameworks/amplify.d.ts.map +1 -0
- package/dist/frameworks/angular.d.ts +9 -0
- package/dist/frameworks/angular.d.ts.map +1 -0
- package/dist/frameworks/ansible.d.ts +8 -0
- package/dist/frameworks/ansible.d.ts.map +1 -0
- package/dist/frameworks/cloudformation.d.ts +9 -0
- package/dist/frameworks/cloudformation.d.ts.map +1 -0
- package/dist/frameworks/docker.d.ts +9 -0
- package/dist/frameworks/docker.d.ts.map +1 -0
- package/dist/frameworks/elixir.d.ts +6 -0
- package/dist/frameworks/elixir.d.ts.map +1 -0
- package/dist/frameworks/flutter.d.ts +12 -0
- package/dist/frameworks/flutter.d.ts.map +1 -0
- package/dist/frameworks/flutter.js +130 -0
- package/dist/frameworks/flutter.js.map +7 -0
- package/dist/frameworks/iac.d.ts +10 -0
- package/dist/frameworks/iac.d.ts.map +1 -0
- package/dist/frameworks/index.d.ts +14 -0
- package/dist/frameworks/index.d.ts.map +1 -1
- package/dist/frameworks/index.js +7 -1
- package/dist/frameworks/index.js.map +3 -3
- package/dist/frameworks/kubernetes.d.ts +9 -0
- package/dist/frameworks/kubernetes.d.ts.map +1 -0
- package/dist/frameworks/pulumi.d.ts +9 -0
- package/dist/frameworks/pulumi.d.ts.map +1 -0
- package/dist/frameworks/scala.d.ts +6 -0
- package/dist/frameworks/scala.d.ts.map +1 -0
- package/dist/frameworks/solidity.d.ts +6 -0
- package/dist/frameworks/solidity.d.ts.map +1 -0
- package/dist/frameworks/terraform.d.ts +14 -0
- package/dist/frameworks/terraform.d.ts.map +1 -0
- package/dist/frameworks/vue.d.ts +7 -0
- package/dist/frameworks/vue.d.ts.map +1 -0
- package/dist/graph/communities.d.ts +43 -0
- package/dist/graph/communities.d.ts.map +1 -0
- package/dist/graph/communities.js +317 -0
- package/dist/graph/communities.js.map +7 -0
- package/dist/graph/flows.d.ts +55 -0
- package/dist/graph/flows.d.ts.map +1 -0
- package/dist/graph/flows.js +138 -0
- package/dist/graph/flows.js.map +7 -0
- package/dist/graph/refactor.d.ts +43 -0
- package/dist/graph/refactor.d.ts.map +1 -0
- package/dist/graph/refactor.js +155 -0
- package/dist/graph/refactor.js.map +7 -0
- package/dist/index.d.ts +36 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +2 -2
- package/dist/mcp/cache.d.ts +69 -0
- package/dist/mcp/cache.d.ts.map +1 -0
- package/dist/mcp/cache.js +172 -0
- package/dist/mcp/cache.js.map +7 -0
- package/dist/mcp/read-modes.d.ts +31 -0
- package/dist/mcp/read-modes.d.ts.map +1 -0
- package/dist/mcp/read-modes.js +295 -0
- package/dist/mcp/read-modes.js.map +7 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +17 -3
- package/dist/mcp/server.js.map +2 -2
- package/dist/mcp/tool-names.d.ts +2 -0
- package/dist/mcp/tool-names.d.ts.map +1 -0
- package/dist/mcp/tool-names.js +24 -1
- package/dist/mcp/tool-names.js.map +2 -2
- package/dist/mcp/tools.d.ts +12 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +1560 -4
- package/dist/mcp/tools.js.map +3 -3
- package/dist/memory/compress.d.ts +19 -0
- package/dist/memory/compress.d.ts.map +1 -0
- package/dist/memory/database.d.ts +92 -0
- package/dist/memory/database.d.ts.map +1 -0
- package/dist/memory/database.js +70 -2
- package/dist/memory/database.js.map +2 -2
- package/dist/memory/index.d.ts +71 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +12 -2
- package/dist/memory/index.js.map +2 -2
- package/dist/memory/symbols.d.ts +21 -0
- package/dist/memory/symbols.d.ts.map +1 -0
- package/dist/memory/types.d.ts +78 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js.map +1 -1
- package/dist/memory/vectors.d.ts +43 -0
- package/dist/memory/vectors.d.ts.map +1 -0
- package/dist/patterns/graph.d.ts +16 -0
- package/dist/patterns/graph.d.ts.map +1 -0
- package/dist/patterns/graph.js +45 -0
- package/dist/patterns/graph.js.map +7 -0
- package/dist/patterns/index.d.ts +4 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +39 -0
- package/dist/patterns/index.js.map +7 -0
- package/dist/patterns/indexer.d.ts +15 -0
- package/dist/patterns/indexer.d.ts.map +1 -0
- package/dist/patterns/indexer.js +97 -0
- package/dist/patterns/indexer.js.map +7 -0
- package/dist/patterns/library/command-injection-go.yaml +11 -0
- package/dist/patterns/library/dangerous-eval-js.yaml +14 -0
- package/dist/patterns/library/dangerous-exec-py.yaml +13 -0
- package/dist/patterns/library/dangerous-reflection-java.yaml +8 -0
- package/dist/patterns/library/path-traversal-go.yaml +11 -0
- package/dist/patterns/library/path-traversal-py.yaml +12 -0
- package/dist/patterns/library/path-traversal-readfile-js.yaml +14 -0
- package/dist/patterns/library/prototype-pollution-js.yaml +12 -0
- package/dist/patterns/library/sql-injection-concat-js.yaml +12 -0
- package/dist/patterns/library/sql-injection-java.yaml +13 -0
- package/dist/patterns/library/sql-injection-py.yaml +12 -0
- package/dist/patterns/library/sql-injection-template-js.yaml +13 -0
- package/dist/patterns/library/weak-crypto-md5-js.yaml +13 -0
- package/dist/patterns/library/weak-crypto-py.yaml +13 -0
- package/dist/patterns/loader.d.ts +18 -0
- package/dist/patterns/loader.d.ts.map +1 -0
- package/dist/patterns/loader.js +277 -0
- package/dist/patterns/loader.js.map +7 -0
- package/dist/patterns/runner.d.ts +42 -0
- package/dist/patterns/runner.d.ts.map +1 -0
- package/dist/patterns/runner.js +277 -0
- package/dist/patterns/runner.js.map +7 -0
- package/dist/patterns/types.d.ts +27 -0
- package/dist/patterns/types.d.ts.map +1 -0
- package/dist/patterns/types.js +34 -0
- package/dist/patterns/types.js.map +7 -0
- package/dist/resolution/bridges/android-rn.d.ts +13 -0
- package/dist/resolution/bridges/android-rn.d.ts.map +1 -0
- package/dist/resolution/bridges/android-rn.js +298 -0
- package/dist/resolution/bridges/android-rn.js.map +7 -0
- package/dist/resolution/bridges/expo-modules.d.ts +10 -0
- package/dist/resolution/bridges/expo-modules.d.ts.map +1 -0
- package/dist/resolution/bridges/expo-modules.js +155 -0
- package/dist/resolution/bridges/expo-modules.js.map +7 -0
- package/dist/resolution/bridges/flutter-channel.d.ts +14 -0
- package/dist/resolution/bridges/flutter-channel.d.ts.map +1 -0
- package/dist/resolution/bridges/flutter-channel.js +385 -0
- package/dist/resolution/bridges/flutter-channel.js.map +7 -0
- package/dist/resolution/bridges/index.d.ts +40 -0
- package/dist/resolution/bridges/index.d.ts.map +1 -0
- package/dist/resolution/bridges/index.js +80 -0
- package/dist/resolution/bridges/index.js.map +7 -0
- package/dist/resolution/bridges/native-events.d.ts +10 -0
- package/dist/resolution/bridges/native-events.d.ts.map +1 -0
- package/dist/resolution/bridges/native-events.js +188 -0
- package/dist/resolution/bridges/native-events.js.map +7 -0
- package/dist/resolution/bridges/native-views.d.ts +13 -0
- package/dist/resolution/bridges/native-views.d.ts.map +1 -0
- package/dist/resolution/bridges/native-views.js +244 -0
- package/dist/resolution/bridges/native-views.js.map +7 -0
- package/dist/resolution/bridges/react-native.d.ts +9 -0
- package/dist/resolution/bridges/react-native.d.ts.map +1 -0
- package/dist/resolution/bridges/react-native.js +161 -0
- package/dist/resolution/bridges/react-native.js.map +7 -0
- package/dist/resolution/bridges/swift-objc.d.ts +14 -0
- package/dist/resolution/bridges/swift-objc.d.ts.map +1 -0
- package/dist/resolution/bridges/swift-objc.js +227 -0
- package/dist/resolution/bridges/swift-objc.js.map +7 -0
- package/dist/resolution/bridges/turbomodules.d.ts +10 -0
- package/dist/resolution/bridges/turbomodules.d.ts.map +1 -0
- package/dist/resolution/bridges/turbomodules.js +216 -0
- package/dist/resolution/bridges/turbomodules.js.map +7 -0
- package/dist/resolution/index.d.ts +28 -3
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +61 -2
- package/dist/resolution/index.js.map +2 -2
- package/dist/security/attack-surface.d.ts +46 -0
- package/dist/security/attack-surface.d.ts.map +1 -0
- package/dist/security/attack-surface.js +206 -0
- package/dist/security/attack-surface.js.map +7 -0
- package/dist/security/context-warnings.d.ts +40 -0
- package/dist/security/context-warnings.d.ts.map +1 -0
- package/dist/security/context-warnings.js +123 -0
- package/dist/security/context-warnings.js.map +7 -0
- package/dist/security/data-flows.d.ts +33 -0
- package/dist/security/data-flows.d.ts.map +1 -0
- package/dist/security/data-flows.js +286 -0
- package/dist/security/data-flows.js.map +7 -0
- package/dist/security/dep-confusion.d.ts +23 -0
- package/dist/security/dep-confusion.d.ts.map +1 -0
- package/dist/security/dep-confusion.js +255 -0
- package/dist/security/dep-confusion.js.map +7 -0
- package/dist/security/errors.d.ts +16 -0
- package/dist/security/errors.d.ts.map +1 -0
- package/dist/security/errors.js +51 -0
- package/dist/security/errors.js.map +7 -0
- package/dist/security/export/fix-suggestions.d.ts +21 -0
- package/dist/security/export/fix-suggestions.d.ts.map +1 -0
- package/dist/security/export/fix-suggestions.js +58 -0
- package/dist/security/export/fix-suggestions.js.map +7 -0
- package/dist/security/export/sbom.d.ts +33 -0
- package/dist/security/export/sbom.d.ts.map +1 -0
- package/dist/security/export/sbom.js +230 -0
- package/dist/security/export/sbom.js.map +7 -0
- package/dist/security/export/serialization.d.ts +62 -0
- package/dist/security/export/serialization.d.ts.map +1 -0
- package/dist/security/export/serialization.js +142 -0
- package/dist/security/export/serialization.js.map +7 -0
- package/dist/security/export/vex.d.ts +58 -0
- package/dist/security/export/vex.d.ts.map +1 -0
- package/dist/security/export/vex.js +220 -0
- package/dist/security/export/vex.js.map +7 -0
- package/dist/security/index.d.ts +21 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +67 -0
- package/dist/security/index.js.map +7 -0
- package/dist/security/integrator.d.ts +63 -0
- package/dist/security/integrator.d.ts.map +1 -0
- package/dist/security/integrator.js +491 -0
- package/dist/security/integrator.js.map +7 -0
- package/dist/security/license.d.ts +33 -0
- package/dist/security/license.d.ts.map +1 -0
- package/dist/security/license.js +70 -0
- package/dist/security/license.js.map +7 -0
- package/dist/security/manifest/adapter.d.ts +92 -0
- package/dist/security/manifest/adapter.d.ts.map +1 -0
- package/dist/security/manifest/adapter.js +243 -0
- package/dist/security/manifest/adapter.js.map +7 -0
- package/dist/security/manifest/parser.d.ts +73 -0
- package/dist/security/manifest/parser.d.ts.map +1 -0
- package/dist/security/manifest/parser.js +376 -0
- package/dist/security/manifest/parser.js.map +7 -0
- package/dist/security/manifest/plugins/cargo.d.ts +11 -0
- package/dist/security/manifest/plugins/cargo.d.ts.map +1 -0
- package/dist/security/manifest/plugins/cargo.js +233 -0
- package/dist/security/manifest/plugins/cargo.js.map +7 -0
- package/dist/security/manifest/plugins/composer.d.ts +11 -0
- package/dist/security/manifest/plugins/composer.d.ts.map +1 -0
- package/dist/security/manifest/plugins/composer.js +152 -0
- package/dist/security/manifest/plugins/composer.js.map +7 -0
- package/dist/security/manifest/plugins/go.d.ts +12 -0
- package/dist/security/manifest/plugins/go.d.ts.map +1 -0
- package/dist/security/manifest/plugins/go.js +146 -0
- package/dist/security/manifest/plugins/go.js.map +7 -0
- package/dist/security/manifest/plugins/gradle.d.ts +12 -0
- package/dist/security/manifest/plugins/gradle.d.ts.map +1 -0
- package/dist/security/manifest/plugins/gradle.js +159 -0
- package/dist/security/manifest/plugins/gradle.js.map +7 -0
- package/dist/security/manifest/plugins/hex.d.ts +11 -0
- package/dist/security/manifest/plugins/hex.d.ts.map +1 -0
- package/dist/security/manifest/plugins/hex.js +159 -0
- package/dist/security/manifest/plugins/hex.js.map +7 -0
- package/dist/security/manifest/plugins/maven.d.ts +11 -0
- package/dist/security/manifest/plugins/maven.d.ts.map +1 -0
- package/dist/security/manifest/plugins/maven.js +128 -0
- package/dist/security/manifest/plugins/maven.js.map +7 -0
- package/dist/security/manifest/plugins/npm.d.ts +11 -0
- package/dist/security/manifest/plugins/npm.d.ts.map +1 -0
- package/dist/security/manifest/plugins/npm.js +284 -0
- package/dist/security/manifest/plugins/npm.js.map +7 -0
- package/dist/security/manifest/plugins/nuget.d.ts +12 -0
- package/dist/security/manifest/plugins/nuget.d.ts.map +1 -0
- package/dist/security/manifest/plugins/nuget.js +186 -0
- package/dist/security/manifest/plugins/nuget.js.map +7 -0
- package/dist/security/manifest/plugins/pip.d.ts +11 -0
- package/dist/security/manifest/plugins/pip.d.ts.map +1 -0
- package/dist/security/manifest/plugins/pip.js +123 -0
- package/dist/security/manifest/plugins/pip.js.map +7 -0
- package/dist/security/manifest/plugins/pubspec.d.ts +11 -0
- package/dist/security/manifest/plugins/pubspec.d.ts.map +1 -0
- package/dist/security/manifest/plugins/pubspec.js +212 -0
- package/dist/security/manifest/plugins/pubspec.js.map +7 -0
- package/dist/security/manifest/plugins/pyproject.d.ts +3 -0
- package/dist/security/manifest/plugins/pyproject.d.ts.map +1 -0
- package/dist/security/manifest/plugins/pyproject.js +261 -0
- package/dist/security/manifest/plugins/pyproject.js.map +7 -0
- package/dist/security/manifest/plugins/rubygems.d.ts +11 -0
- package/dist/security/manifest/plugins/rubygems.d.ts.map +1 -0
- package/dist/security/manifest/plugins/rubygems.js +185 -0
- package/dist/security/manifest/plugins/rubygems.js.map +7 -0
- package/dist/security/manifest/plugins/swift.d.ts +11 -0
- package/dist/security/manifest/plugins/swift.d.ts.map +1 -0
- package/dist/security/manifest/plugins/swift.js +200 -0
- package/dist/security/manifest/plugins/swift.js.map +7 -0
- package/dist/security/owasp.d.ts +16 -0
- package/dist/security/owasp.d.ts.map +1 -0
- package/dist/security/owasp.js +104 -0
- package/dist/security/owasp.js.map +7 -0
- package/dist/security/pipeline.d.ts +37 -0
- package/dist/security/pipeline.d.ts.map +1 -0
- package/dist/security/pipeline.js +125 -0
- package/dist/security/pipeline.js.map +7 -0
- package/dist/security/reachability.d.ts +67 -0
- package/dist/security/reachability.d.ts.map +1 -0
- package/dist/security/reachability.js +276 -0
- package/dist/security/reachability.js.map +7 -0
- package/dist/security/remediation.d.ts +51 -0
- package/dist/security/remediation.d.ts.map +1 -0
- package/dist/security/remediation.js +126 -0
- package/dist/security/remediation.js.map +7 -0
- package/dist/security/secrets.d.ts +38 -0
- package/dist/security/secrets.d.ts.map +1 -0
- package/dist/security/secrets.js +176 -0
- package/dist/security/secrets.js.map +7 -0
- package/dist/security/staleness.d.ts +43 -0
- package/dist/security/staleness.d.ts.map +1 -0
- package/dist/security/staleness.js +231 -0
- package/dist/security/staleness.js.map +7 -0
- package/dist/security/supply-chain.d.ts +34 -0
- package/dist/security/supply-chain.d.ts.map +1 -0
- package/dist/security/supply-chain.js +301 -0
- package/dist/security/supply-chain.js.map +7 -0
- package/dist/security/suppressions.d.ts +18 -0
- package/dist/security/suppressions.d.ts.map +1 -0
- package/dist/security/suppressions.js +106 -0
- package/dist/security/suppressions.js.map +7 -0
- package/dist/security/types.d.ts +144 -0
- package/dist/security/types.d.ts.map +1 -0
- package/dist/security/types.js +17 -0
- package/dist/security/types.js.map +7 -0
- package/dist/security/vuln/client.d.ts +90 -0
- package/dist/security/vuln/client.d.ts.map +1 -0
- package/dist/security/vuln/client.js +355 -0
- package/dist/security/vuln/client.js.map +7 -0
- package/dist/security/vuln/epss-client.d.ts +26 -0
- package/dist/security/vuln/epss-client.d.ts.map +1 -0
- package/dist/security/vuln/epss-client.js +95 -0
- package/dist/security/vuln/epss-client.js.map +7 -0
- package/dist/security/vuln/index.d.ts +6 -0
- package/dist/security/vuln/index.d.ts.map +1 -0
- package/dist/security/vuln/index.js +29 -0
- package/dist/security/vuln/index.js.map +7 -0
- package/dist/security/vuln/osv-adapter.d.ts +58 -0
- package/dist/security/vuln/osv-adapter.d.ts.map +1 -0
- package/dist/security/vuln/osv-adapter.js +321 -0
- package/dist/security/vuln/osv-adapter.js.map +7 -0
- package/dist/security/vuln/types.d.ts +29 -0
- package/dist/security/vuln/types.d.ts.map +1 -0
- package/dist/security/vuln/types.js +17 -0
- package/dist/security/vuln/types.js.map +7 -0
- package/dist/sync/index.d.ts +4 -2
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/types.d.ts +10 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +2 -2
- package/dist/vectors/index.d.ts +11 -3
- package/dist/vectors/index.d.ts.map +1 -1
- package/dist/vectors/qdrant-index.d.ts +10 -3
- package/dist/vectors/qdrant-index.d.ts.map +1 -1
- package/dist/vectors/typesense-index.d.ts.map +1 -1
- package/dist/watchmen/index.js +83 -0
- package/dist/watchmen/index.js.map +7 -0
- package/dist/watchmen/synthesize.js +475 -0
- package/dist/watchmen/synthesize.js.map +7 -0
- package/package.json +6 -2
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KiroGraph Token Savings Tracker
|
|
3
|
+
*
|
|
4
|
+
* Records compression results to a local JSON file for analytics.
|
|
5
|
+
* Uses a simple append-only JSON lines file to avoid SQLite dependency
|
|
6
|
+
* in the compression module (keeps it lightweight and independent).
|
|
7
|
+
*/
|
|
8
|
+
import type { TokenSavingsRecord } from './types';
|
|
9
|
+
export interface GainStats {
|
|
10
|
+
totalCommands: number;
|
|
11
|
+
totalOriginal: number;
|
|
12
|
+
totalCompressed: number;
|
|
13
|
+
totalSaved: number;
|
|
14
|
+
savingsPercent: number;
|
|
15
|
+
byFamily: Record<string, {
|
|
16
|
+
count: number;
|
|
17
|
+
savings: number;
|
|
18
|
+
}>;
|
|
19
|
+
recentCommands: Array<{
|
|
20
|
+
command: string;
|
|
21
|
+
savings: number;
|
|
22
|
+
timestamp: number;
|
|
23
|
+
source?: string;
|
|
24
|
+
}>;
|
|
25
|
+
/** Breakdown by source type */
|
|
26
|
+
bySource: {
|
|
27
|
+
exec: {
|
|
28
|
+
count: number;
|
|
29
|
+
saved: number;
|
|
30
|
+
};
|
|
31
|
+
graph: {
|
|
32
|
+
count: number;
|
|
33
|
+
saved: number;
|
|
34
|
+
};
|
|
35
|
+
memory: {
|
|
36
|
+
count: number;
|
|
37
|
+
saved: number;
|
|
38
|
+
};
|
|
39
|
+
docs: {
|
|
40
|
+
count: number;
|
|
41
|
+
saved: number;
|
|
42
|
+
};
|
|
43
|
+
data: {
|
|
44
|
+
count: number;
|
|
45
|
+
saved: number;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export declare class TokenTracker {
|
|
50
|
+
private filePath;
|
|
51
|
+
private sessionId;
|
|
52
|
+
constructor(projectRoot: string);
|
|
53
|
+
private getOrCreateSessionId;
|
|
54
|
+
/**
|
|
55
|
+
* Record a compression result.
|
|
56
|
+
*/
|
|
57
|
+
record(command: string, originalTokens: number, compressedTokens: number, strategy: string, source?: 'exec' | 'graph' | 'memory' | 'docs' | 'data'): void;
|
|
58
|
+
/**
|
|
59
|
+
* Record a graph tool saving.
|
|
60
|
+
* @param toolName - The MCP tool that was called
|
|
61
|
+
* @param outputTokens - Actual tokens returned by the tool
|
|
62
|
+
* @param naiveCost - Estimated tokens the agent would have used without the tool
|
|
63
|
+
*/
|
|
64
|
+
recordGraphSaving(toolName: string, outputTokens: number, naiveCost: number): void;
|
|
65
|
+
/**
|
|
66
|
+
* Record a memory tool saving.
|
|
67
|
+
* @param toolName - The MCP tool that was called
|
|
68
|
+
* @param outputTokens - Actual tokens returned by the tool
|
|
69
|
+
* @param naiveCost - Estimated tokens the agent would have used without memory
|
|
70
|
+
*/
|
|
71
|
+
recordMemorySaving(toolName: string, outputTokens: number, naiveCost: number): void;
|
|
72
|
+
/**
|
|
73
|
+
* Record a docs tool saving.
|
|
74
|
+
* @param toolName - The MCP tool that was called
|
|
75
|
+
* @param outputTokens - Actual tokens returned by the tool
|
|
76
|
+
* @param naiveCost - Estimated tokens the agent would have used without docs indexing
|
|
77
|
+
*/
|
|
78
|
+
recordDocsSaving(toolName: string, outputTokens: number, naiveCost: number): void;
|
|
79
|
+
/**
|
|
80
|
+
* Record a data tool saving.
|
|
81
|
+
* @param toolName - The MCP tool that was called
|
|
82
|
+
* @param outputTokens - Actual tokens returned by the tool
|
|
83
|
+
* @param naiveCost - Estimated tokens the agent would have used without data indexing
|
|
84
|
+
*/
|
|
85
|
+
recordDataSaving(toolName: string, outputTokens: number, naiveCost: number): void;
|
|
86
|
+
/**
|
|
87
|
+
* Get aggregated statistics for a time period.
|
|
88
|
+
*/
|
|
89
|
+
getStats(period: 'session' | 'today' | 'week' | 'all'): GainStats;
|
|
90
|
+
/**
|
|
91
|
+
* Get raw history for CLI display.
|
|
92
|
+
*/
|
|
93
|
+
getHistory(limit?: number): TokenSavingsRecord[];
|
|
94
|
+
/**
|
|
95
|
+
* Get daily breakdown for graph display.
|
|
96
|
+
*/
|
|
97
|
+
getDailyBreakdown(days?: number): Array<{
|
|
98
|
+
date: string;
|
|
99
|
+
commands: number;
|
|
100
|
+
saved: number;
|
|
101
|
+
}>;
|
|
102
|
+
private loadRecords;
|
|
103
|
+
private extractFamily;
|
|
104
|
+
private maybeRotate;
|
|
105
|
+
}
|
|
106
|
+
export interface BudgetConfig {
|
|
107
|
+
maxTokensPerSession: number;
|
|
108
|
+
warnAt: number;
|
|
109
|
+
throttleAt: number;
|
|
110
|
+
}
|
|
111
|
+
export interface BudgetStatus {
|
|
112
|
+
consumed: number;
|
|
113
|
+
limit: number;
|
|
114
|
+
remaining: number;
|
|
115
|
+
utilization: number;
|
|
116
|
+
warning: string | null;
|
|
117
|
+
throttled: boolean;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Session-scoped context budget tracker.
|
|
121
|
+
* Tracks cumulative token consumption and enforces budget limits.
|
|
122
|
+
*/
|
|
123
|
+
export declare class BudgetTracker {
|
|
124
|
+
private static instances;
|
|
125
|
+
private consumed;
|
|
126
|
+
private config;
|
|
127
|
+
private projectRoot;
|
|
128
|
+
private constructor();
|
|
129
|
+
static getInstance(projectRoot: string, config?: Partial<BudgetConfig>): BudgetTracker;
|
|
130
|
+
/**
|
|
131
|
+
* Record tokens consumed by a tool response.
|
|
132
|
+
*/
|
|
133
|
+
recordConsumption(tokens: number): void;
|
|
134
|
+
/**
|
|
135
|
+
* Get current budget status.
|
|
136
|
+
*/
|
|
137
|
+
getStatus(): BudgetStatus;
|
|
138
|
+
/**
|
|
139
|
+
* Check if the budget is throttled (responses should be truncated).
|
|
140
|
+
*/
|
|
141
|
+
isThrottled(): boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Check if a warning should be appended to responses.
|
|
144
|
+
*/
|
|
145
|
+
shouldWarn(): boolean;
|
|
146
|
+
/**
|
|
147
|
+
* Reset the budget counters.
|
|
148
|
+
*/
|
|
149
|
+
reset(): void;
|
|
150
|
+
/**
|
|
151
|
+
* Update budget configuration.
|
|
152
|
+
*/
|
|
153
|
+
updateConfig(config: Partial<BudgetConfig>): void;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/compression/tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
var tracker_exports = {};
|
|
30
30
|
__export(tracker_exports, {
|
|
31
|
+
BudgetTracker: () => BudgetTracker,
|
|
31
32
|
TokenTracker: () => TokenTracker
|
|
32
33
|
});
|
|
33
34
|
module.exports = __toCommonJS(tracker_exports);
|
|
@@ -253,8 +254,87 @@ class TokenTracker {
|
|
|
253
254
|
}
|
|
254
255
|
}
|
|
255
256
|
}
|
|
257
|
+
const DEFAULT_BUDGET = {
|
|
258
|
+
maxTokensPerSession: 1e5,
|
|
259
|
+
warnAt: 8e4,
|
|
260
|
+
throttleAt: 95e3
|
|
261
|
+
};
|
|
262
|
+
class BudgetTracker {
|
|
263
|
+
constructor(projectRoot, config) {
|
|
264
|
+
this.consumed = 0;
|
|
265
|
+
this.projectRoot = projectRoot;
|
|
266
|
+
this.config = { ...DEFAULT_BUDGET, ...config };
|
|
267
|
+
}
|
|
268
|
+
static {
|
|
269
|
+
this.instances = /* @__PURE__ */ new Map();
|
|
270
|
+
}
|
|
271
|
+
static getInstance(projectRoot, config) {
|
|
272
|
+
const key = projectRoot;
|
|
273
|
+
if (!BudgetTracker.instances.has(key)) {
|
|
274
|
+
BudgetTracker.instances.set(key, new BudgetTracker(projectRoot, config));
|
|
275
|
+
}
|
|
276
|
+
const instance = BudgetTracker.instances.get(key);
|
|
277
|
+
if (config) {
|
|
278
|
+
instance.config = { ...DEFAULT_BUDGET, ...config };
|
|
279
|
+
}
|
|
280
|
+
return instance;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Record tokens consumed by a tool response.
|
|
284
|
+
*/
|
|
285
|
+
recordConsumption(tokens) {
|
|
286
|
+
this.consumed += tokens;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Get current budget status.
|
|
290
|
+
*/
|
|
291
|
+
getStatus() {
|
|
292
|
+
const limit = this.config.maxTokensPerSession;
|
|
293
|
+
const remaining = Math.max(0, limit - this.consumed);
|
|
294
|
+
const utilization = limit > 0 ? Math.round(this.consumed / limit * 100) : 0;
|
|
295
|
+
let warning = null;
|
|
296
|
+
if (limit > 0 && this.consumed >= this.config.throttleAt) {
|
|
297
|
+
warning = `Budget nearly exhausted (${utilization}%). Responses will be truncated.`;
|
|
298
|
+
} else if (limit > 0 && this.consumed >= this.config.warnAt) {
|
|
299
|
+
warning = `Approaching budget limit (${utilization}%). Consider using compact read modes.`;
|
|
300
|
+
}
|
|
301
|
+
return {
|
|
302
|
+
consumed: this.consumed,
|
|
303
|
+
limit,
|
|
304
|
+
remaining,
|
|
305
|
+
utilization,
|
|
306
|
+
warning,
|
|
307
|
+
throttled: limit > 0 && this.consumed >= this.config.throttleAt
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Check if the budget is throttled (responses should be truncated).
|
|
312
|
+
*/
|
|
313
|
+
isThrottled() {
|
|
314
|
+
return this.config.maxTokensPerSession > 0 && this.consumed >= this.config.throttleAt;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Check if a warning should be appended to responses.
|
|
318
|
+
*/
|
|
319
|
+
shouldWarn() {
|
|
320
|
+
return this.config.maxTokensPerSession > 0 && this.consumed >= this.config.warnAt;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Reset the budget counters.
|
|
324
|
+
*/
|
|
325
|
+
reset() {
|
|
326
|
+
this.consumed = 0;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Update budget configuration.
|
|
330
|
+
*/
|
|
331
|
+
updateConfig(config) {
|
|
332
|
+
this.config = { ...this.config, ...config };
|
|
333
|
+
}
|
|
334
|
+
}
|
|
256
335
|
// Annotate the CommonJS export names for ESM import in node:
|
|
257
336
|
0 && (module.exports = {
|
|
337
|
+
BudgetTracker,
|
|
258
338
|
TokenTracker
|
|
259
339
|
});
|
|
260
340
|
//# sourceMappingURL=tracker.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/compression/tracker.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * KiroGraph Token Savings Tracker\n *\n * Records compression results to a local JSON file for analytics.\n * Uses a simple append-only JSON lines file to avoid SQLite dependency\n * in the compression module (keeps it lightweight and independent).\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as crypto from 'crypto';\nimport type { TokenSavingsRecord } from './types';\n\nconst TRACKER_DIR = '.kirograph';\nconst TRACKER_FILE = 'token-savings.jsonl';\nconst MAX_RECORDS = 5000; // Rotate after this many records\n\nexport interface GainStats {\n totalCommands: number;\n totalOriginal: number;\n totalCompressed: number;\n totalSaved: number;\n savingsPercent: number;\n byFamily: Record<string, { count: number; savings: number }>;\n recentCommands: Array<{ command: string; savings: number; timestamp: number; source?: string }>;\n /** Breakdown by source type */\n bySource: {\n exec: { count: number; saved: number };\n graph: { count: number; saved: number };\n memory: { count: number; saved: number };\n docs: { count: number; saved: number };\n data: { count: number; saved: number };\n };\n}\n\nexport class TokenTracker {\n private filePath: string;\n private sessionId: string;\n\n constructor(projectRoot: string) {\n const dir = path.join(projectRoot, TRACKER_DIR);\n fs.mkdirSync(dir, { recursive: true });\n this.filePath = path.join(dir, TRACKER_FILE);\n this.sessionId = this.getOrCreateSessionId(dir);\n }\n\n private getOrCreateSessionId(dir: string): string {\n const sessionFile = path.join(dir, '.session-id');\n try {\n const existing = fs.readFileSync(sessionFile, 'utf8').trim();\n if (existing) return existing;\n } catch { /* file doesn't exist */ }\n\n const id = crypto.randomBytes(8).toString('hex');\n try {\n fs.writeFileSync(sessionFile, id, 'utf8');\n } catch { /* ignore write errors */ }\n return id;\n }\n\n /**\n * Record a compression result.\n */\n record(command: string, originalTokens: number, compressedTokens: number, strategy: string, source: 'exec' | 'graph' | 'memory' | 'docs' | 'data' = 'exec'): void {\n const record: TokenSavingsRecord = {\n timestamp: Date.now(),\n command: command.slice(0, 200), // Truncate long commands\n originalTokens,\n compressedTokens,\n strategy,\n sessionId: this.sessionId,\n source,\n };\n\n try {\n fs.appendFileSync(this.filePath, JSON.stringify(record) + '\\n', 'utf8');\n this.maybeRotate();\n } catch {\n // Non-critical \u2014 don't crash on tracking failure\n }\n }\n\n /**\n * Record a graph tool saving.\n * @param toolName - The MCP tool that was called\n * @param outputTokens - Actual tokens returned by the tool\n * @param naiveCost - Estimated tokens the agent would have used without the tool\n */\n recordGraphSaving(toolName: string, outputTokens: number, naiveCost: number): void {\n this.record(toolName, naiveCost, outputTokens, `graph:${toolName}`, 'graph');\n }\n\n /**\n * Record a memory tool saving.\n * @param toolName - The MCP tool that was called\n * @param outputTokens - Actual tokens returned by the tool\n * @param naiveCost - Estimated tokens the agent would have used without memory\n */\n recordMemorySaving(toolName: string, outputTokens: number, naiveCost: number): void {\n this.record(toolName, naiveCost, outputTokens, `memory:${toolName}`, 'memory');\n }\n\n /**\n * Record a docs tool saving.\n * @param toolName - The MCP tool that was called\n * @param outputTokens - Actual tokens returned by the tool\n * @param naiveCost - Estimated tokens the agent would have used without docs indexing\n */\n recordDocsSaving(toolName: string, outputTokens: number, naiveCost: number): void {\n this.record(toolName, naiveCost, outputTokens, `docs:${toolName}`, 'docs');\n }\n\n /**\n * Record a data tool saving.\n * @param toolName - The MCP tool that was called\n * @param outputTokens - Actual tokens returned by the tool\n * @param naiveCost - Estimated tokens the agent would have used without data indexing\n */\n recordDataSaving(toolName: string, outputTokens: number, naiveCost: number): void {\n this.record(toolName, naiveCost, outputTokens, `data:${toolName}`, 'data');\n }\n\n /**\n * Get aggregated statistics for a time period.\n */\n getStats(period: 'session' | 'today' | 'week' | 'all'): GainStats {\n const records = this.loadRecords(period);\n\n if (records.length === 0) {\n return {\n totalCommands: 0,\n totalOriginal: 0,\n totalCompressed: 0,\n totalSaved: 0,\n savingsPercent: 0,\n byFamily: {},\n recentCommands: [],\n bySource: { exec: { count: 0, saved: 0 }, graph: { count: 0, saved: 0 }, memory: { count: 0, saved: 0 }, docs: { count: 0, saved: 0 }, data: { count: 0, saved: 0 } },\n };\n }\n\n let totalOriginal = 0;\n let totalCompressed = 0;\n const byFamily = new Map<string, { count: number; totalOriginal: number; totalCompressed: number }>();\n const bySource = { exec: { count: 0, saved: 0 }, graph: { count: 0, saved: 0 }, memory: { count: 0, saved: 0 }, docs: { count: 0, saved: 0 }, data: { count: 0, saved: 0 } };\n\n for (const r of records) {\n totalOriginal += r.originalTokens;\n totalCompressed += r.compressedTokens;\n\n const family = this.extractFamily(r.strategy);\n const existing = byFamily.get(family) || { count: 0, totalOriginal: 0, totalCompressed: 0 };\n existing.count++;\n existing.totalOriginal += r.originalTokens;\n existing.totalCompressed += r.compressedTokens;\n byFamily.set(family, existing);\n\n const source = (r.source || 'exec') as 'exec' | 'graph' | 'memory' | 'docs' | 'data';\n if (bySource[source]) {\n bySource[source].count++;\n bySource[source].saved += r.originalTokens - r.compressedTokens;\n } else {\n bySource.exec.count++;\n bySource.exec.saved += r.originalTokens - r.compressedTokens;\n }\n }\n\n const totalSaved = totalOriginal - totalCompressed;\n const savingsPercent = totalOriginal > 0 ? Math.round((totalSaved / totalOriginal) * 100) : 0;\n\n // Convert byFamily map to sorted object\n const byFamilyObj: Record<string, { count: number; savings: number }> = {};\n const sortedFamilies = [...byFamily.entries()].sort((a, b) => b[1].count - a[1].count);\n for (const [family, data] of sortedFamilies) {\n const familySaved = data.totalOriginal - data.totalCompressed;\n const familyPercent = data.totalOriginal > 0 ? Math.round((familySaved / data.totalOriginal) * 100) : 0;\n byFamilyObj[family] = { count: data.count, savings: familyPercent };\n }\n\n // Recent commands (last 10)\n const recentCommands = records.slice(-10).reverse().map(r => ({\n command: r.command,\n savings: r.originalTokens > 0\n ? Math.round(((r.originalTokens - r.compressedTokens) / r.originalTokens) * 100)\n : 0,\n timestamp: r.timestamp,\n source: r.source,\n }));\n\n return {\n totalCommands: records.length,\n totalOriginal,\n totalCompressed,\n totalSaved,\n savingsPercent,\n byFamily: byFamilyObj,\n recentCommands,\n bySource,\n };\n }\n\n /**\n * Get raw history for CLI display.\n */\n getHistory(limit: number = 20): TokenSavingsRecord[] {\n const records = this.loadRecords('all');\n return records.slice(-limit).reverse();\n }\n\n /**\n * Get daily breakdown for graph display.\n */\n getDailyBreakdown(days: number = 30): Array<{ date: string; commands: number; saved: number }> {\n const records = this.loadRecords('all');\n const now = Date.now();\n const cutoff = now - days * 24 * 60 * 60 * 1000;\n\n const byDay = new Map<string, { commands: number; saved: number }>();\n\n for (const r of records) {\n if (r.timestamp < cutoff) continue;\n const date = new Date(r.timestamp).toISOString().slice(0, 10);\n const existing = byDay.get(date) || { commands: 0, saved: 0 };\n existing.commands++;\n existing.saved += r.originalTokens - r.compressedTokens;\n byDay.set(date, existing);\n }\n\n return [...byDay.entries()]\n .sort((a, b) => a[0].localeCompare(b[0]))\n .map(([date, data]) => ({ date, ...data }));\n }\n\n // \u2500\u2500 Private \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n private loadRecords(period: 'session' | 'today' | 'week' | 'all'): TokenSavingsRecord[] {\n if (!fs.existsSync(this.filePath)) return [];\n\n let lines: string[];\n try {\n lines = fs.readFileSync(this.filePath, 'utf8').split('\\n').filter(l => l.trim());\n } catch {\n return [];\n }\n\n const records: TokenSavingsRecord[] = [];\n for (const line of lines) {\n try {\n records.push(JSON.parse(line));\n } catch {\n // Skip malformed lines\n }\n }\n\n // Filter by period\n const now = Date.now();\n switch (period) {\n case 'session':\n return records.filter(r => r.sessionId === this.sessionId);\n case 'today': {\n const startOfDay = new Date();\n startOfDay.setHours(0, 0, 0, 0);\n return records.filter(r => r.timestamp >= startOfDay.getTime());\n }\n case 'week':\n return records.filter(r => r.timestamp >= now - 7 * 24 * 60 * 60 * 1000);\n case 'all':\n return records;\n }\n }\n\n private extractFamily(strategy: string): string {\n // \"git:status:ultra\" \u2192 \"git\"\n // \"jest:failures\" \u2192 \"jest\"\n const colon = strategy.indexOf(':');\n return colon > 0 ? strategy.slice(0, colon) : strategy;\n }\n\n private maybeRotate(): void {\n try {\n const stat = fs.statSync(this.filePath);\n // Rotate if file exceeds ~500KB\n if (stat.size > 500 * 1024) {\n const lines = fs.readFileSync(this.filePath, 'utf8').split('\\n').filter(l => l.trim());\n if (lines.length > MAX_RECORDS) {\n // Keep last half\n const keep = lines.slice(-Math.floor(MAX_RECORDS / 2));\n fs.writeFileSync(this.filePath, keep.join('\\n') + '\\n', 'utf8');\n }\n }\n } catch {\n // Non-critical\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * KiroGraph Token Savings Tracker\n *\n * Records compression results to a local JSON file for analytics.\n * Uses a simple append-only JSON lines file to avoid SQLite dependency\n * in the compression module (keeps it lightweight and independent).\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as crypto from 'crypto';\nimport type { TokenSavingsRecord } from './types';\n\nconst TRACKER_DIR = '.kirograph';\nconst TRACKER_FILE = 'token-savings.jsonl';\nconst MAX_RECORDS = 5000; // Rotate after this many records\n\nexport interface GainStats {\n totalCommands: number;\n totalOriginal: number;\n totalCompressed: number;\n totalSaved: number;\n savingsPercent: number;\n byFamily: Record<string, { count: number; savings: number }>;\n recentCommands: Array<{ command: string; savings: number; timestamp: number; source?: string }>;\n /** Breakdown by source type */\n bySource: {\n exec: { count: number; saved: number };\n graph: { count: number; saved: number };\n memory: { count: number; saved: number };\n docs: { count: number; saved: number };\n data: { count: number; saved: number };\n };\n}\n\nexport class TokenTracker {\n private filePath: string;\n private sessionId: string;\n\n constructor(projectRoot: string) {\n const dir = path.join(projectRoot, TRACKER_DIR);\n fs.mkdirSync(dir, { recursive: true });\n this.filePath = path.join(dir, TRACKER_FILE);\n this.sessionId = this.getOrCreateSessionId(dir);\n }\n\n private getOrCreateSessionId(dir: string): string {\n const sessionFile = path.join(dir, '.session-id');\n try {\n const existing = fs.readFileSync(sessionFile, 'utf8').trim();\n if (existing) return existing;\n } catch { /* file doesn't exist */ }\n\n const id = crypto.randomBytes(8).toString('hex');\n try {\n fs.writeFileSync(sessionFile, id, 'utf8');\n } catch { /* ignore write errors */ }\n return id;\n }\n\n /**\n * Record a compression result.\n */\n record(command: string, originalTokens: number, compressedTokens: number, strategy: string, source: 'exec' | 'graph' | 'memory' | 'docs' | 'data' = 'exec'): void {\n const record: TokenSavingsRecord = {\n timestamp: Date.now(),\n command: command.slice(0, 200), // Truncate long commands\n originalTokens,\n compressedTokens,\n strategy,\n sessionId: this.sessionId,\n source,\n };\n\n try {\n fs.appendFileSync(this.filePath, JSON.stringify(record) + '\\n', 'utf8');\n this.maybeRotate();\n } catch {\n // Non-critical \u2014 don't crash on tracking failure\n }\n }\n\n /**\n * Record a graph tool saving.\n * @param toolName - The MCP tool that was called\n * @param outputTokens - Actual tokens returned by the tool\n * @param naiveCost - Estimated tokens the agent would have used without the tool\n */\n recordGraphSaving(toolName: string, outputTokens: number, naiveCost: number): void {\n this.record(toolName, naiveCost, outputTokens, `graph:${toolName}`, 'graph');\n }\n\n /**\n * Record a memory tool saving.\n * @param toolName - The MCP tool that was called\n * @param outputTokens - Actual tokens returned by the tool\n * @param naiveCost - Estimated tokens the agent would have used without memory\n */\n recordMemorySaving(toolName: string, outputTokens: number, naiveCost: number): void {\n this.record(toolName, naiveCost, outputTokens, `memory:${toolName}`, 'memory');\n }\n\n /**\n * Record a docs tool saving.\n * @param toolName - The MCP tool that was called\n * @param outputTokens - Actual tokens returned by the tool\n * @param naiveCost - Estimated tokens the agent would have used without docs indexing\n */\n recordDocsSaving(toolName: string, outputTokens: number, naiveCost: number): void {\n this.record(toolName, naiveCost, outputTokens, `docs:${toolName}`, 'docs');\n }\n\n /**\n * Record a data tool saving.\n * @param toolName - The MCP tool that was called\n * @param outputTokens - Actual tokens returned by the tool\n * @param naiveCost - Estimated tokens the agent would have used without data indexing\n */\n recordDataSaving(toolName: string, outputTokens: number, naiveCost: number): void {\n this.record(toolName, naiveCost, outputTokens, `data:${toolName}`, 'data');\n }\n\n /**\n * Get aggregated statistics for a time period.\n */\n getStats(period: 'session' | 'today' | 'week' | 'all'): GainStats {\n const records = this.loadRecords(period);\n\n if (records.length === 0) {\n return {\n totalCommands: 0,\n totalOriginal: 0,\n totalCompressed: 0,\n totalSaved: 0,\n savingsPercent: 0,\n byFamily: {},\n recentCommands: [],\n bySource: { exec: { count: 0, saved: 0 }, graph: { count: 0, saved: 0 }, memory: { count: 0, saved: 0 }, docs: { count: 0, saved: 0 }, data: { count: 0, saved: 0 } },\n };\n }\n\n let totalOriginal = 0;\n let totalCompressed = 0;\n const byFamily = new Map<string, { count: number; totalOriginal: number; totalCompressed: number }>();\n const bySource = { exec: { count: 0, saved: 0 }, graph: { count: 0, saved: 0 }, memory: { count: 0, saved: 0 }, docs: { count: 0, saved: 0 }, data: { count: 0, saved: 0 } };\n\n for (const r of records) {\n totalOriginal += r.originalTokens;\n totalCompressed += r.compressedTokens;\n\n const family = this.extractFamily(r.strategy);\n const existing = byFamily.get(family) || { count: 0, totalOriginal: 0, totalCompressed: 0 };\n existing.count++;\n existing.totalOriginal += r.originalTokens;\n existing.totalCompressed += r.compressedTokens;\n byFamily.set(family, existing);\n\n const source = (r.source || 'exec') as 'exec' | 'graph' | 'memory' | 'docs' | 'data';\n if (bySource[source]) {\n bySource[source].count++;\n bySource[source].saved += r.originalTokens - r.compressedTokens;\n } else {\n bySource.exec.count++;\n bySource.exec.saved += r.originalTokens - r.compressedTokens;\n }\n }\n\n const totalSaved = totalOriginal - totalCompressed;\n const savingsPercent = totalOriginal > 0 ? Math.round((totalSaved / totalOriginal) * 100) : 0;\n\n // Convert byFamily map to sorted object\n const byFamilyObj: Record<string, { count: number; savings: number }> = {};\n const sortedFamilies = [...byFamily.entries()].sort((a, b) => b[1].count - a[1].count);\n for (const [family, data] of sortedFamilies) {\n const familySaved = data.totalOriginal - data.totalCompressed;\n const familyPercent = data.totalOriginal > 0 ? Math.round((familySaved / data.totalOriginal) * 100) : 0;\n byFamilyObj[family] = { count: data.count, savings: familyPercent };\n }\n\n // Recent commands (last 10)\n const recentCommands = records.slice(-10).reverse().map(r => ({\n command: r.command,\n savings: r.originalTokens > 0\n ? Math.round(((r.originalTokens - r.compressedTokens) / r.originalTokens) * 100)\n : 0,\n timestamp: r.timestamp,\n source: r.source,\n }));\n\n return {\n totalCommands: records.length,\n totalOriginal,\n totalCompressed,\n totalSaved,\n savingsPercent,\n byFamily: byFamilyObj,\n recentCommands,\n bySource,\n };\n }\n\n /**\n * Get raw history for CLI display.\n */\n getHistory(limit: number = 20): TokenSavingsRecord[] {\n const records = this.loadRecords('all');\n return records.slice(-limit).reverse();\n }\n\n /**\n * Get daily breakdown for graph display.\n */\n getDailyBreakdown(days: number = 30): Array<{ date: string; commands: number; saved: number }> {\n const records = this.loadRecords('all');\n const now = Date.now();\n const cutoff = now - days * 24 * 60 * 60 * 1000;\n\n const byDay = new Map<string, { commands: number; saved: number }>();\n\n for (const r of records) {\n if (r.timestamp < cutoff) continue;\n const date = new Date(r.timestamp).toISOString().slice(0, 10);\n const existing = byDay.get(date) || { commands: 0, saved: 0 };\n existing.commands++;\n existing.saved += r.originalTokens - r.compressedTokens;\n byDay.set(date, existing);\n }\n\n return [...byDay.entries()]\n .sort((a, b) => a[0].localeCompare(b[0]))\n .map(([date, data]) => ({ date, ...data }));\n }\n\n // \u2500\u2500 Private \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n private loadRecords(period: 'session' | 'today' | 'week' | 'all'): TokenSavingsRecord[] {\n if (!fs.existsSync(this.filePath)) return [];\n\n let lines: string[];\n try {\n lines = fs.readFileSync(this.filePath, 'utf8').split('\\n').filter(l => l.trim());\n } catch {\n return [];\n }\n\n const records: TokenSavingsRecord[] = [];\n for (const line of lines) {\n try {\n records.push(JSON.parse(line));\n } catch {\n // Skip malformed lines\n }\n }\n\n // Filter by period\n const now = Date.now();\n switch (period) {\n case 'session':\n return records.filter(r => r.sessionId === this.sessionId);\n case 'today': {\n const startOfDay = new Date();\n startOfDay.setHours(0, 0, 0, 0);\n return records.filter(r => r.timestamp >= startOfDay.getTime());\n }\n case 'week':\n return records.filter(r => r.timestamp >= now - 7 * 24 * 60 * 60 * 1000);\n case 'all':\n return records;\n }\n }\n\n private extractFamily(strategy: string): string {\n // \"git:status:ultra\" \u2192 \"git\"\n // \"jest:failures\" \u2192 \"jest\"\n const colon = strategy.indexOf(':');\n return colon > 0 ? strategy.slice(0, colon) : strategy;\n }\n\n private maybeRotate(): void {\n try {\n const stat = fs.statSync(this.filePath);\n // Rotate if file exceeds ~500KB\n if (stat.size > 500 * 1024) {\n const lines = fs.readFileSync(this.filePath, 'utf8').split('\\n').filter(l => l.trim());\n if (lines.length > MAX_RECORDS) {\n // Keep last half\n const keep = lines.slice(-Math.floor(MAX_RECORDS / 2));\n fs.writeFileSync(this.filePath, keep.join('\\n') + '\\n', 'utf8');\n }\n }\n } catch {\n // Non-critical\n }\n }\n}\n\n\n// \u2500\u2500 Context Budget Governance \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface BudgetConfig {\n maxTokensPerSession: number;\n warnAt: number;\n throttleAt: number;\n}\n\nexport interface BudgetStatus {\n consumed: number;\n limit: number;\n remaining: number;\n utilization: number;\n warning: string | null;\n throttled: boolean;\n}\n\nconst DEFAULT_BUDGET: BudgetConfig = {\n maxTokensPerSession: 100_000,\n warnAt: 80_000,\n throttleAt: 95_000,\n};\n\n/**\n * Session-scoped context budget tracker.\n * Tracks cumulative token consumption and enforces budget limits.\n */\nexport class BudgetTracker {\n private static instances = new Map<string, BudgetTracker>();\n\n private consumed = 0;\n private config: BudgetConfig;\n private projectRoot: string;\n\n private constructor(projectRoot: string, config?: Partial<BudgetConfig>) {\n this.projectRoot = projectRoot;\n this.config = { ...DEFAULT_BUDGET, ...config };\n }\n\n static getInstance(projectRoot: string, config?: Partial<BudgetConfig>): BudgetTracker {\n const key = projectRoot;\n if (!BudgetTracker.instances.has(key)) {\n BudgetTracker.instances.set(key, new BudgetTracker(projectRoot, config));\n }\n const instance = BudgetTracker.instances.get(key)!;\n if (config) {\n instance.config = { ...DEFAULT_BUDGET, ...config };\n }\n return instance;\n }\n\n /**\n * Record tokens consumed by a tool response.\n */\n recordConsumption(tokens: number): void {\n this.consumed += tokens;\n }\n\n /**\n * Get current budget status.\n */\n getStatus(): BudgetStatus {\n const limit = this.config.maxTokensPerSession;\n const remaining = Math.max(0, limit - this.consumed);\n const utilization = limit > 0 ? Math.round((this.consumed / limit) * 100) : 0;\n\n let warning: string | null = null;\n if (limit > 0 && this.consumed >= this.config.throttleAt) {\n warning = `Budget nearly exhausted (${utilization}%). Responses will be truncated.`;\n } else if (limit > 0 && this.consumed >= this.config.warnAt) {\n warning = `Approaching budget limit (${utilization}%). Consider using compact read modes.`;\n }\n\n return {\n consumed: this.consumed,\n limit,\n remaining,\n utilization,\n warning,\n throttled: limit > 0 && this.consumed >= this.config.throttleAt,\n };\n }\n\n /**\n * Check if the budget is throttled (responses should be truncated).\n */\n isThrottled(): boolean {\n return this.config.maxTokensPerSession > 0 && this.consumed >= this.config.throttleAt;\n }\n\n /**\n * Check if a warning should be appended to responses.\n */\n shouldWarn(): boolean {\n return this.config.maxTokensPerSession > 0 && this.consumed >= this.config.warnAt;\n }\n\n /**\n * Reset the budget counters.\n */\n reset(): void {\n this.consumed = 0;\n }\n\n /**\n * Update budget configuration.\n */\n updateConfig(config: Partial<BudgetConfig>): void {\n this.config = { ...this.config, ...config };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KiroGraph Shell Compression — Type Definitions
|
|
3
|
+
*/
|
|
4
|
+
export interface CompressionResult {
|
|
5
|
+
/** Compressed output text */
|
|
6
|
+
output: string;
|
|
7
|
+
/** Estimated original token count */
|
|
8
|
+
originalTokens: number;
|
|
9
|
+
/** Estimated compressed token count */
|
|
10
|
+
compressedTokens: number;
|
|
11
|
+
/** Percentage saved (0-100) */
|
|
12
|
+
savings: number;
|
|
13
|
+
/** Which strategy was applied */
|
|
14
|
+
strategy: string;
|
|
15
|
+
/** The detected command family */
|
|
16
|
+
commandFamily: string;
|
|
17
|
+
}
|
|
18
|
+
export interface CompressorOptions {
|
|
19
|
+
/** Compression aggressiveness */
|
|
20
|
+
level: 'normal' | 'aggressive' | 'ultra';
|
|
21
|
+
/** Max output tokens (truncate beyond this) */
|
|
22
|
+
maxOutputTokens?: number;
|
|
23
|
+
/** Never compress error details (default: true) */
|
|
24
|
+
preserveErrors?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface FilterResult {
|
|
27
|
+
output: string;
|
|
28
|
+
strategy: string;
|
|
29
|
+
}
|
|
30
|
+
export interface CommandFilter {
|
|
31
|
+
/** Name of this filter family */
|
|
32
|
+
name: string;
|
|
33
|
+
/** Test if this filter handles the given command */
|
|
34
|
+
matches(command: string): boolean;
|
|
35
|
+
/** Apply the filter to raw output */
|
|
36
|
+
filter(command: string, rawOutput: string, level: CompressorOptions['level']): FilterResult;
|
|
37
|
+
}
|
|
38
|
+
export interface TokenSavingsRecord {
|
|
39
|
+
id?: number;
|
|
40
|
+
timestamp: number;
|
|
41
|
+
command: string;
|
|
42
|
+
originalTokens: number;
|
|
43
|
+
compressedTokens: number;
|
|
44
|
+
strategy: string;
|
|
45
|
+
sessionId: string;
|
|
46
|
+
/** Source of the saving: 'exec' for compression, 'graph' for MCP graph tools, 'memory' for memory tools, 'docs' for documentation tools, 'data' for data tools */
|
|
47
|
+
source?: 'exec' | 'graph' | 'memory' | 'docs' | 'data';
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/compression/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,KAAK,EAAE,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IACzC,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,qCAAqC;IACrC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC;CAC7F;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,kKAAkK;IAClK,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;CACxD"}
|
package/dist/config.d.ts
CHANGED
|
@@ -31,6 +31,96 @@ export interface KiroGraphConfig {
|
|
|
31
31
|
* Example: { "api": ["src/routes/**", "src/controllers/**"] }
|
|
32
32
|
*/
|
|
33
33
|
architectureLayers?: Record<string, string[]>;
|
|
34
|
+
/** Agent communication style injected at agentSpawn. Default: 'off'. */
|
|
35
|
+
cavemanMode: 'off' | 'lite' | 'full' | 'ultra';
|
|
36
|
+
/** Shell compression level for kirograph_exec. 'off' disables the hook/steering. Default: 'normal'. */
|
|
37
|
+
shellCompressionLevel: 'off' | 'normal' | 'aggressive' | 'ultra';
|
|
38
|
+
/**
|
|
39
|
+
* Number of pending (unindexed) files above which kirograph_status warns the agent.
|
|
40
|
+
* Set to 0 to disable the warning. Default: 10.
|
|
41
|
+
*/
|
|
42
|
+
syncWarningThreshold: number;
|
|
43
|
+
/** Enable persistent cross-session memory. Default: false. */
|
|
44
|
+
enableMemory: boolean;
|
|
45
|
+
/** FTS/vector blend for memory search: 0 = FTS only, 1 = vector only. Default: 0.5. */
|
|
46
|
+
memorySearchAlpha: number;
|
|
47
|
+
/** Store uncompressed originals when caveman is on. Default: false. */
|
|
48
|
+
memoryKeepRaw: boolean;
|
|
49
|
+
/** Auto-prune threshold (max observations). 0 = no limit. Default: 10000. */
|
|
50
|
+
memoryMaxObservations: number;
|
|
51
|
+
/** Seconds of inactivity before auto-closing a session. Default: 7200. */
|
|
52
|
+
memorySessionTimeout: number;
|
|
53
|
+
/** Max observations shown in kirograph_context. Default: 3. */
|
|
54
|
+
memoryContextLimit: number;
|
|
55
|
+
/** Min relevance score to include memory in context. Default: 0.3. */
|
|
56
|
+
memoryContextThreshold: number;
|
|
57
|
+
/** Glob patterns for paths to never capture in memory. Default: []. */
|
|
58
|
+
memoryExcludePatterns: string[];
|
|
59
|
+
/** Enable documentation indexing and navigation. Default: false. */
|
|
60
|
+
enableDocs: boolean;
|
|
61
|
+
/** Glob patterns for documentation files to include. */
|
|
62
|
+
docsInclude: string[];
|
|
63
|
+
/** Glob patterns for documentation files to exclude. */
|
|
64
|
+
docsExclude: string[];
|
|
65
|
+
/** Enable auto-linking of doc sections to code symbols. Default: true. */
|
|
66
|
+
docsLinkCode: boolean;
|
|
67
|
+
/** Max doc sections to include in kirograph_context. 0 = disabled. Default: 0. */
|
|
68
|
+
docsContextLimit: number;
|
|
69
|
+
/** Min relevance score to include a doc section in context. Default: 0.3. */
|
|
70
|
+
docsContextThreshold: number;
|
|
71
|
+
/** Max file size for doc files (bytes). Default: 1MB. */
|
|
72
|
+
docsMaxFileSize: number;
|
|
73
|
+
/** Summarization strategy. Default: 'first-sentence'. */
|
|
74
|
+
docsSummarization: 'embedding' | 'first-sentence' | 'off';
|
|
75
|
+
/** Enable tabular data indexing and querying. Default: false. */
|
|
76
|
+
enableData: boolean;
|
|
77
|
+
/** Glob patterns for data files to include. */
|
|
78
|
+
dataInclude: string[];
|
|
79
|
+
/** Glob patterns for data files to exclude. */
|
|
80
|
+
dataExclude: string[];
|
|
81
|
+
/** Enable auto-linking of data files to code symbols. Default: true. */
|
|
82
|
+
dataLinkCode: boolean;
|
|
83
|
+
/** Max datasets to include in kirograph_context. 0 = disabled. Default: 0. */
|
|
84
|
+
dataContextLimit: number;
|
|
85
|
+
/** Max file size for data files (bytes). Default: 50MB. */
|
|
86
|
+
dataMaxFileSize: number;
|
|
87
|
+
/** Max rows to index per file. Default: 1,000,000. */
|
|
88
|
+
dataMaxRows: number;
|
|
89
|
+
/** Max rows returned per query. Default: 500. */
|
|
90
|
+
dataQueryLimit: number;
|
|
91
|
+
/** Max token budget per response. Default: 8000. */
|
|
92
|
+
dataMaxResponseTokens: number;
|
|
93
|
+
/** Enable security analysis (dependency scanning + vulnerability detection). Default: false. */
|
|
94
|
+
enableSecurity: boolean;
|
|
95
|
+
/** Vulnerability databases to query. Default: ['OSV']. */
|
|
96
|
+
securityDatabases: string[];
|
|
97
|
+
/** Enable AST-level structural pattern matching (SAST) during indexing. Default: false. */
|
|
98
|
+
enablePatterns: boolean;
|
|
99
|
+
/** Path to a directory of user-supplied YAML rule files. Merged with bundled library (user rules win on id conflict). Default: undefined. */
|
|
100
|
+
patternLibraryPath: string | undefined;
|
|
101
|
+
/** Minimum severity level for storing pattern matches during index-time analysis. Default: 'low'. */
|
|
102
|
+
patternSeverityThreshold: 'critical' | 'high' | 'medium' | 'low';
|
|
103
|
+
/** Auto-run vulnerability enrichment after manifest parsing. Default: true. */
|
|
104
|
+
securityAutoEnrich: boolean;
|
|
105
|
+
/** Max age in days for vulnerability data before showing a staleness warning. Default: 7. */
|
|
106
|
+
securityEnrichMaxAgeDays: number;
|
|
107
|
+
/**
|
|
108
|
+
* License policy for dependency compliance.
|
|
109
|
+
* deny: licenses to block (build fails / command exits non-zero).
|
|
110
|
+
* warn: licenses to flag as warnings.
|
|
111
|
+
* Patterns support wildcards: GPL-* matches GPL-2.0, GPL-3.0, etc.
|
|
112
|
+
* Default: { deny: [], warn: [] }.
|
|
113
|
+
*/
|
|
114
|
+
securityLicensePolicy: {
|
|
115
|
+
deny: string[];
|
|
116
|
+
warn: string[];
|
|
117
|
+
};
|
|
118
|
+
/** Context budget governance settings. */
|
|
119
|
+
contextBudget?: {
|
|
120
|
+
maxTokensPerSession: number;
|
|
121
|
+
warnAt: number;
|
|
122
|
+
throttleAt: number;
|
|
123
|
+
};
|
|
34
124
|
}
|
|
35
125
|
/**
|
|
36
126
|
* Returns false if the pattern is potentially dangerous (ReDoS risk) or too long.
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IAExB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,QAAQ,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;IAClG,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACjD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,sFAAsF;IACtF,kBAAkB,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|