kirograph 0.19.0 → 0.20.1
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/README.md +10 -8
- package/dist/architecture/layers/dart.d.ts +10 -0
- package/dist/architecture/layers/dart.d.ts.map +1 -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/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/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 +7 -0
- package/dist/bin/commands/attack-surface.js.map +2 -2
- package/dist/bin/commands/benchmark.d.ts +9 -0
- package/dist/bin/commands/benchmark.d.ts.map +1 -0
- package/dist/bin/commands/budget.d.ts +6 -0
- package/dist/bin/commands/budget.d.ts.map +1 -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/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/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/flows.d.ts +3 -0
- package/dist/bin/commands/flows.d.ts.map +1 -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 +20 -3
- 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 +3 -3
- 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/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/read.d.ts +6 -0
- package/dist/bin/commands/read.d.ts.map +1 -0
- package/dist/bin/commands/refactor.d.ts +3 -0
- package/dist/bin/commands/refactor.d.ts.map +1 -0
- package/dist/bin/commands/remediation.d.ts +3 -0
- package/dist/bin/commands/remediation.d.ts.map +1 -0
- package/dist/bin/commands/sbom.d.ts +3 -0
- package/dist/bin/commands/sbom.d.ts.map +1 -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-export.d.ts +2 -0
- package/dist/bin/commands/security-export.d.ts.map +1 -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-secrets.d.ts +3 -0
- package/dist/bin/commands/security-secrets.d.ts.map +1 -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 +15 -0
- package/dist/bin/commands/security.js.map +2 -2
- 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/status.d.ts.map +1 -1
- package/dist/bin/commands/status.js +27 -0
- 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/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/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/vuln-suppress.d.ts +3 -0
- package/dist/bin/commands/vuln-suppress.d.ts.map +1 -0
- package/dist/bin/commands/vulns.d.ts +3 -0
- package/dist/bin/commands/vulns.d.ts.map +1 -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/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 +6 -2
- 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 +2 -1
- 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 +74 -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/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 +67 -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 +15 -1
- 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 +81 -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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- package/dist/bin/installer/targets/copilot-cli.js.map +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 -2
- 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.map +1 -1
- 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 +2 -2
- package/dist/bin/installer/targets/qoder.js.map +2 -2
- 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 +2 -2
- package/dist/bin/installer/targets/qwen.js.map +2 -2
- 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 +3 -3
- 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 +2 -2
- package/dist/bin/installer/targets/windsurf.js.map +2 -2
- package/dist/bin/kirograph.js +3 -1
- 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/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 +55 -1
- 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 +42 -0
- 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 +19 -0
- package/dist/db/database.js.map +2 -2
- package/dist/db/patterns-schema.sql +23 -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 +26 -3
- 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 +1 -0
- package/dist/extraction/grammars.js.map +2 -2
- package/dist/extraction/languages.d.ts.map +1 -1
- package/dist/extraction/languages.js +5 -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/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/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/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/flows.d.ts +55 -0
- package/dist/graph/flows.d.ts.map +1 -0
- package/dist/graph/refactor.d.ts +43 -0
- package/dist/graph/refactor.d.ts.map +1 -0
- package/dist/index.d.ts +36 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/mcp/cache.d.ts +69 -0
- package/dist/mcp/cache.d.ts.map +1 -0
- package/dist/mcp/read-modes.d.ts +31 -0
- package/dist/mcp/read-modes.d.ts.map +1 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +15 -2
- 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 +4 -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 +397 -0
- package/dist/mcp/tools.js.map +2 -2
- 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 +38 -0
- 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/code-eval-elixir.yaml +11 -0
- package/dist/patterns/library/command-injection-c.yaml +11 -0
- package/dist/patterns/library/command-injection-go.yaml +29 -0
- package/dist/patterns/library/command-injection-kotlin.yaml +10 -0
- package/dist/patterns/library/command-injection-php.yaml +11 -0
- package/dist/patterns/library/command-injection-ruby.yaml +11 -0
- package/dist/patterns/library/command-injection-rust.yaml +11 -0
- package/dist/patterns/library/dangerous-eval-bash.yaml +11 -0
- package/dist/patterns/library/dangerous-eval-js.yaml +14 -0
- package/dist/patterns/library/dangerous-eval-php.yaml +11 -0
- package/dist/patterns/library/dangerous-eval-ruby.yaml +11 -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/dynamic-load-lua.yaml +10 -0
- package/dist/patterns/library/os-cmd-elixir.yaml +16 -0
- package/dist/patterns/library/os-execute-lua.yaml +10 -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/process-launch-swift.yaml +11 -0
- package/dist/patterns/library/process-run-dart.yaml +15 -0
- package/dist/patterns/library/prototype-pollution-js.yaml +12 -0
- package/dist/patterns/library/source-injection-bash.yaml +11 -0
- package/dist/patterns/library/sql-injection-concat-js.yaml +12 -0
- package/dist/patterns/library/sql-injection-dart.yaml +9 -0
- package/dist/patterns/library/sql-injection-java.yaml +13 -0
- package/dist/patterns/library/sql-injection-kotlin.yaml +11 -0
- package/dist/patterns/library/sql-injection-php.yaml +9 -0
- package/dist/patterns/library/sql-injection-py.yaml +12 -0
- package/dist/patterns/library/sql-injection-swift.yaml +11 -0
- package/dist/patterns/library/sql-injection-template-js.yaml +13 -0
- package/dist/patterns/library/subshell-injection-ruby.yaml +8 -0
- package/dist/patterns/library/unsafe-block-rust.yaml +8 -0
- package/dist/patterns/library/unsafe-string-c.yaml +11 -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 +295 -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/expo-modules.d.ts +10 -0
- package/dist/resolution/bridges/expo-modules.d.ts.map +1 -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/index.d.ts +40 -0
- package/dist/resolution/bridges/index.d.ts.map +1 -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-views.d.ts +13 -0
- package/dist/resolution/bridges/native-views.d.ts.map +1 -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/swift-objc.d.ts +14 -0
- package/dist/resolution/bridges/swift-objc.d.ts.map +1 -0
- package/dist/resolution/bridges/turbomodules.d.ts +10 -0
- package/dist/resolution/bridges/turbomodules.d.ts.map +1 -0
- package/dist/resolution/index.d.ts +28 -3
- package/dist/resolution/index.d.ts.map +1 -1
- 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 +43 -1
- package/dist/security/attack-surface.js.map +2 -2
- package/dist/security/context-warnings.d.ts +40 -0
- package/dist/security/context-warnings.d.ts.map +1 -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 +65 -7
- package/dist/security/data-flows.js.map +2 -2
- package/dist/security/dep-confusion.d.ts +23 -0
- package/dist/security/dep-confusion.d.ts.map +1 -0
- package/dist/security/errors.d.ts +16 -0
- package/dist/security/errors.d.ts.map +1 -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/sbom.d.ts +33 -0
- package/dist/security/export/sbom.d.ts.map +1 -0
- package/dist/security/export/serialization.d.ts +62 -0
- package/dist/security/export/serialization.d.ts.map +1 -0
- package/dist/security/export/vex.d.ts +58 -0
- package/dist/security/export/vex.d.ts.map +1 -0
- package/dist/security/index.d.ts +21 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/integrator.d.ts +63 -0
- package/dist/security/integrator.d.ts.map +1 -0
- package/dist/security/integrator.js +8 -8
- package/dist/security/integrator.js.map +2 -2
- package/dist/security/license.d.ts +33 -0
- package/dist/security/license.d.ts.map +1 -0
- package/dist/security/manifest/adapter.d.ts +92 -0
- package/dist/security/manifest/adapter.d.ts.map +1 -0
- package/dist/security/manifest/parser.d.ts +73 -0
- package/dist/security/manifest/parser.d.ts.map +1 -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/composer.d.ts +11 -0
- package/dist/security/manifest/plugins/composer.d.ts.map +1 -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/gradle.d.ts +12 -0
- package/dist/security/manifest/plugins/gradle.d.ts.map +1 -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/maven.d.ts +11 -0
- package/dist/security/manifest/plugins/maven.d.ts.map +1 -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/nuget.d.ts +12 -0
- package/dist/security/manifest/plugins/nuget.d.ts.map +1 -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/pubspec.d.ts +11 -0
- package/dist/security/manifest/plugins/pubspec.d.ts.map +1 -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/rubygems.d.ts +11 -0
- package/dist/security/manifest/plugins/rubygems.d.ts.map +1 -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/owasp.d.ts +16 -0
- package/dist/security/owasp.d.ts.map +1 -0
- package/dist/security/pipeline.d.ts +37 -0
- package/dist/security/pipeline.d.ts.map +1 -0
- package/dist/security/reachability.d.ts +67 -0
- package/dist/security/reachability.d.ts.map +1 -0
- package/dist/security/remediation.d.ts +51 -0
- package/dist/security/remediation.d.ts.map +1 -0
- package/dist/security/secrets.d.ts +38 -0
- package/dist/security/secrets.d.ts.map +1 -0
- package/dist/security/staleness.d.ts +43 -0
- package/dist/security/staleness.d.ts.map +1 -0
- package/dist/security/supply-chain.d.ts +34 -0
- package/dist/security/supply-chain.d.ts.map +1 -0
- package/dist/security/suppressions.d.ts +18 -0
- package/dist/security/suppressions.d.ts.map +1 -0
- package/dist/security/types.d.ts +144 -0
- package/dist/security/types.d.ts.map +1 -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.map +2 -2
- 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/index.d.ts +6 -0
- package/dist/security/vuln/index.d.ts.map +1 -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/types.d.ts +29 -0
- package/dist/security/vuln/types.d.ts.map +1 -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/turboquant-index.js +261 -0
- package/dist/vectors/turboquant-index.js.map +7 -0
- 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 +24 -2
- package/dist/security/context-warnings.test.js +0 -300
- package/dist/security/context-warnings.test.js.map +0 -7
- package/dist/security/export/fix-suggestions.test.js +0 -74
- package/dist/security/export/fix-suggestions.test.js.map +0 -7
- package/dist/security/export/sbom.test.js +0 -288
- package/dist/security/export/sbom.test.js.map +0 -7
- package/dist/security/export/serialization.test.js +0 -310
- package/dist/security/export/serialization.test.js.map +0 -7
- package/dist/security/export/vex.test.js +0 -278
- package/dist/security/export/vex.test.js.map +0 -7
- package/dist/security/integrator-transitives.test.js +0 -359
- package/dist/security/integrator-transitives.test.js.map +0 -7
- package/dist/security/integrator.test.js +0 -237
- package/dist/security/integrator.test.js.map +0 -7
- package/dist/security/manifest/adapter.test.js +0 -272
- package/dist/security/manifest/adapter.test.js.map +0 -7
- package/dist/security/manifest/parser.test.js +0 -110
- package/dist/security/manifest/parser.test.js.map +0 -7
- package/dist/security/manifest/plugins/cargo.test.js +0 -304
- package/dist/security/manifest/plugins/cargo.test.js.map +0 -7
- package/dist/security/manifest/plugins/go.test.js +0 -341
- package/dist/security/manifest/plugins/go.test.js.map +0 -7
- package/dist/security/manifest/plugins/maven.test.js +0 -389
- package/dist/security/manifest/plugins/maven.test.js.map +0 -7
- package/dist/security/manifest/plugins/npm.test.js +0 -298
- package/dist/security/manifest/plugins/npm.test.js.map +0 -7
- package/dist/security/manifest/plugins/pip.test.js +0 -208
- package/dist/security/manifest/plugins/pip.test.js.map +0 -7
- package/dist/security/reachability.test.js +0 -394
- package/dist/security/reachability.test.js.map +0 -7
- package/dist/security/vuln/client.test.js +0 -288
- package/dist/security/vuln/client.test.js.map +0 -7
- package/dist/security/vuln/osv-adapter.test.js +0 -391
- package/dist/security/vuln/osv-adapter.test.js.map +0 -7
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/bin/commands/pattern.ts"],
|
|
4
|
+
"sourcesContent": ["import { Command } from 'commander';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { loadConfig } from '../../config';\nimport { dim, reset, violet, bold, section } from '../ui';\n\n// \u2500\u2500 OWASP Categories \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\nconst OWASP_CATEGORIES: Record<string, string> = {\n A01: 'Broken Access Control',\n A02: 'Cryptographic Failures',\n A03: 'Injection',\n A04: 'Insecure Design',\n A05: 'Security Misconfiguration',\n A06: 'Vulnerable Components',\n A07: 'Auth Failures',\n A08: 'Integrity Failures',\n A09: 'Logging Failures',\n A10: 'SSRF',\n};\n\nconst SEVERITY_LEVELS = ['critical', 'high', 'medium', 'low'] as const;\ntype SeverityLevel = (typeof SEVERITY_LEVELS)[number];\n\nconst SEVERITY_ORDER: Record<SeverityLevel, number> = {\n critical: 3, high: 2, medium: 1, low: 0,\n};\n\nfunction severityColor(severity: string): string {\n if (severity === 'critical') return '\\x1b[31m';\n if (severity === 'high') return '\\x1b[31m';\n if (severity === 'medium') return '\\x1b[33m';\n return dim;\n}\n\nfunction resolveLibraryPath(): string {\n // In development: src/patterns/library; in dist: dist/patterns/library\n const devPath = path.join(__dirname, '../../patterns/library');\n if (fs.existsSync(devPath)) return devPath;\n const distPath = path.join(__dirname, '../patterns/library');\n if (fs.existsSync(distPath)) return distPath;\n return devPath;\n}\n\nexport function register(program: Command): void {\n program\n .command('pattern [pattern] [projectPath]')\n .description('AST structural search: live pattern search or library rule runner')\n .option('--lang <language>', 'Filter to a specific language (js, ts, python, go, rust, java, ...)')\n .option('--severity <level>', 'Filter: critical, high, medium, low')\n .option('--format <fmt>', 'Output format: text|json (default: text)', 'text')\n .option('--list', 'Show all library rules (no @ast-grep/napi required)')\n .option('--library <id>', 'Run a specific library rule by ID')\n .option('--fix', 'Apply the rule\\'s fix template to matched files (requires --library <id>)')\n .option('--coverage', 'Show OWASP Top 10 coverage report')\n .option('--save-baseline [label]', 'Save current pattern_matches as a baseline for diffing')\n .option('--diff [label]', 'Diff current pattern_matches against a saved baseline')\n .action(async (\n patternArg: string | undefined,\n projectPathArg: string | undefined,\n opts: {\n lang?: string;\n severity?: string;\n format: string;\n list?: boolean;\n library?: string;\n fix?: boolean;\n coverage?: boolean;\n saveBaseline?: string | boolean;\n diff?: string | boolean;\n },\n ) => {\n const target = path.resolve(projectPathArg ?? process.cwd());\n\n // \u2500\u2500 --list mode \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 if (opts.list) {\n const { PatternLibraryLoader } = await Promise.resolve().then(() => require('../../patterns/loader.js'));\n const loader = new PatternLibraryLoader();\n const config = await loadConfig(target).catch(() => null);\n const libraryPath = resolveLibraryPath();\n const customPath = config?.patternLibraryPath;\n const rules = loader.load(libraryPath, customPath);\n\n if (opts.format === 'json') {\n process.stdout.write(JSON.stringify(rules, null, 2) + '\\n');\n return;\n }\n\n if (rules.length === 0) {\n console.log(`\\n ${dim}No pattern rules found.${reset}\\n`);\n return;\n }\n\n console.log(`\\n ${section('Pattern Library')} (${rules.length} rules)\\n`);\n\n // Determine column widths\n const maxSev = Math.max(...rules.map(r => r.severity.length), 8);\n const maxOWASP = Math.max(...rules.map(r => r.owaspCategory.length), 5);\n const maxId = Math.max(...rules.map(r => r.id.length), 10);\n\n for (const rule of rules) {\n const sc = severityColor(rule.severity);\n const sev = rule.severity.padEnd(maxSev);\n const owasp = rule.owaspCategory.padEnd(maxOWASP);\n const id = rule.id.padEnd(maxId);\n console.log(` ${sc}${sev}${reset} ${dim}${owasp}${reset} ${violet}${bold}${id}${reset} ${dim}${rule.description}${reset}`);\n }\n\n console.log();\n return;\n }\n\n // \u2500\u2500 --coverage mode \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 if (opts.coverage) {\n const { PatternLibraryLoader } = await Promise.resolve().then(() => require('../../patterns/loader.js'));\n const loader = new PatternLibraryLoader();\n const cfgCov = await loadConfig(target).catch(() => null);\n const libraryPath = resolveLibraryPath();\n const customPath = cfgCov?.patternLibraryPath;\n const rules = loader.load(libraryPath, customPath);\n\n // Count rules per OWASP category (normalise e.g. \"A03 - Injection\" \u2192 \"A03\")\n const ruleCounts: Record<string, number> = {};\n for (const cat of Object.keys(OWASP_CATEGORIES)) ruleCounts[cat] = 0;\n for (const rule of rules) {\n const cat = rule.owaspCategory.trim().split(/[\\s-]/)[0].toUpperCase();\n if (cat in ruleCounts) ruleCounts[cat]++;\n }\n\n // Try to get match/file data from DB if initialized and enablePatterns\n type OwaspRow = { owasp_category: string; matches: number; files: number };\n let dbData: Record<string, { matches: number; files: number }> | null = null;\n const KiroGraphCov = (await Promise.resolve().then(() => require('../../index.js'))).default;\n if (cfgCov?.enablePatterns && KiroGraphCov.isInitialized(target)) {\n try {\n const cg = await KiroGraphCov.open(target);\n const rawDb = cg.getDatabase().getRawDb();\n const tableExists = rawDb.get(\n \"SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'\",\n ) as { name: string } | undefined;\n if (tableExists) {\n const rows = rawDb.all(\n `SELECT owasp_category, COUNT(*) as matches, COUNT(DISTINCT file_path) as files\n FROM pattern_matches\n GROUP BY owasp_category`,\n ) as OwaspRow[];\n dbData = {};\n for (const row of rows) {\n const cat = row.owasp_category.trim().split(/[\\s-]/)[0].toUpperCase();\n if (cat) dbData[cat] = { matches: row.matches, files: row.files };\n }\n }\n cg.close();\n } catch {\n // non-fatal \u2014 show rule counts only\n }\n }\n\n if (opts.format === 'json') {\n const categories: Record<string, { rules: number; matches: number | null; files: number | null }> = {};\n for (const cat of Object.keys(OWASP_CATEGORIES)) {\n categories[cat] = {\n rules: ruleCounts[cat] ?? 0,\n matches: dbData ? (dbData[cat]?.matches ?? 0) : null,\n files: dbData ? (dbData[cat]?.files ?? 0) : null,\n };\n }\n const covered = Object.values(categories).filter(c => c.rules > 0).length;\n process.stdout.write(JSON.stringify({ categories, covered, total: 10 }, null, 2) + '\\n');\n return;\n }\n\n const BAR_WIDTH = 10;\n const sorted = Object.keys(OWASP_CATEGORIES).sort((a, b) => (ruleCounts[b] ?? 0) - (ruleCounts[a] ?? 0));\n const maxNameLen = Math.max(...Object.values(OWASP_CATEGORIES).map(n => n.length));\n\n const isInitialized = KiroGraphCov.isInitialized(target);\n const hasEnablePatterns = !!cfgCov?.enablePatterns;\n let coverageSubtitle: string;\n if (!isInitialized || !hasEnablePatterns) {\n coverageSubtitle = ` ${dim}(rules only \u2014 no match data)${reset}`;\n } else if (!dbData) {\n coverageSubtitle = ` ${dim}(no match data yet \u2014 run kirograph index)${reset}`;\n } else {\n coverageSubtitle = '';\n }\n\n console.log(`\\n ${section('OWASP Top 10 Coverage')}${coverageSubtitle}`);\n if (!isInitialized || !hasEnablePatterns) {\n console.log(` ${dim}Run kirograph index with enablePatterns: true to see actual findings.${reset}`);\n }\n console.log();\n\n for (const cat of sorted) {\n const name = OWASP_CATEGORIES[cat];\n const count = ruleCounts[cat] ?? 0;\n const filledBars = Math.min(count, BAR_WIDTH);\n const bar = count > 0\n ? `${violet}${'\u2588'.repeat(filledBars)}${dim}${'\u2591'.repeat(BAR_WIDTH - filledBars)}${reset}`\n : `${dim}${'\u2591'.repeat(BAR_WIDTH)}${reset}`;\n const catLabel = count > 0\n ? `${violet}${bold}${cat}${reset}`\n : `\\x1b[31m${cat}${reset}`;\n const nameStr = name.padEnd(maxNameLen);\n const ruleStr = count === 1 ? '1 rule ' : `${count} rules`;\n const ruleLabel = count > 0 ? `${violet}${bold}${ruleStr}${reset}` : `${dim}${ruleStr}${reset}`;\n\n if (count === 0) {\n console.log(` ${catLabel} ${dim}${nameStr}${reset} ${bar} ${dim}${ruleStr} \u00B7 \u2014 no coverage${reset}`);\n } else if (dbData) {\n const m = dbData[cat]?.matches ?? 0;\n const f = dbData[cat]?.files ?? 0;\n console.log(` ${catLabel} ${dim}${nameStr}${reset} ${bar} ${ruleLabel} \u00B7 ${violet}${m} match${m !== 1 ? 'es' : ''}${reset} ${dim}\u00B7 ${f} file${f !== 1 ? 's' : ''}${reset}`);\n } else {\n console.log(` ${catLabel} ${dim}${nameStr}${reset} ${bar} ${ruleLabel}`);\n }\n }\n\n const covered = Object.values(ruleCounts).filter(n => n > 0).length;\n console.log();\n console.log(` ${dim}Coverage: ${reset}${violet}${bold}${covered}/10${reset}${dim} OWASP categories have at least one rule.${reset}`);\n if (covered < 10) {\n console.log(` ${dim}Add custom rules via patternLibraryPath to improve coverage.${reset}`);\n }\n console.log();\n return;\n }\n\n // \u2500\u2500 --save-baseline mode \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 if (opts.saveBaseline !== undefined) {\n const KiroGraphSB = (await Promise.resolve().then(() => require('../../index.js'))).default;\n if (!KiroGraphSB.isInitialized(target)) {\n console.error(`\\n \\x1b[31m\u2716 KiroGraph not initialized. Run: kirograph init${reset}\\n`);\n process.exit(1);\n }\n const configSB = await loadConfig(target).catch(() => null);\n if (!(configSB as any)?.enablePatterns) {\n console.error(`\\n \\x1b[33m\u26A0 kirograph pattern --save-baseline requires enablePatterns: true.${reset}`);\n console.error(` ${dim}Enable it in .kirograph/config.json:${reset} ${violet}${bold}\"enablePatterns\": true${reset}`);\n console.error(` ${dim}Then re-run:${reset} ${violet}${bold}kirograph index${reset}\\n`);\n process.exit(1);\n }\n const sbLabel = typeof opts.saveBaseline === 'string' && opts.saveBaseline\n ? opts.saveBaseline\n : 'default';\n\n const cg = await KiroGraphSB.open(target);\n const rawDb = cg.getDatabase().getRawDb();\n\n const tableExists = rawDb.get(\n \"SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'\",\n ) as { name: string } | undefined;\n\n if (!tableExists) {\n cg.close();\n console.error(`\\n \\x1b[31m\u2716 pattern_matches table not found. Run: kirograph index with enablePatterns: true${reset}\\n`);\n process.exit(1);\n }\n\n type SBCountRow = { pattern_id: string; cnt: number };\n const rows = rawDb.all(\n 'SELECT pattern_id, COUNT(*) as cnt FROM pattern_matches GROUP BY pattern_id',\n ) as SBCountRow[];\n\n const counts: Record<string, number> = {};\n let totalMatches = 0;\n for (const row of rows) {\n counts[row.pattern_id] = row.cnt;\n totalMatches += row.cnt;\n }\n cg.close();\n\n const kirographDir = path.join(target, '.kirograph');\n const baselineFile = path.join(kirographDir, `pattern-baseline-${sbLabel}.json`);\n const data = { savedAt: new Date().toISOString(), counts, totalMatches };\n fs.writeFileSync(baselineFile, JSON.stringify(data, null, 2), 'utf8');\n\n console.log(`\\n \\x1b[32m\u2713${reset} Baseline saved: ${violet}${bold}${sbLabel}${reset}`);\n console.log(` ${dim}${totalMatches} total matches across ${Object.keys(counts).length} patterns${reset}`);\n console.log(` ${dim}Saved to: ${baselineFile}${reset}\\n`);\n return;\n }\n\n // \u2500\u2500 --diff mode \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 if (opts.diff !== undefined) {\n const KiroGraphDiff = (await Promise.resolve().then(() => require('../../index.js'))).default;\n if (!KiroGraphDiff.isInitialized(target)) {\n console.error(`\\n \\x1b[31m\u2716 KiroGraph not initialized. Run: kirograph init${reset}\\n`);\n process.exit(1);\n }\n const configDiff = await loadConfig(target).catch(() => null);\n if (!(configDiff as any)?.enablePatterns) {\n console.error(`\\n \\x1b[33m\u26A0 kirograph pattern --diff requires enablePatterns: true.${reset}`);\n console.error(` ${dim}Enable it in .kirograph/config.json:${reset} ${violet}${bold}\"enablePatterns\": true${reset}`);\n console.error(` ${dim}Then re-run:${reset} ${violet}${bold}kirograph index${reset}\\n`);\n process.exit(1);\n }\n const diffLabel = typeof opts.diff === 'string' && opts.diff\n ? opts.diff\n : 'default';\n\n const kirographDir = path.join(target, '.kirograph');\n const baselineFile = path.join(kirographDir, `pattern-baseline-${diffLabel}.json`);\n\n if (!fs.existsSync(baselineFile)) {\n const saveCmd = diffLabel !== 'default'\n ? `kirograph pattern --save-baseline ${diffLabel}`\n : 'kirograph pattern --save-baseline';\n console.log(`\\n ${dim}No baseline found. Run: ${reset}${violet}${bold}${saveCmd}${reset}\\n`);\n process.exit(0);\n }\n\n type BaselineData = { savedAt: string; counts: Record<string, number>; totalMatches: number };\n const baseline: BaselineData = JSON.parse(fs.readFileSync(baselineFile, 'utf8')) as BaselineData;\n\n const cg = await KiroGraphDiff.open(target);\n const rawDb = cg.getDatabase().getRawDb();\n\n const tableExists = rawDb.get(\n \"SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'\",\n ) as { name: string } | undefined;\n\n type DiffCountRow = { pattern_id: string; cnt: number };\n const currentRows = tableExists\n ? (rawDb.all('SELECT pattern_id, COUNT(*) as cnt FROM pattern_matches GROUP BY pattern_id') as DiffCountRow[])\n : [];\n cg.close();\n\n const current: Record<string, number> = {};\n for (const row of currentRows) current[row.pattern_id] = row.cnt;\n\n const allKeys = new Set([...Object.keys(baseline.counts), ...Object.keys(current)]);\n type DiffEntry = { id: string; baseCount: number; currCount: number; delta: number };\n const newFindings: DiffEntry[] = [];\n const resolved: DiffEntry[] = [];\n const unchanged: DiffEntry[] = [];\n\n for (const id of allKeys) {\n const base = baseline.counts[id] ?? 0;\n const curr = current[id] ?? 0;\n const delta = curr - base;\n if (delta > 0) newFindings.push({ id, baseCount: base, currCount: curr, delta });\n else if (delta < 0) resolved.push({ id, baseCount: base, currCount: curr, delta });\n else if (curr > 0) unchanged.push({ id, baseCount: base, currCount: curr, delta });\n }\n\n newFindings.sort((a, b) => b.delta - a.delta);\n resolved.sort((a, b) => a.delta - b.delta);\n\n const savedDate = baseline.savedAt.slice(0, 10);\n const netDelta = newFindings.reduce((s, e) => s + e.delta, 0) + resolved.reduce((s, e) => s + e.delta, 0);\n\n if (opts.format === 'json') {\n process.stdout.write(JSON.stringify({\n baseline: { label: diffLabel, savedAt: baseline.savedAt, totalMatches: baseline.totalMatches },\n new: newFindings.map(e => ({ id: e.id, delta: e.delta, current: e.currCount })),\n resolved: resolved.map(e => ({ id: e.id, delta: e.delta, current: e.currCount })),\n unchanged: unchanged.map(e => ({ id: e.id, count: e.currCount })),\n netDelta,\n }, null, 2) + '\\n');\n return;\n }\n\n const allEntries = [...newFindings, ...resolved, ...unchanged];\n const maxIdLen = allEntries.length > 0\n ? Math.max(...allEntries.map(e => e.id.length), 20)\n : 20;\n\n console.log(`\\n ${section('Pattern Diff')} ${dim}vs ${diffLabel} baseline (saved ${savedDate})${reset}\\n`);\n\n if (newFindings.length > 0) {\n console.log(` \\x1b[31m\u2716 NEW${reset} ${dim}(${newFindings.length} new finding${newFindings.length !== 1 ? 's' : ''})${reset}`);\n for (const e of newFindings) {\n const idPad = e.id.padEnd(maxIdLen);\n console.log(` ${violet}${bold}${idPad}${reset} \\x1b[31m+${e.delta} new match${e.delta !== 1 ? 'es' : ''}${reset}`);\n }\n console.log();\n }\n\n if (resolved.length > 0) {\n console.log(` \\x1b[32m\u2713 RESOLVED${reset} ${dim}(${resolved.length} resolved)${reset}`);\n for (const e of resolved) {\n const idPad = e.id.padEnd(maxIdLen);\n console.log(` ${dim}${idPad}${reset} \\x1b[32m${e.delta} match${Math.abs(e.delta) !== 1 ? 'es' : ''}${reset}`);\n }\n console.log();\n }\n\n if (unchanged.length > 0) {\n console.log(` ${dim}= UNCHANGED${reset}`);\n for (const e of unchanged) {\n const idPad = e.id.padEnd(maxIdLen);\n console.log(` ${dim}${idPad} ${e.currCount} match${e.currCount !== 1 ? 'es' : ''} (no change)${reset}`);\n }\n console.log();\n }\n\n if (allEntries.length === 0) {\n console.log(` ${dim}No pattern matches found in either baseline or current index.${reset}\\n`);\n return;\n }\n\n const netLabel = netDelta > 0\n ? `\\x1b[31m+${netDelta}${reset}`\n : netDelta < 0\n ? `\\x1b[32m${netDelta}${reset}`\n : `${dim}0${reset}`;\n console.log(` ${dim}Net:${reset} ${netLabel}${dim} findings since baseline${reset}\\n`);\n return;\n }\n\n // \u2500\u2500 --fix guard: only works with --library \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 if (opts.fix && !opts.library) {\n console.error(` ${'\\x1b[31m'}\u2716 --fix requires --library <id>. Inline patterns do not support automatic fixes.${reset}`);\n process.exit(1);\n }\n\n // \u2500\u2500 Guards for live search / --library (require enablePatterns + napi) \u2500\u2500\n const config = await loadConfig(target);\n\n if (!config.enablePatterns) {\n console.error(`\\n ${'\\x1b[31m'}\u2716 kirograph pattern requires enablePatterns: true in .kirograph/config.json${reset}`);\n console.error(` ${dim}Enable it:${reset} ${violet}${bold}\"enablePatterns\": true${reset}`);\n console.error(` ${dim}Then install:${reset} ${violet}${bold}npm install @ast-grep/napi${reset}`);\n console.error(` ${dim}Then re-index:${reset} ${violet}${bold}kirograph index${reset}\\n`);\n process.exit(2);\n }\n\n const { PatternRunner } = await Promise.resolve().then(() => require('../../patterns/runner.js'));\n const runner = new PatternRunner();\n\n if (!runner.isAvailable()) {\n console.error(`\\n ${'\\x1b[31m'}\u2716 kirograph pattern requires @ast-grep/napi${reset}`);\n console.error(` ${dim}Install it with:${reset} ${violet}${bold}npm install @ast-grep/napi${reset}\\n`);\n process.exit(2);\n }\n\n // \u2500\u2500 Auto-detect: positional arg that matches a library rule ID \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (!opts.library && patternArg) {\n const { PatternLibraryLoader: AutoLoader } = await Promise.resolve().then(() => require('../../patterns/loader.js'));\n const autoRules = new AutoLoader().load(resolveLibraryPath(), config.patternLibraryPath);\n if (autoRules.some(r => r.id === patternArg)) {\n console.log(` ${dim}Tip: '${patternArg}' is a library rule. Running as --library ${patternArg}${reset}`);\n opts.library = patternArg;\n patternArg = undefined;\n }\n }\n\n // \u2500\u2500 --library <id> mode \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 if (opts.library) {\n if (!require('../../index').default.isInitialized(target)) {\n console.error(' \u2716 KiroGraph not initialized. Run: kirograph init');\n process.exit(1);\n }\n\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n const cg = await KiroGraph.open(target);\n const db = cg.getDatabase();\n const rawDb = db.getRawDb();\n\n const { PatternLibraryLoader } = await Promise.resolve().then(() => require('../../patterns/loader.js'));\n const loader = new PatternLibraryLoader();\n const libraryPath = resolveLibraryPath();\n const customPath = config.patternLibraryPath;\n const rules = loader.load(libraryPath, customPath);\n\n const rule = rules.find(r => r.id === opts.library);\n if (!rule) {\n console.error(` \u2716 Rule \"${opts.library}\" not found. Run: kirograph pattern --list`);\n cg.close();\n process.exitCode = 1; return;\n }\n\n // Determine languages to filter by\n const langs = Array.isArray(rule.language) ? rule.language : [rule.language];\n\n // Query files for this language\n const placeholders = langs.map(() => '?').join(', ');\n const files: Array<{ path: string; language: string }> = rawDb.all(\n `SELECT path, language FROM files WHERE language IN (${placeholders}) LIMIT 5000`,\n langs,\n );\n\n const allMatches: Array<{ filePath: string; line: number; matchText: string; context: string }> = [];\n\n // \u2500\u2500 --fix mode: apply fixes in-place \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 if (opts.fix) {\n const { PatternRunner: FixPatternRunner } = await Promise.resolve().then(() => require('../../patterns/runner.js'));\n const fixRunner = new FixPatternRunner();\n if (!fixRunner.isAvailable()) {\n console.error(` \\x1b[31m\u2716 --fix requires @ast-grep/napi. Run: npm install @ast-grep/napi${reset}`);\n cg.close?.();\n process.exitCode = 2; return;\n }\n\n if (!rule.fix) {\n console.error(` ${'\\x1b[31m'}\u2716 Rule \"${rule.id}\" does not have a fix: template defined.${reset}`);\n cg.close();\n process.exitCode = 1; return;\n }\n\n let fixedFiles = 0;\n let totalChanges = 0;\n\n for (const file of files) {\n let content: string;\n const fullPath = path.isAbsolute(file.path) ? file.path : path.join(target, file.path);\n try {\n content = fs.readFileSync(fullPath, 'utf8');\n } catch {\n continue;\n }\n\n // Count matches before fix to report change count\n const matchesBefore = await fixRunner.runRule(rule, content, file.language);\n if (matchesBefore.length === 0) continue;\n\n const fixed = await fixRunner.applyFix(fullPath, content, file.language, rule);\n if (fixed !== null && fixed !== content) {\n fs.writeFileSync(fullPath, fixed, 'utf8');\n const relPath = path.relative(target, fullPath);\n console.log(` \\x1b[32m\u2713 Fixed\\x1b[0m ${relPath} (${matchesBefore.length} change${matchesBefore.length !== 1 ? 's' : ''})`);\n fixedFiles++;\n totalChanges += matchesBefore.length;\n }\n }\n\n cg.close();\n console.log(`\\n Fixed ${fixedFiles} file${fixedFiles !== 1 ? 's' : ''}, ${totalChanges} total change${totalChanges !== 1 ? 's' : ''}\\n`);\n process.exitCode = 0; return;\n }\n\n for (const file of files) {\n let content: string;\n try {\n const fullPath = path.isAbsolute(file.path) ? file.path : path.join(target, file.path);\n content = fs.readFileSync(fullPath, 'utf8');\n } catch {\n continue;\n }\n const matches = await runner.runRule(rule, content, file.language);\n for (const m of matches) {\n allMatches.push({ filePath: file.path, line: m.line, matchText: m.matchText, context: m.context });\n }\n }\n\n cg.close();\n\n // Apply severity filter (already filtered by rule severity \u2014 but allow user to filter further)\n const sev = opts.severity as SeverityLevel | undefined;\n if (sev && SEVERITY_LEVELS.includes(sev)) {\n if (SEVERITY_ORDER[rule.severity] < SEVERITY_ORDER[sev]) {\n // The rule's severity is below the requested filter \u2014 no results\n if (opts.format === 'json') {\n process.stdout.write(JSON.stringify([], null, 2) + '\\n');\n } else {\n console.log(`\\n ${dim}No matches (rule severity \"${rule.severity}\" is below filter \"${sev}\").${reset}\\n`);\n }\n process.exitCode = 0; return;\n }\n }\n\n if (opts.format === 'json') {\n process.stdout.write(JSON.stringify(allMatches.map(m => ({\n filePath: m.filePath,\n line: m.line,\n matchText: m.matchText,\n rule: { id: rule.id, severity: rule.severity, owaspCategory: rule.owaspCategory, description: rule.description, fixHint: rule.fixHint },\n })), null, 2) + '\\n');\n process.exitCode = allMatches.length > 0 ? 1 : 0; return;\n }\n\n if (allMatches.length === 0) {\n console.log(`\\n ${dim}No matches for library rule '${rule.id}'.${reset}\\n`);\n process.exitCode = 0; return;\n }\n\n const sc = severityColor(rule.severity);\n console.log(`\\n ${section(rule.description)}`);\n console.log(` ${dim}Rule:${reset} ${violet}${bold}${rule.id}${reset} ${sc}${rule.severity}${reset} ${dim}[${rule.owaspCategory}]${reset}`);\n console.log(` ${dim}Fix:${reset} ${rule.fixHint}`);\n console.log(`\\n ${allMatches.length} match${allMatches.length !== 1 ? 'es' : ''}\\n`);\n\n for (const m of allMatches) {\n const relPath = path.relative(target, path.isAbsolute(m.filePath) ? m.filePath : path.join(target, m.filePath));\n console.log(` ${violet}${bold}${relPath}:${m.line}${reset}`);\n console.log(` ${dim}${m.matchText}${reset}`);\n console.log(` ${'\u2500'.repeat(17)}`);\n }\n\n console.log();\n process.exitCode = 1; return;\n }\n\n // \u2500\u2500 Live search mode (positional pattern) \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 if (!patternArg) {\n console.error(' \u2716 Provide a pattern to search, or use --list / --library <id>');\n process.exit(1);\n }\n\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n if (!KiroGraph.isInitialized(target)) {\n console.error(' \u2716 KiroGraph not initialized. Run: kirograph init');\n process.exit(1);\n }\n\n const cg = await KiroGraph.open(target);\n const db = cg.getDatabase();\n const rawDb = db.getRawDb();\n\n // Build query based on --lang filter\n let files: Array<{ path: string; language: string }>;\n if (opts.lang) {\n files = rawDb.all(\n 'SELECT path, language FROM files WHERE language = ? LIMIT 5000',\n [opts.lang],\n );\n } else {\n files = rawDb.all('SELECT path, language FROM files LIMIT 5000');\n }\n\n const allMatches: Array<{ filePath: string; line: number; matchText: string; context: string; language: string }> = [];\n\n for (const file of files) {\n let content: string;\n try {\n const fullPath = path.isAbsolute(file.path) ? file.path : path.join(target, file.path);\n content = fs.readFileSync(fullPath, 'utf8');\n } catch {\n continue;\n }\n const matches = await runner.runInline(patternArg, file.language, content);\n for (const m of matches) {\n allMatches.push({ filePath: file.path, line: m.line, matchText: m.matchText, context: m.context, language: file.language });\n }\n }\n\n cg.close();\n\n if (opts.format === 'json') {\n process.stdout.write(JSON.stringify(allMatches.map(m => ({\n filePath: m.filePath,\n line: m.line,\n matchText: m.matchText,\n language: m.language,\n })), null, 2) + '\\n');\n process.exitCode = allMatches.length > 0 ? 1 : 0; return;\n }\n\n const langLabel = opts.lang ? ` in ${opts.lang} files` : '';\n console.log(`\\n ${allMatches.length} match${allMatches.length !== 1 ? 'es' : ''} for ${violet}${bold}'${patternArg}'${reset}${langLabel}\\n`);\n\n if (allMatches.length === 0) {\n process.exitCode = 0; return;\n }\n\n for (const m of allMatches) {\n const relPath = path.relative(target, path.isAbsolute(m.filePath) ? m.filePath : path.join(target, m.filePath));\n console.log(` ${violet}${bold}${relPath}:${m.line}${reset}`);\n console.log(` ${dim}${m.matchText}${reset}`);\n console.log(` ${'\u2500'.repeat(17)}`);\n }\n\n console.log();\n process.exitCode = 1; return;\n });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["config", "cg", "rawDb", "covered", "KiroGraph", "db", "files", "allMatches"]
|
|
7
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6B/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reachability.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/reachability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0H/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/read.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4E/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refactor.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/refactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+F/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remediation.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/remediation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2F/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sbom.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/sbom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyC/C"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kirograph security ci-report
|
|
3
|
+
*
|
|
4
|
+
* Generates a structured security report for CI/CD pipelines.
|
|
5
|
+
* Supports JSON, SARIF 2.1.0, and compact text output formats.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
export declare function register(program: Command): void;
|
|
9
|
+
//# sourceMappingURL=security-ci-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-ci-report.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/security-ci-report.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkNpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgK/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-export.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/security-export.ts"],"names":[],"mappings":"AAqwCA,wBAAgB,QAAQ,CAAC,MAAM,EAAE,OAAO,WAAW,EAAE,OAAO,GAAG,IAAI,CAoJlE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-flows.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/security-flows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6E/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-secrets.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/security-secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsCpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0I/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/security.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAiMlD"}
|
|
@@ -173,6 +173,21 @@ function register(program) {
|
|
|
173
173
|
console.log(` ${import_ui.dim}Run${import_ui.reset} ${import_ui.violet}${import_ui.bold}kirograph vulns --refresh${import_ui.reset} ${import_ui.dim}to update.${import_ui.reset}`);
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
|
+
try {
|
|
177
|
+
if (config.enablePatterns) {
|
|
178
|
+
const tableExists = rawDb.get("SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'");
|
|
179
|
+
if (tableExists) {
|
|
180
|
+
const pm = rawDb.get("SELECT COUNT(*) as cnt FROM pattern_matches");
|
|
181
|
+
if ((pm?.cnt ?? 0) > 0) {
|
|
182
|
+
const critPm = rawDb.get("SELECT COUNT(*) as cnt FROM pattern_matches WHERE severity='critical'");
|
|
183
|
+
console.log(` ${import_ui.dim}SAST findings:${import_ui.reset} ${import_ui.violet}${import_ui.bold}${pm.cnt}${import_ui.reset} ${import_ui.dim}pattern matches (${critPm?.cnt ?? 0} critical)${import_ui.reset}`);
|
|
184
|
+
console.log(` ${import_ui.dim}Run${import_ui.reset} ${import_ui.violet}${import_ui.bold}kirograph pattern --coverage${import_ui.reset} ${import_ui.dim}for details.${import_ui.reset}
|
|
185
|
+
`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
} catch {
|
|
190
|
+
}
|
|
176
191
|
if (opts.failOn === "affected") {
|
|
177
192
|
const affectedCount = verdicts["affected"] ?? 0;
|
|
178
193
|
if (affectedCount > 0) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/bin/commands/security.ts"],
|
|
4
|
-
"sourcesContent": ["import { Command } from 'commander';\nimport * as path from 'path';\nimport { loadConfig } from '../../config';\nimport { dim, reset, violet, bold, green, section } from '../ui';\n\nexport function register(program: Command): Command {\n const secCmd = program\n .command('security')\n .description('Security analysis: overview, dashboard export, and vulnerability management')\n .argument('[projectPath]', 'Project root path (optional)')\n .option('--refresh-staleness', 'Fetch latest version info from registries and show stale dependency count')\n .option('--fail-on <condition>', 'Exit 1 if condition is met. Supported: affected')\n .action(async (projectPath: string | undefined, opts: { refreshStaleness?: boolean; failOn?: string }) => {\n const target = path.resolve(projectPath ?? process.cwd());\n const config = await loadConfig(target);\n\n if (!config.enableSecurity) {\n console.error(`\\n ${'\\x1b[33m'}\u26A0 Security analysis is disabled.${reset}`);\n console.error(` ${dim}Enable it in .kirograph/config.json:${reset} ${violet}${bold}\"enableSecurity\": true${reset}`);\n console.error(` ${dim}Then re-run:${reset} ${violet}${bold}kirograph index${reset}\\n`);\n process.exit(1);\n }\n\n if (!config.enableArchitecture) {\n console.error(`\\n ${'\\x1b[33m'}\u26A0 Security requires Architecture analysis to be enabled.${reset}`);\n console.error(` ${dim}Enable both in .kirograph/config.json:${reset}`);\n console.error(` ${violet}${bold}\"enableArchitecture\": true${reset}`);\n console.error(` ${violet}${bold}\"enableSecurity\": true${reset}`);\n console.error(` ${dim}Then re-run:${reset} ${violet}${bold}kirograph index${reset}\\n`);\n process.exit(1);\n }\n\n if (opts.failOn !== undefined && opts.failOn !== 'affected') {\n console.error(` \u2716 Invalid --fail-on value: ${opts.failOn}. Supported: affected`);\n process.exit(1);\n }\n\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n if (!KiroGraph.isInitialized(target)) {\n console.error(' \u2716 KiroGraph not initialized. Run: kirograph init');\n process.exit(1);\n }\n\n const cg = await KiroGraph.open(target);\n const db = cg.getDatabase();\n db.applySecuritySchema();\n const rawDb = db.getRawDb();\n\n // Optionally refresh staleness data from registries\n if (opts.refreshStaleness) {\n console.error(` ${dim}Fetching latest version info from package registries...${reset}`);\n const { StalenessChecker } = await Promise.resolve().then(() => require('../../security/staleness.js'));\n const checker = new StalenessChecker(db);\n const result = await checker.checkAll();\n console.error(` ${green}\u2713${reset} Checked ${bold}${result.checked}${reset} packages, ${bold}${result.stale}${reset} stale`);\n if (result.errors.length > 0) {\n console.error(` ${'\\x1b[33m'}\u26A0${reset} ${result.errors.length} error(s) during registry fetch`);\n }\n console.error();\n }\n\n // Query dependency counts\n const depCount: { count: number } = rawDb.get(\n `SELECT COUNT(*) as count FROM sec_dependencies`,\n ) ?? { count: 0 };\n\n // Query vulnerability counts\n const vulnCount: { count: number } = rawDb.get(\n `SELECT COUNT(*) as count FROM sec_vulnerabilities`,\n ) ?? { count: 0 };\n\n // Query reachability verdict counts\n const verdictRows: Array<{ verdict: string; count: number }> = rawDb.all(\n `SELECT verdict, COUNT(*) as count FROM sec_reachability GROUP BY verdict`,\n );\n const verdicts: Record<string, number> = {};\n for (const row of verdictRows) {\n verdicts[row.verdict] = row.count;\n }\n\n // Check for stale data\n const staleCount: { count: number } = rawDb.get(\n `SELECT COUNT(*) as count FROM sec_dependencies WHERE vuln_data_stale = 1`,\n ) ?? { count: 0 };\n\n // Display overview\n console.log(`\\n ${section('Security Overview')}\\n`);\n console.log(` ${dim}Dependencies:${reset} ${violet}${bold}${depCount.count}${reset}`);\n console.log(` ${dim}Vulnerabilities:${reset} ${violet}${bold}${vulnCount.count}${reset}`);\n console.log();\n\n if (vulnCount.count > 0) {\n // Show top-risk CVE when data is available\n const topCVE: { cve_id: string; risk_score: number | null; package_name: string | null } | undefined =\n rawDb.get(\n `SELECT v.cve_id, v.risk_score, d.package_name\n FROM sec_vulnerabilities v\n LEFT JOIN edges e ON e.target = v.node_id AND e.kind = 'has_vulnerability'\n LEFT JOIN sec_dependencies d ON d.node_id = e.source\n LEFT JOIN sec_reachability r ON r.vulnerability_node_id = v.node_id\n WHERE r.verdict = 'affected' AND v.risk_score IS NOT NULL\n ORDER BY v.risk_score DESC NULLS LAST\n LIMIT 1`,\n );\n if (topCVE && topCVE.risk_score != null) {\n const riskColor = topCVE.risk_score >= 7 ? '\\x1b[31m' : topCVE.risk_score >= 4 ? '\\x1b[33m' : dim;\n const pkgLabel = topCVE.package_name ? ` in ${dim}${topCVE.package_name}${reset}` : '';\n console.log(` ${riskColor}Top risk:${reset} ${violet}${bold}${topCVE.cve_id}${reset} ${riskColor}(Risk: ${topCVE.risk_score.toFixed(1)})${reset}${pkgLabel}`);\n console.log();\n }\n\n console.log(` ${section('Reachability Verdicts')}\\n`);\n const affected = verdicts['affected'] ?? 0;\n const notAffected = verdicts['not_affected'] ?? 0;\n const underInvestigation = verdicts['under_investigation'] ?? 0;\n const noAnalysis = vulnCount.count - affected - notAffected - underInvestigation;\n\n if (affected > 0) {\n console.log(` ${'\\x1b[31m'}\u25CF${reset} Affected: ${bold}${affected}${reset}`);\n }\n if (notAffected > 0) {\n console.log(` ${green}\u25CF${reset} Not affected: ${bold}${notAffected}${reset}`);\n }\n if (underInvestigation > 0) {\n console.log(` ${'\\x1b[33m'}\u25CF${reset} Under investigation: ${bold}${underInvestigation}${reset}`);\n }\n if (noAnalysis > 0) {\n console.log(` ${dim}\u25CF${reset} Pending analysis: ${bold}${noAnalysis}${reset}`);\n }\n console.log();\n }\n\n if (staleCount.count > 0) {\n console.log(` ${'\\x1b[33m'}\u26A0${reset} ${bold}${staleCount.count}${reset} ${dim}dependenc${staleCount.count === 1 ? 'y has' : 'ies have'} stale vulnerability data.${reset}`);\n console.log(` ${dim}Run${reset} ${violet}${bold}kirograph vulns --refresh${reset} ${dim}to update.${reset}\\n`);\n }\n\n // Show stale dependency count (version staleness) if data exists\n const stalenessDataCount: { count: number } = rawDb.get(\n `SELECT COUNT(*) as count FROM sec_dependencies WHERE staleness_score IS NOT NULL`,\n ) ?? { count: 0 };\n\n if (stalenessDataCount.count > 0) {\n const staleDepCount: { count: number } = rawDb.get(\n `SELECT COUNT(*) as count FROM sec_dependencies WHERE staleness_score >= 0.3`,\n ) ?? { count: 0 };\n console.log(` ${dim}Stale dependencies:${reset} ${staleDepCount.count > 0 ? `${'\\x1b[33m'}${bold}${staleDepCount.count}${reset}` : `${green}${bold}0${reset}`} ${dim}of ${stalenessDataCount.count} scored${reset}`);\n if (staleDepCount.count > 0) {\n console.log(` ${dim}Run${reset} ${violet}${bold}kirograph staleness${reset} ${dim}for details.${reset}`);\n }\n console.log();\n } else if (!opts.refreshStaleness) {\n console.log(` ${dim}No staleness data.${reset} ${dim}Run${reset} ${violet}${bold}kirograph security --refresh-staleness${reset} ${dim}to score dependencies.${reset}\\n`);\n }\n\n // Check if vulnerability data is stale\n const lastCheck = (rawDb.get(\n `SELECT MIN(last_vuln_check) as oldest FROM sec_dependencies WHERE last_vuln_check IS NOT NULL`,\n ) as { oldest: number | null } | undefined)?.oldest;\n if (lastCheck != null) {\n const ageMs = Date.now() - lastCheck;\n const ageDays = ageMs / (1000 * 60 * 60 * 24);\n const maxAge = config.securityEnrichMaxAgeDays ?? 7;\n if (ageDays > maxAge) {\n console.log(`\\n ${'\\x1b[33m'}\u26A0 Vulnerability data is ${Math.floor(ageDays)} days old (max: ${maxAge}).${reset}`);\n console.log(` ${dim}Run${reset} ${violet}${bold}kirograph vulns --refresh${reset} ${dim}to update.${reset}`);\n }\n }\n\n // --fail-on: exit 1 if condition is met (after all output)\n if (opts.failOn === 'affected') {\n const affectedCount = verdicts['affected'] ?? 0;\n if (affectedCount > 0) {\n console.log(`\\n \\x1b[31m\u2716\\x1b[0m --fail-on affected: ${affectedCount} affected vulnerabilit${affectedCount === 1 ? 'y' : 'ies'} found. Exiting with code 1.`);\n cg.close();\n process.exit(1);\n }\n }\n\n cg.close();\n });\n\n return secCmd;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { Command } from 'commander';\nimport * as path from 'path';\nimport { loadConfig } from '../../config';\nimport { dim, reset, violet, bold, green, section } from '../ui';\n\nexport function register(program: Command): Command {\n const secCmd = program\n .command('security')\n .description('Security analysis: overview, dashboard export, and vulnerability management')\n .argument('[projectPath]', 'Project root path (optional)')\n .option('--refresh-staleness', 'Fetch latest version info from registries and show stale dependency count')\n .option('--fail-on <condition>', 'Exit 1 if condition is met. Supported: affected')\n .action(async (projectPath: string | undefined, opts: { refreshStaleness?: boolean; failOn?: string }) => {\n const target = path.resolve(projectPath ?? process.cwd());\n const config = await loadConfig(target);\n\n if (!config.enableSecurity) {\n console.error(`\\n ${'\\x1b[33m'}\u26A0 Security analysis is disabled.${reset}`);\n console.error(` ${dim}Enable it in .kirograph/config.json:${reset} ${violet}${bold}\"enableSecurity\": true${reset}`);\n console.error(` ${dim}Then re-run:${reset} ${violet}${bold}kirograph index${reset}\\n`);\n process.exit(1);\n }\n\n if (!config.enableArchitecture) {\n console.error(`\\n ${'\\x1b[33m'}\u26A0 Security requires Architecture analysis to be enabled.${reset}`);\n console.error(` ${dim}Enable both in .kirograph/config.json:${reset}`);\n console.error(` ${violet}${bold}\"enableArchitecture\": true${reset}`);\n console.error(` ${violet}${bold}\"enableSecurity\": true${reset}`);\n console.error(` ${dim}Then re-run:${reset} ${violet}${bold}kirograph index${reset}\\n`);\n process.exit(1);\n }\n\n if (opts.failOn !== undefined && opts.failOn !== 'affected') {\n console.error(` \u2716 Invalid --fail-on value: ${opts.failOn}. Supported: affected`);\n process.exit(1);\n }\n\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n if (!KiroGraph.isInitialized(target)) {\n console.error(' \u2716 KiroGraph not initialized. Run: kirograph init');\n process.exit(1);\n }\n\n const cg = await KiroGraph.open(target);\n const db = cg.getDatabase();\n db.applySecuritySchema();\n const rawDb = db.getRawDb();\n\n // Optionally refresh staleness data from registries\n if (opts.refreshStaleness) {\n console.error(` ${dim}Fetching latest version info from package registries...${reset}`);\n const { StalenessChecker } = await Promise.resolve().then(() => require('../../security/staleness.js'));\n const checker = new StalenessChecker(db);\n const result = await checker.checkAll();\n console.error(` ${green}\u2713${reset} Checked ${bold}${result.checked}${reset} packages, ${bold}${result.stale}${reset} stale`);\n if (result.errors.length > 0) {\n console.error(` ${'\\x1b[33m'}\u26A0${reset} ${result.errors.length} error(s) during registry fetch`);\n }\n console.error();\n }\n\n // Query dependency counts\n const depCount: { count: number } = rawDb.get(\n `SELECT COUNT(*) as count FROM sec_dependencies`,\n ) ?? { count: 0 };\n\n // Query vulnerability counts\n const vulnCount: { count: number } = rawDb.get(\n `SELECT COUNT(*) as count FROM sec_vulnerabilities`,\n ) ?? { count: 0 };\n\n // Query reachability verdict counts\n const verdictRows: Array<{ verdict: string; count: number }> = rawDb.all(\n `SELECT verdict, COUNT(*) as count FROM sec_reachability GROUP BY verdict`,\n );\n const verdicts: Record<string, number> = {};\n for (const row of verdictRows) {\n verdicts[row.verdict] = row.count;\n }\n\n // Check for stale data\n const staleCount: { count: number } = rawDb.get(\n `SELECT COUNT(*) as count FROM sec_dependencies WHERE vuln_data_stale = 1`,\n ) ?? { count: 0 };\n\n // Display overview\n console.log(`\\n ${section('Security Overview')}\\n`);\n console.log(` ${dim}Dependencies:${reset} ${violet}${bold}${depCount.count}${reset}`);\n console.log(` ${dim}Vulnerabilities:${reset} ${violet}${bold}${vulnCount.count}${reset}`);\n console.log();\n\n if (vulnCount.count > 0) {\n // Show top-risk CVE when data is available\n const topCVE: { cve_id: string; risk_score: number | null; package_name: string | null } | undefined =\n rawDb.get(\n `SELECT v.cve_id, v.risk_score, d.package_name\n FROM sec_vulnerabilities v\n LEFT JOIN edges e ON e.target = v.node_id AND e.kind = 'has_vulnerability'\n LEFT JOIN sec_dependencies d ON d.node_id = e.source\n LEFT JOIN sec_reachability r ON r.vulnerability_node_id = v.node_id\n WHERE r.verdict = 'affected' AND v.risk_score IS NOT NULL\n ORDER BY v.risk_score DESC NULLS LAST\n LIMIT 1`,\n );\n if (topCVE && topCVE.risk_score != null) {\n const riskColor = topCVE.risk_score >= 7 ? '\\x1b[31m' : topCVE.risk_score >= 4 ? '\\x1b[33m' : dim;\n const pkgLabel = topCVE.package_name ? ` in ${dim}${topCVE.package_name}${reset}` : '';\n console.log(` ${riskColor}Top risk:${reset} ${violet}${bold}${topCVE.cve_id}${reset} ${riskColor}(Risk: ${topCVE.risk_score.toFixed(1)})${reset}${pkgLabel}`);\n console.log();\n }\n\n console.log(` ${section('Reachability Verdicts')}\\n`);\n const affected = verdicts['affected'] ?? 0;\n const notAffected = verdicts['not_affected'] ?? 0;\n const underInvestigation = verdicts['under_investigation'] ?? 0;\n const noAnalysis = vulnCount.count - affected - notAffected - underInvestigation;\n\n if (affected > 0) {\n console.log(` ${'\\x1b[31m'}\u25CF${reset} Affected: ${bold}${affected}${reset}`);\n }\n if (notAffected > 0) {\n console.log(` ${green}\u25CF${reset} Not affected: ${bold}${notAffected}${reset}`);\n }\n if (underInvestigation > 0) {\n console.log(` ${'\\x1b[33m'}\u25CF${reset} Under investigation: ${bold}${underInvestigation}${reset}`);\n }\n if (noAnalysis > 0) {\n console.log(` ${dim}\u25CF${reset} Pending analysis: ${bold}${noAnalysis}${reset}`);\n }\n console.log();\n }\n\n if (staleCount.count > 0) {\n console.log(` ${'\\x1b[33m'}\u26A0${reset} ${bold}${staleCount.count}${reset} ${dim}dependenc${staleCount.count === 1 ? 'y has' : 'ies have'} stale vulnerability data.${reset}`);\n console.log(` ${dim}Run${reset} ${violet}${bold}kirograph vulns --refresh${reset} ${dim}to update.${reset}\\n`);\n }\n\n // Show stale dependency count (version staleness) if data exists\n const stalenessDataCount: { count: number } = rawDb.get(\n `SELECT COUNT(*) as count FROM sec_dependencies WHERE staleness_score IS NOT NULL`,\n ) ?? { count: 0 };\n\n if (stalenessDataCount.count > 0) {\n const staleDepCount: { count: number } = rawDb.get(\n `SELECT COUNT(*) as count FROM sec_dependencies WHERE staleness_score >= 0.3`,\n ) ?? { count: 0 };\n console.log(` ${dim}Stale dependencies:${reset} ${staleDepCount.count > 0 ? `${'\\x1b[33m'}${bold}${staleDepCount.count}${reset}` : `${green}${bold}0${reset}`} ${dim}of ${stalenessDataCount.count} scored${reset}`);\n if (staleDepCount.count > 0) {\n console.log(` ${dim}Run${reset} ${violet}${bold}kirograph staleness${reset} ${dim}for details.${reset}`);\n }\n console.log();\n } else if (!opts.refreshStaleness) {\n console.log(` ${dim}No staleness data.${reset} ${dim}Run${reset} ${violet}${bold}kirograph security --refresh-staleness${reset} ${dim}to score dependencies.${reset}\\n`);\n }\n\n // Check if vulnerability data is stale\n const lastCheck = (rawDb.get(\n `SELECT MIN(last_vuln_check) as oldest FROM sec_dependencies WHERE last_vuln_check IS NOT NULL`,\n ) as { oldest: number | null } | undefined)?.oldest;\n if (lastCheck != null) {\n const ageMs = Date.now() - lastCheck;\n const ageDays = ageMs / (1000 * 60 * 60 * 24);\n const maxAge = config.securityEnrichMaxAgeDays ?? 7;\n if (ageDays > maxAge) {\n console.log(`\\n ${'\\x1b[33m'}\u26A0 Vulnerability data is ${Math.floor(ageDays)} days old (max: ${maxAge}).${reset}`);\n console.log(` ${dim}Run${reset} ${violet}${bold}kirograph vulns --refresh${reset} ${dim}to update.${reset}`);\n }\n }\n\n // Pattern SAST findings (if enablePatterns and data exists)\n try {\n if (config.enablePatterns) {\n const tableExists = rawDb.get(\"SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'\");\n if (tableExists) {\n const pm = rawDb.get('SELECT COUNT(*) as cnt FROM pattern_matches') as { cnt: number } | undefined;\n if ((pm?.cnt ?? 0) > 0) {\n const critPm = rawDb.get(\"SELECT COUNT(*) as cnt FROM pattern_matches WHERE severity='critical'\") as { cnt: number } | undefined;\n console.log(` ${dim}SAST findings:${reset} ${violet}${bold}${pm!.cnt}${reset} ${dim}pattern matches (${critPm?.cnt ?? 0} critical)${reset}`);\n console.log(` ${dim}Run${reset} ${violet}${bold}kirograph pattern --coverage${reset} ${dim}for details.${reset}\\n`);\n }\n }\n }\n } catch { /* non-critical */ }\n\n // --fail-on: exit 1 if condition is met (after all output)\n if (opts.failOn === 'affected') {\n const affectedCount = verdicts['affected'] ?? 0;\n if (affectedCount > 0) {\n console.log(`\\n \\x1b[31m\u2716\\x1b[0m --fail-on affected: ${affectedCount} affected vulnerabilit${affectedCount === 1 ? 'y' : 'ies'} found. Exiting with code 1.`);\n cg.close();\n process.exit(1);\n }\n }\n\n cg.close();\n });\n\n return secCmd;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsG/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staleness.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/staleness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6H/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwJ/C"}
|
|
@@ -101,6 +101,33 @@ function register(program) {
|
|
|
101
101
|
} else {
|
|
102
102
|
console.log(` ${(0, import_ui.label)("Status")} ${import_ui.dim}disabled${import_ui.reset}`);
|
|
103
103
|
}
|
|
104
|
+
try {
|
|
105
|
+
const patConfig = await (0, import_config.loadConfig)(target);
|
|
106
|
+
if (patConfig.enablePatterns) {
|
|
107
|
+
const db2 = cg.getDatabase();
|
|
108
|
+
db2.applyPatternsSchema?.();
|
|
109
|
+
const rawDb2 = db2.getRawDb();
|
|
110
|
+
const tableExists = rawDb2.get("SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'");
|
|
111
|
+
if (tableExists) {
|
|
112
|
+
const matchCount = rawDb2.get("SELECT COUNT(*) as cnt FROM pattern_matches")?.cnt ?? 0;
|
|
113
|
+
const fileCount = rawDb2.get("SELECT COUNT(DISTINCT file_path) as cnt FROM pattern_matches")?.cnt ?? 0;
|
|
114
|
+
const ruleCount = rawDb2.get("SELECT COUNT(DISTINCT pattern_id) as cnt FROM pattern_matches")?.cnt ?? 0;
|
|
115
|
+
console.log();
|
|
116
|
+
console.log((0, import_ui.section)(" Patterns"));
|
|
117
|
+
console.log(` ${(0, import_ui.label)("Status")} ${import_ui.green}${import_ui.bold}enabled${import_ui.reset}`);
|
|
118
|
+
if (matchCount > 0) {
|
|
119
|
+
console.log(` ${(0, import_ui.label)("Matches")} ${(0, import_ui.value)(String(matchCount))} ${import_ui.dim}across ${fileCount} files, ${ruleCount} rules triggered${import_ui.reset}`);
|
|
120
|
+
} else {
|
|
121
|
+
console.log(` ${(0, import_ui.label)("Matches")} ${import_ui.dim}none yet \u2014 run kirograph index${import_ui.reset}`);
|
|
122
|
+
}
|
|
123
|
+
} else {
|
|
124
|
+
console.log();
|
|
125
|
+
console.log((0, import_ui.section)(" Patterns"));
|
|
126
|
+
console.log(` ${(0, import_ui.label)("Status")} ${import_ui.green}${import_ui.bold}enabled${import_ui.reset} ${import_ui.dim}(not yet indexed \u2014 run kirograph index)${import_ui.reset}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
} catch {
|
|
130
|
+
}
|
|
104
131
|
try {
|
|
105
132
|
const config = await (0, import_config.loadConfig)(target);
|
|
106
133
|
if (config.enableSecurity) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/bin/commands/status.ts"],
|
|
4
|
-
"sourcesContent": ["import { Command } from 'commander';\nimport * as path from 'path';\nimport { dim, reset, violet, bold, green, label, value, section, renderTable } from '../ui';\nimport { loadConfig } from '../../config';\n\nexport function register(program: Command): void {\n program\n .command('status [projectPath]')\n .description('Show index statistics')\n .option('--integrations', 'Show detected and configured platforms')\n .action(async (projectPath: string | undefined, opts: { integrations?: boolean }) => {\n const target = path.resolve(projectPath ?? process.cwd());\n\n if (opts.integrations) {\n await showIntegrations(target);\n return;\n }\n\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n const cg = await KiroGraph.open(target);\n const stats = await cg.getStats();\n\n console.log();\n console.log(section(' Graph'));\n console.log(` ${label('Files')} ${value(String(stats.files))}`);\n console.log(` ${label('Symbols')} ${value(String(stats.nodes))}`);\n console.log(` ${label('Edges')} ${value(String(stats.edges))}`);\n\n if (stats.frameworks.length > 0) {\n console.log(` ${label('Frameworks')} ${value(stats.frameworks.join(', '))}`);\n }\n\n const kindEntries = Object.entries(stats.nodesByKind).sort((a, b) => b[1] - a[1]);\n if (kindEntries.length > 0) {\n console.log(`\\n ${label('By kind')}`);\n console.log(renderTable(kindEntries.map(([k, v]) => [k, String(v)])));\n }\n\n const langEntries = Object.entries(stats.filesByLanguage ?? {}).sort((a, b) => b[1] - a[1]);\n if (langEntries.length > 0) {\n console.log(`\\n ${label('By language')}`);\n console.log(renderTable(langEntries.map(([k, v]) => [k, String(v)])));\n }\n\n // Sync state\n const threshold = stats.syncWarningThreshold ?? 10;\n const pendingFiles: number = stats.pendingFiles ?? 0;\n const syncRunning: boolean = stats.syncRunning ?? false;\n console.log();\n console.log(section(' Sync'));\n if (syncRunning) {\n console.log(` ${'\\x1b[33m'}\u26A0 Sync is currently running in the background.${reset}`);\n } else {\n console.log(` ${label('Status')} ${dim}idle${reset}`);\n }\n if (pendingFiles > 0) {\n const warn = threshold > 0 && pendingFiles >= threshold;\n const pendingLabel = warn ? `${'\\x1b[33m'}${pendingFiles} files pending${reset}` : `${dim}${pendingFiles} files pending${reset}`;\n console.log(` ${label('Pending')} ${pendingLabel}`);\n if (warn) {\n console.log(` ${'\\x1b[33m'}\u26A0 Index may be stale. Run \\`kirograph sync\\` to update.${reset}`);\n }\n } else {\n console.log(` ${label('Pending')} ${green}up to date${reset}`);\n }\n\n console.log();\n console.log(section(' Semantic Search'));\n if (stats.embeddingsEnabled) {\n const engineLabel =\n stats.semanticEngine === 'sqlite-vec' ? `sqlite-vec ${dim}(${stats.vecIndexCount} entries in ANN index)${reset}` :\n stats.semanticEngine === 'orama' ? `orama ${dim}(hybrid \u2014 ${stats.vecIndexCount} docs in index)${reset}` :\n stats.semanticEngine === 'pglite' ? `pglite+pgvector ${dim}(hybrid \u2014 ${stats.vecIndexCount} rows in DB)${reset}` :\n stats.semanticEngine === 'lancedb' ? `lancedb ${dim}(${stats.vecIndexCount} entries in ANN index)${reset}` :\n stats.semanticEngine === 'qdrant' ? `qdrant ${dim}(${stats.vecIndexCount} points in collection)${reset}` :\n stats.semanticEngine === 'typesense' ? `typesense ${dim}(${stats.vecIndexCount} documents in collection)${reset}` :\n `in-process cosine`;\n const total = stats.embeddableNodeCount > 0 ? stats.embeddableNodeCount : stats.nodes;\n const displayed = Math.min(stats.embeddingCount, total);\n const coverage = total > 0 ? Math.min(100, Math.round((stats.embeddingCount / total) * 100)) : 0;\n console.log(` ${label('Status')} ${green}${bold}enabled${reset}`);\n console.log(` ${label('Model')} ${value(stats.embeddingModel)}`);\n console.log(` ${label('Engine')} ${violet}${engineLabel}${reset}`);\n if (stats.engineFallback) {\n console.log(` ${'\\x1b[33m'}\u26A0 engine fallback: ${stats.engineFallback}${reset}`);\n }\n console.log(` ${label('Indexed')} ${value(`${displayed} / ${total}`)} ${dim}(${coverage}%)${reset}`);\n } else {\n console.log(` ${label('Status')} ${dim}disabled${reset}`);\n }\n\n // Security stats (conditional on enableSecurity)\n try {\n const config = await loadConfig(target);\n if (config.enableSecurity) {\n const db = cg.getDatabase();\n db.applySecuritySchema();\n const rawDb = db.getRawDb();\n\n const depCount: number = rawDb.get('SELECT COUNT(*) as cnt FROM sec_dependencies')?.cnt ?? 0;\n const vulnCount: number = rawDb.get('SELECT COUNT(*) as cnt FROM sec_vulnerabilities')?.cnt ?? 0;\n const affectedCount: number = rawDb.get(\"SELECT COUNT(*) as cnt FROM sec_reachability WHERE verdict = 'affected'\")?.cnt ?? 0;\n const notAffectedCount: number = rawDb.get(\"SELECT COUNT(*) as cnt FROM sec_reachability WHERE verdict = 'not_affected'\")?.cnt ?? 0;\n const investigatingCount: number = rawDb.get(\"SELECT COUNT(*) as cnt FROM sec_reachability WHERE verdict = 'under_investigation'\")?.cnt ?? 0;\n const staleCount: number = rawDb.get('SELECT COUNT(*) as cnt FROM sec_dependencies WHERE vuln_data_stale = 1')?.cnt ?? 0;\n\n console.log();\n console.log(section(' \uD83D\uDD12 Security'));\n console.log(` ${label('Dependencies')} ${value(String(depCount))}`);\n console.log(` ${label('Vulnerabilities')} ${value(String(vulnCount))}`);\n\n if (vulnCount > 0) {\n const affectedLabel = affectedCount > 0\n ? `${'\\x1b[31m'}${affectedCount} affected${reset}`\n : `${dim}0 affected${reset}`;\n console.log(` ${label('Affected')} ${affectedLabel}`);\n console.log(` ${label('Not Affected')} ${dim}${notAffectedCount}${reset}`);\n console.log(` ${label('Investigating')} ${dim}${investigatingCount}${reset}`);\n }\n\n if (staleCount > 0) {\n console.log(` ${'\\x1b[33m'}\u26A0 ${staleCount} dependenc${staleCount === 1 ? 'y has' : 'ies have'} stale vulnerability data. Run \\`kirograph vulns --refresh\\` to update.${reset}`);\n }\n }\n } catch { /* non-critical */ }\n\n console.log();\n cg.close();\n });\n}\n\nasync function showIntegrations(projectRoot: string): Promise<void> {\n const fs = await import('fs');\n const { detectPlatforms } = await Promise.resolve().then(() => require('../installer/detect.js'));\n const { readJson, KIROGRAPH_SERVER_NAME } = await Promise.resolve().then(() => require('../installer/common.js'));\n\n const detected = detectPlatforms(projectRoot);\n const home = process.env.HOME || process.env.USERPROFILE || '';\n\n // Map of target \u2192 config path to check if kirograph is configured\n const configChecks: Record<string, { path: string; key: string }> = {\n 'kiro': { path: path.join(projectRoot, '.kiro', 'settings', 'mcp.json'), key: 'mcpServers' },\n 'claude': { path: path.join(projectRoot, '.mcp.json'), key: 'mcpServers' },\n 'cursor': { path: path.join(projectRoot, '.cursor', 'mcp.json'), key: 'mcpServers' },\n 'windsurf': { path: path.join(home, '.codeium', 'windsurf', 'mcp_config.json'), key: 'mcpServers' },\n 'codex': { path: path.join(projectRoot, '.codex', 'hooks.json'), key: 'hooks' },\n 'copilot': { path: path.join(projectRoot, '.vscode', 'mcp.json'), key: 'servers' },\n 'copilot-cli': { path: path.join(home, '.copilot', 'mcp-config.json'), key: 'servers' },\n 'gemini-cli': { path: path.join(projectRoot, '.gemini', 'settings.json'), key: 'mcpServers' },\n 'continue': { path: path.join(projectRoot, '.continue', 'mcpServers', 'kirograph.json'), key: 'mcpServers' },\n 'opencode': { path: path.join(projectRoot, '.opencode.json'), key: 'mcp' },\n 'antigravity': { path: path.join(home, '.gemini', 'antigravity', 'mcp_config.json'), key: 'mcpServers' },\n 'roo': { path: path.join(projectRoot, '.roo', 'mcp.json'), key: 'mcpServers' },\n 'warp': { path: path.join(projectRoot, '.warp', '.mcp.json'), key: 'mcpServers' },\n 'trae': { path: path.join(projectRoot, '.trae', 'mcp.json'), key: 'mcpServers' },\n 'amp': { path: path.join(projectRoot, '.amp', 'config.json'), key: 'mcpServers' },\n 'cline': { path: path.join(projectRoot, '.cline', 'mcp_settings.json'), key: 'mcpServers' },\n 'qoder': { path: path.join(projectRoot, '.qoder', 'mcp.json'), key: 'mcpServers' },\n 'qwen': { path: path.join(home, '.qwen', 'settings.json'), key: 'mcpServers' },\n };\n\n function isConfigured(target: string): boolean {\n const check = configChecks[target];\n if (!check) return false;\n if (!fs.existsSync(check.path)) return false;\n const config = readJson(check.path);\n const container = config[check.key];\n if (!container) return false;\n if (typeof container === 'object' && !Array.isArray(container)) {\n return KIROGRAPH_SERVER_NAME in container;\n }\n return false;\n }\n\n const configured = detected.filter(d => isConfigured(d.target));\n const notConfigured = detected.filter(d => !isConfigured(d.target));\n\n console.log();\n console.log(section(' Integrations'));\n console.log();\n\n if (configured.length > 0) {\n console.log(` ${label('Configured:')}`);\n for (const d of configured) {\n const check = configChecks[d.target];\n const configPath = check ? check.path.replace(projectRoot, '.').replace(home, '~') : '';\n console.log(` ${green}\u2713${reset} ${d.label.padEnd(20)} ${dim}${configPath}${reset}`);\n }\n }\n\n if (notConfigured.length > 0) {\n if (configured.length > 0) console.log();\n console.log(` ${label('Detected but not configured:')}`);\n for (const d of notConfigured) {\n const check = configChecks[d.target];\n const configPath = check ? check.path.replace(projectRoot, '.').replace(home, '~') : '';\n console.log(` ${dim}\u25CB${reset} ${d.label.padEnd(20)} ${dim}${configPath}${reset}`);\n }\n console.log();\n console.log(` ${dim}Run \\`kirograph install\\` to configure detected platforms.${reset}`);\n }\n\n if (detected.length === 0) {\n console.log(` ${dim}No AI coding platforms detected.${reset}`);\n }\n\n console.log();\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { Command } from 'commander';\nimport * as path from 'path';\nimport { dim, reset, violet, bold, green, label, value, section, renderTable } from '../ui';\nimport { loadConfig } from '../../config';\n\nexport function register(program: Command): void {\n program\n .command('status [projectPath]')\n .description('Show index statistics')\n .option('--integrations', 'Show detected and configured platforms')\n .action(async (projectPath: string | undefined, opts: { integrations?: boolean }) => {\n const target = path.resolve(projectPath ?? process.cwd());\n\n if (opts.integrations) {\n await showIntegrations(target);\n return;\n }\n\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n const cg = await KiroGraph.open(target);\n const stats = await cg.getStats();\n\n console.log();\n console.log(section(' Graph'));\n console.log(` ${label('Files')} ${value(String(stats.files))}`);\n console.log(` ${label('Symbols')} ${value(String(stats.nodes))}`);\n console.log(` ${label('Edges')} ${value(String(stats.edges))}`);\n\n if (stats.frameworks.length > 0) {\n console.log(` ${label('Frameworks')} ${value(stats.frameworks.join(', '))}`);\n }\n\n const kindEntries = Object.entries(stats.nodesByKind).sort((a, b) => b[1] - a[1]);\n if (kindEntries.length > 0) {\n console.log(`\\n ${label('By kind')}`);\n console.log(renderTable(kindEntries.map(([k, v]) => [k, String(v)])));\n }\n\n const langEntries = Object.entries(stats.filesByLanguage ?? {}).sort((a, b) => b[1] - a[1]);\n if (langEntries.length > 0) {\n console.log(`\\n ${label('By language')}`);\n console.log(renderTable(langEntries.map(([k, v]) => [k, String(v)])));\n }\n\n // Sync state\n const threshold = stats.syncWarningThreshold ?? 10;\n const pendingFiles: number = stats.pendingFiles ?? 0;\n const syncRunning: boolean = stats.syncRunning ?? false;\n console.log();\n console.log(section(' Sync'));\n if (syncRunning) {\n console.log(` ${'\\x1b[33m'}\u26A0 Sync is currently running in the background.${reset}`);\n } else {\n console.log(` ${label('Status')} ${dim}idle${reset}`);\n }\n if (pendingFiles > 0) {\n const warn = threshold > 0 && pendingFiles >= threshold;\n const pendingLabel = warn ? `${'\\x1b[33m'}${pendingFiles} files pending${reset}` : `${dim}${pendingFiles} files pending${reset}`;\n console.log(` ${label('Pending')} ${pendingLabel}`);\n if (warn) {\n console.log(` ${'\\x1b[33m'}\u26A0 Index may be stale. Run \\`kirograph sync\\` to update.${reset}`);\n }\n } else {\n console.log(` ${label('Pending')} ${green}up to date${reset}`);\n }\n\n console.log();\n console.log(section(' Semantic Search'));\n if (stats.embeddingsEnabled) {\n const engineLabel =\n stats.semanticEngine === 'sqlite-vec' ? `sqlite-vec ${dim}(${stats.vecIndexCount} entries in ANN index)${reset}` :\n stats.semanticEngine === 'orama' ? `orama ${dim}(hybrid \u2014 ${stats.vecIndexCount} docs in index)${reset}` :\n stats.semanticEngine === 'pglite' ? `pglite+pgvector ${dim}(hybrid \u2014 ${stats.vecIndexCount} rows in DB)${reset}` :\n stats.semanticEngine === 'lancedb' ? `lancedb ${dim}(${stats.vecIndexCount} entries in ANN index)${reset}` :\n stats.semanticEngine === 'qdrant' ? `qdrant ${dim}(${stats.vecIndexCount} points in collection)${reset}` :\n stats.semanticEngine === 'typesense' ? `typesense ${dim}(${stats.vecIndexCount} documents in collection)${reset}` :\n `in-process cosine`;\n const total = stats.embeddableNodeCount > 0 ? stats.embeddableNodeCount : stats.nodes;\n const displayed = Math.min(stats.embeddingCount, total);\n const coverage = total > 0 ? Math.min(100, Math.round((stats.embeddingCount / total) * 100)) : 0;\n console.log(` ${label('Status')} ${green}${bold}enabled${reset}`);\n console.log(` ${label('Model')} ${value(stats.embeddingModel)}`);\n console.log(` ${label('Engine')} ${violet}${engineLabel}${reset}`);\n if (stats.engineFallback) {\n console.log(` ${'\\x1b[33m'}\u26A0 engine fallback: ${stats.engineFallback}${reset}`);\n }\n console.log(` ${label('Indexed')} ${value(`${displayed} / ${total}`)} ${dim}(${coverage}%)${reset}`);\n } else {\n console.log(` ${label('Status')} ${dim}disabled${reset}`);\n }\n\n // Pattern SAST section\n try {\n const patConfig = await loadConfig(target);\n if (patConfig.enablePatterns) {\n const db2 = cg.getDatabase();\n (db2 as any).applyPatternsSchema?.();\n const rawDb2 = db2.getRawDb();\n const tableExists = rawDb2.get(\"SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'\");\n if (tableExists) {\n const matchCount = (rawDb2.get('SELECT COUNT(*) as cnt FROM pattern_matches') as any)?.cnt ?? 0;\n const fileCount = (rawDb2.get('SELECT COUNT(DISTINCT file_path) as cnt FROM pattern_matches') as any)?.cnt ?? 0;\n const ruleCount = (rawDb2.get('SELECT COUNT(DISTINCT pattern_id) as cnt FROM pattern_matches') as any)?.cnt ?? 0;\n console.log();\n console.log(section(' Patterns'));\n console.log(` ${label('Status')} ${green}${bold}enabled${reset}`);\n if (matchCount > 0) {\n console.log(` ${label('Matches')} ${value(String(matchCount))} ${dim}across ${fileCount} files, ${ruleCount} rules triggered${reset}`);\n } else {\n console.log(` ${label('Matches')} ${dim}none yet \u2014 run kirograph index${reset}`);\n }\n } else {\n console.log();\n console.log(section(' Patterns'));\n console.log(` ${label('Status')} ${green}${bold}enabled${reset} ${dim}(not yet indexed \u2014 run kirograph index)${reset}`);\n }\n }\n } catch { /* non-critical */ }\n\n // Security stats (conditional on enableSecurity)\n try {\n const config = await loadConfig(target);\n if (config.enableSecurity) {\n const db = cg.getDatabase();\n db.applySecuritySchema();\n const rawDb = db.getRawDb();\n\n const depCount: number = rawDb.get('SELECT COUNT(*) as cnt FROM sec_dependencies')?.cnt ?? 0;\n const vulnCount: number = rawDb.get('SELECT COUNT(*) as cnt FROM sec_vulnerabilities')?.cnt ?? 0;\n const affectedCount: number = rawDb.get(\"SELECT COUNT(*) as cnt FROM sec_reachability WHERE verdict = 'affected'\")?.cnt ?? 0;\n const notAffectedCount: number = rawDb.get(\"SELECT COUNT(*) as cnt FROM sec_reachability WHERE verdict = 'not_affected'\")?.cnt ?? 0;\n const investigatingCount: number = rawDb.get(\"SELECT COUNT(*) as cnt FROM sec_reachability WHERE verdict = 'under_investigation'\")?.cnt ?? 0;\n const staleCount: number = rawDb.get('SELECT COUNT(*) as cnt FROM sec_dependencies WHERE vuln_data_stale = 1')?.cnt ?? 0;\n\n console.log();\n console.log(section(' \uD83D\uDD12 Security'));\n console.log(` ${label('Dependencies')} ${value(String(depCount))}`);\n console.log(` ${label('Vulnerabilities')} ${value(String(vulnCount))}`);\n\n if (vulnCount > 0) {\n const affectedLabel = affectedCount > 0\n ? `${'\\x1b[31m'}${affectedCount} affected${reset}`\n : `${dim}0 affected${reset}`;\n console.log(` ${label('Affected')} ${affectedLabel}`);\n console.log(` ${label('Not Affected')} ${dim}${notAffectedCount}${reset}`);\n console.log(` ${label('Investigating')} ${dim}${investigatingCount}${reset}`);\n }\n\n if (staleCount > 0) {\n console.log(` ${'\\x1b[33m'}\u26A0 ${staleCount} dependenc${staleCount === 1 ? 'y has' : 'ies have'} stale vulnerability data. Run \\`kirograph vulns --refresh\\` to update.${reset}`);\n }\n }\n } catch { /* non-critical */ }\n\n console.log();\n cg.close();\n });\n}\n\nasync function showIntegrations(projectRoot: string): Promise<void> {\n const fs = await import('fs');\n const { detectPlatforms } = await Promise.resolve().then(() => require('../installer/detect.js'));\n const { readJson, KIROGRAPH_SERVER_NAME } = await Promise.resolve().then(() => require('../installer/common.js'));\n\n const detected = detectPlatforms(projectRoot);\n const home = process.env.HOME || process.env.USERPROFILE || '';\n\n // Map of target \u2192 config path to check if kirograph is configured\n const configChecks: Record<string, { path: string; key: string }> = {\n 'kiro': { path: path.join(projectRoot, '.kiro', 'settings', 'mcp.json'), key: 'mcpServers' },\n 'claude': { path: path.join(projectRoot, '.mcp.json'), key: 'mcpServers' },\n 'cursor': { path: path.join(projectRoot, '.cursor', 'mcp.json'), key: 'mcpServers' },\n 'windsurf': { path: path.join(home, '.codeium', 'windsurf', 'mcp_config.json'), key: 'mcpServers' },\n 'codex': { path: path.join(projectRoot, '.codex', 'hooks.json'), key: 'hooks' },\n 'copilot': { path: path.join(projectRoot, '.vscode', 'mcp.json'), key: 'servers' },\n 'copilot-cli': { path: path.join(home, '.copilot', 'mcp-config.json'), key: 'servers' },\n 'gemini-cli': { path: path.join(projectRoot, '.gemini', 'settings.json'), key: 'mcpServers' },\n 'continue': { path: path.join(projectRoot, '.continue', 'mcpServers', 'kirograph.json'), key: 'mcpServers' },\n 'opencode': { path: path.join(projectRoot, '.opencode.json'), key: 'mcp' },\n 'antigravity': { path: path.join(home, '.gemini', 'antigravity', 'mcp_config.json'), key: 'mcpServers' },\n 'roo': { path: path.join(projectRoot, '.roo', 'mcp.json'), key: 'mcpServers' },\n 'warp': { path: path.join(projectRoot, '.warp', '.mcp.json'), key: 'mcpServers' },\n 'trae': { path: path.join(projectRoot, '.trae', 'mcp.json'), key: 'mcpServers' },\n 'amp': { path: path.join(projectRoot, '.amp', 'config.json'), key: 'mcpServers' },\n 'cline': { path: path.join(projectRoot, '.cline', 'mcp_settings.json'), key: 'mcpServers' },\n 'qoder': { path: path.join(projectRoot, '.qoder', 'mcp.json'), key: 'mcpServers' },\n 'qwen': { path: path.join(home, '.qwen', 'settings.json'), key: 'mcpServers' },\n };\n\n function isConfigured(target: string): boolean {\n const check = configChecks[target];\n if (!check) return false;\n if (!fs.existsSync(check.path)) return false;\n const config = readJson(check.path);\n const container = config[check.key];\n if (!container) return false;\n if (typeof container === 'object' && !Array.isArray(container)) {\n return KIROGRAPH_SERVER_NAME in container;\n }\n return false;\n }\n\n const configured = detected.filter(d => isConfigured(d.target));\n const notConfigured = detected.filter(d => !isConfigured(d.target));\n\n console.log();\n console.log(section(' Integrations'));\n console.log();\n\n if (configured.length > 0) {\n console.log(` ${label('Configured:')}`);\n for (const d of configured) {\n const check = configChecks[d.target];\n const configPath = check ? check.path.replace(projectRoot, '.').replace(home, '~') : '';\n console.log(` ${green}\u2713${reset} ${d.label.padEnd(20)} ${dim}${configPath}${reset}`);\n }\n }\n\n if (notConfigured.length > 0) {\n if (configured.length > 0) console.log();\n console.log(` ${label('Detected but not configured:')}`);\n for (const d of notConfigured) {\n const check = configChecks[d.target];\n const configPath = check ? check.path.replace(projectRoot, '.').replace(home, '~') : '';\n console.log(` ${dim}\u25CB${reset} ${d.label.padEnd(20)} ${dim}${configPath}${reset}`);\n }\n console.log();\n console.log(` ${dim}Run \\`kirograph install\\` to configure detected platforms.${reset}`);\n }\n\n if (detected.length === 0) {\n console.log(` ${dim}No AI coding platforms detected.${reset}`);\n }\n\n console.log();\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supply-chain.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/supply-chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgG/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surprising.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/surprising.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2C/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiD/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninit.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/uninit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"uninit.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/uninit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,gBAAgB,UAW5B,CAAC;AAgIF,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAc/C"}
|
|
@@ -9,4 +9,9 @@ export declare function formatSyncCounts(result: {
|
|
|
9
9
|
removed: unknown[];
|
|
10
10
|
duration: number;
|
|
11
11
|
}): string;
|
|
12
|
+
/**
|
|
13
|
+
* Track token savings for a CLI graph tool invocation.
|
|
14
|
+
* Non-critical — silently ignores errors.
|
|
15
|
+
*/
|
|
16
|
+
export declare function trackCliToolSaving(projectRoot: string, toolName: string, output: string, args?: Record<string, unknown>): void;
|
|
12
17
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/utils.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAK5F;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE1D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEhI"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/utils.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAK5F;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE1D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEhI;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAa9H"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vex.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/vex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyC/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vuln-suppress.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/vuln-suppress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoF/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vulns.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/vulns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+a/C"}
|