kirograph 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +38 -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/grammars.d.ts +6 -0
- package/dist/extraction/grammars.d.ts.map +1 -1
- package/dist/extraction/languages.d.ts.map +1 -1
- 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/command-injection-go.yaml +11 -0
- package/dist/patterns/library/dangerous-eval-js.yaml +14 -0
- package/dist/patterns/library/dangerous-exec-py.yaml +13 -0
- package/dist/patterns/library/dangerous-reflection-java.yaml +8 -0
- package/dist/patterns/library/path-traversal-go.yaml +11 -0
- package/dist/patterns/library/path-traversal-py.yaml +12 -0
- package/dist/patterns/library/path-traversal-readfile-js.yaml +14 -0
- package/dist/patterns/library/prototype-pollution-js.yaml +12 -0
- package/dist/patterns/library/sql-injection-concat-js.yaml +12 -0
- package/dist/patterns/library/sql-injection-java.yaml +13 -0
- package/dist/patterns/library/sql-injection-py.yaml +12 -0
- package/dist/patterns/library/sql-injection-template-js.yaml +13 -0
- package/dist/patterns/library/weak-crypto-md5-js.yaml +13 -0
- package/dist/patterns/library/weak-crypto-py.yaml +13 -0
- package/dist/patterns/loader.d.ts +18 -0
- package/dist/patterns/loader.d.ts.map +1 -0
- package/dist/patterns/loader.js +277 -0
- package/dist/patterns/loader.js.map +7 -0
- package/dist/patterns/runner.d.ts +42 -0
- package/dist/patterns/runner.d.ts.map +1 -0
- package/dist/patterns/runner.js +277 -0
- package/dist/patterns/runner.js.map +7 -0
- package/dist/patterns/types.d.ts +27 -0
- package/dist/patterns/types.d.ts.map +1 -0
- package/dist/patterns/types.js +34 -0
- package/dist/patterns/types.js.map +7 -0
- package/dist/resolution/bridges/android-rn.d.ts +13 -0
- package/dist/resolution/bridges/android-rn.d.ts.map +1 -0
- package/dist/resolution/bridges/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/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 +1 -1
- package/dist/vectors/index.d.ts +11 -3
- package/dist/vectors/index.d.ts.map +1 -1
- package/dist/vectors/qdrant-index.d.ts +10 -3
- package/dist/vectors/qdrant-index.d.ts.map +1 -1
- package/dist/vectors/typesense-index.d.ts.map +1 -1
- package/dist/watchmen/index.js +83 -0
- package/dist/watchmen/index.js.map +7 -0
- package/dist/watchmen/synthesize.js +475 -0
- package/dist/watchmen/synthesize.js.map +7 -0
- package/package.json +5 -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
package/dist/mcp/server.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/mcp/server.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * KiroGraph MCP Server\n * Implements the Model Context Protocol over stdio.\n */\n\nimport * as path from 'path';\nimport KiroGraph, { findNearestKiroGraphRoot } from '../index';\nimport { StdioTransport, ErrorCodes } from './transport';\nimport { tools, ToolHandler } from './tools';\nimport type { JsonRpcMessage } from './transport';\n\nconst SERVER_INFO = { name: 'kirograph', version: '0.1.0' };\nconst PROTOCOL_VERSION = '2024-11-05';\n\nexport class MCPServer {\n private transport = new StdioTransport();\n private cg: KiroGraph | null = null;\n private toolHandler: ToolHandler;\n private projectPath: string | null;\n\n constructor(projectPath?: string) {\n // Normalize to absolute path immediately to prevent any path traversal\n this.projectPath = projectPath ? path.resolve(projectPath) : null;\n this.toolHandler = new ToolHandler(null);\n }\n\n async start(): Promise<void> {\n this.transport.start(this.handleMessage.bind(this));\n process.on('SIGINT', () => this.stop());\n process.on('SIGTERM', () => this.stop());\n process.stdin.on('end', () => this.stop());\n process.stdin.on('close', () => this.stop());\n }\n\n private async tryInit(projectPath: string): Promise<void> {\n const root = findNearestKiroGraphRoot(projectPath);\n if (!root) { this.projectPath = projectPath; return; }\n this.projectPath = root;\n try {\n this.cg = await KiroGraph.open(root);\n this.toolHandler.setDefaultKiroGraph(this.cg);\n } catch (err) {\n process.stderr.write(`[KiroGraph MCP] Failed to open ${root}: ${err}\\n`);\n }\n }\n\n private async handleMessage(msg: JsonRpcMessage): Promise<unknown> {\n const req = msg as any;\n\n switch (req.method) {\n case 'initialize': {\n const rootUri = req.params?.rootUri ?? req.params?.workspaceFolders?.[0]?.uri;\n if (rootUri) {\n const p = rootUri.startsWith('file://') ? decodeURIComponent(rootUri.replace(/^file:\\/\\/\\/?/, '')) : rootUri;\n await this.tryInit(p);\n } else if (this.projectPath) {\n await this.tryInit(this.projectPath);\n }\n return {\n protocolVersion: PROTOCOL_VERSION,\n capabilities: { tools: {} },\n serverInfo: SERVER_INFO,\n };\n }\n\n case 'tools/list'
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,WAAsB;AACtB,eAAoD;AACpD,uBAA2C;AAC3C,
|
|
4
|
+
"sourcesContent": ["/**\n * KiroGraph MCP Server\n * Implements the Model Context Protocol over stdio.\n */\n\nimport * as path from 'path';\nimport KiroGraph, { findNearestKiroGraphRoot } from '../index';\nimport { StdioTransport, ErrorCodes } from './transport';\nimport { tools, ToolHandler, LIVE_SEARCH_TOOL_DEFINITION } from './tools';\nimport { PatternRunner } from '../patterns/runner';\nimport type { JsonRpcMessage } from './transport';\n\nconst SERVER_INFO = { name: 'kirograph', version: '0.1.0' };\nconst PROTOCOL_VERSION = '2024-11-05';\n\nexport class MCPServer {\n private transport = new StdioTransport();\n private cg: KiroGraph | null = null;\n private toolHandler: ToolHandler;\n private projectPath: string | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private config: any | null = null;\n\n constructor(projectPath?: string) {\n // Normalize to absolute path immediately to prevent any path traversal\n this.projectPath = projectPath ? path.resolve(projectPath) : null;\n this.toolHandler = new ToolHandler(null);\n }\n\n async start(): Promise<void> {\n this.transport.start(this.handleMessage.bind(this));\n process.on('SIGINT', () => this.stop());\n process.on('SIGTERM', () => this.stop());\n process.stdin.on('end', () => this.stop());\n process.stdin.on('close', () => this.stop());\n }\n\n private async tryInit(projectPath: string): Promise<void> {\n const root = findNearestKiroGraphRoot(projectPath);\n if (!root) { this.projectPath = projectPath; return; }\n this.projectPath = root;\n try {\n this.cg = await KiroGraph.open(root);\n this.toolHandler.setDefaultKiroGraph(this.cg);\n } catch (err) {\n process.stderr.write(`[KiroGraph MCP] Failed to open ${root}: ${err}\\n`);\n }\n try {\n const { loadConfig } = await Promise.resolve().then(() => require('../config.js'));\n this.config = await loadConfig(root);\n } catch {\n // config is optional \u2014 proceed without it\n }\n }\n\n private async handleMessage(msg: JsonRpcMessage): Promise<unknown> {\n const req = msg as any;\n\n switch (req.method) {\n case 'initialize': {\n const rootUri = req.params?.rootUri ?? req.params?.workspaceFolders?.[0]?.uri;\n if (rootUri) {\n const p = rootUri.startsWith('file://') ? decodeURIComponent(rootUri.replace(/^file:\\/\\/\\/?/, '')) : rootUri;\n await this.tryInit(p);\n } else if (this.projectPath) {\n await this.tryInit(this.projectPath);\n }\n return {\n protocolVersion: PROTOCOL_VERSION,\n capabilities: { tools: {} },\n serverInfo: SERVER_INFO,\n };\n }\n\n case 'tools/list': {\n const dynamicTools = [...tools];\n if (this.config?.enablePatterns && new PatternRunner().isAvailable()) {\n dynamicTools.push(LIVE_SEARCH_TOOL_DEFINITION);\n }\n return { tools: dynamicTools };\n }\n\n case 'tools/call': {\n const { name, arguments: args = {} } = req.params ?? {};\n try {\n return await this.toolHandler.handle(name, args);\n } catch (err) {\n return {\n content: [{ type: 'text', text: `Error: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n }\n\n case 'notifications/initialized':\n case 'ping':\n return {};\n\n default:\n this.transport.sendError(req.id, ErrorCodes.MethodNotFound, `Unknown method: ${req.method}`);\n return undefined;\n }\n }\n\n private stop(): void {\n this.cg?.close();\n this.toolHandler.closeAll();\n process.exit(0);\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,WAAsB;AACtB,eAAoD;AACpD,uBAA2C;AAC3C,mBAAgE;AAChE,oBAA8B;AAG9B,MAAM,cAAc,EAAE,MAAM,aAAa,SAAS,QAAQ;AAC1D,MAAM,mBAAmB;AAElB,MAAM,UAAU;AAAA,EAQrB,YAAY,aAAsB;AAPlC,SAAQ,YAAY,IAAI,gCAAe;AACvC,SAAQ,KAAuB;AAI/B;AAAA,SAAQ,SAAqB;AAI3B,SAAK,cAAc,cAAc,KAAK,QAAQ,WAAW,IAAI;AAC7D,SAAK,cAAc,IAAI,yBAAY,IAAI;AAAA,EACzC;AAAA,EAEA,MAAM,QAAuB;AAC3B,SAAK,UAAU,MAAM,KAAK,cAAc,KAAK,IAAI,CAAC;AAClD,YAAQ,GAAG,UAAU,MAAM,KAAK,KAAK,CAAC;AACtC,YAAQ,GAAG,WAAW,MAAM,KAAK,KAAK,CAAC;AACvC,YAAQ,MAAM,GAAG,OAAO,MAAM,KAAK,KAAK,CAAC;AACzC,YAAQ,MAAM,GAAG,SAAS,MAAM,KAAK,KAAK,CAAC;AAAA,EAC7C;AAAA,EAEA,MAAc,QAAQ,aAAoC;AACxD,UAAM,WAAO,mCAAyB,WAAW;AACjD,QAAI,CAAC,MAAM;AAAE,WAAK,cAAc;AAAa;AAAA,IAAQ;AACrD,SAAK,cAAc;AACnB,QAAI;AACF,WAAK,KAAK,MAAM,SAAAA,QAAU,KAAK,IAAI;AACnC,WAAK,YAAY,oBAAoB,KAAK,EAAE;AAAA,IAC9C,SAAS,KAAK;AACZ,cAAQ,OAAO,MAAM,kCAAkC,IAAI,KAAK,GAAG;AAAA,CAAI;AAAA,IACzE;AACA,QAAI;AACF,YAAM,EAAE,WAAW,IAAI,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,cAAc,CAAC;AACjF,WAAK,SAAS,MAAM,WAAW,IAAI;AAAA,IACrC,QAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEA,MAAc,cAAc,KAAuC;AACjE,UAAM,MAAM;AAEZ,YAAQ,IAAI,QAAQ;AAAA,MAClB,KAAK,cAAc;AACjB,cAAM,UAAU,IAAI,QAAQ,WAAW,IAAI,QAAQ,mBAAmB,CAAC,GAAG;AAC1E,YAAI,SAAS;AACX,gBAAM,IAAI,QAAQ,WAAW,SAAS,IAAI,mBAAmB,QAAQ,QAAQ,iBAAiB,EAAE,CAAC,IAAI;AACrG,gBAAM,KAAK,QAAQ,CAAC;AAAA,QACtB,WAAW,KAAK,aAAa;AAC3B,gBAAM,KAAK,QAAQ,KAAK,WAAW;AAAA,QACrC;AACA,eAAO;AAAA,UACL,iBAAiB;AAAA,UACjB,cAAc,EAAE,OAAO,CAAC,EAAE;AAAA,UAC1B,YAAY;AAAA,QACd;AAAA,MACF;AAAA,MAEA,KAAK,cAAc;AACjB,cAAM,eAAe,CAAC,GAAG,kBAAK;AAC9B,YAAI,KAAK,QAAQ,kBAAkB,IAAI,4BAAc,EAAE,YAAY,GAAG;AACpE,uBAAa,KAAK,wCAA2B;AAAA,QAC/C;AACA,eAAO,EAAE,OAAO,aAAa;AAAA,MAC/B;AAAA,MAEA,KAAK,cAAc;AACjB,cAAM,EAAE,MAAM,WAAW,OAAO,CAAC,EAAE,IAAI,IAAI,UAAU,CAAC;AACtD,YAAI;AACF,iBAAO,MAAM,KAAK,YAAY,OAAO,MAAM,IAAI;AAAA,QACjD,SAAS,KAAK;AACZ,iBAAO;AAAA,YACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,GAAG,CAAC;AAAA,YAC9F,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK;AACH,eAAO,CAAC;AAAA,MAEV;AACE,aAAK,UAAU,UAAU,IAAI,IAAI,4BAAW,gBAAgB,mBAAmB,IAAI,MAAM,EAAE;AAC3F,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEQ,OAAa;AACnB,SAAK,IAAI,MAAM;AACf,SAAK,YAAY,SAAS;AAC1B,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;",
|
|
6
6
|
"names": ["KiroGraph"]
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-names.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-names.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,UA6DhC,CAAC"}
|
package/dist/mcp/tool-names.js
CHANGED
|
@@ -78,7 +78,10 @@ const KIROGRAPH_TOOL_NAMES = [
|
|
|
78
78
|
"kirograph_security_flows",
|
|
79
79
|
"kirograph_supply_chain",
|
|
80
80
|
"kirograph_dep_confusion",
|
|
81
|
-
"kirograph_remediation"
|
|
81
|
+
"kirograph_remediation",
|
|
82
|
+
"kirograph_pattern_coverage",
|
|
83
|
+
"kirograph_pattern_save_baseline",
|
|
84
|
+
"kirograph_pattern_diff"
|
|
82
85
|
];
|
|
83
86
|
// Annotate the CommonJS export names for ESM import in node:
|
|
84
87
|
0 && (module.exports = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/mcp/tool-names.ts"],
|
|
4
|
-
"sourcesContent": ["export const KIROGRAPH_TOOL_NAMES = [\n 'kirograph_search',\n 'kirograph_context',\n 'kirograph_callers',\n 'kirograph_callees',\n 'kirograph_impact',\n 'kirograph_node',\n 'kirograph_status',\n 'kirograph_files',\n 'kirograph_dead_code',\n 'kirograph_circular_deps',\n 'kirograph_path',\n 'kirograph_architecture',\n 'kirograph_coupling',\n 'kirograph_package',\n 'kirograph_hotspots',\n 'kirograph_surprising',\n 'kirograph_diff',\n 'kirograph_type_hierarchy',\n 'kirograph_exec',\n 'kirograph_gain',\n 'kirograph_read',\n 'kirograph_budget',\n 'kirograph_flows',\n 'kirograph_communities',\n 'kirograph_refactor',\n 'kirograph_mem_search',\n 'kirograph_mem_store',\n 'kirograph_mem_timeline',\n 'kirograph_mem_status',\n 'kirograph_docs_toc',\n 'kirograph_docs_search',\n 'kirograph_docs_section',\n 'kirograph_docs_outline',\n 'kirograph_docs_refs',\n 'kirograph_data_list',\n 'kirograph_data_describe',\n 'kirograph_data_query',\n 'kirograph_data_aggregate',\n 'kirograph_data_search',\n 'kirograph_data_join',\n 'kirograph_data_correlations',\n 'kirograph_data_quality',\n 'kirograph_security',\n 'kirograph_vulns',\n 'kirograph_sbom',\n 'kirograph_vex',\n 'kirograph_reachability',\n 'kirograph_vuln_add',\n 'kirograph_vuln_suppress',\n 'kirograph_staleness',\n 'kirograph_licenses',\n 'kirograph_attack_surface',\n 'kirograph_secrets',\n 'kirograph_security_flows',\n 'kirograph_supply_chain',\n 'kirograph_dep_confusion',\n 'kirograph_remediation',\n];\n\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
|
|
4
|
+
"sourcesContent": ["export const KIROGRAPH_TOOL_NAMES = [\n 'kirograph_search',\n 'kirograph_context',\n 'kirograph_callers',\n 'kirograph_callees',\n 'kirograph_impact',\n 'kirograph_node',\n 'kirograph_status',\n 'kirograph_files',\n 'kirograph_dead_code',\n 'kirograph_circular_deps',\n 'kirograph_path',\n 'kirograph_architecture',\n 'kirograph_coupling',\n 'kirograph_package',\n 'kirograph_hotspots',\n 'kirograph_surprising',\n 'kirograph_diff',\n 'kirograph_type_hierarchy',\n 'kirograph_exec',\n 'kirograph_gain',\n 'kirograph_read',\n 'kirograph_budget',\n 'kirograph_flows',\n 'kirograph_communities',\n 'kirograph_refactor',\n 'kirograph_mem_search',\n 'kirograph_mem_store',\n 'kirograph_mem_timeline',\n 'kirograph_mem_status',\n 'kirograph_docs_toc',\n 'kirograph_docs_search',\n 'kirograph_docs_section',\n 'kirograph_docs_outline',\n 'kirograph_docs_refs',\n 'kirograph_data_list',\n 'kirograph_data_describe',\n 'kirograph_data_query',\n 'kirograph_data_aggregate',\n 'kirograph_data_search',\n 'kirograph_data_join',\n 'kirograph_data_correlations',\n 'kirograph_data_quality',\n 'kirograph_security',\n 'kirograph_vulns',\n 'kirograph_sbom',\n 'kirograph_vex',\n 'kirograph_reachability',\n 'kirograph_vuln_add',\n 'kirograph_vuln_suppress',\n 'kirograph_staleness',\n 'kirograph_licenses',\n 'kirograph_attack_surface',\n 'kirograph_secrets',\n 'kirograph_security_flows',\n 'kirograph_supply_chain',\n 'kirograph_dep_confusion',\n 'kirograph_remediation',\n 'kirograph_pattern_coverage',\n 'kirograph_pattern_save_baseline',\n 'kirograph_pattern_diff',\n];\n\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/mcp/tools.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* KiroGraph MCP Tool Definitions + Handlers
|
|
3
3
|
*/
|
|
4
4
|
import KiroGraph from '../index';
|
|
5
|
+
export { KIROGRAPH_TOOL_NAMES } from './tool-names';
|
|
5
6
|
export interface ToolDefinition {
|
|
6
7
|
name: string;
|
|
7
8
|
description: string;
|
|
@@ -17,13 +18,24 @@ export interface ToolDefinition {
|
|
|
17
18
|
};
|
|
18
19
|
}
|
|
19
20
|
export declare const tools: ToolDefinition[];
|
|
21
|
+
/**
|
|
22
|
+
* Dynamic tool definition for kirograph_live_search.
|
|
23
|
+
* NOT included in the static `tools` array — injected into tools/list at runtime
|
|
24
|
+
* only when config.enablePatterns === true AND @ast-grep/napi is available.
|
|
25
|
+
* NOT added to KIROGRAPH_TOOL_NAMES (which is a static list for Kiro autoApprove).
|
|
26
|
+
*/
|
|
27
|
+
export declare const LIVE_SEARCH_TOOL_DEFINITION: ToolDefinition;
|
|
20
28
|
export declare class ToolHandler {
|
|
21
29
|
private defaultCg;
|
|
22
30
|
private connections;
|
|
31
|
+
/** Anti-loop: track recent data_query calls per dataset for pagination detection. */
|
|
32
|
+
private queryTracker;
|
|
23
33
|
constructor(cg: KiroGraph | null);
|
|
24
34
|
setDefaultKiroGraph(cg: KiroGraph): void;
|
|
25
35
|
/** Close all cached cross-project connections. */
|
|
26
36
|
closeAll(): void;
|
|
37
|
+
/** Anti-loop: detect pagination patterns and warn the agent. */
|
|
38
|
+
private checkPaginationLoop;
|
|
27
39
|
private getConnection;
|
|
28
40
|
handle(toolName: string, args: Record<string, unknown>): Promise<{
|
|
29
41
|
content: Array<{
|
package/dist/mcp/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,SAAuC,MAAM,UAAU,CAAC;AAK/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAyDpD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QACtG,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,eAAO,MAAM,KAAK,EAAE,cAAc,EA4xBjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,EAAE,cAczC,CAAC;AAEF,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,WAAW,CAAgC;IACnD,qFAAqF;IACrF,OAAO,CAAC,YAAY,CAA8D;gBAEtE,EAAE,EAAE,SAAS,GAAG,IAAI;IAIhC,mBAAmB,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAIxC,kDAAkD;IAClD,QAAQ,IAAI,IAAI;IAOhB,gEAAgE;IAChE,OAAO,CAAC,mBAAmB;YAiCb,aAAa;IAerB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;YAoC/H,QAAQ;CA02FvB"}
|
package/dist/mcp/tools.js
CHANGED
|
@@ -29,6 +29,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
29
29
|
var tools_exports = {};
|
|
30
30
|
__export(tools_exports, {
|
|
31
31
|
KIROGRAPH_TOOL_NAMES: () => import_tool_names.KIROGRAPH_TOOL_NAMES,
|
|
32
|
+
LIVE_SEARCH_TOOL_DEFINITION: () => LIVE_SEARCH_TOOL_DEFINITION,
|
|
32
33
|
ToolHandler: () => ToolHandler,
|
|
33
34
|
tools: () => tools
|
|
34
35
|
});
|
|
@@ -848,8 +849,55 @@ const tools = [
|
|
|
848
849
|
projectPath: { type: "string", description: "Project root path (optional)" }
|
|
849
850
|
}
|
|
850
851
|
}
|
|
852
|
+
},
|
|
853
|
+
// ── Pattern tools (require enablePatterns=true) ─────────────────────────────
|
|
854
|
+
{
|
|
855
|
+
name: "kirograph_pattern_coverage",
|
|
856
|
+
description: "OWASP Top 10 coverage report: shows which vulnerability categories are covered by bundled pattern rules and how many matches exist in each.",
|
|
857
|
+
inputSchema: {
|
|
858
|
+
type: "object",
|
|
859
|
+
properties: {
|
|
860
|
+
projectPath: { type: "string", description: "Project root path (optional)" }
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
},
|
|
864
|
+
{
|
|
865
|
+
name: "kirograph_pattern_save_baseline",
|
|
866
|
+
description: "Save current pattern match counts as a baseline for future diffing.",
|
|
867
|
+
inputSchema: {
|
|
868
|
+
type: "object",
|
|
869
|
+
properties: {
|
|
870
|
+
label: { type: "string", description: 'Baseline label (default: "default")', default: "default" },
|
|
871
|
+
projectPath: { type: "string", description: "Project root path (optional)" }
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
},
|
|
875
|
+
{
|
|
876
|
+
name: "kirograph_pattern_diff",
|
|
877
|
+
description: "Diff current pattern matches against a saved baseline. Shows new findings, resolved findings, and unchanged counts.",
|
|
878
|
+
inputSchema: {
|
|
879
|
+
type: "object",
|
|
880
|
+
properties: {
|
|
881
|
+
label: { type: "string", description: 'Baseline label (default: "default")', default: "default" },
|
|
882
|
+
projectPath: { type: "string", description: "Project root path (optional)" }
|
|
883
|
+
}
|
|
884
|
+
}
|
|
851
885
|
}
|
|
852
886
|
];
|
|
887
|
+
const LIVE_SEARCH_TOOL_DEFINITION = {
|
|
888
|
+
name: "kirograph_live_search",
|
|
889
|
+
description: "Run a live AST pattern search against the indexed file list using @ast-grep/napi. Finds structural code patterns (SQL injection, eval, path traversal, etc.) without needing the codebase to be re-indexed. Only available when enablePatterns: true.",
|
|
890
|
+
inputSchema: {
|
|
891
|
+
type: "object",
|
|
892
|
+
required: ["pattern", "language"],
|
|
893
|
+
properties: {
|
|
894
|
+
pattern: { type: "string", description: 'ast-grep inline pattern (e.g. "eval($X)")' },
|
|
895
|
+
language: { type: "string", description: "Language to search: javascript, typescript, python, go, rust, java, etc." },
|
|
896
|
+
limit: { type: "number", description: "Max results (default 20, max 100)", default: 20 },
|
|
897
|
+
projectPath: { type: "string", description: "Project root path (optional)" }
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
};
|
|
853
901
|
class ToolHandler {
|
|
854
902
|
constructor(cg) {
|
|
855
903
|
this.connections = /* @__PURE__ */ new Map();
|
|
@@ -1263,6 +1311,38 @@ ${result.content}`;
|
|
|
1263
1311
|
}
|
|
1264
1312
|
} catch {
|
|
1265
1313
|
}
|
|
1314
|
+
try {
|
|
1315
|
+
const projectRootPat = cg.getProjectRoot();
|
|
1316
|
+
const configPat = await (await Promise.resolve().then(() => require("../config.js"))).loadConfig(projectRootPat);
|
|
1317
|
+
if (configPat.enablePatterns) {
|
|
1318
|
+
const dbPat = cg.getDatabase();
|
|
1319
|
+
dbPat.applyPatternsSchema();
|
|
1320
|
+
const rawDbPat = dbPat.getRawDb();
|
|
1321
|
+
const tableExists = rawDbPat.get("SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'");
|
|
1322
|
+
if (tableExists) {
|
|
1323
|
+
const contextFiles = [
|
|
1324
|
+
...ctx.entryPoints.map((n) => n.filePath),
|
|
1325
|
+
...ctx.relatedNodes.map((n) => n.filePath)
|
|
1326
|
+
].filter(Boolean);
|
|
1327
|
+
const uniqueContextFiles = [...new Set(contextFiles)];
|
|
1328
|
+
if (uniqueContextFiles.length > 0) {
|
|
1329
|
+
const placeholders = uniqueContextFiles.map(() => "?").join(",");
|
|
1330
|
+
const patternRows = rawDbPat.all(
|
|
1331
|
+
`SELECT file_path, pattern_id, severity, owasp_category, line FROM pattern_matches WHERE file_path IN (${placeholders}) ORDER BY severity DESC LIMIT 5`,
|
|
1332
|
+
uniqueContextFiles
|
|
1333
|
+
);
|
|
1334
|
+
if (patternRows.length > 0) {
|
|
1335
|
+
const patternWarnings = patternRows.map(
|
|
1336
|
+
(p) => `- **${p.pattern_id}** [${p.severity.toUpperCase()}/${p.owasp_category}]: ${p.file_path}:${p.line}`
|
|
1337
|
+
).join("\n");
|
|
1338
|
+
lines.push("", "## \u26A0 Pattern Findings", "", patternWarnings);
|
|
1339
|
+
if (patternRows.length === 5) lines.push("", "More findings \u2014 run `kirograph pattern --list` to see all rules.");
|
|
1340
|
+
}
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
}
|
|
1344
|
+
} catch {
|
|
1345
|
+
}
|
|
1266
1346
|
const graphTokens = lines.join("\n").length / 4;
|
|
1267
1347
|
const uniqueFiles = /* @__PURE__ */ new Set([
|
|
1268
1348
|
...ctx.entryPoints.map((n) => n.filePath),
|
|
@@ -1339,6 +1419,27 @@ ${result.content}`;
|
|
|
1339
1419
|
}
|
|
1340
1420
|
} catch {
|
|
1341
1421
|
}
|
|
1422
|
+
try {
|
|
1423
|
+
const rawDbImp = cg.getDatabase().getRawDb();
|
|
1424
|
+
const tableExistsImp = rawDbImp.get("SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'");
|
|
1425
|
+
if (tableExistsImp) {
|
|
1426
|
+
const symNode = rawDbImp.get("SELECT id FROM nodes WHERE name = ? LIMIT 1", [args.symbol]);
|
|
1427
|
+
if (symNode) {
|
|
1428
|
+
const patternMatches = rawDbImp.all(
|
|
1429
|
+
"SELECT pattern_id, severity, line FROM pattern_matches WHERE symbol_node_id = ?",
|
|
1430
|
+
[symNode.id]
|
|
1431
|
+
);
|
|
1432
|
+
if (patternMatches.length > 0) {
|
|
1433
|
+
output += "\n\n\u26A0 This symbol has pattern matches:";
|
|
1434
|
+
for (const pm of patternMatches) {
|
|
1435
|
+
output += `
|
|
1436
|
+
[${pm.severity.toUpperCase()}] ${pm.pattern_id} at line ${pm.line}`;
|
|
1437
|
+
}
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1441
|
+
} catch {
|
|
1442
|
+
}
|
|
1342
1443
|
return output;
|
|
1343
1444
|
}
|
|
1344
1445
|
case "kirograph_node": {
|
|
@@ -1423,6 +1524,24 @@ ${result.content}`;
|
|
|
1423
1524
|
}
|
|
1424
1525
|
} catch {
|
|
1425
1526
|
}
|
|
1527
|
+
let patternsLine = " Patterns: disabled";
|
|
1528
|
+
try {
|
|
1529
|
+
const { loadConfig: loadCfgPat } = await Promise.resolve().then(() => require("../config.js"));
|
|
1530
|
+
const cfgP = await loadCfgPat(cg.getProjectRoot());
|
|
1531
|
+
if (cfgP.enablePatterns) {
|
|
1532
|
+
const rawDbP = cg.getDatabase().getRawDb();
|
|
1533
|
+
const tableExistsP = rawDbP.get("SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'");
|
|
1534
|
+
if (tableExistsP) {
|
|
1535
|
+
const matchCount = rawDbP.get("SELECT COUNT(*) as cnt FROM pattern_matches")?.cnt ?? 0;
|
|
1536
|
+
const fileCount = rawDbP.get("SELECT COUNT(DISTINCT file_path) as cnt FROM pattern_matches")?.cnt ?? 0;
|
|
1537
|
+
const ruleCount = rawDbP.get("SELECT COUNT(DISTINCT pattern_id) as cnt FROM pattern_matches")?.cnt ?? 0;
|
|
1538
|
+
patternsLine = ` Patterns: enabled \u2014 ${matchCount} matches, ${ruleCount} rules triggered, ${fileCount} files`;
|
|
1539
|
+
} else {
|
|
1540
|
+
patternsLine = ` Patterns: enabled (no data yet \u2014 run kirograph index)`;
|
|
1541
|
+
}
|
|
1542
|
+
}
|
|
1543
|
+
} catch {
|
|
1544
|
+
}
|
|
1426
1545
|
const threshold = stats.syncWarningThreshold ?? 10;
|
|
1427
1546
|
const pendingFiles = stats.pendingFiles ?? 0;
|
|
1428
1547
|
const syncRunning = stats.syncRunning ?? false;
|
|
@@ -1454,6 +1573,7 @@ ${result.content}`;
|
|
|
1454
1573
|
docsLine,
|
|
1455
1574
|
dataLine,
|
|
1456
1575
|
securityLine,
|
|
1576
|
+
patternsLine,
|
|
1457
1577
|
` DB size: ${dbMb} MB`,
|
|
1458
1578
|
...semanticLines,
|
|
1459
1579
|
...syncLines,
|
|
@@ -2398,6 +2518,18 @@ ${lines.join("\n")}`;
|
|
|
2398
2518
|
lines.push("", `\u26A0 Vulnerability data is ${Math.floor(ageDays)} days old (max: ${maxAge}). Run kirograph vulns --refresh to update.`);
|
|
2399
2519
|
}
|
|
2400
2520
|
}
|
|
2521
|
+
try {
|
|
2522
|
+
const rawDbSec = db.getRawDb();
|
|
2523
|
+
const tableExistsSec = rawDbSec.get("SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'");
|
|
2524
|
+
if (tableExistsSec) {
|
|
2525
|
+
const patternCount = rawDbSec.get("SELECT COUNT(*) as cnt FROM pattern_matches")?.cnt ?? 0;
|
|
2526
|
+
if (patternCount > 0) {
|
|
2527
|
+
const critCount = rawDbSec.get("SELECT COUNT(*) as cnt FROM pattern_matches WHERE severity = 'critical'")?.cnt ?? 0;
|
|
2528
|
+
lines.push(`SAST findings: ${patternCount} pattern matches (${critCount} critical)`);
|
|
2529
|
+
}
|
|
2530
|
+
}
|
|
2531
|
+
} catch {
|
|
2532
|
+
}
|
|
2401
2533
|
return lines.join("\n");
|
|
2402
2534
|
}
|
|
2403
2535
|
case "kirograph_vulns": {
|
|
@@ -2989,6 +3121,270 @@ ${lines.join("\n")}`;
|
|
|
2989
3121
|
}
|
|
2990
3122
|
return truncate(lines.join("\n"));
|
|
2991
3123
|
}
|
|
3124
|
+
case "kirograph_live_search": {
|
|
3125
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../config.js"));
|
|
3126
|
+
const projectRoot = cg.getProjectRoot();
|
|
3127
|
+
const config = await loadConfig(projectRoot);
|
|
3128
|
+
if (!config.enablePatterns) {
|
|
3129
|
+
return "kirograph_live_search requires enablePatterns: true in .kirograph/config.json";
|
|
3130
|
+
}
|
|
3131
|
+
const { PatternRunner } = await Promise.resolve().then(() => require("../patterns/runner.js"));
|
|
3132
|
+
const runner = new PatternRunner();
|
|
3133
|
+
if (!runner.isAvailable()) {
|
|
3134
|
+
return "kirograph_live_search requires @ast-grep/napi. Run: npm install @ast-grep/napi";
|
|
3135
|
+
}
|
|
3136
|
+
const pattern = args.pattern;
|
|
3137
|
+
const language = args.language;
|
|
3138
|
+
const rawLimit = typeof args.limit === "number" ? args.limit : 20;
|
|
3139
|
+
const limit = Math.max(1, Math.min(100, Math.round(rawLimit)));
|
|
3140
|
+
const db = cg.getDatabase();
|
|
3141
|
+
const rawDb = db.getRawDb();
|
|
3142
|
+
const files = rawDb.all(
|
|
3143
|
+
"SELECT path FROM files WHERE language = ? LIMIT 5000",
|
|
3144
|
+
[language]
|
|
3145
|
+
);
|
|
3146
|
+
const results = [];
|
|
3147
|
+
let truncated = false;
|
|
3148
|
+
for (const file of files) {
|
|
3149
|
+
if (results.length >= limit) {
|
|
3150
|
+
truncated = true;
|
|
3151
|
+
break;
|
|
3152
|
+
}
|
|
3153
|
+
let content;
|
|
3154
|
+
try {
|
|
3155
|
+
const fullPath = path.isAbsolute(file.path) ? file.path : path.join(projectRoot, file.path);
|
|
3156
|
+
content = fs.readFileSync(fullPath, "utf8");
|
|
3157
|
+
} catch {
|
|
3158
|
+
continue;
|
|
3159
|
+
}
|
|
3160
|
+
const matches = await runner.runInline(pattern, language, content);
|
|
3161
|
+
for (const m of matches) {
|
|
3162
|
+
if (results.length >= limit) {
|
|
3163
|
+
truncated = true;
|
|
3164
|
+
break;
|
|
3165
|
+
}
|
|
3166
|
+
results.push({ filePath: file.path, line: m.line, matchText: m.matchText });
|
|
3167
|
+
}
|
|
3168
|
+
}
|
|
3169
|
+
if (results.length === 0) {
|
|
3170
|
+
return `0 matches for '${pattern}' in ${language} files`;
|
|
3171
|
+
}
|
|
3172
|
+
const lines = [
|
|
3173
|
+
`${results.length} match${results.length !== 1 ? "es" : ""} for '${pattern}' in ${language} files`,
|
|
3174
|
+
""
|
|
3175
|
+
];
|
|
3176
|
+
for (const r of results) {
|
|
3177
|
+
lines.push(` ${r.filePath}:${r.line}`);
|
|
3178
|
+
lines.push(` ${r.matchText}`);
|
|
3179
|
+
lines.push("");
|
|
3180
|
+
}
|
|
3181
|
+
if (truncated) {
|
|
3182
|
+
lines.push(`[truncated \u2014 showing first ${limit} results; refine your pattern or use --lang to narrow scope]`);
|
|
3183
|
+
}
|
|
3184
|
+
return truncate(lines.join("\n"));
|
|
3185
|
+
}
|
|
3186
|
+
// ── Pattern tools ──────────────────────────────────────────────────────────
|
|
3187
|
+
case "kirograph_pattern_coverage": {
|
|
3188
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../config.js"));
|
|
3189
|
+
const projectRoot = cg.getProjectRoot();
|
|
3190
|
+
const config = await loadConfig(projectRoot);
|
|
3191
|
+
if (!config.enablePatterns) {
|
|
3192
|
+
return "Pattern analysis is not enabled. Set enablePatterns: true in .kirograph/config.json and run kirograph index.";
|
|
3193
|
+
}
|
|
3194
|
+
const { PatternLibraryLoader } = await Promise.resolve().then(() => require("../patterns/loader.js"));
|
|
3195
|
+
const loader = new PatternLibraryLoader();
|
|
3196
|
+
const builtinPath = path.join(__dirname, "../patterns/library");
|
|
3197
|
+
const customPath = config.patternLibraryPath;
|
|
3198
|
+
let rules = [];
|
|
3199
|
+
try {
|
|
3200
|
+
rules = loader.load(builtinPath, customPath);
|
|
3201
|
+
} catch {
|
|
3202
|
+
}
|
|
3203
|
+
const rulesByCategory = /* @__PURE__ */ new Map();
|
|
3204
|
+
for (const rule of rules) {
|
|
3205
|
+
const prefix = rule.owaspCategory.match(/^(A\d{2})/)?.[1] ?? rule.owaspCategory;
|
|
3206
|
+
if (!rulesByCategory.has(prefix)) rulesByCategory.set(prefix, []);
|
|
3207
|
+
rulesByCategory.get(prefix).push(rule);
|
|
3208
|
+
}
|
|
3209
|
+
const db = cg.getDatabase();
|
|
3210
|
+
db.applyPatternsSchema();
|
|
3211
|
+
const rawDb = db.getRawDb();
|
|
3212
|
+
const matchCountsByCategory = /* @__PURE__ */ new Map();
|
|
3213
|
+
try {
|
|
3214
|
+
const tableExists = rawDb.get("SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'");
|
|
3215
|
+
if (tableExists) {
|
|
3216
|
+
const rows = rawDb.all(
|
|
3217
|
+
"SELECT owasp_category, COUNT(*) as cnt FROM pattern_matches GROUP BY owasp_category"
|
|
3218
|
+
);
|
|
3219
|
+
for (const row of rows) {
|
|
3220
|
+
const prefix = row.owasp_category.match(/^(A\d{2})/)?.[1] ?? row.owasp_category;
|
|
3221
|
+
matchCountsByCategory.set(prefix, (matchCountsByCategory.get(prefix) ?? 0) + row.cnt);
|
|
3222
|
+
}
|
|
3223
|
+
}
|
|
3224
|
+
} catch {
|
|
3225
|
+
}
|
|
3226
|
+
const owaspTop10 = [
|
|
3227
|
+
"A01",
|
|
3228
|
+
"A02",
|
|
3229
|
+
"A03",
|
|
3230
|
+
"A04",
|
|
3231
|
+
"A05",
|
|
3232
|
+
"A06",
|
|
3233
|
+
"A07",
|
|
3234
|
+
"A08",
|
|
3235
|
+
"A09",
|
|
3236
|
+
"A10"
|
|
3237
|
+
];
|
|
3238
|
+
const owaspNames = {
|
|
3239
|
+
A01: "Broken Access Control",
|
|
3240
|
+
A02: "Cryptographic Failures",
|
|
3241
|
+
A03: "Injection",
|
|
3242
|
+
A04: "Insecure Design",
|
|
3243
|
+
A05: "Security Misconfiguration",
|
|
3244
|
+
A06: "Vulnerable and Outdated Components",
|
|
3245
|
+
A07: "Identification and Authentication Failures",
|
|
3246
|
+
A08: "Software and Data Integrity Failures",
|
|
3247
|
+
A09: "Security Logging and Monitoring Failures",
|
|
3248
|
+
A10: "Server-Side Request Forgery"
|
|
3249
|
+
};
|
|
3250
|
+
const covered = [];
|
|
3251
|
+
const uncovered = [];
|
|
3252
|
+
const lines = [
|
|
3253
|
+
"# OWASP Top 10 Pattern Coverage",
|
|
3254
|
+
"",
|
|
3255
|
+
`Total rules loaded: ${rules.length}`,
|
|
3256
|
+
"",
|
|
3257
|
+
"Category | Rules | Matches",
|
|
3258
|
+
"-------- | ----- | -------"
|
|
3259
|
+
];
|
|
3260
|
+
for (const cat of owaspTop10) {
|
|
3261
|
+
const catRules = rulesByCategory.get(cat) ?? [];
|
|
3262
|
+
const matchCount = matchCountsByCategory.get(cat) ?? 0;
|
|
3263
|
+
const label = `${cat}: ${owaspNames[cat] ?? cat}`;
|
|
3264
|
+
if (catRules.length > 0) {
|
|
3265
|
+
covered.push(label);
|
|
3266
|
+
lines.push(`${label} | ${catRules.length} | ${matchCount}`);
|
|
3267
|
+
} else {
|
|
3268
|
+
uncovered.push(label);
|
|
3269
|
+
}
|
|
3270
|
+
}
|
|
3271
|
+
for (const [cat, catRules] of rulesByCategory.entries()) {
|
|
3272
|
+
if (!owaspTop10.includes(cat)) {
|
|
3273
|
+
const matchCount = matchCountsByCategory.get(cat) ?? 0;
|
|
3274
|
+
lines.push(`${cat} | ${catRules.length} | ${matchCount}`);
|
|
3275
|
+
}
|
|
3276
|
+
}
|
|
3277
|
+
if (uncovered.length > 0) {
|
|
3278
|
+
lines.push("", `Uncovered categories (${uncovered.length}):`, ...uncovered.map((c) => ` - ${c}`));
|
|
3279
|
+
}
|
|
3280
|
+
lines.push("", `Coverage: ${covered.length} / ${owaspTop10.length} OWASP Top 10 categories`);
|
|
3281
|
+
return lines.join("\n");
|
|
3282
|
+
}
|
|
3283
|
+
case "kirograph_pattern_save_baseline": {
|
|
3284
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../config.js"));
|
|
3285
|
+
const projectRoot = cg.getProjectRoot();
|
|
3286
|
+
const config = await loadConfig(projectRoot);
|
|
3287
|
+
if (!config.enablePatterns) {
|
|
3288
|
+
return "Pattern analysis is not enabled. Set enablePatterns: true in .kirograph/config.json and run kirograph index.";
|
|
3289
|
+
}
|
|
3290
|
+
const label = args.label ?? "default";
|
|
3291
|
+
const db = cg.getDatabase();
|
|
3292
|
+
db.applyPatternsSchema();
|
|
3293
|
+
const rawDb = db.getRawDb();
|
|
3294
|
+
const tableExists = rawDb.get("SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'");
|
|
3295
|
+
if (!tableExists) {
|
|
3296
|
+
return "No pattern_matches table found. Run kirograph index first to populate pattern data.";
|
|
3297
|
+
}
|
|
3298
|
+
const rows = rawDb.all(
|
|
3299
|
+
"SELECT pattern_id, COUNT(*) as cnt FROM pattern_matches GROUP BY pattern_id"
|
|
3300
|
+
);
|
|
3301
|
+
const baseline = {};
|
|
3302
|
+
for (const row of rows) {
|
|
3303
|
+
baseline[row.pattern_id] = row.cnt;
|
|
3304
|
+
}
|
|
3305
|
+
const kirographDir = path.join(projectRoot, ".kirograph");
|
|
3306
|
+
if (!fs.existsSync(kirographDir)) fs.mkdirSync(kirographDir, { recursive: true });
|
|
3307
|
+
const baselinePath = path.join(kirographDir, `pattern-baseline-${label}.json`);
|
|
3308
|
+
fs.writeFileSync(baselinePath, JSON.stringify({ label, savedAt: Date.now(), counts: baseline }, null, 2));
|
|
3309
|
+
const totalMatches = Object.values(baseline).reduce((s, c) => s + c, 0);
|
|
3310
|
+
return `Baseline "${label}" saved: ${Object.keys(baseline).length} patterns, ${totalMatches} total matches \u2192 ${baselinePath}`;
|
|
3311
|
+
}
|
|
3312
|
+
case "kirograph_pattern_diff": {
|
|
3313
|
+
const { loadConfig } = await Promise.resolve().then(() => require("../config.js"));
|
|
3314
|
+
const projectRoot = cg.getProjectRoot();
|
|
3315
|
+
const config = await loadConfig(projectRoot);
|
|
3316
|
+
if (!config.enablePatterns) {
|
|
3317
|
+
return "Pattern analysis is not enabled. Set enablePatterns: true in .kirograph/config.json and run kirograph index.";
|
|
3318
|
+
}
|
|
3319
|
+
const label = args.label ?? "default";
|
|
3320
|
+
const baselinePath = path.join(projectRoot, ".kirograph", `pattern-baseline-${label}.json`);
|
|
3321
|
+
if (!fs.existsSync(baselinePath)) {
|
|
3322
|
+
return `Baseline "${label}" not found. Run kirograph_pattern_save_baseline first.`;
|
|
3323
|
+
}
|
|
3324
|
+
let baseline;
|
|
3325
|
+
try {
|
|
3326
|
+
baseline = JSON.parse(fs.readFileSync(baselinePath, "utf8"));
|
|
3327
|
+
} catch {
|
|
3328
|
+
return `Failed to read baseline file: ${baselinePath}`;
|
|
3329
|
+
}
|
|
3330
|
+
const db = cg.getDatabase();
|
|
3331
|
+
db.applyPatternsSchema();
|
|
3332
|
+
const rawDb = db.getRawDb();
|
|
3333
|
+
const tableExists = rawDb.get("SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'");
|
|
3334
|
+
const currentCounts = {};
|
|
3335
|
+
if (tableExists) {
|
|
3336
|
+
const rows = rawDb.all(
|
|
3337
|
+
"SELECT pattern_id, COUNT(*) as cnt FROM pattern_matches GROUP BY pattern_id"
|
|
3338
|
+
);
|
|
3339
|
+
for (const row of rows) {
|
|
3340
|
+
currentCounts[row.pattern_id] = row.cnt;
|
|
3341
|
+
}
|
|
3342
|
+
}
|
|
3343
|
+
const allPatternIds = /* @__PURE__ */ new Set([...Object.keys(baseline.counts), ...Object.keys(currentCounts)]);
|
|
3344
|
+
const newFindings = [];
|
|
3345
|
+
const resolvedFindings = [];
|
|
3346
|
+
const unchanged = [];
|
|
3347
|
+
const changed = [];
|
|
3348
|
+
for (const id of allPatternIds) {
|
|
3349
|
+
const before = baseline.counts[id] ?? 0;
|
|
3350
|
+
const after = currentCounts[id] ?? 0;
|
|
3351
|
+
if (before === 0 && after > 0) {
|
|
3352
|
+
newFindings.push({ id, count: after });
|
|
3353
|
+
} else if (before > 0 && after === 0) {
|
|
3354
|
+
resolvedFindings.push({ id, count: before });
|
|
3355
|
+
} else if (before === after) {
|
|
3356
|
+
unchanged.push({ id, count: after });
|
|
3357
|
+
} else {
|
|
3358
|
+
changed.push({ id, before, after, delta: after - before });
|
|
3359
|
+
}
|
|
3360
|
+
}
|
|
3361
|
+
const savedDate = new Date(baseline.savedAt).toISOString().slice(0, 16).replace("T", " ");
|
|
3362
|
+
const lines = [
|
|
3363
|
+
`# Pattern Diff: "${label}" (saved ${savedDate}) \u2192 current`,
|
|
3364
|
+
"",
|
|
3365
|
+
`NEW: ${newFindings.length} RESOLVED: ${resolvedFindings.length} CHANGED: ${changed.length} UNCHANGED: ${unchanged.length}`
|
|
3366
|
+
];
|
|
3367
|
+
if (newFindings.length > 0) {
|
|
3368
|
+
lines.push("", "## New Findings (not in baseline)");
|
|
3369
|
+
for (const f of newFindings.sort((a, b) => b.count - a.count)) {
|
|
3370
|
+
lines.push(` + ${f.id}: ${f.count} matches`);
|
|
3371
|
+
}
|
|
3372
|
+
}
|
|
3373
|
+
if (resolvedFindings.length > 0) {
|
|
3374
|
+
lines.push("", "## Resolved (in baseline, not in current)");
|
|
3375
|
+
for (const f of resolvedFindings.sort((a, b) => b.count - a.count)) {
|
|
3376
|
+
lines.push(` - ${f.id}: was ${f.count} matches`);
|
|
3377
|
+
}
|
|
3378
|
+
}
|
|
3379
|
+
if (changed.length > 0) {
|
|
3380
|
+
lines.push("", "## Changed");
|
|
3381
|
+
for (const f of changed.sort((a, b) => Math.abs(b.delta) - Math.abs(a.delta))) {
|
|
3382
|
+
const sign = f.delta > 0 ? "+" : "";
|
|
3383
|
+
lines.push(` ~ ${f.id}: ${f.before} \u2192 ${f.after} (${sign}${f.delta})`);
|
|
3384
|
+
}
|
|
3385
|
+
}
|
|
3386
|
+
return lines.join("\n");
|
|
3387
|
+
}
|
|
2992
3388
|
default:
|
|
2993
3389
|
return `Unknown tool: ${toolName}`;
|
|
2994
3390
|
}
|
|
@@ -2997,6 +3393,7 @@ ${lines.join("\n")}`;
|
|
|
2997
3393
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2998
3394
|
0 && (module.exports = {
|
|
2999
3395
|
KIROGRAPH_TOOL_NAMES,
|
|
3396
|
+
LIVE_SEARCH_TOOL_DEFINITION,
|
|
3000
3397
|
ToolHandler,
|
|
3001
3398
|
tools
|
|
3002
3399
|
});
|