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,200 @@
|
|
|
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 swift_exports = {};
|
|
30
|
+
__export(swift_exports, {
|
|
31
|
+
parseSwiftManifest: () => parseSwiftManifest
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(swift_exports);
|
|
34
|
+
var fs = __toESM(require("fs"));
|
|
35
|
+
var path = __toESM(require("path"));
|
|
36
|
+
var import_errors = require("../../../errors");
|
|
37
|
+
async function parseSwiftManifest(manifestPath, projectRoot) {
|
|
38
|
+
const manifestDir = path.dirname(manifestPath);
|
|
39
|
+
const relativeManifest = path.relative(projectRoot, manifestPath).replace(/\\/g, "/");
|
|
40
|
+
const resolved = loadPackageResolved(manifestDir);
|
|
41
|
+
if (resolved.size > 0 || hasPackageResolved(manifestDir)) {
|
|
42
|
+
return buildFromResolved(resolved, relativeManifest);
|
|
43
|
+
}
|
|
44
|
+
let content;
|
|
45
|
+
try {
|
|
46
|
+
content = fs.readFileSync(manifestPath, "utf8");
|
|
47
|
+
} catch (err) {
|
|
48
|
+
(0, import_errors.logWarn)(`[sec:swift] Failed to read ${relativeManifest}: ${err instanceof Error ? err.message : String(err)}`);
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
const rawDeps = extractFromPackageSwift(content, relativeManifest);
|
|
52
|
+
return rawDeps.map((dep) => ({
|
|
53
|
+
name: dep.name,
|
|
54
|
+
declaredConstraint: dep.constraint,
|
|
55
|
+
resolvedVersion: dep.resolvedVersion,
|
|
56
|
+
scope: "production",
|
|
57
|
+
ecosystem: "swift",
|
|
58
|
+
sourceManifest: relativeManifest
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
function buildFromResolved(resolved, relativeManifest) {
|
|
62
|
+
const deps = [];
|
|
63
|
+
for (const [name, version] of resolved) {
|
|
64
|
+
deps.push({
|
|
65
|
+
name,
|
|
66
|
+
declaredConstraint: version,
|
|
67
|
+
resolvedVersion: version,
|
|
68
|
+
scope: "production",
|
|
69
|
+
ecosystem: "swift",
|
|
70
|
+
sourceManifest: relativeManifest
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return deps;
|
|
74
|
+
}
|
|
75
|
+
function extractFromPackageSwift(content, relativeManifest) {
|
|
76
|
+
const deps = [];
|
|
77
|
+
const packagePattern = /\.package\s*\(\s*url\s*:\s*"([^"]+)"[^)]+\)/gs;
|
|
78
|
+
let match;
|
|
79
|
+
while ((match = packagePattern.exec(content)) !== null) {
|
|
80
|
+
const url = match[1];
|
|
81
|
+
const fullMatch = match[0];
|
|
82
|
+
const name = packageNameFromUrl(url);
|
|
83
|
+
if (!name) {
|
|
84
|
+
(0, import_errors.logWarn)(`[sec:swift] Could not derive package name from URL "${url}" in ${relativeManifest} \u2014 skipping`);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const constraint = extractVersionConstraint(fullMatch, relativeManifest);
|
|
88
|
+
deps.push({ name, constraint });
|
|
89
|
+
}
|
|
90
|
+
return deps;
|
|
91
|
+
}
|
|
92
|
+
function extractVersionConstraint(packageCall, relativeManifest) {
|
|
93
|
+
const fromMatch = packageCall.match(/\bfrom\s*:\s*"([^"]+)"/);
|
|
94
|
+
if (fromMatch) return `from: ${fromMatch[1]}`;
|
|
95
|
+
const exactMatch = packageCall.match(/\bexact\s*:\s*"([^"]+)"/);
|
|
96
|
+
if (exactMatch) return `exact: ${exactMatch[1]}`;
|
|
97
|
+
const upToMajorMatch = packageCall.match(/\.upToNextMajor\s*\(\s*from\s*:\s*"([^"]+)"\s*\)/);
|
|
98
|
+
if (upToMajorMatch) return `upToNextMajor: ${upToMajorMatch[1]}`;
|
|
99
|
+
const upToMinorMatch = packageCall.match(/\.upToNextMinor\s*\(\s*from\s*:\s*"([^"]+)"\s*\)/);
|
|
100
|
+
if (upToMinorMatch) return `upToNextMinor: ${upToMinorMatch[1]}`;
|
|
101
|
+
const rangeMatch = packageCall.match(/"([^"]+)"\s*\.{2,3}<\s*"([^"]+)"/);
|
|
102
|
+
if (rangeMatch) return `${rangeMatch[1]} ..< ${rangeMatch[2]}`;
|
|
103
|
+
(0, import_errors.logWarn)(`[sec:swift] Unrecognised version specifier in Package.swift at ${relativeManifest} \u2014 using '*'`);
|
|
104
|
+
return "*";
|
|
105
|
+
}
|
|
106
|
+
function packageNameFromUrl(url) {
|
|
107
|
+
try {
|
|
108
|
+
const cleaned = url.replace(/\/+$/, "");
|
|
109
|
+
const segments = cleaned.split("/");
|
|
110
|
+
const last = segments[segments.length - 1];
|
|
111
|
+
if (!last) return null;
|
|
112
|
+
return last.replace(/\.git$/i, "").toLowerCase();
|
|
113
|
+
} catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function hasPackageResolved(manifestDir) {
|
|
118
|
+
return fs.existsSync(path.join(manifestDir, "Package.resolved")) || fs.existsSync(path.join(manifestDir, ".build", "Package.resolved"));
|
|
119
|
+
}
|
|
120
|
+
function loadPackageResolved(manifestDir) {
|
|
121
|
+
const map = /* @__PURE__ */ new Map();
|
|
122
|
+
const candidates = [
|
|
123
|
+
path.join(manifestDir, "Package.resolved"),
|
|
124
|
+
path.join(manifestDir, ".build", "Package.resolved")
|
|
125
|
+
];
|
|
126
|
+
for (const candidate of candidates) {
|
|
127
|
+
if (!fs.existsSync(candidate)) continue;
|
|
128
|
+
try {
|
|
129
|
+
const lockContent = fs.readFileSync(candidate, "utf8");
|
|
130
|
+
extractFromPackageResolved(lockContent, map, candidate);
|
|
131
|
+
return map;
|
|
132
|
+
} catch (err) {
|
|
133
|
+
(0, import_errors.logWarn)(`[sec:swift] Failed to parse ${candidate}: ${err instanceof Error ? err.message : String(err)}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return map;
|
|
137
|
+
}
|
|
138
|
+
function extractFromPackageResolved(content, map, filePath) {
|
|
139
|
+
let data;
|
|
140
|
+
try {
|
|
141
|
+
data = JSON.parse(content);
|
|
142
|
+
} catch {
|
|
143
|
+
(0, import_errors.logWarn)(`[sec:swift] ${filePath} is not valid JSON \u2014 resolved versions unavailable`);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
let pins = null;
|
|
147
|
+
if (Array.isArray(data["pins"])) {
|
|
148
|
+
pins = data["pins"];
|
|
149
|
+
extractPinsV2(pins, map);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const obj = data["object"];
|
|
153
|
+
if (obj && typeof obj === "object" && !Array.isArray(obj)) {
|
|
154
|
+
const objRecord = obj;
|
|
155
|
+
if (Array.isArray(objRecord["pins"])) {
|
|
156
|
+
pins = objRecord["pins"];
|
|
157
|
+
extractPinsV1(pins, map);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
(0, import_errors.logWarn)(`[sec:swift] ${filePath} has unrecognised Package.resolved format \u2014 resolved versions unavailable`);
|
|
162
|
+
}
|
|
163
|
+
function extractPinsV2(pins, map) {
|
|
164
|
+
for (const pin of pins) {
|
|
165
|
+
if (!pin || typeof pin !== "object") continue;
|
|
166
|
+
const p = pin;
|
|
167
|
+
const identity = typeof p["identity"] === "string" ? p["identity"].toLowerCase() : null;
|
|
168
|
+
const state = p["state"];
|
|
169
|
+
const version = state && typeof state === "object" && !Array.isArray(state) ? state["version"] : null;
|
|
170
|
+
if (identity && typeof version === "string" && version) {
|
|
171
|
+
if (!map.has(identity)) {
|
|
172
|
+
map.set(identity, version);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function extractPinsV1(pins, map) {
|
|
178
|
+
for (const pin of pins) {
|
|
179
|
+
if (!pin || typeof pin !== "object") continue;
|
|
180
|
+
const p = pin;
|
|
181
|
+
let name = null;
|
|
182
|
+
if (typeof p["package"] === "string" && p["package"]) {
|
|
183
|
+
name = p["package"].toLowerCase();
|
|
184
|
+
} else if (typeof p["repositoryURL"] === "string") {
|
|
185
|
+
name = packageNameFromUrl(p["repositoryURL"]);
|
|
186
|
+
}
|
|
187
|
+
const state = p["state"];
|
|
188
|
+
const version = state && typeof state === "object" && !Array.isArray(state) ? state["version"] : null;
|
|
189
|
+
if (name && typeof version === "string" && version) {
|
|
190
|
+
if (!map.has(name)) {
|
|
191
|
+
map.set(name, version);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
197
|
+
0 && (module.exports = {
|
|
198
|
+
parseSwiftManifest
|
|
199
|
+
});
|
|
200
|
+
//# sourceMappingURL=swift.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/security/manifest/plugins/swift.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Swift Package Manager Version Extraction Plugin for KiroGraph-Sec\n *\n * Parses Package.swift manifests to extract Swift package dependencies with\n * version constraints and resolved versions from Package.resolved.\n *\n * Prefers Package.resolved (more reliable) over regex parsing of Package.swift.\n * Handles both v1 and v2 Package.resolved formats.\n *\n * Package.resolved locations searched:\n * - Same directory as Package.swift\n * - `.build/` subdirectory relative to Package.swift\n */\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { ParsedDependency } from '../../types';\nimport { logWarn } from '../../../errors';\n\n/**\n * Resolved version map: package identity \u2192 resolved version string.\n * Built from Package.resolved.\n */\ntype ResolvedVersionMap = Map<string, string>;\n\n/**\n * A raw dependency entry extracted from Package.swift or Package.resolved.\n */\ninterface RawDependency {\n name: string;\n constraint: string;\n resolvedVersion?: string;\n}\n\n/**\n * Parse a Package.swift manifest and extract package dependencies with\n * version constraints and resolved versions from Package.resolved.\n *\n * @param manifestPath - Absolute path to the Package.swift file\n * @param projectRoot - Absolute path to the project root directory\n * @returns Array of parsed dependencies with version and scope information\n */\nexport async function parseSwiftManifest(\n manifestPath: string,\n projectRoot: string,\n): Promise<ParsedDependency[]> {\n const manifestDir = path.dirname(manifestPath);\n const relativeManifest = path.relative(projectRoot, manifestPath).replace(/\\\\/g, '/');\n\n // Try to load Package.resolved first \u2014 it's more reliable than parsing Package.swift\n const resolved = loadPackageResolved(manifestDir);\n if (resolved.size > 0 || hasPackageResolved(manifestDir)) {\n // We have a lock file \u2014 use its entries as the authoritative dependency list\n return buildFromResolved(resolved, relativeManifest);\n }\n\n // Fallback: parse Package.swift directly\n let content: string;\n try {\n content = fs.readFileSync(manifestPath, 'utf8');\n } catch (err) {\n logWarn(`[sec:swift] Failed to read ${relativeManifest}: ${err instanceof Error ? err.message : String(err)}`);\n return [];\n }\n\n const rawDeps = extractFromPackageSwift(content, relativeManifest);\n return rawDeps.map((dep) => ({\n name: dep.name,\n declaredConstraint: dep.constraint,\n resolvedVersion: dep.resolvedVersion,\n scope: 'production' as const,\n ecosystem: 'swift',\n sourceManifest: relativeManifest,\n }));\n}\n\n/**\n * Build ParsedDependency entries from a resolved version map.\n * All Swift dependencies are production scope (SPM has no dev deps concept).\n */\nfunction buildFromResolved(\n resolved: ResolvedVersionMap,\n relativeManifest: string,\n): ParsedDependency[] {\n const deps: ParsedDependency[] = [];\n for (const [name, version] of resolved) {\n deps.push({\n name,\n declaredConstraint: version,\n resolvedVersion: version,\n scope: 'production',\n ecosystem: 'swift',\n sourceManifest: relativeManifest,\n });\n }\n return deps;\n}\n\n/**\n * Extract dependencies from Package.swift using regex patterns.\n *\n * Handles:\n * - `.package(url: \"...\", from: \"1.0.0\")`\n * - `.package(url: \"...\", exact: \"1.0.0\")`\n * - `.package(url: \"...\", .upToNextMajor(from: \"1.0.0\"))`\n * - `.package(url: \"...\", .upToNextMinor(from: \"1.0.0\"))`\n */\nfunction extractFromPackageSwift(content: string, relativeManifest: string): RawDependency[] {\n const deps: RawDependency[] = [];\n\n // Match .package(url: \"...\", <version spec>) \u2014 possibly spanning multiple lines\n // We capture the url argument and the version specifier\n const packagePattern = /\\.package\\s*\\(\\s*url\\s*:\\s*\"([^\"]+)\"[^)]+\\)/gs;\n let match: RegExpExecArray | null;\n\n while ((match = packagePattern.exec(content)) !== null) {\n const url = match[1];\n const fullMatch = match[0];\n\n const name = packageNameFromUrl(url);\n if (!name) {\n logWarn(`[sec:swift] Could not derive package name from URL \"${url}\" in ${relativeManifest} \u2014 skipping`);\n continue;\n }\n\n const constraint = extractVersionConstraint(fullMatch, relativeManifest);\n deps.push({ name, constraint });\n }\n\n return deps;\n}\n\n/**\n * Extract a version constraint string from a .package(...) call.\n * Returns '*' if no recognised version spec is found.\n */\nfunction extractVersionConstraint(packageCall: string, relativeManifest: string): string {\n // from: \"1.0.0\"\n const fromMatch = packageCall.match(/\\bfrom\\s*:\\s*\"([^\"]+)\"/);\n if (fromMatch) return `from: ${fromMatch[1]}`;\n\n // exact: \"1.0.0\"\n const exactMatch = packageCall.match(/\\bexact\\s*:\\s*\"([^\"]+)\"/);\n if (exactMatch) return `exact: ${exactMatch[1]}`;\n\n // .upToNextMajor(from: \"1.0.0\")\n const upToMajorMatch = packageCall.match(/\\.upToNextMajor\\s*\\(\\s*from\\s*:\\s*\"([^\"]+)\"\\s*\\)/);\n if (upToMajorMatch) return `upToNextMajor: ${upToMajorMatch[1]}`;\n\n // .upToNextMinor(from: \"1.0.0\")\n const upToMinorMatch = packageCall.match(/\\.upToNextMinor\\s*\\(\\s*from\\s*:\\s*\"([^\"]+)\"\\s*\\)/);\n if (upToMinorMatch) return `upToNextMinor: ${upToMinorMatch[1]}`;\n\n // Range: \"1.0.0\"..<\"2.0.0\"\n const rangeMatch = packageCall.match(/\"([^\"]+)\"\\s*\\.{2,3}<\\s*\"([^\"]+)\"/);\n if (rangeMatch) return `${rangeMatch[1]} ..< ${rangeMatch[2]}`;\n\n logWarn(`[sec:swift] Unrecognised version specifier in Package.swift at ${relativeManifest} \u2014 using '*'`);\n return '*';\n}\n\n/**\n * Derive a package name from a Swift package URL.\n * Extracts the last path component and strips a `.git` suffix.\n *\n * e.g., `https://github.com/apple/swift-argument-parser.git` \u2192 `swift-argument-parser`\n */\nfunction packageNameFromUrl(url: string): string | null {\n try {\n // Remove trailing slash\n const cleaned = url.replace(/\\/+$/, '');\n const segments = cleaned.split('/');\n const last = segments[segments.length - 1];\n if (!last) return null;\n // Strip .git suffix\n return last.replace(/\\.git$/i, '').toLowerCase();\n } catch {\n return null;\n }\n}\n\n/**\n * Check whether Package.resolved exists in the expected locations.\n */\nfunction hasPackageResolved(manifestDir: string): boolean {\n return (\n fs.existsSync(path.join(manifestDir, 'Package.resolved')) ||\n fs.existsSync(path.join(manifestDir, '.build', 'Package.resolved'))\n );\n}\n\n/**\n * Attempt to load resolved versions from Package.resolved.\n * Searches the manifest directory and `.build/` subdirectory.\n * Returns an empty map if Package.resolved is not available.\n *\n * Supports both v1 and v2 Package.resolved formats.\n */\nfunction loadPackageResolved(manifestDir: string): ResolvedVersionMap {\n const map: ResolvedVersionMap = new Map();\n\n const candidates = [\n path.join(manifestDir, 'Package.resolved'),\n path.join(manifestDir, '.build', 'Package.resolved'),\n ];\n\n for (const candidate of candidates) {\n if (!fs.existsSync(candidate)) continue;\n\n try {\n const lockContent = fs.readFileSync(candidate, 'utf8');\n extractFromPackageResolved(lockContent, map, candidate);\n return map; // Use first found\n } catch (err) {\n logWarn(`[sec:swift] Failed to parse ${candidate}: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n return map;\n}\n\n/**\n * Extract resolved versions from Package.resolved content.\n *\n * v2 format:\n * ```json\n * { \"pins\": [{ \"identity\": \"name\", \"kind\": \"remoteSourceControl\",\n * \"location\": \"url\", \"state\": { \"version\": \"1.2.3\" } }] }\n * ```\n *\n * v1 format:\n * ```json\n * { \"object\": { \"pins\": [{ \"package\": \"Name\", \"repositoryURL\": \"url\",\n * \"state\": { \"version\": \"1.2.3\" } }] } }\n * ```\n */\nfunction extractFromPackageResolved(\n content: string,\n map: ResolvedVersionMap,\n filePath: string,\n): void {\n let data: Record<string, unknown>;\n try {\n data = JSON.parse(content) as Record<string, unknown>;\n } catch {\n logWarn(`[sec:swift] ${filePath} is not valid JSON \u2014 resolved versions unavailable`);\n return;\n }\n\n // Determine format version and locate pins array\n let pins: unknown[] | null = null;\n\n // v2: top-level `pins` array\n if (Array.isArray(data['pins'])) {\n pins = data['pins'] as unknown[];\n extractPinsV2(pins, map);\n return;\n }\n\n // v1: `object.pins` array\n const obj = data['object'];\n if (obj && typeof obj === 'object' && !Array.isArray(obj)) {\n const objRecord = obj as Record<string, unknown>;\n if (Array.isArray(objRecord['pins'])) {\n pins = objRecord['pins'] as unknown[];\n extractPinsV1(pins, map);\n return;\n }\n }\n\n logWarn(`[sec:swift] ${filePath} has unrecognised Package.resolved format \u2014 resolved versions unavailable`);\n}\n\n/**\n * Extract pins from Package.resolved v2 format.\n * Each pin has: `{ identity, kind, location, state: { version } }`\n */\nfunction extractPinsV2(pins: unknown[], map: ResolvedVersionMap): void {\n for (const pin of pins) {\n if (!pin || typeof pin !== 'object') continue;\n const p = pin as Record<string, unknown>;\n const identity = typeof p['identity'] === 'string' ? p['identity'].toLowerCase() : null;\n const state = p['state'];\n const version =\n state && typeof state === 'object' && !Array.isArray(state)\n ? (state as Record<string, unknown>)['version']\n : null;\n if (identity && typeof version === 'string' && version) {\n if (!map.has(identity)) {\n map.set(identity, version);\n }\n }\n }\n}\n\n/**\n * Extract pins from Package.resolved v1 format.\n * Each pin has: `{ package, repositoryURL, state: { version } }`\n */\nfunction extractPinsV1(pins: unknown[], map: ResolvedVersionMap): void {\n for (const pin of pins) {\n if (!pin || typeof pin !== 'object') continue;\n const p = pin as Record<string, unknown>;\n // v1 uses `package` or derives name from `repositoryURL`\n let name: string | null = null;\n if (typeof p['package'] === 'string' && p['package']) {\n name = p['package'].toLowerCase();\n } else if (typeof p['repositoryURL'] === 'string') {\n name = packageNameFromUrl(p['repositoryURL']);\n }\n const state = p['state'];\n const version =\n state && typeof state === 'object' && !Array.isArray(state)\n ? (state as Record<string, unknown>)['version']\n : null;\n if (name && typeof version === 'string' && version) {\n if (!map.has(name)) {\n map.set(name, version);\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OWASP Top 10 (2021) Mapping Utility
|
|
3
|
+
*
|
|
4
|
+
* Maps CVE findings to OWASP categories and provides associated CWE IDs.
|
|
5
|
+
*/
|
|
6
|
+
export type OwaspCategory = 'A01' | 'A02' | 'A03' | 'A04' | 'A05' | 'A06' | 'A07' | 'A08' | 'A09' | 'A10';
|
|
7
|
+
export interface OwaspMapping {
|
|
8
|
+
category: OwaspCategory;
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
cweIds: number[];
|
|
12
|
+
}
|
|
13
|
+
export declare const OWASP_TOP_10: Record<OwaspCategory, OwaspMapping>;
|
|
14
|
+
/** Map a CVE's summary/description to the most likely OWASP category. */
|
|
15
|
+
export declare function mapCveToOwasp(summary: string, packageName: string): OwaspCategory;
|
|
16
|
+
//# sourceMappingURL=owasp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owasp.d.ts","sourceRoot":"","sources":["../../src/security/owasp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAE1G,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,YAAY,CA6D5D,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,CAWjF"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var owasp_exports = {};
|
|
20
|
+
__export(owasp_exports, {
|
|
21
|
+
OWASP_TOP_10: () => OWASP_TOP_10,
|
|
22
|
+
mapCveToOwasp: () => mapCveToOwasp
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(owasp_exports);
|
|
25
|
+
const OWASP_TOP_10 = {
|
|
26
|
+
A01: {
|
|
27
|
+
category: "A01",
|
|
28
|
+
name: "Broken Access Control",
|
|
29
|
+
description: "Restrictions on authenticated users are not properly enforced.",
|
|
30
|
+
cweIds: [200, 201, 284, 285, 352, 359, 732, 862, 863, 913]
|
|
31
|
+
},
|
|
32
|
+
A02: {
|
|
33
|
+
category: "A02",
|
|
34
|
+
name: "Cryptographic Failures",
|
|
35
|
+
description: "Failures related to cryptography which often lead to exposure of sensitive data.",
|
|
36
|
+
cweIds: [261, 296, 310, 312, 315, 319, 321, 326, 327, 328, 330, 331, 335, 336, 337, 338, 340, 347, 523, 720, 757, 759, 760, 780, 818, 916]
|
|
37
|
+
},
|
|
38
|
+
A03: {
|
|
39
|
+
category: "A03",
|
|
40
|
+
name: "Injection",
|
|
41
|
+
description: "User-supplied data is not validated, filtered, or sanitized by the application.",
|
|
42
|
+
cweIds: [20, 74, 77, 78, 79, 88, 89, 90, 91, 93, 94, 95, 116, 943]
|
|
43
|
+
},
|
|
44
|
+
A04: {
|
|
45
|
+
category: "A04",
|
|
46
|
+
name: "Insecure Design",
|
|
47
|
+
description: "Missing or ineffective control design.",
|
|
48
|
+
cweIds: [73, 183, 209, 213, 235, 256, 257, 266, 269, 280, 311, 312, 313, 316, 419, 434, 444, 451, 454, 602, 620, 636, 841, 862, 1004, 1173]
|
|
49
|
+
},
|
|
50
|
+
A05: {
|
|
51
|
+
category: "A05",
|
|
52
|
+
name: "Security Misconfiguration",
|
|
53
|
+
description: "Missing appropriate security hardening across any part of the application stack.",
|
|
54
|
+
cweIds: [2, 11, 13, 15, 16, 260, 315, 520, 526, 537, 541, 548, 732]
|
|
55
|
+
},
|
|
56
|
+
A06: {
|
|
57
|
+
category: "A06",
|
|
58
|
+
name: "Vulnerable and Outdated Components",
|
|
59
|
+
description: "Components with known vulnerabilities are used.",
|
|
60
|
+
cweIds: [1035, 1104]
|
|
61
|
+
},
|
|
62
|
+
A07: {
|
|
63
|
+
category: "A07",
|
|
64
|
+
name: "Identification and Authentication Failures",
|
|
65
|
+
description: "Confirmation of user identity, authentication, and session management failures.",
|
|
66
|
+
cweIds: [255, 259, 287, 288, 290, 294, 295, 297, 300, 302, 304, 306, 307, 346, 384, 521, 613, 620, 640, 798, 940, 1216]
|
|
67
|
+
},
|
|
68
|
+
A08: {
|
|
69
|
+
category: "A08",
|
|
70
|
+
name: "Software and Data Integrity Failures",
|
|
71
|
+
description: "Code and infrastructure that does not protect against integrity violations.",
|
|
72
|
+
cweIds: [345, 353, 426, 494, 502, 565, 784, 829, 830, 915]
|
|
73
|
+
},
|
|
74
|
+
A09: {
|
|
75
|
+
category: "A09",
|
|
76
|
+
name: "Security Logging and Monitoring Failures",
|
|
77
|
+
description: "Insufficient logging, detection, monitoring, and active response.",
|
|
78
|
+
cweIds: [117, 223, 532, 778]
|
|
79
|
+
},
|
|
80
|
+
A10: {
|
|
81
|
+
category: "A10",
|
|
82
|
+
name: "Server-Side Request Forgery",
|
|
83
|
+
description: "Web application fetches a remote resource without validating user-supplied URL.",
|
|
84
|
+
cweIds: [918]
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
function mapCveToOwasp(summary, packageName) {
|
|
88
|
+
const text = (summary + " " + packageName).toLowerCase();
|
|
89
|
+
if (/inject|sql|xss|cross.site|script|command.inject|ldap|xpath/i.test(text)) return "A03";
|
|
90
|
+
if (/auth|authentication|session|credential|password|token|csrf|bypass/i.test(text)) return "A07";
|
|
91
|
+
if (/access.control|privilege|permission|authoriz|rbac|idor/i.test(text)) return "A01";
|
|
92
|
+
if (/crypto|encrypt|tls|ssl|cipher|hash|random|certificate/i.test(text)) return "A02";
|
|
93
|
+
if (/deserializ|pickle|marshal|prototype.pollution|supply.chain|integrity/i.test(text)) return "A08";
|
|
94
|
+
if (/ssrf|request.forgery|server.side/i.test(text)) return "A10";
|
|
95
|
+
if (/config|misconfig|default|expose|disclose|information/i.test(text)) return "A05";
|
|
96
|
+
if (/log|monitor|audit|trace/i.test(text)) return "A09";
|
|
97
|
+
return "A06";
|
|
98
|
+
}
|
|
99
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
100
|
+
0 && (module.exports = {
|
|
101
|
+
OWASP_TOP_10,
|
|
102
|
+
mapCveToOwasp
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=owasp.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/security/owasp.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * OWASP Top 10 (2021) Mapping Utility\n *\n * Maps CVE findings to OWASP categories and provides associated CWE IDs.\n */\n\nexport type OwaspCategory = 'A01' | 'A02' | 'A03' | 'A04' | 'A05' | 'A06' | 'A07' | 'A08' | 'A09' | 'A10';\n\nexport interface OwaspMapping {\n category: OwaspCategory;\n name: string;\n description: string;\n cweIds: number[];\n}\n\nexport const OWASP_TOP_10: Record<OwaspCategory, OwaspMapping> = {\n A01: {\n category: 'A01',\n name: 'Broken Access Control',\n description: 'Restrictions on authenticated users are not properly enforced.',\n cweIds: [200, 201, 284, 285, 352, 359, 732, 862, 863, 913],\n },\n A02: {\n category: 'A02',\n name: 'Cryptographic Failures',\n description: 'Failures related to cryptography which often lead to exposure of sensitive data.',\n cweIds: [261, 296, 310, 312, 315, 319, 321, 326, 327, 328, 330, 331, 335, 336, 337, 338, 340, 347, 523, 720, 757, 759, 760, 780, 818, 916],\n },\n A03: {\n category: 'A03',\n name: 'Injection',\n description: 'User-supplied data is not validated, filtered, or sanitized by the application.',\n cweIds: [20, 74, 77, 78, 79, 88, 89, 90, 91, 93, 94, 95, 116, 943],\n },\n A04: {\n category: 'A04',\n name: 'Insecure Design',\n description: 'Missing or ineffective control design.',\n cweIds: [73, 183, 209, 213, 235, 256, 257, 266, 269, 280, 311, 312, 313, 316, 419, 434, 444, 451, 454, 602, 620, 636, 841, 862, 1004, 1173],\n },\n A05: {\n category: 'A05',\n name: 'Security Misconfiguration',\n description: 'Missing appropriate security hardening across any part of the application stack.',\n cweIds: [2, 11, 13, 15, 16, 260, 315, 520, 526, 537, 541, 548, 732],\n },\n A06: {\n category: 'A06',\n name: 'Vulnerable and Outdated Components',\n description: 'Components with known vulnerabilities are used.',\n cweIds: [1035, 1104],\n },\n A07: {\n category: 'A07',\n name: 'Identification and Authentication Failures',\n description: 'Confirmation of user identity, authentication, and session management failures.',\n cweIds: [255, 259, 287, 288, 290, 294, 295, 297, 300, 302, 304, 306, 307, 346, 384, 521, 613, 620, 640, 798, 940, 1216],\n },\n A08: {\n category: 'A08',\n name: 'Software and Data Integrity Failures',\n description: 'Code and infrastructure that does not protect against integrity violations.',\n cweIds: [345, 353, 426, 494, 502, 565, 784, 829, 830, 915],\n },\n A09: {\n category: 'A09',\n name: 'Security Logging and Monitoring Failures',\n description: 'Insufficient logging, detection, monitoring, and active response.',\n cweIds: [117, 223, 532, 778],\n },\n A10: {\n category: 'A10',\n name: 'Server-Side Request Forgery',\n description: 'Web application fetches a remote resource without validating user-supplied URL.',\n cweIds: [918],\n },\n};\n\n/** Map a CVE's summary/description to the most likely OWASP category. */\nexport function mapCveToOwasp(summary: string, packageName: string): OwaspCategory {\n const text = (summary + ' ' + packageName).toLowerCase();\n if (/inject|sql|xss|cross.site|script|command.inject|ldap|xpath/i.test(text)) return 'A03';\n if (/auth|authentication|session|credential|password|token|csrf|bypass/i.test(text)) return 'A07';\n if (/access.control|privilege|permission|authoriz|rbac|idor/i.test(text)) return 'A01';\n if (/crypto|encrypt|tls|ssl|cipher|hash|random|certificate/i.test(text)) return 'A02';\n if (/deserializ|pickle|marshal|prototype.pollution|supply.chain|integrity/i.test(text)) return 'A08';\n if (/ssrf|request.forgery|server.side/i.test(text)) return 'A10';\n if (/config|misconfig|default|expose|disclose|information/i.test(text)) return 'A05';\n if (/log|monitor|audit|trace/i.test(text)) return 'A09';\n return 'A06'; // default: vulnerable component\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SecurityPipeline — Orchestrates the security analysis phases.
|
|
3
|
+
*
|
|
4
|
+
* Phases (in order):
|
|
5
|
+
* 1. Manifest parsing — discover and parse dependency manifests
|
|
6
|
+
* 2. Dependency integration — link dependencies to code symbols
|
|
7
|
+
* 3. Vulnerability enrichment — query databases for CVEs (if securityAutoEnrich)
|
|
8
|
+
* 4. Reachability analysis — determine if vulnerable code is reachable
|
|
9
|
+
*
|
|
10
|
+
* Reports progress via callback and returns a SecurityResult with counts and duration.
|
|
11
|
+
*
|
|
12
|
+
* Requirements: 9.3, 9.5
|
|
13
|
+
*/
|
|
14
|
+
import type { GraphDatabase } from '../db/database';
|
|
15
|
+
import type { KiroGraphConfig } from '../config';
|
|
16
|
+
import type { SecurityResult } from './types';
|
|
17
|
+
/**
|
|
18
|
+
* SecurityPipeline orchestrates the full security analysis workflow.
|
|
19
|
+
*/
|
|
20
|
+
export declare class SecurityPipeline {
|
|
21
|
+
private readonly db;
|
|
22
|
+
private readonly config;
|
|
23
|
+
private readonly projectRoot;
|
|
24
|
+
constructor(db: GraphDatabase, config: KiroGraphConfig, projectRoot: string);
|
|
25
|
+
/**
|
|
26
|
+
* Run the full security analysis pipeline.
|
|
27
|
+
*
|
|
28
|
+
* @param onProgress - Optional callback reporting (phase, current, total)
|
|
29
|
+
* @returns SecurityResult with counts and duration
|
|
30
|
+
*/
|
|
31
|
+
run(onProgress?: (phase: string, current: number, total: number) => void): Promise<SecurityResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Create vulnerability database adapters based on config.
|
|
34
|
+
*/
|
|
35
|
+
private createVulnAdapters;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/security/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAQ9C;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAgB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM;IAM3E;;;;;OAKG;IACG,GAAG,CACP,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACnE,OAAO,CAAC,cAAc,CAAC;IAmF1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAqB3B"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var pipeline_exports = {};
|
|
20
|
+
__export(pipeline_exports, {
|
|
21
|
+
SecurityPipeline: () => SecurityPipeline
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(pipeline_exports);
|
|
24
|
+
var import_parser = require("./manifest/parser");
|
|
25
|
+
var import_integrator = require("./integrator");
|
|
26
|
+
var import_client = require("./vuln/client");
|
|
27
|
+
var import_osv_adapter = require("./vuln/osv-adapter");
|
|
28
|
+
var import_reachability = require("./reachability");
|
|
29
|
+
var import_errors = require("../errors");
|
|
30
|
+
class SecurityPipeline {
|
|
31
|
+
constructor(db, config, projectRoot) {
|
|
32
|
+
this.db = db;
|
|
33
|
+
this.config = config;
|
|
34
|
+
this.projectRoot = projectRoot;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Run the full security analysis pipeline.
|
|
38
|
+
*
|
|
39
|
+
* @param onProgress - Optional callback reporting (phase, current, total)
|
|
40
|
+
* @returns SecurityResult with counts and duration
|
|
41
|
+
*/
|
|
42
|
+
async run(onProgress) {
|
|
43
|
+
const start = Date.now();
|
|
44
|
+
const result = {
|
|
45
|
+
manifestsDiscovered: 0,
|
|
46
|
+
dependenciesCreated: 0,
|
|
47
|
+
vulnerabilitiesFound: 0,
|
|
48
|
+
affectedCount: 0,
|
|
49
|
+
notAffectedCount: 0,
|
|
50
|
+
underInvestigationCount: 0,
|
|
51
|
+
duration: 0
|
|
52
|
+
};
|
|
53
|
+
onProgress?.("manifest-parsing", 0, 4);
|
|
54
|
+
const parser = new import_parser.ManifestParser(this.db, this.projectRoot);
|
|
55
|
+
const parseResult = await parser.parseAll();
|
|
56
|
+
result.manifestsDiscovered = parseResult.manifestsParsed;
|
|
57
|
+
result.dependenciesCreated = parseResult.dependenciesCreated;
|
|
58
|
+
onProgress?.("manifest-parsing", 1, 4);
|
|
59
|
+
onProgress?.("dependency-integration", 1, 4);
|
|
60
|
+
const integrator = new import_integrator.DependencyGraphIntegrator(this.db, this.projectRoot);
|
|
61
|
+
await integrator.integrate();
|
|
62
|
+
await integrator.resolveTransitives(10);
|
|
63
|
+
await integrator.cleanup();
|
|
64
|
+
onProgress?.("dependency-integration", 2, 4);
|
|
65
|
+
if (this.config.securityAutoEnrich) {
|
|
66
|
+
onProgress?.("vulnerability-enrichment", 2, 4);
|
|
67
|
+
const adapters = this.createVulnAdapters();
|
|
68
|
+
const vulnClient = new import_client.VulnerabilityDatabaseClient(adapters, this.db);
|
|
69
|
+
const enrichResult = await vulnClient.enrichAll();
|
|
70
|
+
result.vulnerabilitiesFound = enrichResult.vulnerabilitiesFound;
|
|
71
|
+
onProgress?.("vulnerability-enrichment", 3, 4);
|
|
72
|
+
} else {
|
|
73
|
+
onProgress?.("vulnerability-enrichment", 3, 4);
|
|
74
|
+
}
|
|
75
|
+
onProgress?.("reachability-analysis", 3, 4);
|
|
76
|
+
const reachability = new import_reachability.ReachabilityAnalyzer(this.db, this.config);
|
|
77
|
+
const reachResults = await reachability.analyzeAll();
|
|
78
|
+
for (const [, reachResult] of reachResults) {
|
|
79
|
+
switch (reachResult.verdict) {
|
|
80
|
+
case "affected":
|
|
81
|
+
result.affectedCount++;
|
|
82
|
+
break;
|
|
83
|
+
case "not_affected":
|
|
84
|
+
result.notAffectedCount++;
|
|
85
|
+
break;
|
|
86
|
+
case "under_investigation":
|
|
87
|
+
result.underInvestigationCount++;
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
for (const [vulnNodeId, reachResult] of reachResults) {
|
|
92
|
+
if (reachResult.verdict === "affected") {
|
|
93
|
+
await reachability.getImpactSummary(vulnNodeId);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
onProgress?.("reachability-analysis", 4, 4);
|
|
97
|
+
result.duration = Date.now() - start;
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Create vulnerability database adapters based on config.
|
|
102
|
+
*/
|
|
103
|
+
createVulnAdapters() {
|
|
104
|
+
const adapters = [];
|
|
105
|
+
for (const dbName of this.config.securityDatabases) {
|
|
106
|
+
switch (dbName.toUpperCase()) {
|
|
107
|
+
case "OSV":
|
|
108
|
+
adapters.push(new import_osv_adapter.OsvAdapter());
|
|
109
|
+
break;
|
|
110
|
+
default:
|
|
111
|
+
(0, import_errors.logWarn)(`[sec:pipeline] Unknown vulnerability database "${dbName}", skipping`);
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (adapters.length === 0) {
|
|
116
|
+
adapters.push(new import_osv_adapter.OsvAdapter());
|
|
117
|
+
}
|
|
118
|
+
return adapters;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
122
|
+
0 && (module.exports = {
|
|
123
|
+
SecurityPipeline
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/security/pipeline.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * SecurityPipeline \u2014 Orchestrates the security analysis phases.\n *\n * Phases (in order):\n * 1. Manifest parsing \u2014 discover and parse dependency manifests\n * 2. Dependency integration \u2014 link dependencies to code symbols\n * 3. Vulnerability enrichment \u2014 query databases for CVEs (if securityAutoEnrich)\n * 4. Reachability analysis \u2014 determine if vulnerable code is reachable\n *\n * Reports progress via callback and returns a SecurityResult with counts and duration.\n *\n * Requirements: 9.3, 9.5\n */\n\nimport type { GraphDatabase } from '../db/database';\nimport type { KiroGraphConfig } from '../config';\nimport type { SecurityResult } from './types';\nimport { ManifestParser } from './manifest/parser';\nimport { DependencyGraphIntegrator } from './integrator';\nimport { VulnerabilityDatabaseClient } from './vuln/client';\nimport { OsvAdapter } from './vuln/osv-adapter';\nimport { ReachabilityAnalyzer } from './reachability';\nimport { logWarn } from '../errors';\n\n/**\n * SecurityPipeline orchestrates the full security analysis workflow.\n */\nexport class SecurityPipeline {\n private readonly db: GraphDatabase;\n private readonly config: KiroGraphConfig;\n private readonly projectRoot: string;\n\n constructor(db: GraphDatabase, config: KiroGraphConfig, projectRoot: string) {\n this.db = db;\n this.config = config;\n this.projectRoot = projectRoot;\n }\n\n /**\n * Run the full security analysis pipeline.\n *\n * @param onProgress - Optional callback reporting (phase, current, total)\n * @returns SecurityResult with counts and duration\n */\n async run(\n onProgress?: (phase: string, current: number, total: number) => void,\n ): Promise<SecurityResult> {\n const start = Date.now();\n\n const result: SecurityResult = {\n manifestsDiscovered: 0,\n dependenciesCreated: 0,\n vulnerabilitiesFound: 0,\n affectedCount: 0,\n notAffectedCount: 0,\n underInvestigationCount: 0,\n duration: 0,\n };\n\n // \u2500\u2500 Phase 1: Manifest Parsing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 onProgress?.('manifest-parsing', 0, 4);\n\n const parser = new ManifestParser(this.db, this.projectRoot);\n const parseResult = await parser.parseAll();\n\n result.manifestsDiscovered = parseResult.manifestsParsed;\n result.dependenciesCreated = parseResult.dependenciesCreated;\n\n onProgress?.('manifest-parsing', 1, 4);\n\n // \u2500\u2500 Phase 2: Dependency Integration \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 onProgress?.('dependency-integration', 1, 4);\n\n const integrator = new DependencyGraphIntegrator(this.db, this.projectRoot);\n await integrator.integrate();\n await integrator.resolveTransitives(10);\n await integrator.cleanup();\n\n onProgress?.('dependency-integration', 2, 4);\n\n // \u2500\u2500 Phase 3: Vulnerability Enrichment (conditional) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (this.config.securityAutoEnrich) {\n onProgress?.('vulnerability-enrichment', 2, 4);\n\n const adapters = this.createVulnAdapters();\n const vulnClient = new VulnerabilityDatabaseClient(adapters, this.db);\n const enrichResult = await vulnClient.enrichAll();\n\n result.vulnerabilitiesFound = enrichResult.vulnerabilitiesFound;\n\n onProgress?.('vulnerability-enrichment', 3, 4);\n } else {\n onProgress?.('vulnerability-enrichment', 3, 4);\n }\n\n // \u2500\u2500 Phase 4: Reachability Analysis \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 onProgress?.('reachability-analysis', 3, 4);\n\n const reachability = new ReachabilityAnalyzer(this.db, this.config);\n const reachResults = await reachability.analyzeAll();\n\n // Count verdicts\n for (const [, reachResult] of reachResults) {\n switch (reachResult.verdict) {\n case 'affected':\n result.affectedCount++;\n break;\n case 'not_affected':\n result.notAffectedCount++;\n break;\n case 'under_investigation':\n result.underInvestigationCount++;\n break;\n }\n }\n\n // Generate impact summaries for affected vulnerabilities\n for (const [vulnNodeId, reachResult] of reachResults) {\n if (reachResult.verdict === 'affected') {\n await reachability.getImpactSummary(vulnNodeId);\n }\n }\n\n onProgress?.('reachability-analysis', 4, 4);\n\n result.duration = Date.now() - start;\n return result;\n }\n\n /**\n * Create vulnerability database adapters based on config.\n */\n private createVulnAdapters(): import('./vuln/types').VulnDatabaseAdapter[] {\n const adapters: import('./vuln/types').VulnDatabaseAdapter[] = [];\n\n for (const dbName of this.config.securityDatabases) {\n switch (dbName.toUpperCase()) {\n case 'OSV':\n adapters.push(new OsvAdapter());\n break;\n default:\n logWarn(`[sec:pipeline] Unknown vulnerability database \"${dbName}\", skipping`);\n break;\n }\n }\n\n // Fallback to OSV if no valid adapters configured\n if (adapters.length === 0) {\n adapters.push(new OsvAdapter());\n }\n\n return adapters;\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA,oBAA+B;AAC/B,wBAA0C;AAC1C,oBAA4C;AAC5C,yBAA2B;AAC3B,0BAAqC;AACrC,oBAAwB;AAKjB,MAAM,iBAAiB;AAAA,EAK5B,YAAY,IAAmB,QAAyB,aAAqB;AAC3E,SAAK,KAAK;AACV,SAAK,SAAS;AACd,SAAK,cAAc;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,IACJ,YACyB;AACzB,UAAM,QAAQ,KAAK,IAAI;AAEvB,UAAM,SAAyB;AAAA,MAC7B,qBAAqB;AAAA,MACrB,qBAAqB;AAAA,MACrB,sBAAsB;AAAA,MACtB,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB,yBAAyB;AAAA,MACzB,UAAU;AAAA,IACZ;AAGA,iBAAa,oBAAoB,GAAG,CAAC;AAErC,UAAM,SAAS,IAAI,6BAAe,KAAK,IAAI,KAAK,WAAW;AAC3D,UAAM,cAAc,MAAM,OAAO,SAAS;AAE1C,WAAO,sBAAsB,YAAY;AACzC,WAAO,sBAAsB,YAAY;AAEzC,iBAAa,oBAAoB,GAAG,CAAC;AAGrC,iBAAa,0BAA0B,GAAG,CAAC;AAE3C,UAAM,aAAa,IAAI,4CAA0B,KAAK,IAAI,KAAK,WAAW;AAC1E,UAAM,WAAW,UAAU;AAC3B,UAAM,WAAW,mBAAmB,EAAE;AACtC,UAAM,WAAW,QAAQ;AAEzB,iBAAa,0BAA0B,GAAG,CAAC;AAG3C,QAAI,KAAK,OAAO,oBAAoB;AAClC,mBAAa,4BAA4B,GAAG,CAAC;AAE7C,YAAM,WAAW,KAAK,mBAAmB;AACzC,YAAM,aAAa,IAAI,0CAA4B,UAAU,KAAK,EAAE;AACpE,YAAM,eAAe,MAAM,WAAW,UAAU;AAEhD,aAAO,uBAAuB,aAAa;AAE3C,mBAAa,4BAA4B,GAAG,CAAC;AAAA,IAC/C,OAAO;AACL,mBAAa,4BAA4B,GAAG,CAAC;AAAA,IAC/C;AAGA,iBAAa,yBAAyB,GAAG,CAAC;AAE1C,UAAM,eAAe,IAAI,yCAAqB,KAAK,IAAI,KAAK,MAAM;AAClE,UAAM,eAAe,MAAM,aAAa,WAAW;AAGnD,eAAW,CAAC,EAAE,WAAW,KAAK,cAAc;AAC1C,cAAQ,YAAY,SAAS;AAAA,QAC3B,KAAK;AACH,iBAAO;AACP;AAAA,QACF,KAAK;AACH,iBAAO;AACP;AAAA,QACF,KAAK;AACH,iBAAO;AACP;AAAA,MACJ;AAAA,IACF;AAGA,eAAW,CAAC,YAAY,WAAW,KAAK,cAAc;AACpD,UAAI,YAAY,YAAY,YAAY;AACtC,cAAM,aAAa,iBAAiB,UAAU;AAAA,MAChD;AAAA,IACF;AAEA,iBAAa,yBAAyB,GAAG,CAAC;AAE1C,WAAO,WAAW,KAAK,IAAI,IAAI;AAC/B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAmE;AACzE,UAAM,WAAyD,CAAC;AAEhE,eAAW,UAAU,KAAK,OAAO,mBAAmB;AAClD,cAAQ,OAAO,YAAY,GAAG;AAAA,QAC5B,KAAK;AACH,mBAAS,KAAK,IAAI,8BAAW,CAAC;AAC9B;AAAA,QACF;AACE,qCAAQ,kDAAkD,MAAM,aAAa;AAC7E;AAAA,MACJ;AAAA,IACF;AAGA,QAAI,SAAS,WAAW,GAAG;AACzB,eAAS,KAAK,IAAI,8BAAW,CAAC;AAAA,IAChC;AAEA,WAAO;AAAA,EACT;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KiroGraph-Sec Reachability Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Traverses the knowledge graph from application entry points to determine
|
|
5
|
+
* whether vulnerable dependencies are reachable through actual code paths.
|
|
6
|
+
* Produces reachability verdicts and impact summaries enriched with
|
|
7
|
+
* architectural layer context.
|
|
8
|
+
*
|
|
9
|
+
* Requirements: 4.1, 4.2, 4.3, 4.4, 4.6, 5.1, 5.2, 5.3, 5.4, 5.5
|
|
10
|
+
*/
|
|
11
|
+
import type { GraphDatabase } from '../db/database';
|
|
12
|
+
import type { KiroGraphConfig } from '../config';
|
|
13
|
+
import type { ReachabilityResult, ImpactSummary } from './types';
|
|
14
|
+
/**
|
|
15
|
+
* ReachabilityAnalyzer traverses the knowledge graph from entry points
|
|
16
|
+
* toward affected dependency nodes to determine reachability verdicts.
|
|
17
|
+
*/
|
|
18
|
+
export declare class ReachabilityAnalyzer {
|
|
19
|
+
private readonly db;
|
|
20
|
+
private readonly config;
|
|
21
|
+
constructor(db: GraphDatabase, config: KiroGraphConfig);
|
|
22
|
+
/**
|
|
23
|
+
* Analyze reachability for a single Vulnerability_Node.
|
|
24
|
+
*
|
|
25
|
+
* 1. Find the Dependency_Node linked via `has_vulnerability` edge
|
|
26
|
+
* 2. Find all Entry_Points in the graph
|
|
27
|
+
* 3. BFS from each entry point toward the dependency node
|
|
28
|
+
* 4. Assign verdict based on path existence and unresolved imports
|
|
29
|
+
*
|
|
30
|
+
* Requirements: 4.1, 4.2, 4.3, 4.4, 4.6
|
|
31
|
+
*/
|
|
32
|
+
analyze(vulnerabilityNodeId: string): Promise<ReachabilityResult>;
|
|
33
|
+
/**
|
|
34
|
+
* Produce impact summary for an affected vulnerability.
|
|
35
|
+
*
|
|
36
|
+
* Returns null if the vulnerability is not affected.
|
|
37
|
+
* Reads layer assignments from `arch_file_layers` table.
|
|
38
|
+
*
|
|
39
|
+
* Requirements: 5.1, 5.2, 5.3, 5.4, 5.5
|
|
40
|
+
*/
|
|
41
|
+
getImpactSummary(vulnerabilityNodeId: string): Promise<ImpactSummary | null>;
|
|
42
|
+
/**
|
|
43
|
+
* Analyze all Vulnerability_Nodes in the graph.
|
|
44
|
+
*
|
|
45
|
+
* Iterates all vulnerability nodes and calls analyze() for each.
|
|
46
|
+
*/
|
|
47
|
+
analyzeAll(): Promise<Map<string, ReachabilityResult>>;
|
|
48
|
+
/**
|
|
49
|
+
* BFS from a single entry point toward the dependency node.
|
|
50
|
+
*
|
|
51
|
+
* Uses outgoing edges of types: calls, imports, references.
|
|
52
|
+
* Visits each node at most once (handles cycles).
|
|
53
|
+
* Tracks unresolved imports encountered during traversal.
|
|
54
|
+
*
|
|
55
|
+
* Returns the shortest path if found, plus any unresolved symbols encountered.
|
|
56
|
+
*/
|
|
57
|
+
private bfsFromEntryPoint;
|
|
58
|
+
/**
|
|
59
|
+
* Store reachability result in sec_reachability table.
|
|
60
|
+
*/
|
|
61
|
+
private storeReachabilityResult;
|
|
62
|
+
/**
|
|
63
|
+
* Store impact summary in sec_impact table.
|
|
64
|
+
*/
|
|
65
|
+
private storeImpactSummary;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=reachability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reachability.d.ts","sourceRoot":"","sources":["../../src/security/reachability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAGV,kBAAkB,EAClB,aAAa,EACd,MAAM,SAAS,CAAC;AAWjB;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAgB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAE7B,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe;IAKtD;;;;;;;;;OASG;IACG,OAAO,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmFvE;;;;;;;OAOG;IACG,gBAAgB,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA2FlF;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAgB5D;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;IA2DzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoB/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAkB3B"}
|