kirograph 0.17.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +105 -1822
- package/dist/architecture/layers/dart.d.ts +10 -0
- package/dist/architecture/layers/dart.d.ts.map +1 -0
- package/dist/architecture/layers/dart.js +112 -0
- package/dist/architecture/layers/dart.js.map +7 -0
- package/dist/architecture/layers/elixir.d.ts +6 -0
- package/dist/architecture/layers/elixir.d.ts.map +1 -0
- package/dist/architecture/layers/index.d.ts.map +1 -1
- package/dist/architecture/layers/index.js +3 -1
- package/dist/architecture/layers/index.js.map +2 -2
- package/dist/architecture/layers/ocaml.d.ts +6 -0
- package/dist/architecture/layers/ocaml.d.ts.map +1 -0
- package/dist/architecture/layers/scala.d.ts +6 -0
- package/dist/architecture/layers/scala.d.ts.map +1 -0
- package/dist/architecture/layers/solidity.d.ts +6 -0
- package/dist/architecture/layers/solidity.d.ts.map +1 -0
- package/dist/architecture/layers/vue.d.ts +6 -0
- package/dist/architecture/layers/vue.d.ts.map +1 -0
- package/dist/architecture/manifest/elm.d.ts +3 -0
- package/dist/architecture/manifest/elm.d.ts.map +1 -0
- package/dist/architecture/manifest/index.d.ts.map +1 -1
- package/dist/architecture/manifest/ocaml.d.ts +3 -0
- package/dist/architecture/manifest/ocaml.d.ts.map +1 -0
- package/dist/architecture/manifest/scala.d.ts +3 -0
- package/dist/architecture/manifest/scala.d.ts.map +1 -0
- package/dist/bin/banner.d.ts.map +1 -1
- package/dist/bin/banner.js +74 -6
- package/dist/bin/banner.js.map +2 -2
- package/dist/bin/commands/affected.d.ts.map +1 -1
- package/dist/bin/commands/attack-surface.d.ts +3 -0
- package/dist/bin/commands/attack-surface.d.ts.map +1 -0
- package/dist/bin/commands/attack-surface.js +164 -0
- package/dist/bin/commands/attack-surface.js.map +7 -0
- package/dist/bin/commands/benchmark.d.ts +9 -0
- package/dist/bin/commands/benchmark.d.ts.map +1 -0
- package/dist/bin/commands/benchmark.js +206 -0
- package/dist/bin/commands/benchmark.js.map +7 -0
- package/dist/bin/commands/budget.d.ts +6 -0
- package/dist/bin/commands/budget.d.ts.map +1 -0
- package/dist/bin/commands/budget.js +70 -0
- package/dist/bin/commands/budget.js.map +7 -0
- package/dist/bin/commands/caveman.d.ts +7 -0
- package/dist/bin/commands/caveman.d.ts.map +1 -0
- package/dist/bin/commands/communities.d.ts +3 -0
- package/dist/bin/commands/communities.d.ts.map +1 -0
- package/dist/bin/commands/communities.js +77 -0
- package/dist/bin/commands/communities.js.map +7 -0
- package/dist/bin/commands/compression.d.ts +7 -0
- package/dist/bin/commands/compression.d.ts.map +1 -0
- package/dist/bin/commands/context.d.ts.map +1 -1
- package/dist/bin/commands/data.d.ts +3 -0
- package/dist/bin/commands/data.d.ts.map +1 -0
- package/dist/bin/commands/dead-code.d.ts +3 -0
- package/dist/bin/commands/dead-code.d.ts.map +1 -0
- package/dist/bin/commands/dep-confusion.d.ts +3 -0
- package/dist/bin/commands/dep-confusion.d.ts.map +1 -0
- package/dist/bin/commands/dep-confusion.js +119 -0
- package/dist/bin/commands/dep-confusion.js.map +7 -0
- package/dist/bin/commands/docs.d.ts +3 -0
- package/dist/bin/commands/docs.d.ts.map +1 -0
- package/dist/bin/commands/exec.d.ts +11 -0
- package/dist/bin/commands/exec.d.ts.map +1 -0
- package/dist/bin/commands/export.d.ts +3 -0
- package/dist/bin/commands/export.d.ts.map +1 -0
- package/dist/bin/commands/export.js +304 -10
- package/dist/bin/commands/export.js.map +2 -2
- package/dist/bin/commands/flows.d.ts +3 -0
- package/dist/bin/commands/flows.d.ts.map +1 -0
- package/dist/bin/commands/flows.js +97 -0
- package/dist/bin/commands/flows.js.map +7 -0
- package/dist/bin/commands/gain.d.ts +6 -0
- package/dist/bin/commands/gain.d.ts.map +1 -0
- package/dist/bin/commands/help.d.ts +7 -0
- package/dist/bin/commands/help.d.ts.map +1 -1
- package/dist/bin/commands/help.js +399 -101
- package/dist/bin/commands/help.js.map +2 -2
- package/dist/bin/commands/hotspots.d.ts +3 -0
- package/dist/bin/commands/hotspots.d.ts.map +1 -0
- package/dist/bin/commands/hotspots.js +94 -1
- package/dist/bin/commands/hotspots.js.map +3 -3
- package/dist/bin/commands/install.d.ts.map +1 -1
- package/dist/bin/commands/install.js +90 -8
- package/dist/bin/commands/install.js.map +2 -2
- package/dist/bin/commands/licenses.d.ts +3 -0
- package/dist/bin/commands/licenses.d.ts.map +1 -0
- package/dist/bin/commands/licenses.js +201 -0
- package/dist/bin/commands/licenses.js.map +7 -0
- package/dist/bin/commands/memory.d.ts +16 -0
- package/dist/bin/commands/memory.d.ts.map +1 -0
- package/dist/bin/commands/memory.js +151 -4
- package/dist/bin/commands/memory.js.map +2 -2
- package/dist/bin/commands/path.d.ts +3 -0
- package/dist/bin/commands/path.d.ts.map +1 -0
- package/dist/bin/commands/pattern.d.ts +3 -0
- package/dist/bin/commands/pattern.d.ts.map +1 -0
- package/dist/bin/commands/pattern.js +592 -0
- package/dist/bin/commands/pattern.js.map +7 -0
- package/dist/bin/commands/query.d.ts.map +1 -1
- package/dist/bin/commands/reachability.d.ts +3 -0
- package/dist/bin/commands/reachability.d.ts.map +1 -0
- package/dist/bin/commands/reachability.js +160 -0
- package/dist/bin/commands/reachability.js.map +7 -0
- package/dist/bin/commands/read.d.ts +6 -0
- package/dist/bin/commands/read.d.ts.map +1 -0
- package/dist/bin/commands/read.js +100 -0
- package/dist/bin/commands/read.js.map +7 -0
- package/dist/bin/commands/refactor.d.ts +3 -0
- package/dist/bin/commands/refactor.d.ts.map +1 -0
- package/dist/bin/commands/refactor.js +116 -0
- package/dist/bin/commands/refactor.js.map +7 -0
- package/dist/bin/commands/remediation.d.ts +3 -0
- package/dist/bin/commands/remediation.d.ts.map +1 -0
- package/dist/bin/commands/remediation.js +133 -0
- package/dist/bin/commands/remediation.js.map +7 -0
- package/dist/bin/commands/sbom.d.ts +3 -0
- package/dist/bin/commands/sbom.d.ts.map +1 -0
- package/dist/bin/commands/sbom.js +76 -0
- package/dist/bin/commands/sbom.js.map +7 -0
- package/dist/bin/commands/security-ci-report.d.ts +9 -0
- package/dist/bin/commands/security-ci-report.d.ts.map +1 -0
- package/dist/bin/commands/security-ci-report.js +267 -0
- package/dist/bin/commands/security-ci-report.js.map +7 -0
- package/dist/bin/commands/security-export.d.ts +2 -0
- package/dist/bin/commands/security-export.d.ts.map +1 -0
- package/dist/bin/commands/security-export.js +1349 -0
- package/dist/bin/commands/security-export.js.map +7 -0
- package/dist/bin/commands/security-flows.d.ts +3 -0
- package/dist/bin/commands/security-flows.d.ts.map +1 -0
- package/dist/bin/commands/security-flows.js +126 -0
- package/dist/bin/commands/security-flows.js.map +7 -0
- package/dist/bin/commands/security-secrets.d.ts +3 -0
- package/dist/bin/commands/security-secrets.d.ts.map +1 -0
- package/dist/bin/commands/security-secrets.js +170 -0
- package/dist/bin/commands/security-secrets.js.map +7 -0
- package/dist/bin/commands/security.d.ts +3 -0
- package/dist/bin/commands/security.d.ts.map +1 -0
- package/dist/bin/commands/security.js +208 -0
- package/dist/bin/commands/security.js.map +7 -0
- package/dist/bin/commands/snapshot.d.ts +3 -0
- package/dist/bin/commands/snapshot.d.ts.map +1 -0
- package/dist/bin/commands/staleness.d.ts +3 -0
- package/dist/bin/commands/staleness.d.ts.map +1 -0
- package/dist/bin/commands/staleness.js +144 -0
- package/dist/bin/commands/staleness.js.map +7 -0
- package/dist/bin/commands/status.d.ts.map +1 -1
- package/dist/bin/commands/status.js +129 -2
- package/dist/bin/commands/status.js.map +2 -2
- package/dist/bin/commands/supply-chain.d.ts +3 -0
- package/dist/bin/commands/supply-chain.d.ts.map +1 -0
- package/dist/bin/commands/supply-chain.js +138 -0
- package/dist/bin/commands/supply-chain.js.map +7 -0
- package/dist/bin/commands/surprising.d.ts +3 -0
- package/dist/bin/commands/surprising.d.ts.map +1 -0
- package/dist/bin/commands/sync.d.ts.map +1 -1
- package/dist/bin/commands/uninit.d.ts.map +1 -1
- package/dist/bin/commands/uninit.js +109 -60
- package/dist/bin/commands/uninit.js.map +2 -2
- package/dist/bin/commands/utils.d.ts +5 -0
- package/dist/bin/commands/utils.d.ts.map +1 -1
- package/dist/bin/commands/vex.d.ts +3 -0
- package/dist/bin/commands/vex.d.ts.map +1 -0
- package/dist/bin/commands/vex.js +76 -0
- package/dist/bin/commands/vex.js.map +7 -0
- package/dist/bin/commands/vuln-suppress.d.ts +3 -0
- package/dist/bin/commands/vuln-suppress.d.ts.map +1 -0
- package/dist/bin/commands/vuln-suppress.js +95 -0
- package/dist/bin/commands/vuln-suppress.js.map +7 -0
- package/dist/bin/commands/vulns.d.ts +3 -0
- package/dist/bin/commands/vulns.d.ts.map +1 -0
- package/dist/bin/commands/vulns.js +382 -0
- package/dist/bin/commands/vulns.js.map +7 -0
- package/dist/bin/installer/archive.d.ts +47 -0
- package/dist/bin/installer/archive.d.ts.map +1 -0
- package/dist/bin/installer/auto-detect.d.ts +16 -0
- package/dist/bin/installer/auto-detect.d.ts.map +1 -0
- package/dist/bin/installer/auto-detect.js +125 -0
- package/dist/bin/installer/auto-detect.js.map +7 -0
- package/dist/bin/installer/caveman.d.ts +12 -0
- package/dist/bin/installer/caveman.d.ts.map +1 -0
- package/dist/bin/installer/cli-agent.d.ts +7 -2
- package/dist/bin/installer/cli-agent.d.ts.map +1 -1
- package/dist/bin/installer/cli-agent.js +32 -5
- package/dist/bin/installer/cli-agent.js.map +2 -2
- package/dist/bin/installer/common.d.ts +36 -0
- package/dist/bin/installer/common.d.ts.map +1 -0
- package/dist/bin/installer/common.js +48 -0
- package/dist/bin/installer/common.js.map +2 -2
- package/dist/bin/installer/config-prompt.d.ts +1 -1
- package/dist/bin/installer/config-prompt.d.ts.map +1 -1
- package/dist/bin/installer/config-prompt.js +85 -2
- package/dist/bin/installer/config-prompt.js.map +2 -2
- package/dist/bin/installer/dashboard.d.ts.map +1 -1
- package/dist/bin/installer/detect.d.ts +30 -0
- package/dist/bin/installer/detect.d.ts.map +1 -0
- package/dist/bin/installer/detect.js +309 -0
- package/dist/bin/installer/detect.js.map +7 -0
- package/dist/bin/installer/hooks.d.ts +4 -1
- package/dist/bin/installer/hooks.d.ts.map +1 -1
- package/dist/bin/installer/hooks.js +34 -0
- package/dist/bin/installer/hooks.js.map +2 -2
- package/dist/bin/installer/index.d.ts +5 -4
- package/dist/bin/installer/index.d.ts.map +1 -1
- package/dist/bin/installer/index.js +46 -8
- package/dist/bin/installer/index.js.map +2 -2
- package/dist/bin/installer/instructions.d.ts +14 -0
- package/dist/bin/installer/instructions.d.ts.map +1 -0
- package/dist/bin/installer/instructions.js +209 -3
- package/dist/bin/installer/instructions.js.map +2 -2
- package/dist/bin/installer/mcp.d.ts.map +1 -1
- package/dist/bin/installer/prompts.d.ts +17 -0
- package/dist/bin/installer/prompts.d.ts.map +1 -1
- package/dist/bin/installer/qdrant-dashboard.d.ts.map +1 -1
- package/dist/bin/installer/steering.d.ts +14 -2
- package/dist/bin/installer/steering.d.ts.map +1 -1
- package/dist/bin/installer/steering.js +488 -0
- package/dist/bin/installer/steering.js.map +2 -2
- package/dist/bin/installer/targets/aider.d.ts +6 -0
- package/dist/bin/installer/targets/aider.d.ts.map +1 -0
- package/dist/bin/installer/targets/aider.js +3 -3
- package/dist/bin/installer/targets/aider.js.map +2 -2
- package/dist/bin/installer/targets/amp.d.ts +6 -0
- package/dist/bin/installer/targets/amp.d.ts.map +1 -0
- package/dist/bin/installer/targets/amp.js +3 -3
- package/dist/bin/installer/targets/amp.js.map +2 -2
- package/dist/bin/installer/targets/antigravity.d.ts +13 -0
- package/dist/bin/installer/targets/antigravity.d.ts.map +1 -0
- package/dist/bin/installer/targets/antigravity.js +35 -6
- package/dist/bin/installer/targets/antigravity.js.map +2 -2
- package/dist/bin/installer/targets/augment.d.ts +6 -0
- package/dist/bin/installer/targets/augment.d.ts.map +1 -0
- package/dist/bin/installer/targets/augment.js +3 -3
- package/dist/bin/installer/targets/augment.js.map +2 -2
- package/dist/bin/installer/targets/claude.d.ts +6 -0
- package/dist/bin/installer/targets/claude.d.ts.map +1 -0
- package/dist/bin/installer/targets/claude.js +49 -5
- package/dist/bin/installer/targets/claude.js.map +2 -2
- package/dist/bin/installer/targets/cline.d.ts +13 -0
- package/dist/bin/installer/targets/cline.d.ts.map +1 -0
- package/dist/bin/installer/targets/cline.js +32 -6
- package/dist/bin/installer/targets/cline.js.map +2 -2
- package/dist/bin/installer/targets/codex.d.ts +6 -0
- package/dist/bin/installer/targets/codex.d.ts.map +1 -0
- package/dist/bin/installer/targets/codex.js +64 -12
- package/dist/bin/installer/targets/codex.js.map +2 -2
- package/dist/bin/installer/targets/continue.d.ts +12 -0
- package/dist/bin/installer/targets/continue.d.ts.map +1 -0
- package/dist/bin/installer/targets/continue.js +2 -2
- package/dist/bin/installer/targets/continue.js.map +2 -2
- package/dist/bin/installer/targets/copilot-cli.d.ts +12 -0
- package/dist/bin/installer/targets/copilot-cli.d.ts.map +1 -0
- package/dist/bin/installer/targets/copilot-cli.js +101 -0
- package/dist/bin/installer/targets/copilot-cli.js.map +7 -0
- package/dist/bin/installer/targets/copilot.d.ts +6 -0
- package/dist/bin/installer/targets/copilot.d.ts.map +1 -0
- package/dist/bin/installer/targets/copilot.js +31 -5
- package/dist/bin/installer/targets/copilot.js.map +2 -2
- package/dist/bin/installer/targets/cursor.d.ts +6 -0
- package/dist/bin/installer/targets/cursor.d.ts.map +1 -0
- package/dist/bin/installer/targets/cursor.js +4 -4
- package/dist/bin/installer/targets/cursor.js.map +2 -2
- package/dist/bin/installer/targets/devin.d.ts +13 -0
- package/dist/bin/installer/targets/devin.d.ts.map +1 -0
- package/dist/bin/installer/targets/devin.js +2 -2
- package/dist/bin/installer/targets/devin.js.map +2 -2
- package/dist/bin/installer/targets/gemini-cli.d.ts +16 -0
- package/dist/bin/installer/targets/gemini-cli.d.ts.map +1 -0
- package/dist/bin/installer/targets/gemini-cli.js +2 -2
- package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
- package/dist/bin/installer/targets/generic.d.ts +59 -0
- package/dist/bin/installer/targets/generic.d.ts.map +1 -0
- package/dist/bin/installer/targets/generic.js +2 -14
- package/dist/bin/installer/targets/generic.js.map +2 -2
- package/dist/bin/installer/targets/goose.d.ts +6 -0
- package/dist/bin/installer/targets/goose.d.ts.map +1 -0
- package/dist/bin/installer/targets/goose.js +3 -3
- package/dist/bin/installer/targets/goose.js.map +2 -2
- package/dist/bin/installer/targets/index.d.ts +11 -0
- package/dist/bin/installer/targets/index.d.ts.map +1 -0
- package/dist/bin/installer/targets/index.js +250 -0
- package/dist/bin/installer/targets/index.js.map +2 -2
- package/dist/bin/installer/targets/junie.d.ts +13 -0
- package/dist/bin/installer/targets/junie.d.ts.map +1 -0
- package/dist/bin/installer/targets/junie.js +2 -2
- package/dist/bin/installer/targets/junie.js.map +2 -2
- package/dist/bin/installer/targets/kilo.d.ts +12 -0
- package/dist/bin/installer/targets/kilo.d.ts.map +1 -0
- package/dist/bin/installer/targets/kilo.js +2 -2
- package/dist/bin/installer/targets/kilo.js.map +2 -2
- package/dist/bin/installer/targets/kiro.d.ts +5 -0
- package/dist/bin/installer/targets/kiro.d.ts.map +1 -0
- package/dist/bin/installer/targets/kiro.js +4 -4
- package/dist/bin/installer/targets/kiro.js.map +2 -2
- package/dist/bin/installer/targets/opencode.d.ts +13 -0
- package/dist/bin/installer/targets/opencode.d.ts.map +1 -0
- package/dist/bin/installer/targets/opencode.js +2 -2
- package/dist/bin/installer/targets/opencode.js.map +2 -2
- package/dist/bin/installer/targets/openhands.d.ts +6 -0
- package/dist/bin/installer/targets/openhands.d.ts.map +1 -0
- package/dist/bin/installer/targets/openhands.js +3 -3
- package/dist/bin/installer/targets/openhands.js.map +2 -2
- package/dist/bin/installer/targets/qoder.d.ts +12 -0
- package/dist/bin/installer/targets/qoder.d.ts.map +1 -0
- package/dist/bin/installer/targets/qoder.js +91 -0
- package/dist/bin/installer/targets/qoder.js.map +7 -0
- package/dist/bin/installer/targets/qwen.d.ts +12 -0
- package/dist/bin/installer/targets/qwen.d.ts.map +1 -0
- package/dist/bin/installer/targets/qwen.js +96 -0
- package/dist/bin/installer/targets/qwen.js.map +7 -0
- package/dist/bin/installer/targets/replit.d.ts +6 -0
- package/dist/bin/installer/targets/replit.d.ts.map +1 -0
- package/dist/bin/installer/targets/replit.js +3 -3
- package/dist/bin/installer/targets/replit.js.map +2 -2
- package/dist/bin/installer/targets/roo.d.ts +13 -0
- package/dist/bin/installer/targets/roo.d.ts.map +1 -0
- package/dist/bin/installer/targets/roo.js +2 -2
- package/dist/bin/installer/targets/roo.js.map +2 -2
- package/dist/bin/installer/targets/tabnine.d.ts +6 -0
- package/dist/bin/installer/targets/tabnine.d.ts.map +1 -0
- package/dist/bin/installer/targets/tabnine.js +3 -3
- package/dist/bin/installer/targets/tabnine.js.map +2 -2
- package/dist/bin/installer/targets/trae.d.ts +6 -0
- package/dist/bin/installer/targets/trae.d.ts.map +1 -0
- package/dist/bin/installer/targets/trae.js +5 -5
- package/dist/bin/installer/targets/trae.js.map +2 -2
- package/dist/bin/installer/targets/warp.d.ts +12 -0
- package/dist/bin/installer/targets/warp.d.ts.map +1 -0
- package/dist/bin/installer/targets/warp.js +2 -2
- package/dist/bin/installer/targets/warp.js.map +2 -2
- package/dist/bin/installer/targets/windsurf.d.ts +13 -0
- package/dist/bin/installer/targets/windsurf.d.ts.map +1 -0
- package/dist/bin/installer/targets/windsurf.js +35 -6
- package/dist/bin/installer/targets/windsurf.js.map +2 -2
- package/dist/bin/kirograph.js +74 -6
- package/dist/bin/kirograph.js.map +3 -3
- package/dist/bin/progress.d.ts +16 -1
- package/dist/bin/progress.d.ts.map +1 -1
- package/dist/compression/filters/aws.d.ts +9 -0
- package/dist/compression/filters/aws.d.ts.map +1 -0
- package/dist/compression/filters/docker.d.ts +6 -0
- package/dist/compression/filters/docker.d.ts.map +1 -0
- package/dist/compression/filters/files.d.ts +6 -0
- package/dist/compression/filters/files.d.ts.map +1 -0
- package/dist/compression/filters/generic.d.ts +7 -0
- package/dist/compression/filters/generic.d.ts.map +1 -0
- package/dist/compression/filters/git.d.ts +6 -0
- package/dist/compression/filters/git.d.ts.map +1 -0
- package/dist/compression/filters/github.d.ts +6 -0
- package/dist/compression/filters/github.d.ts.map +1 -0
- package/dist/compression/filters/lint.d.ts +6 -0
- package/dist/compression/filters/lint.d.ts.map +1 -0
- package/dist/compression/filters/misc.d.ts +6 -0
- package/dist/compression/filters/misc.d.ts.map +1 -0
- package/dist/compression/filters/package.d.ts +6 -0
- package/dist/compression/filters/package.d.ts.map +1 -0
- package/dist/compression/filters/test.d.ts +6 -0
- package/dist/compression/filters/test.d.ts.map +1 -0
- package/dist/compression/index.d.ts +29 -0
- package/dist/compression/index.d.ts.map +1 -0
- package/dist/compression/naive-cost.d.ts +26 -0
- package/dist/compression/naive-cost.d.ts.map +1 -0
- package/dist/compression/tracker.d.ts +155 -0
- package/dist/compression/tracker.d.ts.map +1 -0
- package/dist/compression/tracker.js +80 -0
- package/dist/compression/tracker.js.map +2 -2
- package/dist/compression/types.d.ts +49 -0
- package/dist/compression/types.d.ts.map +1 -0
- package/dist/config.d.ts +90 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +144 -3
- package/dist/config.js.map +2 -2
- package/dist/core/lock-manager.d.ts +2 -0
- package/dist/core/lock-manager.d.ts.map +1 -1
- package/dist/core/pipeline.d.ts +4 -1
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/pipeline.js +78 -2
- package/dist/core/pipeline.js.map +2 -2
- package/dist/core/snapshot.d.ts +58 -0
- package/dist/core/snapshot.d.ts.map +1 -0
- package/dist/data/filters.d.ts +23 -0
- package/dist/data/filters.d.ts.map +1 -0
- package/dist/data/indexer.d.ts +25 -0
- package/dist/data/indexer.d.ts.map +1 -0
- package/dist/data/linker.d.ts +37 -0
- package/dist/data/linker.d.ts.map +1 -0
- package/dist/data/lint.d.ts +27 -0
- package/dist/data/lint.d.ts.map +1 -0
- package/dist/data/parsers/csv.d.ts +11 -0
- package/dist/data/parsers/csv.d.ts.map +1 -0
- package/dist/data/parsers/excel.d.ts +10 -0
- package/dist/data/parsers/excel.d.ts.map +1 -0
- package/dist/data/parsers/index.d.ts +28 -0
- package/dist/data/parsers/index.d.ts.map +1 -0
- package/dist/data/parsers/json-array.d.ts +9 -0
- package/dist/data/parsers/json-array.d.ts.map +1 -0
- package/dist/data/parsers/jsonl.d.ts +9 -0
- package/dist/data/parsers/jsonl.d.ts.map +1 -0
- package/dist/data/parsers/parquet.d.ts +10 -0
- package/dist/data/parsers/parquet.d.ts.map +1 -0
- package/dist/data/profiler.d.ts +29 -0
- package/dist/data/profiler.d.ts.map +1 -0
- package/dist/data/queries.d.ts +95 -0
- package/dist/data/queries.d.ts.map +1 -0
- package/dist/data/types.d.ts +103 -0
- package/dist/data/types.d.ts.map +1 -0
- package/dist/db/database.d.ts +57 -0
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +75 -5
- package/dist/db/database.js.map +2 -2
- package/dist/db/memory-schema.sql +5 -1
- package/dist/db/patterns-schema.sql +23 -0
- package/dist/db/schema.sql +3 -1
- package/dist/db/security-schema.sql +72 -0
- package/dist/docs/formats/asciidoc.d.ts +9 -0
- package/dist/docs/formats/asciidoc.d.ts.map +1 -0
- package/dist/docs/formats/html.d.ts +10 -0
- package/dist/docs/formats/html.d.ts.map +1 -0
- package/dist/docs/formats/index.d.ts +31 -0
- package/dist/docs/formats/index.d.ts.map +1 -0
- package/dist/docs/formats/markdown.d.ts +11 -0
- package/dist/docs/formats/markdown.d.ts.map +1 -0
- package/dist/docs/formats/openapi.d.ts +17 -0
- package/dist/docs/formats/openapi.d.ts.map +1 -0
- package/dist/docs/formats/org.d.ts +9 -0
- package/dist/docs/formats/org.d.ts.map +1 -0
- package/dist/docs/formats/plaintext.d.ts +11 -0
- package/dist/docs/formats/plaintext.d.ts.map +1 -0
- package/dist/docs/formats/rdoc.d.ts +10 -0
- package/dist/docs/formats/rdoc.d.ts.map +1 -0
- package/dist/docs/formats/rst.d.ts +11 -0
- package/dist/docs/formats/rst.d.ts.map +1 -0
- package/dist/docs/indexer.d.ts +49 -0
- package/dist/docs/indexer.d.ts.map +1 -0
- package/dist/docs/linker.d.ts +30 -0
- package/dist/docs/linker.d.ts.map +1 -0
- package/dist/docs/lint.d.ts +27 -0
- package/dist/docs/lint.d.ts.map +1 -0
- package/dist/docs/queries.d.ts +78 -0
- package/dist/docs/queries.d.ts.map +1 -0
- package/dist/docs/section-id.d.ts +48 -0
- package/dist/docs/section-id.d.ts.map +1 -0
- package/dist/docs/summarizer.d.ts +13 -0
- package/dist/docs/summarizer.d.ts.map +1 -0
- package/dist/docs/types.d.ts +71 -0
- package/dist/docs/types.d.ts.map +1 -0
- package/dist/docs/vectors.d.ts +54 -0
- package/dist/docs/vectors.d.ts.map +1 -0
- package/dist/extraction/extractor.d.ts +1 -1
- package/dist/extraction/extractor.d.ts.map +1 -1
- package/dist/extraction/extractor.js +81 -0
- package/dist/extraction/extractor.js.map +2 -2
- package/dist/extraction/grammars.d.ts +6 -0
- package/dist/extraction/grammars.d.ts.map +1 -1
- package/dist/extraction/grammars.js +32 -8
- package/dist/extraction/grammars.js.map +2 -2
- package/dist/extraction/languages.d.ts.map +1 -1
- package/dist/extraction/languages.js +43 -1
- package/dist/extraction/languages.js.map +2 -2
- package/dist/extraction/notebook.d.ts +14 -0
- package/dist/extraction/notebook.d.ts.map +1 -0
- package/dist/extraction/notebook.js +300 -0
- package/dist/extraction/notebook.js.map +7 -0
- package/dist/extraction/wasm/tree-sitter-astro.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-gdscript.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-julia.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-perl.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-powershell.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-sql.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-verilog.wasm +0 -0
- package/dist/frameworks/amplify.d.ts +9 -0
- package/dist/frameworks/amplify.d.ts.map +1 -0
- package/dist/frameworks/angular.d.ts +9 -0
- package/dist/frameworks/angular.d.ts.map +1 -0
- package/dist/frameworks/ansible.d.ts +8 -0
- package/dist/frameworks/ansible.d.ts.map +1 -0
- package/dist/frameworks/cloudformation.d.ts +9 -0
- package/dist/frameworks/cloudformation.d.ts.map +1 -0
- package/dist/frameworks/docker.d.ts +9 -0
- package/dist/frameworks/docker.d.ts.map +1 -0
- package/dist/frameworks/elixir.d.ts +6 -0
- package/dist/frameworks/elixir.d.ts.map +1 -0
- package/dist/frameworks/flutter.d.ts +12 -0
- package/dist/frameworks/flutter.d.ts.map +1 -0
- package/dist/frameworks/flutter.js +130 -0
- package/dist/frameworks/flutter.js.map +7 -0
- package/dist/frameworks/iac.d.ts +10 -0
- package/dist/frameworks/iac.d.ts.map +1 -0
- package/dist/frameworks/index.d.ts +14 -0
- package/dist/frameworks/index.d.ts.map +1 -1
- package/dist/frameworks/index.js +7 -1
- package/dist/frameworks/index.js.map +3 -3
- package/dist/frameworks/kubernetes.d.ts +9 -0
- package/dist/frameworks/kubernetes.d.ts.map +1 -0
- package/dist/frameworks/pulumi.d.ts +9 -0
- package/dist/frameworks/pulumi.d.ts.map +1 -0
- package/dist/frameworks/scala.d.ts +6 -0
- package/dist/frameworks/scala.d.ts.map +1 -0
- package/dist/frameworks/solidity.d.ts +6 -0
- package/dist/frameworks/solidity.d.ts.map +1 -0
- package/dist/frameworks/terraform.d.ts +14 -0
- package/dist/frameworks/terraform.d.ts.map +1 -0
- package/dist/frameworks/vue.d.ts +7 -0
- package/dist/frameworks/vue.d.ts.map +1 -0
- package/dist/graph/communities.d.ts +43 -0
- package/dist/graph/communities.d.ts.map +1 -0
- package/dist/graph/communities.js +317 -0
- package/dist/graph/communities.js.map +7 -0
- package/dist/graph/flows.d.ts +55 -0
- package/dist/graph/flows.d.ts.map +1 -0
- package/dist/graph/flows.js +138 -0
- package/dist/graph/flows.js.map +7 -0
- package/dist/graph/refactor.d.ts +43 -0
- package/dist/graph/refactor.d.ts.map +1 -0
- package/dist/graph/refactor.js +155 -0
- package/dist/graph/refactor.js.map +7 -0
- package/dist/index.d.ts +36 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +2 -2
- package/dist/mcp/cache.d.ts +69 -0
- package/dist/mcp/cache.d.ts.map +1 -0
- package/dist/mcp/cache.js +172 -0
- package/dist/mcp/cache.js.map +7 -0
- package/dist/mcp/read-modes.d.ts +31 -0
- package/dist/mcp/read-modes.d.ts.map +1 -0
- package/dist/mcp/read-modes.js +295 -0
- package/dist/mcp/read-modes.js.map +7 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +17 -3
- package/dist/mcp/server.js.map +2 -2
- package/dist/mcp/tool-names.d.ts +2 -0
- package/dist/mcp/tool-names.d.ts.map +1 -0
- package/dist/mcp/tool-names.js +24 -1
- package/dist/mcp/tool-names.js.map +2 -2
- package/dist/mcp/tools.d.ts +12 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +1560 -4
- package/dist/mcp/tools.js.map +3 -3
- package/dist/memory/compress.d.ts +19 -0
- package/dist/memory/compress.d.ts.map +1 -0
- package/dist/memory/database.d.ts +92 -0
- package/dist/memory/database.d.ts.map +1 -0
- package/dist/memory/database.js +70 -2
- package/dist/memory/database.js.map +2 -2
- package/dist/memory/index.d.ts +71 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +12 -2
- package/dist/memory/index.js.map +2 -2
- package/dist/memory/symbols.d.ts +21 -0
- package/dist/memory/symbols.d.ts.map +1 -0
- package/dist/memory/types.d.ts +78 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js.map +1 -1
- package/dist/memory/vectors.d.ts +43 -0
- package/dist/memory/vectors.d.ts.map +1 -0
- package/dist/patterns/graph.d.ts +16 -0
- package/dist/patterns/graph.d.ts.map +1 -0
- package/dist/patterns/graph.js +45 -0
- package/dist/patterns/graph.js.map +7 -0
- package/dist/patterns/index.d.ts +4 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +39 -0
- package/dist/patterns/index.js.map +7 -0
- package/dist/patterns/indexer.d.ts +15 -0
- package/dist/patterns/indexer.d.ts.map +1 -0
- package/dist/patterns/indexer.js +97 -0
- package/dist/patterns/indexer.js.map +7 -0
- package/dist/patterns/library/command-injection-go.yaml +11 -0
- package/dist/patterns/library/dangerous-eval-js.yaml +14 -0
- package/dist/patterns/library/dangerous-exec-py.yaml +13 -0
- package/dist/patterns/library/dangerous-reflection-java.yaml +8 -0
- package/dist/patterns/library/path-traversal-go.yaml +11 -0
- package/dist/patterns/library/path-traversal-py.yaml +12 -0
- package/dist/patterns/library/path-traversal-readfile-js.yaml +14 -0
- package/dist/patterns/library/prototype-pollution-js.yaml +12 -0
- package/dist/patterns/library/sql-injection-concat-js.yaml +12 -0
- package/dist/patterns/library/sql-injection-java.yaml +13 -0
- package/dist/patterns/library/sql-injection-py.yaml +12 -0
- package/dist/patterns/library/sql-injection-template-js.yaml +13 -0
- package/dist/patterns/library/weak-crypto-md5-js.yaml +13 -0
- package/dist/patterns/library/weak-crypto-py.yaml +13 -0
- package/dist/patterns/loader.d.ts +18 -0
- package/dist/patterns/loader.d.ts.map +1 -0
- package/dist/patterns/loader.js +277 -0
- package/dist/patterns/loader.js.map +7 -0
- package/dist/patterns/runner.d.ts +42 -0
- package/dist/patterns/runner.d.ts.map +1 -0
- package/dist/patterns/runner.js +277 -0
- package/dist/patterns/runner.js.map +7 -0
- package/dist/patterns/types.d.ts +27 -0
- package/dist/patterns/types.d.ts.map +1 -0
- package/dist/patterns/types.js +34 -0
- package/dist/patterns/types.js.map +7 -0
- package/dist/resolution/bridges/android-rn.d.ts +13 -0
- package/dist/resolution/bridges/android-rn.d.ts.map +1 -0
- package/dist/resolution/bridges/android-rn.js +298 -0
- package/dist/resolution/bridges/android-rn.js.map +7 -0
- package/dist/resolution/bridges/expo-modules.d.ts +10 -0
- package/dist/resolution/bridges/expo-modules.d.ts.map +1 -0
- package/dist/resolution/bridges/expo-modules.js +155 -0
- package/dist/resolution/bridges/expo-modules.js.map +7 -0
- package/dist/resolution/bridges/flutter-channel.d.ts +14 -0
- package/dist/resolution/bridges/flutter-channel.d.ts.map +1 -0
- package/dist/resolution/bridges/flutter-channel.js +385 -0
- package/dist/resolution/bridges/flutter-channel.js.map +7 -0
- package/dist/resolution/bridges/index.d.ts +40 -0
- package/dist/resolution/bridges/index.d.ts.map +1 -0
- package/dist/resolution/bridges/index.js +80 -0
- package/dist/resolution/bridges/index.js.map +7 -0
- package/dist/resolution/bridges/native-events.d.ts +10 -0
- package/dist/resolution/bridges/native-events.d.ts.map +1 -0
- package/dist/resolution/bridges/native-events.js +188 -0
- package/dist/resolution/bridges/native-events.js.map +7 -0
- package/dist/resolution/bridges/native-views.d.ts +13 -0
- package/dist/resolution/bridges/native-views.d.ts.map +1 -0
- package/dist/resolution/bridges/native-views.js +244 -0
- package/dist/resolution/bridges/native-views.js.map +7 -0
- package/dist/resolution/bridges/react-native.d.ts +9 -0
- package/dist/resolution/bridges/react-native.d.ts.map +1 -0
- package/dist/resolution/bridges/react-native.js +161 -0
- package/dist/resolution/bridges/react-native.js.map +7 -0
- package/dist/resolution/bridges/swift-objc.d.ts +14 -0
- package/dist/resolution/bridges/swift-objc.d.ts.map +1 -0
- package/dist/resolution/bridges/swift-objc.js +227 -0
- package/dist/resolution/bridges/swift-objc.js.map +7 -0
- package/dist/resolution/bridges/turbomodules.d.ts +10 -0
- package/dist/resolution/bridges/turbomodules.d.ts.map +1 -0
- package/dist/resolution/bridges/turbomodules.js +216 -0
- package/dist/resolution/bridges/turbomodules.js.map +7 -0
- package/dist/resolution/index.d.ts +28 -3
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +61 -2
- package/dist/resolution/index.js.map +2 -2
- package/dist/security/attack-surface.d.ts +46 -0
- package/dist/security/attack-surface.d.ts.map +1 -0
- package/dist/security/attack-surface.js +206 -0
- package/dist/security/attack-surface.js.map +7 -0
- package/dist/security/context-warnings.d.ts +40 -0
- package/dist/security/context-warnings.d.ts.map +1 -0
- package/dist/security/context-warnings.js +123 -0
- package/dist/security/context-warnings.js.map +7 -0
- package/dist/security/data-flows.d.ts +33 -0
- package/dist/security/data-flows.d.ts.map +1 -0
- package/dist/security/data-flows.js +286 -0
- package/dist/security/data-flows.js.map +7 -0
- package/dist/security/dep-confusion.d.ts +23 -0
- package/dist/security/dep-confusion.d.ts.map +1 -0
- package/dist/security/dep-confusion.js +255 -0
- package/dist/security/dep-confusion.js.map +7 -0
- package/dist/security/errors.d.ts +16 -0
- package/dist/security/errors.d.ts.map +1 -0
- package/dist/security/errors.js +51 -0
- package/dist/security/errors.js.map +7 -0
- package/dist/security/export/fix-suggestions.d.ts +21 -0
- package/dist/security/export/fix-suggestions.d.ts.map +1 -0
- package/dist/security/export/fix-suggestions.js +58 -0
- package/dist/security/export/fix-suggestions.js.map +7 -0
- package/dist/security/export/sbom.d.ts +33 -0
- package/dist/security/export/sbom.d.ts.map +1 -0
- package/dist/security/export/sbom.js +230 -0
- package/dist/security/export/sbom.js.map +7 -0
- package/dist/security/export/serialization.d.ts +62 -0
- package/dist/security/export/serialization.d.ts.map +1 -0
- package/dist/security/export/serialization.js +142 -0
- package/dist/security/export/serialization.js.map +7 -0
- package/dist/security/export/vex.d.ts +58 -0
- package/dist/security/export/vex.d.ts.map +1 -0
- package/dist/security/export/vex.js +220 -0
- package/dist/security/export/vex.js.map +7 -0
- package/dist/security/index.d.ts +21 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +67 -0
- package/dist/security/index.js.map +7 -0
- package/dist/security/integrator.d.ts +63 -0
- package/dist/security/integrator.d.ts.map +1 -0
- package/dist/security/integrator.js +491 -0
- package/dist/security/integrator.js.map +7 -0
- package/dist/security/license.d.ts +33 -0
- package/dist/security/license.d.ts.map +1 -0
- package/dist/security/license.js +70 -0
- package/dist/security/license.js.map +7 -0
- package/dist/security/manifest/adapter.d.ts +92 -0
- package/dist/security/manifest/adapter.d.ts.map +1 -0
- package/dist/security/manifest/adapter.js +243 -0
- package/dist/security/manifest/adapter.js.map +7 -0
- package/dist/security/manifest/parser.d.ts +73 -0
- package/dist/security/manifest/parser.d.ts.map +1 -0
- package/dist/security/manifest/parser.js +376 -0
- package/dist/security/manifest/parser.js.map +7 -0
- package/dist/security/manifest/plugins/cargo.d.ts +11 -0
- package/dist/security/manifest/plugins/cargo.d.ts.map +1 -0
- package/dist/security/manifest/plugins/cargo.js +233 -0
- package/dist/security/manifest/plugins/cargo.js.map +7 -0
- package/dist/security/manifest/plugins/composer.d.ts +11 -0
- package/dist/security/manifest/plugins/composer.d.ts.map +1 -0
- package/dist/security/manifest/plugins/composer.js +152 -0
- package/dist/security/manifest/plugins/composer.js.map +7 -0
- package/dist/security/manifest/plugins/go.d.ts +12 -0
- package/dist/security/manifest/plugins/go.d.ts.map +1 -0
- package/dist/security/manifest/plugins/go.js +146 -0
- package/dist/security/manifest/plugins/go.js.map +7 -0
- package/dist/security/manifest/plugins/gradle.d.ts +12 -0
- package/dist/security/manifest/plugins/gradle.d.ts.map +1 -0
- package/dist/security/manifest/plugins/gradle.js +159 -0
- package/dist/security/manifest/plugins/gradle.js.map +7 -0
- package/dist/security/manifest/plugins/hex.d.ts +11 -0
- package/dist/security/manifest/plugins/hex.d.ts.map +1 -0
- package/dist/security/manifest/plugins/hex.js +159 -0
- package/dist/security/manifest/plugins/hex.js.map +7 -0
- package/dist/security/manifest/plugins/maven.d.ts +11 -0
- package/dist/security/manifest/plugins/maven.d.ts.map +1 -0
- package/dist/security/manifest/plugins/maven.js +128 -0
- package/dist/security/manifest/plugins/maven.js.map +7 -0
- package/dist/security/manifest/plugins/npm.d.ts +11 -0
- package/dist/security/manifest/plugins/npm.d.ts.map +1 -0
- package/dist/security/manifest/plugins/npm.js +284 -0
- package/dist/security/manifest/plugins/npm.js.map +7 -0
- package/dist/security/manifest/plugins/nuget.d.ts +12 -0
- package/dist/security/manifest/plugins/nuget.d.ts.map +1 -0
- package/dist/security/manifest/plugins/nuget.js +186 -0
- package/dist/security/manifest/plugins/nuget.js.map +7 -0
- package/dist/security/manifest/plugins/pip.d.ts +11 -0
- package/dist/security/manifest/plugins/pip.d.ts.map +1 -0
- package/dist/security/manifest/plugins/pip.js +123 -0
- package/dist/security/manifest/plugins/pip.js.map +7 -0
- package/dist/security/manifest/plugins/pubspec.d.ts +11 -0
- package/dist/security/manifest/plugins/pubspec.d.ts.map +1 -0
- package/dist/security/manifest/plugins/pubspec.js +212 -0
- package/dist/security/manifest/plugins/pubspec.js.map +7 -0
- package/dist/security/manifest/plugins/pyproject.d.ts +3 -0
- package/dist/security/manifest/plugins/pyproject.d.ts.map +1 -0
- package/dist/security/manifest/plugins/pyproject.js +261 -0
- package/dist/security/manifest/plugins/pyproject.js.map +7 -0
- package/dist/security/manifest/plugins/rubygems.d.ts +11 -0
- package/dist/security/manifest/plugins/rubygems.d.ts.map +1 -0
- package/dist/security/manifest/plugins/rubygems.js +185 -0
- package/dist/security/manifest/plugins/rubygems.js.map +7 -0
- package/dist/security/manifest/plugins/swift.d.ts +11 -0
- package/dist/security/manifest/plugins/swift.d.ts.map +1 -0
- package/dist/security/manifest/plugins/swift.js +200 -0
- package/dist/security/manifest/plugins/swift.js.map +7 -0
- package/dist/security/owasp.d.ts +16 -0
- package/dist/security/owasp.d.ts.map +1 -0
- package/dist/security/owasp.js +104 -0
- package/dist/security/owasp.js.map +7 -0
- package/dist/security/pipeline.d.ts +37 -0
- package/dist/security/pipeline.d.ts.map +1 -0
- package/dist/security/pipeline.js +125 -0
- package/dist/security/pipeline.js.map +7 -0
- package/dist/security/reachability.d.ts +67 -0
- package/dist/security/reachability.d.ts.map +1 -0
- package/dist/security/reachability.js +276 -0
- package/dist/security/reachability.js.map +7 -0
- package/dist/security/remediation.d.ts +51 -0
- package/dist/security/remediation.d.ts.map +1 -0
- package/dist/security/remediation.js +126 -0
- package/dist/security/remediation.js.map +7 -0
- package/dist/security/secrets.d.ts +38 -0
- package/dist/security/secrets.d.ts.map +1 -0
- package/dist/security/secrets.js +176 -0
- package/dist/security/secrets.js.map +7 -0
- package/dist/security/staleness.d.ts +43 -0
- package/dist/security/staleness.d.ts.map +1 -0
- package/dist/security/staleness.js +231 -0
- package/dist/security/staleness.js.map +7 -0
- package/dist/security/supply-chain.d.ts +34 -0
- package/dist/security/supply-chain.d.ts.map +1 -0
- package/dist/security/supply-chain.js +301 -0
- package/dist/security/supply-chain.js.map +7 -0
- package/dist/security/suppressions.d.ts +18 -0
- package/dist/security/suppressions.d.ts.map +1 -0
- package/dist/security/suppressions.js +106 -0
- package/dist/security/suppressions.js.map +7 -0
- package/dist/security/types.d.ts +144 -0
- package/dist/security/types.d.ts.map +1 -0
- package/dist/security/types.js +17 -0
- package/dist/security/types.js.map +7 -0
- package/dist/security/vuln/client.d.ts +90 -0
- package/dist/security/vuln/client.d.ts.map +1 -0
- package/dist/security/vuln/client.js +355 -0
- package/dist/security/vuln/client.js.map +7 -0
- package/dist/security/vuln/epss-client.d.ts +26 -0
- package/dist/security/vuln/epss-client.d.ts.map +1 -0
- package/dist/security/vuln/epss-client.js +95 -0
- package/dist/security/vuln/epss-client.js.map +7 -0
- package/dist/security/vuln/index.d.ts +6 -0
- package/dist/security/vuln/index.d.ts.map +1 -0
- package/dist/security/vuln/index.js +29 -0
- package/dist/security/vuln/index.js.map +7 -0
- package/dist/security/vuln/osv-adapter.d.ts +58 -0
- package/dist/security/vuln/osv-adapter.d.ts.map +1 -0
- package/dist/security/vuln/osv-adapter.js +321 -0
- package/dist/security/vuln/osv-adapter.js.map +7 -0
- package/dist/security/vuln/types.d.ts +29 -0
- package/dist/security/vuln/types.d.ts.map +1 -0
- package/dist/security/vuln/types.js +17 -0
- package/dist/security/vuln/types.js.map +7 -0
- package/dist/sync/index.d.ts +4 -2
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/types.d.ts +10 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +2 -2
- package/dist/vectors/index.d.ts +11 -3
- package/dist/vectors/index.d.ts.map +1 -1
- package/dist/vectors/qdrant-index.d.ts +10 -3
- package/dist/vectors/qdrant-index.d.ts.map +1 -1
- package/dist/vectors/typesense-index.d.ts.map +1 -1
- package/dist/watchmen/index.js +83 -0
- package/dist/watchmen/index.js.map +7 -0
- package/dist/watchmen/synthesize.js +475 -0
- package/dist/watchmen/synthesize.js.map +7 -0
- package/package.json +6 -2
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var vulns_exports = {};
|
|
30
|
+
__export(vulns_exports, {
|
|
31
|
+
register: () => register
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(vulns_exports);
|
|
34
|
+
var path = __toESM(require("path"));
|
|
35
|
+
var import_config = require("../../config");
|
|
36
|
+
var import_ui = require("../ui");
|
|
37
|
+
var import_fix_suggestions = require("../../security/export/fix-suggestions");
|
|
38
|
+
var import_suppressions = require("../../security/suppressions");
|
|
39
|
+
function parseEpssFailOn(failOn) {
|
|
40
|
+
const m = failOn.match(/^epss=(.+)$/);
|
|
41
|
+
if (!m) return null;
|
|
42
|
+
const n = parseFloat(m[1]);
|
|
43
|
+
return isNaN(n) ? null : n;
|
|
44
|
+
}
|
|
45
|
+
function workspaceFromManifests(sourceManifests) {
|
|
46
|
+
if (!sourceManifests) return "root";
|
|
47
|
+
try {
|
|
48
|
+
const manifests = JSON.parse(sourceManifests);
|
|
49
|
+
if (!manifests.length) return "root";
|
|
50
|
+
const dir = path.dirname(manifests[0]);
|
|
51
|
+
return dir === "." ? "root" : dir;
|
|
52
|
+
} catch {
|
|
53
|
+
return "root";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function register(program) {
|
|
57
|
+
program.command("vulns [projectPath]").description("List vulnerabilities with reachability verdicts and severity").option("--severity <level>", "Filter by severity: critical, high, medium, low").option("--verdict <verdict>", "Filter by verdict: affected, not_affected, under_investigation").option("--refresh", "Trigger fresh vulnerability enrichment before listing").option("--epss <threshold>", "Filter by EPSS score (e.g. 0.5 shows only vulns with EPSS >= 0.5)").option("--stale", "Show staleness score of the affected dependency alongside each CVE").option("--sort <key>", "Sort results by: risk (default), cvss, epss, name").option("--add <cveId>", "Manually register a CVE").option("--package <name>", "Package name for --add").option("--version <ver>", "Package version for --add").option("--fail-on <condition>", "Exit 1 if condition is met: affected, any, critical, high, epss=N").option("--group-by <key>", "Group output by: workspace").action(async (projectPath, opts) => {
|
|
58
|
+
const target = path.resolve(projectPath ?? process.cwd());
|
|
59
|
+
const config = await (0, import_config.loadConfig)(target);
|
|
60
|
+
if (!config.enableSecurity) {
|
|
61
|
+
console.error(`
|
|
62
|
+
${"\x1B[33m"}\u26A0 Security analysis is disabled.${import_ui.reset}`);
|
|
63
|
+
console.error(` ${import_ui.dim}Enable it in .kirograph/config.json:${import_ui.reset} ${import_ui.violet}${import_ui.bold}"enableSecurity": true${import_ui.reset}`);
|
|
64
|
+
console.error(` ${import_ui.dim}Then re-run:${import_ui.reset} ${import_ui.violet}${import_ui.bold}kirograph index${import_ui.reset}
|
|
65
|
+
`);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
if (opts.failOn !== void 0) {
|
|
69
|
+
const validFailOns = ["affected", "any", "critical", "high"];
|
|
70
|
+
const isEpss = parseEpssFailOn(opts.failOn) !== null;
|
|
71
|
+
if (!validFailOns.includes(opts.failOn) && !isEpss) {
|
|
72
|
+
console.error(` \u2716 Invalid --fail-on value: ${opts.failOn}. Use: affected, any, critical, high, epss=N`);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (opts.groupBy !== void 0 && opts.groupBy !== "workspace") {
|
|
77
|
+
console.error(` \u2716 Invalid --group-by value: ${opts.groupBy}. Supported: workspace`);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
|
|
81
|
+
if (!KiroGraph.isInitialized(target)) {
|
|
82
|
+
console.error(" \u2716 KiroGraph not initialized. Run: kirograph init");
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
const cg = await KiroGraph.open(target);
|
|
86
|
+
const db = cg.getDatabase();
|
|
87
|
+
db.applySecuritySchema();
|
|
88
|
+
const rawDb = db.getRawDb();
|
|
89
|
+
if (opts.add) {
|
|
90
|
+
if (!opts.package || !opts.version) {
|
|
91
|
+
console.error(` \u2716 --add requires --package <name> and --version <ver>`);
|
|
92
|
+
cg.close();
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
const cveId = opts.add;
|
|
96
|
+
const pkgName = opts.package;
|
|
97
|
+
const pkgVersion = opts.version;
|
|
98
|
+
const depRow = rawDb.get(
|
|
99
|
+
`SELECT node_id, ecosystem FROM sec_dependencies
|
|
100
|
+
WHERE package_name = ? AND (resolved_version = ? OR declared_constraint = ?)`,
|
|
101
|
+
[pkgName, pkgVersion, pkgVersion]
|
|
102
|
+
);
|
|
103
|
+
if (!depRow) {
|
|
104
|
+
console.error(` \u2716 No dependency found matching ${import_ui.violet}${pkgName}@${pkgVersion}${import_ui.reset}`);
|
|
105
|
+
console.error(` ${import_ui.dim}Run${import_ui.reset} ${import_ui.violet}${import_ui.bold}kirograph index${import_ui.reset} ${import_ui.dim}first to discover dependencies.${import_ui.reset}`);
|
|
106
|
+
cg.close();
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
const vulnNodeId = `vuln:${cveId}`;
|
|
110
|
+
const now = Date.now();
|
|
111
|
+
rawDb.run(
|
|
112
|
+
`INSERT OR REPLACE INTO nodes
|
|
113
|
+
(id, kind, name, qualified_name, file_path, language,
|
|
114
|
+
start_line, end_line, start_column, end_column,
|
|
115
|
+
is_exported, is_async, is_static, is_abstract, updated_at)
|
|
116
|
+
VALUES (?, 'vulnerability', ?, ?, '', 'unknown', 0, 0, 0, 0, 0, 0, 0, 0, ?)`,
|
|
117
|
+
[vulnNodeId, cveId, cveId, now]
|
|
118
|
+
);
|
|
119
|
+
rawDb.run(
|
|
120
|
+
`INSERT OR REPLACE INTO sec_vulnerabilities
|
|
121
|
+
(node_id, cve_id, severity_score, affected_ranges, fixed_version, summary, source_database)
|
|
122
|
+
VALUES (?, ?, NULL, '[]', NULL, 'Manually registered', 'manual')`,
|
|
123
|
+
[vulnNodeId, cveId]
|
|
124
|
+
);
|
|
125
|
+
rawDb.run(
|
|
126
|
+
`INSERT OR IGNORE INTO edges (source, target, kind, confidence, confidence_score)
|
|
127
|
+
VALUES (?, ?, 'has_vulnerability', 'extracted', 1.0)`,
|
|
128
|
+
[depRow.node_id, vulnNodeId]
|
|
129
|
+
);
|
|
130
|
+
console.log(` ${import_ui.green}\u2713${import_ui.reset} Registered ${import_ui.violet}${import_ui.bold}${cveId}${import_ui.reset} against ${import_ui.violet}${pkgName}@${pkgVersion}${import_ui.reset}`);
|
|
131
|
+
cg.close();
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (opts.refresh) {
|
|
135
|
+
console.error(` ${import_ui.dim}Refreshing vulnerability data from configured databases...${import_ui.reset}`);
|
|
136
|
+
const { OsvAdapter } = await Promise.resolve().then(() => require("../../security/vuln/osv-adapter.js"));
|
|
137
|
+
const { VulnerabilityDatabaseClient } = await Promise.resolve().then(() => require("../../security/vuln/client.js"));
|
|
138
|
+
const adapters = config.securityDatabases.map((dbName) => {
|
|
139
|
+
if (dbName.toUpperCase() === "OSV") return new OsvAdapter();
|
|
140
|
+
return null;
|
|
141
|
+
}).filter(Boolean);
|
|
142
|
+
const client = new VulnerabilityDatabaseClient(adapters, db);
|
|
143
|
+
const result = await client.enrichAll();
|
|
144
|
+
console.error(` ${import_ui.green}\u2713${import_ui.reset} Checked ${import_ui.bold}${result.dependenciesChecked}${import_ui.reset} dependencies, found ${import_ui.bold}${result.vulnerabilitiesFound}${import_ui.reset} vulnerabilities`);
|
|
145
|
+
if (result.errors.length > 0) {
|
|
146
|
+
console.error(` ${"\x1B[33m"}\u26A0${import_ui.reset} ${result.errors.length} error(s) during enrichment`);
|
|
147
|
+
}
|
|
148
|
+
console.error();
|
|
149
|
+
}
|
|
150
|
+
const selectSourceManifests = opts.groupBy === "workspace" ? `,
|
|
151
|
+
d.source_manifests` : "";
|
|
152
|
+
let query = `
|
|
153
|
+
SELECT
|
|
154
|
+
v.node_id, v.cve_id, v.severity_score, v.fixed_version, v.summary, v.source_database,
|
|
155
|
+
v.epss_score, v.epss_percentile, v.risk_score,
|
|
156
|
+
d.package_name, d.ecosystem, d.resolved_version, d.declared_constraint,
|
|
157
|
+
d.staleness_score,
|
|
158
|
+
r.verdict${selectSourceManifests}
|
|
159
|
+
FROM sec_vulnerabilities v
|
|
160
|
+
LEFT JOIN edges e ON e.target = v.node_id AND e.kind = 'has_vulnerability'
|
|
161
|
+
LEFT JOIN sec_dependencies d ON d.node_id = e.source
|
|
162
|
+
LEFT JOIN sec_reachability r ON r.vulnerability_node_id = v.node_id
|
|
163
|
+
WHERE 1=1
|
|
164
|
+
`;
|
|
165
|
+
const params = [];
|
|
166
|
+
if (opts.severity) {
|
|
167
|
+
const severityRanges = {
|
|
168
|
+
critical: [9, 10],
|
|
169
|
+
high: [7, 8.9],
|
|
170
|
+
medium: [4, 6.9],
|
|
171
|
+
low: [0.1, 3.9]
|
|
172
|
+
};
|
|
173
|
+
const range = severityRanges[opts.severity.toLowerCase()];
|
|
174
|
+
if (!range) {
|
|
175
|
+
console.error(` \u2716 Invalid severity: ${opts.severity}. Use: critical, high, medium, low`);
|
|
176
|
+
cg.close();
|
|
177
|
+
process.exit(1);
|
|
178
|
+
}
|
|
179
|
+
query += ` AND v.severity_score >= ? AND v.severity_score <= ?`;
|
|
180
|
+
params.push(range[0], range[1]);
|
|
181
|
+
}
|
|
182
|
+
if (opts.verdict) {
|
|
183
|
+
const validVerdicts = ["affected", "not_affected", "under_investigation"];
|
|
184
|
+
if (!validVerdicts.includes(opts.verdict)) {
|
|
185
|
+
console.error(` \u2716 Invalid verdict: ${opts.verdict}. Use: affected, not_affected, under_investigation`);
|
|
186
|
+
cg.close();
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
query += ` AND r.verdict = ?`;
|
|
190
|
+
params.push(opts.verdict);
|
|
191
|
+
}
|
|
192
|
+
if (opts.epss !== void 0) {
|
|
193
|
+
const epssThreshold = parseFloat(opts.epss);
|
|
194
|
+
if (isNaN(epssThreshold) || epssThreshold < 0 || epssThreshold > 1) {
|
|
195
|
+
console.error(` \u2716 Invalid EPSS threshold: ${opts.epss}. Use a number between 0 and 1 (e.g. 0.5)`);
|
|
196
|
+
cg.close();
|
|
197
|
+
process.exit(1);
|
|
198
|
+
}
|
|
199
|
+
query += ` AND v.epss_score >= ?`;
|
|
200
|
+
params.push(epssThreshold);
|
|
201
|
+
}
|
|
202
|
+
const sortKey = opts.sort?.toLowerCase() ?? "risk";
|
|
203
|
+
const validSortKeys = ["risk", "cvss", "epss", "name"];
|
|
204
|
+
if (!validSortKeys.includes(sortKey)) {
|
|
205
|
+
console.error(` \u2716 Invalid sort key: ${opts.sort}. Use: risk, cvss, epss, name`);
|
|
206
|
+
cg.close();
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
209
|
+
const sortClause = sortKey === "risk" ? `v.risk_score DESC NULLS LAST` : sortKey === "cvss" ? `v.severity_score DESC NULLS LAST` : sortKey === "epss" ? `v.epss_score DESC NULLS LAST` : `v.cve_id ASC`;
|
|
210
|
+
query += ` ORDER BY ${sortClause}`;
|
|
211
|
+
const rows = rawDb.all(query, params);
|
|
212
|
+
const verdictRank = (v) => v === "affected" ? 3 : v === "under_investigation" ? 2 : v === "not_affected" ? 1 : 0;
|
|
213
|
+
const deduped = /* @__PURE__ */ new Map();
|
|
214
|
+
for (const row of rows) {
|
|
215
|
+
const key = `${row.cve_id}::${row.package_name ?? ""}::${row.ecosystem ?? ""}`;
|
|
216
|
+
const existing = deduped.get(key);
|
|
217
|
+
if (!existing || verdictRank(row.verdict) > verdictRank(existing.verdict)) {
|
|
218
|
+
deduped.set(key, row);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
const dedupedRows = [...deduped.values()];
|
|
222
|
+
const suppressions = new import_suppressions.SuppressionManager(target);
|
|
223
|
+
const suppressedRows = dedupedRows.filter((row) => suppressions.isSuppressed(row.cve_id));
|
|
224
|
+
const filteredRows = dedupedRows.filter((row) => !suppressions.isSuppressed(row.cve_id));
|
|
225
|
+
if (filteredRows.length === 0) {
|
|
226
|
+
const filterNote = opts.severity || opts.verdict ? ` matching filters` : "";
|
|
227
|
+
console.log(`
|
|
228
|
+
${import_ui.dim}No vulnerabilities found${filterNote}.${import_ui.reset}
|
|
229
|
+
`);
|
|
230
|
+
if (suppressedRows.length > 0) {
|
|
231
|
+
console.log(` ${import_ui.dim}${suppressedRows.length} CVE(s) suppressed \u2014 kirograph vuln suppressions to review${import_ui.reset}
|
|
232
|
+
`);
|
|
233
|
+
}
|
|
234
|
+
cg.close();
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
function printVulnRow(row, indent = " ") {
|
|
238
|
+
const score = row.severity_score;
|
|
239
|
+
let severityLabel;
|
|
240
|
+
let severityColor;
|
|
241
|
+
if (score == null) {
|
|
242
|
+
severityLabel = "unknown";
|
|
243
|
+
severityColor = import_ui.dim;
|
|
244
|
+
} else if (score >= 9) {
|
|
245
|
+
severityLabel = "CRITICAL";
|
|
246
|
+
severityColor = "\x1B[31m";
|
|
247
|
+
} else if (score >= 7) {
|
|
248
|
+
severityLabel = "HIGH";
|
|
249
|
+
severityColor = "\x1B[31m";
|
|
250
|
+
} else if (score >= 4) {
|
|
251
|
+
severityLabel = "MEDIUM";
|
|
252
|
+
severityColor = "\x1B[33m";
|
|
253
|
+
} else {
|
|
254
|
+
severityLabel = "LOW";
|
|
255
|
+
severityColor = import_ui.dim;
|
|
256
|
+
}
|
|
257
|
+
let verdictLabel;
|
|
258
|
+
let verdictColor;
|
|
259
|
+
if (!row.verdict) {
|
|
260
|
+
verdictLabel = "pending";
|
|
261
|
+
verdictColor = import_ui.dim;
|
|
262
|
+
} else if (row.verdict === "affected") {
|
|
263
|
+
verdictLabel = "affected";
|
|
264
|
+
verdictColor = "\x1B[31m";
|
|
265
|
+
} else if (row.verdict === "not_affected") {
|
|
266
|
+
verdictLabel = "not affected";
|
|
267
|
+
verdictColor = import_ui.green;
|
|
268
|
+
} else {
|
|
269
|
+
verdictLabel = "investigating";
|
|
270
|
+
verdictColor = "\x1B[33m";
|
|
271
|
+
}
|
|
272
|
+
const pkg = row.package_name ? `${row.package_name}@${row.resolved_version || row.declared_constraint || "?"}` : "unknown package";
|
|
273
|
+
let epssBadge = "";
|
|
274
|
+
if (row.epss_score != null && row.epss_percentile != null) {
|
|
275
|
+
const epssColor = row.epss_score >= 0.3 ? "\x1B[33m" : import_ui.dim;
|
|
276
|
+
const scoreStr = row.epss_score.toFixed(2);
|
|
277
|
+
const pctStr = `${Math.round(row.epss_percentile * 100)}th%`;
|
|
278
|
+
epssBadge = ` ${epssColor}${import_ui.dim}[EPSS: ${scoreStr} / ${pctStr}]${import_ui.reset}`;
|
|
279
|
+
}
|
|
280
|
+
let riskBadge = "";
|
|
281
|
+
if (row.risk_score != null) {
|
|
282
|
+
const riskColor = row.risk_score >= 7 ? "\x1B[31m" : row.risk_score >= 4 ? "\x1B[33m" : import_ui.dim;
|
|
283
|
+
riskBadge = ` ${riskColor}[Risk: ${row.risk_score.toFixed(1)}]${import_ui.reset}`;
|
|
284
|
+
}
|
|
285
|
+
console.log(`${indent}${severityColor}${severityLabel}${import_ui.reset} ${import_ui.violet}${import_ui.bold}${row.cve_id}${import_ui.reset} ${import_ui.dim}${pkg}${import_ui.reset} [${verdictColor}${verdictLabel}${import_ui.reset}]${epssBadge}${riskBadge}`);
|
|
286
|
+
if (row.summary && row.summary !== "Manually registered") {
|
|
287
|
+
const truncated = row.summary.length > 100 ? row.summary.slice(0, 100) + "\u2026" : row.summary;
|
|
288
|
+
console.log(`${indent} ${import_ui.dim}${truncated}${import_ui.reset}`);
|
|
289
|
+
}
|
|
290
|
+
if (opts.stale && row.staleness_score != null) {
|
|
291
|
+
const s = row.staleness_score;
|
|
292
|
+
const staleColor = s >= 0.7 ? "\x1B[31m" : s >= 0.4 ? "\x1B[33m" : import_ui.dim;
|
|
293
|
+
console.log(`${indent} ${staleColor}${import_ui.dim}[staleness: ${s.toFixed(2)}]${import_ui.reset}`);
|
|
294
|
+
}
|
|
295
|
+
if (row.fixed_version && row.ecosystem && row.package_name) {
|
|
296
|
+
const fix = (0, import_fix_suggestions.formatFixSuggestion)(row.ecosystem, row.package_name, row.fixed_version);
|
|
297
|
+
if (fix) {
|
|
298
|
+
console.log(`${indent} ${fix}`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
console.log();
|
|
302
|
+
}
|
|
303
|
+
if (opts.groupBy === "workspace") {
|
|
304
|
+
const groups = /* @__PURE__ */ new Map();
|
|
305
|
+
for (const row of filteredRows) {
|
|
306
|
+
const ws = workspaceFromManifests(row.source_manifests ?? null);
|
|
307
|
+
if (!groups.has(ws)) groups.set(ws, []);
|
|
308
|
+
groups.get(ws).push(row);
|
|
309
|
+
}
|
|
310
|
+
const workspaces = Array.from(groups.keys());
|
|
311
|
+
if (workspaces.length <= 1) {
|
|
312
|
+
console.log(`
|
|
313
|
+
${import_ui.bold}Vulnerabilities${import_ui.reset} (${filteredRows.length})
|
|
314
|
+
`);
|
|
315
|
+
for (const row of filteredRows) {
|
|
316
|
+
printVulnRow(row);
|
|
317
|
+
}
|
|
318
|
+
} else {
|
|
319
|
+
console.log(`
|
|
320
|
+
${import_ui.bold}Vulnerabilities${import_ui.reset} (${filteredRows.length})
|
|
321
|
+
`);
|
|
322
|
+
for (const ws of workspaces) {
|
|
323
|
+
const wsRows = groups.get(ws);
|
|
324
|
+
const count = wsRows.length;
|
|
325
|
+
const header = `Workspace: ${ws} (${count} vulnerabilit${count === 1 ? "y" : "ies"})`;
|
|
326
|
+
const line = "\u2500".repeat(header.length);
|
|
327
|
+
console.log(` ${import_ui.bold}${header}${import_ui.reset}`);
|
|
328
|
+
console.log(` ${import_ui.dim}${line}${import_ui.reset}`);
|
|
329
|
+
for (const row of wsRows) {
|
|
330
|
+
printVulnRow(row);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
} else {
|
|
335
|
+
console.log(`
|
|
336
|
+
${import_ui.bold}Vulnerabilities${import_ui.reset} (${filteredRows.length})
|
|
337
|
+
`);
|
|
338
|
+
for (const row of filteredRows) {
|
|
339
|
+
printVulnRow(row);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
if (suppressedRows.length > 0) {
|
|
343
|
+
console.log(` ${import_ui.dim}${suppressedRows.length} CVE(s) suppressed \u2014 kirograph vuln suppressions to review${import_ui.reset}
|
|
344
|
+
`);
|
|
345
|
+
}
|
|
346
|
+
if (opts.failOn !== void 0) {
|
|
347
|
+
const failOn = opts.failOn;
|
|
348
|
+
let failCount = 0;
|
|
349
|
+
let failReason = "";
|
|
350
|
+
if (failOn === "affected") {
|
|
351
|
+
failCount = filteredRows.filter((r) => r.verdict === "affected").length;
|
|
352
|
+
failReason = `affected`;
|
|
353
|
+
} else if (failOn === "any") {
|
|
354
|
+
failCount = filteredRows.length;
|
|
355
|
+
failReason = `any`;
|
|
356
|
+
} else if (failOn === "critical") {
|
|
357
|
+
failCount = filteredRows.filter((r) => r.severity_score != null && r.severity_score >= 9).length;
|
|
358
|
+
failReason = `critical`;
|
|
359
|
+
} else if (failOn === "high") {
|
|
360
|
+
failCount = filteredRows.filter((r) => r.severity_score != null && r.severity_score >= 7).length;
|
|
361
|
+
failReason = `high`;
|
|
362
|
+
} else {
|
|
363
|
+
const epssThreshold = parseEpssFailOn(failOn);
|
|
364
|
+
if (epssThreshold !== null) {
|
|
365
|
+
failCount = filteredRows.filter((r) => r.epss_score != null && r.epss_score >= epssThreshold).length;
|
|
366
|
+
failReason = `epss=${epssThreshold}`;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
if (failCount > 0) {
|
|
370
|
+
console.log(` \x1B[31m\u2716\x1B[0m --fail-on ${failReason}: ${failCount} ${failReason === "any" ? "" : `${failReason} `}vulnerabilit${failCount === 1 ? "y" : "ies"} found. Exiting with code 1.`);
|
|
371
|
+
cg.close();
|
|
372
|
+
process.exit(1);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
cg.close();
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
379
|
+
0 && (module.exports = {
|
|
380
|
+
register
|
|
381
|
+
});
|
|
382
|
+
//# sourceMappingURL=vulns.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/bin/commands/vulns.ts"],
|
|
4
|
+
"sourcesContent": ["import { Command } from 'commander';\nimport * as path from 'path';\nimport { loadConfig } from '../../config';\nimport { dim, reset, violet, bold, green } from '../ui';\nimport { formatFixSuggestion } from '../../security/export/fix-suggestions';\nimport { SuppressionManager } from '../../security/suppressions';\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Parse an `epss=N` fail-on value and return the threshold, or null if not an epss condition. */\nfunction parseEpssFailOn(failOn: string): number | null {\n const m = failOn.match(/^epss=(.+)$/);\n if (!m) return null;\n const n = parseFloat(m[1]);\n return isNaN(n) ? null : n;\n}\n\n/** Extract workspace label from a source_manifests JSON string. */\nfunction workspaceFromManifests(sourceManifests: string | null): string {\n if (!sourceManifests) return 'root';\n try {\n const manifests: string[] = JSON.parse(sourceManifests);\n if (!manifests.length) return 'root';\n const dir = path.dirname(manifests[0]);\n return dir === '.' ? 'root' : dir;\n } catch {\n return 'root';\n }\n}\n\nexport function register(program: Command): void {\n program\n .command('vulns [projectPath]')\n .description('List vulnerabilities with reachability verdicts and severity')\n .option('--severity <level>', 'Filter by severity: critical, high, medium, low')\n .option('--verdict <verdict>', 'Filter by verdict: affected, not_affected, under_investigation')\n .option('--refresh', 'Trigger fresh vulnerability enrichment before listing')\n .option('--epss <threshold>', 'Filter by EPSS score (e.g. 0.5 shows only vulns with EPSS >= 0.5)')\n .option('--stale', 'Show staleness score of the affected dependency alongside each CVE')\n .option('--sort <key>', 'Sort results by: risk (default), cvss, epss, name')\n .option('--add <cveId>', 'Manually register a CVE')\n .option('--package <name>', 'Package name for --add')\n .option('--version <ver>', 'Package version for --add')\n .option('--fail-on <condition>', 'Exit 1 if condition is met: affected, any, critical, high, epss=N')\n .option('--group-by <key>', 'Group output by: workspace')\n .action(async (projectPath: string | undefined, opts: {\n severity?: string;\n verdict?: string;\n refresh?: boolean;\n epss?: string;\n stale?: boolean;\n sort?: string;\n add?: string;\n package?: string;\n version?: string;\n failOn?: string;\n groupBy?: string;\n }) => {\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 // Validate --fail-on early\n if (opts.failOn !== undefined) {\n const validFailOns = ['affected', 'any', 'critical', 'high'];\n const isEpss = parseEpssFailOn(opts.failOn) !== null;\n if (!validFailOns.includes(opts.failOn) && !isEpss) {\n console.error(` \u2716 Invalid --fail-on value: ${opts.failOn}. Use: affected, any, critical, high, epss=N`);\n process.exit(1);\n }\n }\n\n // Validate --group-by early\n if (opts.groupBy !== undefined && opts.groupBy !== 'workspace') {\n console.error(` \u2716 Invalid --group-by value: ${opts.groupBy}. Supported: workspace`);\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 // Handle --add: manually register a CVE\n if (opts.add) {\n if (!opts.package || !opts.version) {\n console.error(` \u2716 --add requires --package <name> and --version <ver>`);\n cg.close(); process.exit(1);\n }\n\n const cveId = opts.add;\n const pkgName = opts.package;\n const pkgVersion = opts.version;\n\n // Find the matching dependency node\n const depRow: { node_id: string; ecosystem: string } | undefined = rawDb.get(\n `SELECT node_id, ecosystem FROM sec_dependencies\n WHERE package_name = ? AND (resolved_version = ? OR declared_constraint = ?)`,\n [pkgName, pkgVersion, pkgVersion],\n );\n\n if (!depRow) {\n console.error(` \u2716 No dependency found matching ${violet}${pkgName}@${pkgVersion}${reset}`);\n console.error(` ${dim}Run${reset} ${violet}${bold}kirograph index${reset} ${dim}first to discover dependencies.${reset}`);\n cg.close(); process.exit(1);\n }\n\n // Create the vulnerability node\n const vulnNodeId = `vuln:${cveId}`;\n const now = Date.now();\n\n rawDb.run(\n `INSERT OR REPLACE INTO nodes\n (id, kind, name, qualified_name, file_path, language,\n start_line, end_line, start_column, end_column,\n is_exported, is_async, is_static, is_abstract, updated_at)\n VALUES (?, 'vulnerability', ?, ?, '', 'unknown', 0, 0, 0, 0, 0, 0, 0, 0, ?)`,\n [vulnNodeId, cveId, cveId, now],\n );\n\n rawDb.run(\n `INSERT OR REPLACE INTO sec_vulnerabilities\n (node_id, cve_id, severity_score, affected_ranges, fixed_version, summary, source_database)\n VALUES (?, ?, NULL, '[]', NULL, 'Manually registered', 'manual')`,\n [vulnNodeId, cveId],\n );\n\n // Create has_vulnerability edge\n rawDb.run(\n `INSERT OR IGNORE INTO edges (source, target, kind, confidence, confidence_score)\n VALUES (?, ?, 'has_vulnerability', 'extracted', 1.0)`,\n [depRow.node_id, vulnNodeId],\n );\n\n console.log(` ${green}\u2713${reset} Registered ${violet}${bold}${cveId}${reset} against ${violet}${pkgName}@${pkgVersion}${reset}`);\n cg.close();\n return;\n }\n\n // Handle --refresh: trigger fresh vulnerability enrichment\n if (opts.refresh) {\n console.error(` ${dim}Refreshing vulnerability data from configured databases...${reset}`);\n const { OsvAdapter } = await Promise.resolve().then(() => require('../../security/vuln/osv-adapter.js'));\n const { VulnerabilityDatabaseClient } = await Promise.resolve().then(() => require('../../security/vuln/client.js'));\n\n const adapters = config.securityDatabases.map((dbName: string) => {\n if (dbName.toUpperCase() === 'OSV') return new OsvAdapter();\n return null;\n }).filter(Boolean) as any[];\n\n const client = new VulnerabilityDatabaseClient(adapters, db);\n const result = await client.enrichAll();\n\n console.error(` ${green}\u2713${reset} Checked ${bold}${result.dependenciesChecked}${reset} dependencies, found ${bold}${result.vulnerabilitiesFound}${reset} vulnerabilities`);\n if (result.errors.length > 0) {\n console.error(` ${'\\x1b[33m'}\u26A0${reset} ${result.errors.length} error(s) during enrichment`);\n }\n console.error();\n }\n\n // Build query for listing vulnerabilities\n // Include source_manifests when group-by workspace is requested\n const selectSourceManifests = opts.groupBy === 'workspace' ? `,\\n d.source_manifests` : '';\n let query = `\n SELECT\n v.node_id, v.cve_id, v.severity_score, v.fixed_version, v.summary, v.source_database,\n v.epss_score, v.epss_percentile, v.risk_score,\n d.package_name, d.ecosystem, d.resolved_version, d.declared_constraint,\n d.staleness_score,\n r.verdict${selectSourceManifests}\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 1=1\n `;\n const params: any[] = [];\n\n // Apply severity filter\n if (opts.severity) {\n const severityRanges: Record<string, [number, number]> = {\n critical: [9.0, 10.0],\n high: [7.0, 8.9],\n medium: [4.0, 6.9],\n low: [0.1, 3.9],\n };\n const range = severityRanges[opts.severity.toLowerCase()];\n if (!range) {\n console.error(` \u2716 Invalid severity: ${opts.severity}. Use: critical, high, medium, low`);\n cg.close(); process.exit(1);\n }\n query += ` AND v.severity_score >= ? AND v.severity_score <= ?`;\n params.push(range[0], range[1]);\n }\n\n // Apply verdict filter\n if (opts.verdict) {\n const validVerdicts = ['affected', 'not_affected', 'under_investigation'];\n if (!validVerdicts.includes(opts.verdict)) {\n console.error(` \u2716 Invalid verdict: ${opts.verdict}. Use: affected, not_affected, under_investigation`);\n cg.close(); process.exit(1);\n }\n query += ` AND r.verdict = ?`;\n params.push(opts.verdict);\n }\n\n // Apply EPSS threshold filter\n if (opts.epss !== undefined) {\n const epssThreshold = parseFloat(opts.epss);\n if (isNaN(epssThreshold) || epssThreshold < 0 || epssThreshold > 1) {\n console.error(` \u2716 Invalid EPSS threshold: ${opts.epss}. Use a number between 0 and 1 (e.g. 0.5)`);\n cg.close(); process.exit(1);\n }\n query += ` AND v.epss_score >= ?`;\n params.push(epssThreshold);\n }\n\n // Resolve sort order\n const sortKey = opts.sort?.toLowerCase() ?? 'risk';\n const validSortKeys = ['risk', 'cvss', 'epss', 'name'];\n if (!validSortKeys.includes(sortKey)) {\n console.error(` \u2716 Invalid sort key: ${opts.sort}. Use: risk, cvss, epss, name`);\n cg.close(); process.exit(1);\n }\n const sortClause =\n sortKey === 'risk' ? `v.risk_score DESC NULLS LAST` :\n sortKey === 'cvss' ? `v.severity_score DESC NULLS LAST` :\n sortKey === 'epss' ? `v.epss_score DESC NULLS LAST` :\n `v.cve_id ASC`;\n query += ` ORDER BY ${sortClause}`;\n\n const rows: Array<{\n node_id: string;\n cve_id: string;\n severity_score: number | null;\n fixed_version: string | null;\n summary: string | null;\n source_database: string;\n epss_score: number | null;\n epss_percentile: number | null;\n risk_score: number | null;\n package_name: string | null;\n ecosystem: string | null;\n resolved_version: string | null;\n declared_constraint: string | null;\n staleness_score: number | null;\n verdict: string | null;\n source_manifests?: string | null;\n }> = rawDb.all(query, params);\n\n // Deduplicate by (cve_id, package_name, ecosystem) \u2014 same CVE can appear multiple\n // times if a package is declared in multiple manifests (monorepo) or has multiple\n // dep nodes. Keep the row with the worst verdict (affected > under_investigation > not_affected > null).\n const verdictRank = (v: string | null) =>\n v === 'affected' ? 3 : v === 'under_investigation' ? 2 : v === 'not_affected' ? 1 : 0;\n const deduped = new Map<string, typeof rows[0]>();\n for (const row of rows) {\n const key = `${row.cve_id}::${row.package_name ?? ''}::${row.ecosystem ?? ''}`;\n const existing = deduped.get(key);\n if (!existing || verdictRank(row.verdict) > verdictRank(existing.verdict)) {\n deduped.set(key, row);\n }\n }\n const dedupedRows = [...deduped.values()];\n\n // Filter out suppressed CVEs\n const suppressions = new SuppressionManager(target);\n const suppressedRows = dedupedRows.filter(row => suppressions.isSuppressed(row.cve_id));\n const filteredRows = dedupedRows.filter(row => !suppressions.isSuppressed(row.cve_id));\n\n if (filteredRows.length === 0) {\n const filterNote = (opts.severity || opts.verdict)\n ? ` matching filters`\n : '';\n console.log(`\\n ${dim}No vulnerabilities found${filterNote}.${reset}\\n`);\n if (suppressedRows.length > 0) {\n console.log(` ${dim}${suppressedRows.length} CVE(s) suppressed \u2014 kirograph vuln suppressions to review${reset}\\n`);\n }\n cg.close();\n return;\n }\n\n // \u2500\u2500 Render a single vulnerability row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function printVulnRow(row: (typeof filteredRows)[0], indent = ' '): void {\n // Severity badge\n const score = row.severity_score;\n let severityLabel: string;\n let severityColor: string;\n if (score == null) {\n severityLabel = 'unknown';\n severityColor = dim;\n } else if (score >= 9.0) {\n severityLabel = 'CRITICAL';\n severityColor = '\\x1b[31m';\n } else if (score >= 7.0) {\n severityLabel = 'HIGH';\n severityColor = '\\x1b[31m';\n } else if (score >= 4.0) {\n severityLabel = 'MEDIUM';\n severityColor = '\\x1b[33m';\n } else {\n severityLabel = 'LOW';\n severityColor = dim;\n }\n\n // Verdict badge\n let verdictLabel: string;\n let verdictColor: string;\n if (!row.verdict) {\n verdictLabel = 'pending';\n verdictColor = dim;\n } else if (row.verdict === 'affected') {\n verdictLabel = 'affected';\n verdictColor = '\\x1b[31m';\n } else if (row.verdict === 'not_affected') {\n verdictLabel = 'not affected';\n verdictColor = green;\n } else {\n verdictLabel = 'investigating';\n verdictColor = '\\x1b[33m';\n }\n\n const pkg = row.package_name\n ? `${row.package_name}@${row.resolved_version || row.declared_constraint || '?'}`\n : 'unknown package';\n\n // EPSS badge\n let epssBadge = '';\n if (row.epss_score != null && row.epss_percentile != null) {\n const epssColor = row.epss_score >= 0.3 ? '\\x1b[33m' : dim;\n const scoreStr = row.epss_score.toFixed(2);\n const pctStr = `${Math.round(row.epss_percentile * 100)}th%`;\n epssBadge = ` ${epssColor}${dim}[EPSS: ${scoreStr} / ${pctStr}]${reset}`;\n }\n\n // Risk score badge\n let riskBadge = '';\n if (row.risk_score != null) {\n const riskColor = row.risk_score >= 7 ? '\\x1b[31m' : row.risk_score >= 4 ? '\\x1b[33m' : dim;\n riskBadge = ` ${riskColor}[Risk: ${row.risk_score.toFixed(1)}]${reset}`;\n }\n\n console.log(`${indent}${severityColor}${severityLabel}${reset} ${violet}${bold}${row.cve_id}${reset} ${dim}${pkg}${reset} [${verdictColor}${verdictLabel}${reset}]${epssBadge}${riskBadge}`);\n\n if (row.summary && row.summary !== 'Manually registered') {\n const truncated = row.summary.length > 100 ? row.summary.slice(0, 100) + '\u2026' : row.summary;\n console.log(`${indent} ${dim}${truncated}${reset}`);\n }\n\n // Staleness badge (when --stale flag is set)\n if (opts.stale && row.staleness_score != null) {\n const s = row.staleness_score;\n const staleColor = s >= 0.7 ? '\\x1b[31m' : s >= 0.4 ? '\\x1b[33m' : dim;\n console.log(`${indent} ${staleColor}${dim}[staleness: ${s.toFixed(2)}]${reset}`);\n }\n\n // Fix suggestion\n if (row.fixed_version && row.ecosystem && row.package_name) {\n const fix = formatFixSuggestion(row.ecosystem, row.package_name, row.fixed_version);\n if (fix) {\n console.log(`${indent} ${fix}`);\n }\n }\n\n console.log();\n }\n\n // \u2500\u2500 Output: grouped or flat \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n if (opts.groupBy === 'workspace') {\n // Group by workspace (directory of first source manifest)\n const groups = new Map<string, Array<(typeof filteredRows)[0]>>();\n for (const row of filteredRows) {\n const ws = workspaceFromManifests(row.source_manifests ?? null);\n if (!groups.has(ws)) groups.set(ws, []);\n groups.get(ws)!.push(row);\n }\n\n // Only apply workspace grouping when there are multiple distinct workspaces\n const workspaces = Array.from(groups.keys());\n if (workspaces.length <= 1) {\n // Single workspace \u2014 fall through to flat output\n console.log(`\\n ${bold}Vulnerabilities${reset} (${filteredRows.length})\\n`);\n for (const row of filteredRows) {\n printVulnRow(row);\n }\n } else {\n console.log(`\\n ${bold}Vulnerabilities${reset} (${filteredRows.length})\\n`);\n for (const ws of workspaces) {\n const wsRows = groups.get(ws)!;\n const count = wsRows.length;\n const header = `Workspace: ${ws} (${count} vulnerabilit${count === 1 ? 'y' : 'ies'})`;\n const line = '\u2500'.repeat(header.length);\n console.log(` ${bold}${header}${reset}`);\n console.log(` ${dim}${line}${reset}`);\n for (const row of wsRows) {\n printVulnRow(row);\n }\n }\n }\n } else {\n console.log(`\\n ${bold}Vulnerabilities${reset} (${filteredRows.length})\\n`);\n for (const row of filteredRows) {\n printVulnRow(row);\n }\n }\n\n if (suppressedRows.length > 0) {\n console.log(` ${dim}${suppressedRows.length} CVE(s) suppressed \u2014 kirograph vuln suppressions to review${reset}\\n`);\n }\n\n // \u2500\u2500 CI exit codes: --fail-on \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n if (opts.failOn !== undefined) {\n const failOn = opts.failOn;\n\n let failCount = 0;\n let failReason = '';\n\n if (failOn === 'affected') {\n failCount = filteredRows.filter(r => r.verdict === 'affected').length;\n failReason = `affected`;\n } else if (failOn === 'any') {\n failCount = filteredRows.length;\n failReason = `any`;\n } else if (failOn === 'critical') {\n failCount = filteredRows.filter(r => r.severity_score != null && r.severity_score >= 9.0).length;\n failReason = `critical`;\n } else if (failOn === 'high') {\n failCount = filteredRows.filter(r => r.severity_score != null && r.severity_score >= 7.0).length;\n failReason = `high`;\n } else {\n const epssThreshold = parseEpssFailOn(failOn);\n if (epssThreshold !== null) {\n failCount = filteredRows.filter(r => r.epss_score != null && r.epss_score >= epssThreshold).length;\n failReason = `epss=${epssThreshold}`;\n }\n }\n\n if (failCount > 0) {\n console.log(` \\x1b[31m\u2716\\x1b[0m --fail-on ${failReason}: ${failCount} ${failReason === 'any' ? '' : `${failReason} `}vulnerabilit${failCount === 1 ? 'y' : 'ies'} found. Exiting with code 1.`);\n cg.close();\n process.exit(1);\n }\n }\n\n cg.close();\n });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KiroGraph Archive Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared, cross-platform archive extraction and HTTP download helpers.
|
|
5
|
+
* Pure Node.js — no external binaries required (no unzip, tar, etc.).
|
|
6
|
+
* Works on all platforms without CrowdStrike or antivirus interference.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Fetch JSON from a URL, following redirects.
|
|
10
|
+
*/
|
|
11
|
+
export declare function fetchJson(url: string): Promise<any>;
|
|
12
|
+
/**
|
|
13
|
+
* Download a file from a URL to a local path, following redirects.
|
|
14
|
+
*/
|
|
15
|
+
export declare function downloadFile(url: string, dest: string): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Pure Node.js ZIP extractor — no external binary required.
|
|
18
|
+
* Reads the ZIP central directory to locate file entries, then extracts
|
|
19
|
+
* each one using Node's built-in zlib (DEFLATE) or raw copy (STORE).
|
|
20
|
+
* Includes path traversal protection.
|
|
21
|
+
*
|
|
22
|
+
* Supports: STORE (method 0) and DEFLATE (method 8) compression.
|
|
23
|
+
*/
|
|
24
|
+
export declare function extractZip(zipPath: string, destDir: string): Promise<void>;
|
|
25
|
+
export interface TarExtractOptions {
|
|
26
|
+
/** Strip this prefix from entry names (e.g. 'typesense-dashboard-gh-pages/'). */
|
|
27
|
+
stripPrefix?: string;
|
|
28
|
+
/** Only extract this specific file (by basename). Returns the file content via callback. */
|
|
29
|
+
findFile?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Extract a tar.gz archive from a URL directly to a destination directory.
|
|
33
|
+
* Streams the download → gunzip → tar extraction without writing the archive to disk.
|
|
34
|
+
* Includes path traversal protection.
|
|
35
|
+
*
|
|
36
|
+
* @param url - URL of the .tar.gz file
|
|
37
|
+
* @param destDir - Directory to extract files into
|
|
38
|
+
* @param opts - Optional: strip prefix from paths, or find a specific file
|
|
39
|
+
* @returns Buffer of the found file if opts.findFile is set, otherwise void
|
|
40
|
+
*/
|
|
41
|
+
export declare function extractTarGzFromUrl(url: string, destDir: string, opts?: TarExtractOptions): Promise<Buffer | void>;
|
|
42
|
+
/**
|
|
43
|
+
* Extract a single binary from a tar.gz URL and write it to destPath.
|
|
44
|
+
* Useful for downloading server binaries (e.g. Typesense).
|
|
45
|
+
*/
|
|
46
|
+
export declare function extractBinaryFromTarGz(url: string, binaryName: string, destPath: string): Promise<void>;
|
|
47
|
+
//# sourceMappingURL=archive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/bin/installer/archive.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAenD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAerE;AAID;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DhF;AAID,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,iBAAiB,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiGxB;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-detect installer for KiroGraph.
|
|
3
|
+
*
|
|
4
|
+
* When `kirograph install` is run without --target, this module detects
|
|
5
|
+
* all installed AI coding platforms and offers to configure them all.
|
|
6
|
+
*/
|
|
7
|
+
export interface AutoDetectOptions {
|
|
8
|
+
/** Skip the confirmation prompt and install all detected platforms */
|
|
9
|
+
skipPrompt?: boolean;
|
|
10
|
+
/** Show what would be written without making changes */
|
|
11
|
+
dryRun?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function runAutoDetectInstaller(opts?: AutoDetectOptions & {
|
|
14
|
+
skipBanner?: boolean;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=auto-detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-detect.d.ts","sourceRoot":"","sources":["../../../src/bin/installer/auto-detect.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wDAAwD;IACxD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,sBAAsB,CAAC,IAAI,GAAE,iBAAiB,GAAG;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFnH"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var auto_detect_exports = {};
|
|
30
|
+
__export(auto_detect_exports, {
|
|
31
|
+
runAutoDetectInstaller: () => runAutoDetectInstaller
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(auto_detect_exports);
|
|
34
|
+
var readline = __toESM(require("readline"));
|
|
35
|
+
var import_detect = require("./detect");
|
|
36
|
+
var import_index = require("./index");
|
|
37
|
+
var import_banner = require("../banner");
|
|
38
|
+
const dim = "\x1B[2m";
|
|
39
|
+
const reset = "\x1B[0m";
|
|
40
|
+
const green = "\x1B[32m";
|
|
41
|
+
const bold = "\x1B[1m";
|
|
42
|
+
async function runAutoDetectInstaller(opts = {}) {
|
|
43
|
+
if (!opts.skipBanner) (0, import_banner.printBanner)();
|
|
44
|
+
const cwd = process.cwd();
|
|
45
|
+
const detected = (0, import_detect.detectPlatforms)(cwd);
|
|
46
|
+
if (detected.length === 0) {
|
|
47
|
+
console.log(" No AI coding platforms detected in this environment.");
|
|
48
|
+
console.log(" Use --target <name> to install for a specific platform.");
|
|
49
|
+
console.log(` Available targets: kiro, claude, cursor, windsurf, codex, copilot, ...`);
|
|
50
|
+
console.log(` Run ${bold}kirograph install --help${reset} for the full list.
|
|
51
|
+
`);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
console.log(` ${bold}Detected platforms:${reset}
|
|
55
|
+
`);
|
|
56
|
+
for (const d of detected) {
|
|
57
|
+
console.log(` ${green}\u2713${reset} ${d.label.padEnd(20)} ${dim}(${d.reason})${reset}`);
|
|
58
|
+
}
|
|
59
|
+
console.log();
|
|
60
|
+
if (opts.dryRun) {
|
|
61
|
+
console.log(` ${dim}[dry-run] Would install KiroGraph for ${detected.length} platform(s).${reset}`);
|
|
62
|
+
console.log(` ${dim}[dry-run] No files will be written.${reset}
|
|
63
|
+
`);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
let targets = detected.map((d) => d.target);
|
|
67
|
+
if (!opts.skipPrompt) {
|
|
68
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
69
|
+
try {
|
|
70
|
+
const answer = await new Promise((resolve) => {
|
|
71
|
+
rl.question(` Install KiroGraph for all ${detected.length} detected platform(s)? [Y/n] `, resolve);
|
|
72
|
+
});
|
|
73
|
+
const trimmed = answer.trim().toLowerCase();
|
|
74
|
+
if (trimmed === "n" || trimmed === "no") {
|
|
75
|
+
console.log(" Cancelled. Use --target <name> to install for a specific platform.\n");
|
|
76
|
+
rl.close();
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (detected.length > 1) {
|
|
80
|
+
const selectAnswer = await new Promise((resolve) => {
|
|
81
|
+
rl.question(` Install all, or select specific platforms? [all/select] `, resolve);
|
|
82
|
+
});
|
|
83
|
+
if (selectAnswer.trim().toLowerCase() === "select") {
|
|
84
|
+
const selectedTargets = [];
|
|
85
|
+
for (const d of detected) {
|
|
86
|
+
const include = await new Promise((resolve) => {
|
|
87
|
+
rl.question(` Include ${d.label}? [Y/n] `, resolve);
|
|
88
|
+
});
|
|
89
|
+
if (include.trim().toLowerCase() !== "n") {
|
|
90
|
+
selectedTargets.push(d.target);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
targets = selectedTargets;
|
|
94
|
+
if (targets.length === 0) {
|
|
95
|
+
console.log(" No platforms selected. Cancelled.\n");
|
|
96
|
+
rl.close();
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
rl.close();
|
|
102
|
+
} catch {
|
|
103
|
+
rl.close();
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
console.log(`
|
|
108
|
+
Installing KiroGraph for ${targets.length} platform(s)...
|
|
109
|
+
`);
|
|
110
|
+
for (const target of targets) {
|
|
111
|
+
const label = detected.find((d) => d.target === target)?.label ?? target;
|
|
112
|
+
console.log(` \u2500\u2500 ${bold}${label}${reset} \u2500\u2500
|
|
113
|
+
`);
|
|
114
|
+
await (0, import_index.runInstaller)(target);
|
|
115
|
+
console.log();
|
|
116
|
+
}
|
|
117
|
+
console.log(` ${green}\u2713${reset} ${bold}All done!${reset} Configured ${targets.length} platform(s).`);
|
|
118
|
+
console.log(` Restart your AI coding tools for the MCP servers to load.
|
|
119
|
+
`);
|
|
120
|
+
}
|
|
121
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
122
|
+
0 && (module.exports = {
|
|
123
|
+
runAutoDetectInstaller
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=auto-detect.js.map
|