kirograph 0.27.2 → 0.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -7
- package/dist/bin/commands/annotations.js +56 -0
- package/dist/bin/commands/annotations.js.map +7 -0
- package/dist/bin/commands/ast-rewrite.js +55 -0
- package/dist/bin/commands/ast-rewrite.js.map +7 -0
- package/dist/bin/commands/bench.js +103 -0
- package/dist/bin/commands/bench.js.map +7 -0
- package/dist/bin/commands/branch.js +133 -0
- package/dist/bin/commands/branch.js.map +7 -0
- package/dist/bin/commands/changelog.js +55 -0
- package/dist/bin/commands/changelog.js.map +7 -0
- package/dist/bin/commands/commit-context.js +55 -0
- package/dist/bin/commands/commit-context.js.map +7 -0
- package/dist/bin/commands/complexity.js +60 -0
- package/dist/bin/commands/complexity.js.map +7 -0
- package/dist/bin/commands/cost.js +146 -0
- package/dist/bin/commands/cost.js.map +7 -0
- package/dist/bin/commands/dependency-depth.js +55 -0
- package/dist/bin/commands/dependency-depth.js.map +7 -0
- package/dist/bin/commands/diff-context.js +55 -0
- package/dist/bin/commands/diff-context.js.map +7 -0
- package/dist/bin/commands/distribution.js +56 -0
- package/dist/bin/commands/distribution.js.map +7 -0
- package/dist/bin/commands/doc-coverage.js +56 -0
- package/dist/bin/commands/doc-coverage.js.map +7 -0
- package/dist/bin/commands/doctor.js +202 -0
- package/dist/bin/commands/doctor.js.map +7 -0
- package/dist/bin/commands/dsm.js +56 -0
- package/dist/bin/commands/dsm.js.map +7 -0
- package/dist/bin/commands/gini.js +55 -0
- package/dist/bin/commands/gini.js.map +7 -0
- package/dist/bin/commands/god-class.js +56 -0
- package/dist/bin/commands/god-class.js.map +7 -0
- package/dist/bin/commands/health.js +55 -0
- package/dist/bin/commands/health.js.map +7 -0
- package/dist/bin/commands/help.js +224 -45
- package/dist/bin/commands/help.js.map +2 -2
- package/dist/bin/commands/inheritance-depth.js +56 -0
- package/dist/bin/commands/inheritance-depth.js.map +7 -0
- package/dist/bin/commands/insert-at.js +55 -0
- package/dist/bin/commands/insert-at.js.map +7 -0
- package/dist/bin/commands/largest.js +56 -0
- package/dist/bin/commands/largest.js.map +7 -0
- package/dist/bin/commands/manifest.js +158 -0
- package/dist/bin/commands/manifest.js.map +7 -0
- package/dist/bin/commands/module-api.js +57 -0
- package/dist/bin/commands/module-api.js.map +7 -0
- package/dist/bin/commands/monitor.js +91 -0
- package/dist/bin/commands/monitor.js.map +7 -0
- package/dist/bin/commands/multi-replace.js +66 -0
- package/dist/bin/commands/multi-replace.js.map +7 -0
- package/dist/bin/commands/pr-context.js +55 -0
- package/dist/bin/commands/pr-context.js.map +7 -0
- package/dist/bin/commands/query.js +19 -1
- package/dist/bin/commands/query.js.map +3 -3
- package/dist/bin/commands/rank.js +56 -0
- package/dist/bin/commands/rank.js.map +7 -0
- package/dist/bin/commands/read.js +1 -1
- package/dist/bin/commands/read.js.map +2 -2
- package/dist/bin/commands/recursion.js +56 -0
- package/dist/bin/commands/recursion.js.map +7 -0
- package/dist/bin/commands/rename-preview.js +56 -0
- package/dist/bin/commands/rename-preview.js.map +7 -0
- package/dist/bin/commands/session.js +60 -0
- package/dist/bin/commands/session.js.map +7 -0
- package/dist/bin/commands/simplify-scan.js +56 -0
- package/dist/bin/commands/simplify-scan.js.map +7 -0
- package/dist/bin/commands/str-replace.js +55 -0
- package/dist/bin/commands/str-replace.js.map +7 -0
- package/dist/bin/commands/test-coverage.js +59 -0
- package/dist/bin/commands/test-coverage.js.map +7 -0
- package/dist/bin/commands/test-map.js +56 -0
- package/dist/bin/commands/test-map.js.map +7 -0
- package/dist/bin/commands/test-risk.js +59 -0
- package/dist/bin/commands/test-risk.js.map +7 -0
- package/dist/bin/commands/unused-imports.js +55 -0
- package/dist/bin/commands/unused-imports.js.map +7 -0
- package/dist/bin/commands/upgrade.js +78 -0
- package/dist/bin/commands/upgrade.js.map +7 -0
- package/dist/bin/installer/common.js +5 -1
- package/dist/bin/installer/common.js.map +2 -2
- package/dist/bin/installer/config-prompt.js +239 -93
- package/dist/bin/installer/config-prompt.js.map +3 -3
- package/dist/bin/installer/index.js +38 -6
- package/dist/bin/installer/index.js.map +2 -2
- package/dist/bin/installer/instructions.js +7 -11
- package/dist/bin/installer/instructions.js.map +2 -2
- package/dist/bin/installer/mcp.js.map +2 -2
- package/dist/bin/installer/steering.js +531 -100
- package/dist/bin/installer/steering.js.map +2 -2
- package/dist/bin/installer/targets/kiro.js +7 -3
- package/dist/bin/installer/targets/kiro.js.map +2 -2
- package/dist/bin/kirograph.js +73 -1
- package/dist/bin/kirograph.js.map +3 -3
- package/dist/config.js +26 -8
- package/dist/config.js.map +2 -2
- package/dist/core/branch-manager.js +111 -0
- package/dist/core/branch-manager.js.map +7 -0
- package/dist/core/pipeline.js +3 -3
- package/dist/core/pipeline.js.map +2 -2
- package/dist/db/database.js +34 -7
- package/dist/db/database.js.map +2 -2
- package/dist/db/schema.sql +7 -1
- package/dist/extraction/complexity.js +116 -0
- package/dist/extraction/complexity.js.map +7 -0
- package/dist/extraction/extractor.js +52 -1
- package/dist/extraction/extractor.js.map +2 -2
- package/dist/graph/git-context.js +229 -0
- package/dist/graph/git-context.js.map +7 -0
- package/dist/index.js +4 -2
- package/dist/index.js.map +2 -2
- package/dist/mcp/handler.js +446 -0
- package/dist/mcp/handler.js.map +7 -0
- package/dist/mcp/handlers/architecture.js +297 -0
- package/dist/mcp/handlers/architecture.js.map +7 -0
- package/dist/mcp/handlers/branch.js +175 -0
- package/dist/mcp/handlers/branch.js.map +7 -0
- package/dist/mcp/handlers/code-health.js +563 -0
- package/dist/mcp/handlers/code-health.js.map +7 -0
- package/dist/mcp/handlers/complexity.js +267 -0
- package/dist/mcp/handlers/complexity.js.map +7 -0
- package/dist/mcp/handlers/core.js +611 -0
- package/dist/mcp/handlers/core.js.map +7 -0
- package/dist/mcp/handlers/data.js +337 -0
- package/dist/mcp/handlers/data.js.map +7 -0
- package/dist/mcp/handlers/docs.js +159 -0
- package/dist/mcp/handlers/docs.js.map +7 -0
- package/dist/mcp/handlers/edit-primitives.js +200 -0
- package/dist/mcp/handlers/edit-primitives.js.map +7 -0
- package/dist/mcp/handlers/git-context.js +286 -0
- package/dist/mcp/handlers/git-context.js.map +7 -0
- package/dist/mcp/handlers/memory.js +363 -0
- package/dist/mcp/handlers/memory.js.map +7 -0
- package/dist/mcp/handlers/patterns.js +310 -0
- package/dist/mcp/handlers/patterns.js.map +7 -0
- package/dist/mcp/handlers/security.js +699 -0
- package/dist/mcp/handlers/security.js.map +7 -0
- package/dist/mcp/handlers/utils.js +97 -0
- package/dist/mcp/handlers/utils.js.map +7 -0
- package/dist/mcp/handlers/watchmen.js +104 -0
- package/dist/mcp/handlers/watchmen.js.map +7 -0
- package/dist/mcp/handlers/wiki.js +242 -0
- package/dist/mcp/handlers/wiki.js.map +7 -0
- package/dist/mcp/server.js +72 -3
- package/dist/mcp/server.js.map +2 -2
- package/dist/mcp/tool-names.js +94 -7
- package/dist/mcp/tool-names.js.map +2 -2
- package/dist/mcp/tools.js +445 -3210
- package/dist/mcp/tools.js.map +3 -3
- package/dist/types.js.map +2 -2
- package/package.json +36 -10
- package/dist/architecture/index.d.ts +0 -11
- package/dist/architecture/index.d.ts.map +0 -1
- package/dist/architecture/layers/csharp.d.ts +0 -6
- package/dist/architecture/layers/csharp.d.ts.map +0 -1
- package/dist/architecture/layers/dart.d.ts +0 -10
- package/dist/architecture/layers/dart.d.ts.map +0 -1
- package/dist/architecture/layers/elixir.d.ts +0 -6
- package/dist/architecture/layers/elixir.d.ts.map +0 -1
- package/dist/architecture/layers/go.d.ts +0 -7
- package/dist/architecture/layers/go.d.ts.map +0 -1
- package/dist/architecture/layers/index.d.ts +0 -30
- package/dist/architecture/layers/index.d.ts.map +0 -1
- package/dist/architecture/layers/java.d.ts +0 -7
- package/dist/architecture/layers/java.d.ts.map +0 -1
- package/dist/architecture/layers/ocaml.d.ts +0 -6
- package/dist/architecture/layers/ocaml.d.ts.map +0 -1
- package/dist/architecture/layers/python.d.ts +0 -7
- package/dist/architecture/layers/python.d.ts.map +0 -1
- package/dist/architecture/layers/ruby.d.ts +0 -6
- package/dist/architecture/layers/ruby.d.ts.map +0 -1
- package/dist/architecture/layers/rust.d.ts +0 -6
- package/dist/architecture/layers/rust.d.ts.map +0 -1
- package/dist/architecture/layers/scala.d.ts +0 -6
- package/dist/architecture/layers/scala.d.ts.map +0 -1
- package/dist/architecture/layers/solidity.d.ts +0 -6
- package/dist/architecture/layers/solidity.d.ts.map +0 -1
- package/dist/architecture/layers/types.d.ts +0 -2
- package/dist/architecture/layers/types.d.ts.map +0 -1
- package/dist/architecture/layers/typescript.d.ts +0 -9
- package/dist/architecture/layers/typescript.d.ts.map +0 -1
- package/dist/architecture/layers/vue.d.ts +0 -6
- package/dist/architecture/layers/vue.d.ts.map +0 -1
- package/dist/architecture/manifest/cargo.d.ts +0 -3
- package/dist/architecture/manifest/cargo.d.ts.map +0 -1
- package/dist/architecture/manifest/csproj.d.ts +0 -3
- package/dist/architecture/manifest/csproj.d.ts.map +0 -1
- package/dist/architecture/manifest/elm.d.ts +0 -3
- package/dist/architecture/manifest/elm.d.ts.map +0 -1
- package/dist/architecture/manifest/go.d.ts +0 -3
- package/dist/architecture/manifest/go.d.ts.map +0 -1
- package/dist/architecture/manifest/gradle.d.ts +0 -3
- package/dist/architecture/manifest/gradle.d.ts.map +0 -1
- package/dist/architecture/manifest/index.d.ts +0 -12
- package/dist/architecture/manifest/index.d.ts.map +0 -1
- package/dist/architecture/manifest/maven.d.ts +0 -3
- package/dist/architecture/manifest/maven.d.ts.map +0 -1
- package/dist/architecture/manifest/npm.d.ts +0 -3
- package/dist/architecture/manifest/npm.d.ts.map +0 -1
- package/dist/architecture/manifest/ocaml.d.ts +0 -3
- package/dist/architecture/manifest/ocaml.d.ts.map +0 -1
- package/dist/architecture/manifest/python.d.ts +0 -3
- package/dist/architecture/manifest/python.d.ts.map +0 -1
- package/dist/architecture/manifest/scala.d.ts +0 -3
- package/dist/architecture/manifest/scala.d.ts.map +0 -1
- package/dist/architecture/manifest/types.d.ts +0 -2
- package/dist/architecture/manifest/types.d.ts.map +0 -1
- package/dist/architecture/types.d.ts +0 -91
- package/dist/architecture/types.d.ts.map +0 -1
- package/dist/banner.d.ts +0 -6
- package/dist/banner.d.ts.map +0 -1
- package/dist/banner.js +0 -67
- package/dist/banner.js.map +0 -1
- package/dist/bin/banner.d.ts +0 -6
- package/dist/bin/banner.d.ts.map +0 -1
- package/dist/bin/commands/affected.d.ts +0 -3
- package/dist/bin/commands/affected.d.ts.map +0 -1
- package/dist/bin/commands/architecture.d.ts +0 -3
- package/dist/bin/commands/architecture.d.ts.map +0 -1
- package/dist/bin/commands/attack-surface.d.ts +0 -3
- package/dist/bin/commands/attack-surface.d.ts.map +0 -1
- package/dist/bin/commands/benchmark.d.ts +0 -9
- package/dist/bin/commands/benchmark.d.ts.map +0 -1
- package/dist/bin/commands/budget.d.ts +0 -6
- package/dist/bin/commands/budget.d.ts.map +0 -1
- package/dist/bin/commands/caveman.d.ts +0 -7
- package/dist/bin/commands/caveman.d.ts.map +0 -1
- package/dist/bin/commands/communities.d.ts +0 -3
- package/dist/bin/commands/communities.d.ts.map +0 -1
- package/dist/bin/commands/compression.d.ts +0 -7
- package/dist/bin/commands/compression.d.ts.map +0 -1
- package/dist/bin/commands/configure-mcp.js +0 -104
- package/dist/bin/commands/configure-mcp.js.map +0 -7
- package/dist/bin/commands/context.d.ts +0 -3
- package/dist/bin/commands/context.d.ts.map +0 -1
- package/dist/bin/commands/coupling.d.ts +0 -3
- package/dist/bin/commands/coupling.d.ts.map +0 -1
- package/dist/bin/commands/dashboard.d.ts +0 -3
- package/dist/bin/commands/dashboard.d.ts.map +0 -1
- package/dist/bin/commands/data.d.ts +0 -3
- package/dist/bin/commands/data.d.ts.map +0 -1
- package/dist/bin/commands/dead-code.d.ts +0 -3
- package/dist/bin/commands/dead-code.d.ts.map +0 -1
- package/dist/bin/commands/dep-confusion.d.ts +0 -3
- package/dist/bin/commands/dep-confusion.d.ts.map +0 -1
- package/dist/bin/commands/docs.d.ts +0 -3
- package/dist/bin/commands/docs.d.ts.map +0 -1
- package/dist/bin/commands/exec.d.ts +0 -11
- package/dist/bin/commands/exec.d.ts.map +0 -1
- package/dist/bin/commands/export.d.ts +0 -3
- package/dist/bin/commands/export.d.ts.map +0 -1
- package/dist/bin/commands/files.d.ts +0 -3
- package/dist/bin/commands/files.d.ts.map +0 -1
- package/dist/bin/commands/flows.d.ts +0 -3
- package/dist/bin/commands/flows.d.ts.map +0 -1
- package/dist/bin/commands/gain.d.ts +0 -6
- package/dist/bin/commands/gain.d.ts.map +0 -1
- package/dist/bin/commands/help.d.ts +0 -11
- package/dist/bin/commands/help.d.ts.map +0 -1
- package/dist/bin/commands/hotspots.d.ts +0 -3
- package/dist/bin/commands/hotspots.d.ts.map +0 -1
- package/dist/bin/commands/index.d.ts +0 -3
- package/dist/bin/commands/index.d.ts.map +0 -1
- package/dist/bin/commands/init.d.ts +0 -3
- package/dist/bin/commands/init.d.ts.map +0 -1
- package/dist/bin/commands/install.d.ts +0 -3
- package/dist/bin/commands/install.d.ts.map +0 -1
- package/dist/bin/commands/licenses.d.ts +0 -3
- package/dist/bin/commands/licenses.d.ts.map +0 -1
- package/dist/bin/commands/mark-dirty.d.ts +0 -3
- package/dist/bin/commands/mark-dirty.d.ts.map +0 -1
- package/dist/bin/commands/memory.d.ts +0 -16
- package/dist/bin/commands/memory.d.ts.map +0 -1
- package/dist/bin/commands/package.d.ts +0 -3
- package/dist/bin/commands/package.d.ts.map +0 -1
- package/dist/bin/commands/path.d.ts +0 -3
- package/dist/bin/commands/path.d.ts.map +0 -1
- package/dist/bin/commands/pattern.d.ts +0 -3
- package/dist/bin/commands/pattern.d.ts.map +0 -1
- package/dist/bin/commands/qdrant.d.ts +0 -3
- package/dist/bin/commands/qdrant.d.ts.map +0 -1
- package/dist/bin/commands/qdrant.js +0 -159
- package/dist/bin/commands/qdrant.js.map +0 -1
- package/dist/bin/commands/query.d.ts +0 -3
- package/dist/bin/commands/query.d.ts.map +0 -1
- package/dist/bin/commands/reachability.d.ts +0 -3
- package/dist/bin/commands/reachability.d.ts.map +0 -1
- package/dist/bin/commands/read.d.ts +0 -6
- package/dist/bin/commands/read.d.ts.map +0 -1
- package/dist/bin/commands/refactor.d.ts +0 -3
- package/dist/bin/commands/refactor.d.ts.map +0 -1
- package/dist/bin/commands/remediation.d.ts +0 -3
- package/dist/bin/commands/remediation.d.ts.map +0 -1
- package/dist/bin/commands/sbom.d.ts +0 -3
- package/dist/bin/commands/sbom.d.ts.map +0 -1
- package/dist/bin/commands/security-ci-report.d.ts +0 -9
- package/dist/bin/commands/security-ci-report.d.ts.map +0 -1
- package/dist/bin/commands/security-export.d.ts +0 -2
- package/dist/bin/commands/security-export.d.ts.map +0 -1
- package/dist/bin/commands/security-flows.d.ts +0 -3
- package/dist/bin/commands/security-flows.d.ts.map +0 -1
- package/dist/bin/commands/security-secrets.d.ts +0 -3
- package/dist/bin/commands/security-secrets.d.ts.map +0 -1
- package/dist/bin/commands/security.d.ts +0 -3
- package/dist/bin/commands/security.d.ts.map +0 -1
- package/dist/bin/commands/serve.d.ts +0 -3
- package/dist/bin/commands/serve.d.ts.map +0 -1
- package/dist/bin/commands/snapshot.d.ts +0 -3
- package/dist/bin/commands/snapshot.d.ts.map +0 -1
- package/dist/bin/commands/staleness.d.ts +0 -3
- package/dist/bin/commands/staleness.d.ts.map +0 -1
- package/dist/bin/commands/status.d.ts +0 -3
- package/dist/bin/commands/status.d.ts.map +0 -1
- package/dist/bin/commands/stop.d.ts +0 -3
- package/dist/bin/commands/stop.d.ts.map +0 -1
- package/dist/bin/commands/stop.js +0 -81
- package/dist/bin/commands/stop.js.map +0 -1
- package/dist/bin/commands/supply-chain.d.ts +0 -3
- package/dist/bin/commands/supply-chain.d.ts.map +0 -1
- package/dist/bin/commands/surprising.d.ts +0 -3
- package/dist/bin/commands/surprising.d.ts.map +0 -1
- package/dist/bin/commands/sync-if-dirty.d.ts +0 -3
- package/dist/bin/commands/sync-if-dirty.d.ts.map +0 -1
- package/dist/bin/commands/sync.d.ts +0 -3
- package/dist/bin/commands/sync.d.ts.map +0 -1
- package/dist/bin/commands/typesense.d.ts +0 -3
- package/dist/bin/commands/typesense.d.ts.map +0 -1
- package/dist/bin/commands/typesense.js +0 -126
- package/dist/bin/commands/typesense.js.map +0 -1
- package/dist/bin/commands/uninit.d.ts +0 -4
- package/dist/bin/commands/uninit.d.ts.map +0 -1
- package/dist/bin/commands/unlock.d.ts +0 -3
- package/dist/bin/commands/unlock.d.ts.map +0 -1
- package/dist/bin/commands/utils.d.ts +0 -17
- package/dist/bin/commands/utils.d.ts.map +0 -1
- package/dist/bin/commands/vex.d.ts +0 -3
- package/dist/bin/commands/vex.d.ts.map +0 -1
- package/dist/bin/commands/vuln-suppress.d.ts +0 -3
- package/dist/bin/commands/vuln-suppress.d.ts.map +0 -1
- package/dist/bin/commands/vulns.d.ts +0 -3
- package/dist/bin/commands/vulns.d.ts.map +0 -1
- package/dist/bin/installer/archive.d.ts +0 -47
- package/dist/bin/installer/archive.d.ts.map +0 -1
- package/dist/bin/installer/auto-detect.d.ts +0 -16
- package/dist/bin/installer/auto-detect.d.ts.map +0 -1
- package/dist/bin/installer/caveman.d.ts +0 -12
- package/dist/bin/installer/caveman.d.ts.map +0 -1
- package/dist/bin/installer/cli-agent.d.ts +0 -20
- package/dist/bin/installer/cli-agent.d.ts.map +0 -1
- package/dist/bin/installer/common.d.ts +0 -36
- package/dist/bin/installer/common.d.ts.map +0 -1
- package/dist/bin/installer/config-prompt.d.ts +0 -13
- package/dist/bin/installer/config-prompt.d.ts.map +0 -1
- package/dist/bin/installer/dashboard.d.ts +0 -3
- package/dist/bin/installer/dashboard.d.ts.map +0 -1
- package/dist/bin/installer/detect.d.ts +0 -30
- package/dist/bin/installer/detect.d.ts.map +0 -1
- package/dist/bin/installer/hooks.d.ts +0 -8
- package/dist/bin/installer/hooks.d.ts.map +0 -1
- package/dist/bin/installer/index.d.ts +0 -12
- package/dist/bin/installer/index.d.ts.map +0 -1
- package/dist/bin/installer/instructions.d.ts +0 -14
- package/dist/bin/installer/instructions.d.ts.map +0 -1
- package/dist/bin/installer/mcp.d.ts +0 -5
- package/dist/bin/installer/mcp.d.ts.map +0 -1
- package/dist/bin/installer/prompts.d.ts +0 -45
- package/dist/bin/installer/prompts.d.ts.map +0 -1
- package/dist/bin/installer/qdrant-dashboard.d.ts +0 -4
- package/dist/bin/installer/qdrant-dashboard.d.ts.map +0 -1
- package/dist/bin/installer/steering.d.ts +0 -17
- package/dist/bin/installer/steering.d.ts.map +0 -1
- package/dist/bin/installer/targets/aider.d.ts +0 -6
- package/dist/bin/installer/targets/aider.d.ts.map +0 -1
- package/dist/bin/installer/targets/amp.d.ts +0 -6
- package/dist/bin/installer/targets/amp.d.ts.map +0 -1
- package/dist/bin/installer/targets/antigravity.d.ts +0 -13
- package/dist/bin/installer/targets/antigravity.d.ts.map +0 -1
- package/dist/bin/installer/targets/augment.d.ts +0 -6
- package/dist/bin/installer/targets/augment.d.ts.map +0 -1
- package/dist/bin/installer/targets/claude.d.ts +0 -6
- package/dist/bin/installer/targets/claude.d.ts.map +0 -1
- package/dist/bin/installer/targets/cline.d.ts +0 -13
- package/dist/bin/installer/targets/cline.d.ts.map +0 -1
- package/dist/bin/installer/targets/codex.d.ts +0 -6
- package/dist/bin/installer/targets/codex.d.ts.map +0 -1
- package/dist/bin/installer/targets/continue.d.ts +0 -12
- package/dist/bin/installer/targets/continue.d.ts.map +0 -1
- package/dist/bin/installer/targets/copilot-cli.d.ts +0 -12
- package/dist/bin/installer/targets/copilot-cli.d.ts.map +0 -1
- package/dist/bin/installer/targets/copilot.d.ts +0 -6
- package/dist/bin/installer/targets/copilot.d.ts.map +0 -1
- package/dist/bin/installer/targets/cursor.d.ts +0 -6
- package/dist/bin/installer/targets/cursor.d.ts.map +0 -1
- package/dist/bin/installer/targets/devin.d.ts +0 -13
- package/dist/bin/installer/targets/devin.d.ts.map +0 -1
- package/dist/bin/installer/targets/gemini-cli.d.ts +0 -16
- package/dist/bin/installer/targets/gemini-cli.d.ts.map +0 -1
- package/dist/bin/installer/targets/generic.d.ts +0 -59
- package/dist/bin/installer/targets/generic.d.ts.map +0 -1
- package/dist/bin/installer/targets/goose.d.ts +0 -6
- package/dist/bin/installer/targets/goose.d.ts.map +0 -1
- package/dist/bin/installer/targets/index.d.ts +0 -11
- package/dist/bin/installer/targets/index.d.ts.map +0 -1
- package/dist/bin/installer/targets/junie.d.ts +0 -13
- package/dist/bin/installer/targets/junie.d.ts.map +0 -1
- package/dist/bin/installer/targets/kilo.d.ts +0 -12
- package/dist/bin/installer/targets/kilo.d.ts.map +0 -1
- package/dist/bin/installer/targets/kiro.d.ts +0 -5
- package/dist/bin/installer/targets/kiro.d.ts.map +0 -1
- package/dist/bin/installer/targets/opencode.d.ts +0 -13
- package/dist/bin/installer/targets/opencode.d.ts.map +0 -1
- package/dist/bin/installer/targets/openhands.d.ts +0 -6
- package/dist/bin/installer/targets/openhands.d.ts.map +0 -1
- package/dist/bin/installer/targets/qoder.d.ts +0 -12
- package/dist/bin/installer/targets/qoder.d.ts.map +0 -1
- package/dist/bin/installer/targets/qwen.d.ts +0 -12
- package/dist/bin/installer/targets/qwen.d.ts.map +0 -1
- package/dist/bin/installer/targets/replit.d.ts +0 -6
- package/dist/bin/installer/targets/replit.d.ts.map +0 -1
- package/dist/bin/installer/targets/roo.d.ts +0 -13
- package/dist/bin/installer/targets/roo.d.ts.map +0 -1
- package/dist/bin/installer/targets/tabnine.d.ts +0 -6
- package/dist/bin/installer/targets/tabnine.d.ts.map +0 -1
- package/dist/bin/installer/targets/trae.d.ts +0 -6
- package/dist/bin/installer/targets/trae.d.ts.map +0 -1
- package/dist/bin/installer/targets/warp.d.ts +0 -12
- package/dist/bin/installer/targets/warp.d.ts.map +0 -1
- package/dist/bin/installer/targets/windsurf.d.ts +0 -13
- package/dist/bin/installer/targets/windsurf.d.ts.map +0 -1
- package/dist/bin/kirograph.d.ts +0 -6
- package/dist/bin/kirograph.d.ts.map +0 -1
- package/dist/bin/progress.d.ts +0 -29
- package/dist/bin/progress.d.ts.map +0 -1
- package/dist/bin/ui.d.ts +0 -11
- package/dist/bin/ui.d.ts.map +0 -1
- package/dist/compression/filters/aws.d.ts +0 -9
- package/dist/compression/filters/aws.d.ts.map +0 -1
- package/dist/compression/filters/docker.d.ts +0 -6
- package/dist/compression/filters/docker.d.ts.map +0 -1
- package/dist/compression/filters/files.d.ts +0 -6
- package/dist/compression/filters/files.d.ts.map +0 -1
- package/dist/compression/filters/generic.d.ts +0 -7
- package/dist/compression/filters/generic.d.ts.map +0 -1
- package/dist/compression/filters/git.d.ts +0 -6
- package/dist/compression/filters/git.d.ts.map +0 -1
- package/dist/compression/filters/github.d.ts +0 -6
- package/dist/compression/filters/github.d.ts.map +0 -1
- package/dist/compression/filters/lint.d.ts +0 -6
- package/dist/compression/filters/lint.d.ts.map +0 -1
- package/dist/compression/filters/misc.d.ts +0 -6
- package/dist/compression/filters/misc.d.ts.map +0 -1
- package/dist/compression/filters/package.d.ts +0 -6
- package/dist/compression/filters/package.d.ts.map +0 -1
- package/dist/compression/filters/test.d.ts +0 -6
- package/dist/compression/filters/test.d.ts.map +0 -1
- package/dist/compression/index.d.ts +0 -29
- package/dist/compression/index.d.ts.map +0 -1
- package/dist/compression/naive-cost.d.ts +0 -26
- package/dist/compression/naive-cost.d.ts.map +0 -1
- package/dist/compression/tracker.d.ts +0 -155
- package/dist/compression/tracker.d.ts.map +0 -1
- package/dist/compression/types.d.ts +0 -49
- package/dist/compression/types.d.ts.map +0 -1
- package/dist/config.d.ts +0 -138
- package/dist/config.d.ts.map +0 -1
- package/dist/context/index.d.ts +0 -61
- package/dist/context/index.d.ts.map +0 -1
- package/dist/core/file-tree.d.ts +0 -15
- package/dist/core/file-tree.d.ts.map +0 -1
- package/dist/core/lock-manager.d.ts +0 -22
- package/dist/core/lock-manager.d.ts.map +0 -1
- package/dist/core/pipeline.d.ts +0 -40
- package/dist/core/pipeline.d.ts.map +0 -1
- package/dist/core/snapshot.d.ts +0 -58
- package/dist/core/snapshot.d.ts.map +0 -1
- package/dist/data/filters.d.ts +0 -23
- package/dist/data/filters.d.ts.map +0 -1
- package/dist/data/indexer.d.ts +0 -25
- package/dist/data/indexer.d.ts.map +0 -1
- package/dist/data/linker.d.ts +0 -37
- package/dist/data/linker.d.ts.map +0 -1
- package/dist/data/linker.test.js +0 -60
- package/dist/data/linker.test.js.map +0 -7
- package/dist/data/lint.d.ts +0 -27
- package/dist/data/lint.d.ts.map +0 -1
- package/dist/data/parsers/__fixtures__/pdf-inspector-stub.js +0 -41
- package/dist/data/parsers/__fixtures__/pdf-inspector-stub.js.map +0 -7
- package/dist/data/parsers/csv.d.ts +0 -11
- package/dist/data/parsers/csv.d.ts.map +0 -1
- package/dist/data/parsers/excel.d.ts +0 -10
- package/dist/data/parsers/excel.d.ts.map +0 -1
- package/dist/data/parsers/index.d.ts +0 -28
- package/dist/data/parsers/index.d.ts.map +0 -1
- package/dist/data/parsers/json-array.d.ts +0 -9
- package/dist/data/parsers/json-array.d.ts.map +0 -1
- package/dist/data/parsers/jsonl.d.ts +0 -9
- package/dist/data/parsers/jsonl.d.ts.map +0 -1
- package/dist/data/parsers/parquet.d.ts +0 -10
- package/dist/data/parsers/parquet.d.ts.map +0 -1
- package/dist/data/parsers/pdf.test.js +0 -125
- package/dist/data/parsers/pdf.test.js.map +0 -7
- package/dist/data/profiler.d.ts +0 -29
- package/dist/data/profiler.d.ts.map +0 -1
- package/dist/data/queries.d.ts +0 -95
- package/dist/data/queries.d.ts.map +0 -1
- package/dist/data/types.d.ts +0 -103
- package/dist/data/types.d.ts.map +0 -1
- package/dist/db/database.d.ts +0 -190
- package/dist/db/database.d.ts.map +0 -1
- package/dist/docs/formats/asciidoc.d.ts +0 -9
- package/dist/docs/formats/asciidoc.d.ts.map +0 -1
- package/dist/docs/formats/html.d.ts +0 -10
- package/dist/docs/formats/html.d.ts.map +0 -1
- package/dist/docs/formats/index.d.ts +0 -31
- package/dist/docs/formats/index.d.ts.map +0 -1
- package/dist/docs/formats/markdown.d.ts +0 -11
- package/dist/docs/formats/markdown.d.ts.map +0 -1
- package/dist/docs/formats/openapi.d.ts +0 -17
- package/dist/docs/formats/openapi.d.ts.map +0 -1
- package/dist/docs/formats/org.d.ts +0 -9
- package/dist/docs/formats/org.d.ts.map +0 -1
- package/dist/docs/formats/plaintext.d.ts +0 -11
- package/dist/docs/formats/plaintext.d.ts.map +0 -1
- package/dist/docs/formats/rdoc.d.ts +0 -10
- package/dist/docs/formats/rdoc.d.ts.map +0 -1
- package/dist/docs/formats/rst.d.ts +0 -11
- package/dist/docs/formats/rst.d.ts.map +0 -1
- package/dist/docs/indexer.d.ts +0 -49
- package/dist/docs/indexer.d.ts.map +0 -1
- package/dist/docs/linker.d.ts +0 -30
- package/dist/docs/linker.d.ts.map +0 -1
- package/dist/docs/lint.d.ts +0 -27
- package/dist/docs/lint.d.ts.map +0 -1
- package/dist/docs/queries.d.ts +0 -78
- package/dist/docs/queries.d.ts.map +0 -1
- package/dist/docs/section-id.d.ts +0 -48
- package/dist/docs/section-id.d.ts.map +0 -1
- package/dist/docs/summarizer.d.ts +0 -13
- package/dist/docs/summarizer.d.ts.map +0 -1
- package/dist/docs/types.d.ts +0 -71
- package/dist/docs/types.d.ts.map +0 -1
- package/dist/docs/vectors.d.ts +0 -54
- package/dist/docs/vectors.d.ts.map +0 -1
- package/dist/errors.d.ts +0 -49
- package/dist/errors.d.ts.map +0 -1
- package/dist/extraction/extractor.d.ts +0 -29
- package/dist/extraction/extractor.d.ts.map +0 -1
- package/dist/extraction/grammars.d.ts +0 -54
- package/dist/extraction/grammars.d.ts.map +0 -1
- package/dist/extraction/languages.d.ts +0 -9
- package/dist/extraction/languages.d.ts.map +0 -1
- package/dist/extraction/notebook.d.ts +0 -14
- package/dist/extraction/notebook.d.ts.map +0 -1
- package/dist/frameworks/amplify.d.ts +0 -9
- package/dist/frameworks/amplify.d.ts.map +0 -1
- package/dist/frameworks/angular.d.ts +0 -9
- package/dist/frameworks/angular.d.ts.map +0 -1
- package/dist/frameworks/ansible.d.ts +0 -8
- package/dist/frameworks/ansible.d.ts.map +0 -1
- package/dist/frameworks/cloudformation.d.ts +0 -9
- package/dist/frameworks/cloudformation.d.ts.map +0 -1
- package/dist/frameworks/csharp.d.ts +0 -8
- package/dist/frameworks/csharp.d.ts.map +0 -1
- package/dist/frameworks/docker.d.ts +0 -9
- package/dist/frameworks/docker.d.ts.map +0 -1
- package/dist/frameworks/elixir.d.ts +0 -6
- package/dist/frameworks/elixir.d.ts.map +0 -1
- package/dist/frameworks/express.d.ts +0 -8
- package/dist/frameworks/express.d.ts.map +0 -1
- package/dist/frameworks/flutter.d.ts +0 -12
- package/dist/frameworks/flutter.d.ts.map +0 -1
- package/dist/frameworks/go.d.ts +0 -8
- package/dist/frameworks/go.d.ts.map +0 -1
- package/dist/frameworks/iac.d.ts +0 -10
- package/dist/frameworks/iac.d.ts.map +0 -1
- package/dist/frameworks/index.d.ts +0 -44
- package/dist/frameworks/index.d.ts.map +0 -1
- package/dist/frameworks/java.d.ts +0 -8
- package/dist/frameworks/java.d.ts.map +0 -1
- package/dist/frameworks/kubernetes.d.ts +0 -9
- package/dist/frameworks/kubernetes.d.ts.map +0 -1
- package/dist/frameworks/laravel.d.ts +0 -9
- package/dist/frameworks/laravel.d.ts.map +0 -1
- package/dist/frameworks/pulumi.d.ts +0 -9
- package/dist/frameworks/pulumi.d.ts.map +0 -1
- package/dist/frameworks/python.d.ts +0 -10
- package/dist/frameworks/python.d.ts.map +0 -1
- package/dist/frameworks/react.d.ts +0 -9
- package/dist/frameworks/react.d.ts.map +0 -1
- package/dist/frameworks/ruby.d.ts +0 -8
- package/dist/frameworks/ruby.d.ts.map +0 -1
- package/dist/frameworks/rust.d.ts +0 -8
- package/dist/frameworks/rust.d.ts.map +0 -1
- package/dist/frameworks/scala.d.ts +0 -6
- package/dist/frameworks/scala.d.ts.map +0 -1
- package/dist/frameworks/solidity.d.ts +0 -6
- package/dist/frameworks/solidity.d.ts.map +0 -1
- package/dist/frameworks/svelte.d.ts +0 -8
- package/dist/frameworks/svelte.d.ts.map +0 -1
- package/dist/frameworks/swift.d.ts +0 -10
- package/dist/frameworks/swift.d.ts.map +0 -1
- package/dist/frameworks/terraform.d.ts +0 -14
- package/dist/frameworks/terraform.d.ts.map +0 -1
- package/dist/frameworks/types.d.ts +0 -37
- package/dist/frameworks/types.d.ts.map +0 -1
- package/dist/frameworks/vue.d.ts +0 -7
- package/dist/frameworks/vue.d.ts.map +0 -1
- package/dist/graph/communities.d.ts +0 -43
- package/dist/graph/communities.d.ts.map +0 -1
- package/dist/graph/flows.d.ts +0 -55
- package/dist/graph/flows.d.ts.map +0 -1
- package/dist/graph/queries.d.ts +0 -53
- package/dist/graph/queries.d.ts.map +0 -1
- package/dist/graph/refactor.d.ts +0 -43
- package/dist/graph/refactor.d.ts.map +0 -1
- package/dist/graph/traversal.d.ts +0 -35
- package/dist/graph/traversal.d.ts.map +0 -1
- package/dist/index.d.ts +0 -134
- package/dist/index.d.ts.map +0 -1
- package/dist/installer/index.d.ts +0 -10
- package/dist/installer/index.d.ts.map +0 -1
- package/dist/installer/index.js +0 -526
- package/dist/installer/index.js.map +0 -1
- package/dist/mcp/cache.d.ts +0 -69
- package/dist/mcp/cache.d.ts.map +0 -1
- package/dist/mcp/read-modes.d.ts +0 -31
- package/dist/mcp/read-modes.d.ts.map +0 -1
- package/dist/mcp/server.d.ts +0 -17
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/tool-names.d.ts +0 -2
- package/dist/mcp/tool-names.d.ts.map +0 -1
- package/dist/mcp/tools.d.ts +0 -49
- package/dist/mcp/tools.d.ts.map +0 -1
- package/dist/mcp/transport.d.ts +0 -29
- package/dist/mcp/transport.d.ts.map +0 -1
- package/dist/memory/compress.d.ts +0 -19
- package/dist/memory/compress.d.ts.map +0 -1
- package/dist/memory/database.d.ts +0 -92
- package/dist/memory/database.d.ts.map +0 -1
- package/dist/memory/index.d.ts +0 -71
- package/dist/memory/index.d.ts.map +0 -1
- package/dist/memory/symbols.d.ts +0 -21
- package/dist/memory/symbols.d.ts.map +0 -1
- package/dist/memory/types.d.ts +0 -78
- package/dist/memory/types.d.ts.map +0 -1
- package/dist/memory/vectors.d.ts +0 -43
- package/dist/memory/vectors.d.ts.map +0 -1
- package/dist/patterns/graph.d.ts +0 -16
- package/dist/patterns/graph.d.ts.map +0 -1
- package/dist/patterns/index.d.ts +0 -4
- package/dist/patterns/index.d.ts.map +0 -1
- package/dist/patterns/indexer.d.ts +0 -15
- package/dist/patterns/indexer.d.ts.map +0 -1
- package/dist/patterns/loader.d.ts +0 -18
- package/dist/patterns/loader.d.ts.map +0 -1
- package/dist/patterns/runner.d.ts +0 -42
- package/dist/patterns/runner.d.ts.map +0 -1
- package/dist/patterns/types.d.ts +0 -27
- package/dist/patterns/types.d.ts.map +0 -1
- package/dist/resolution/bridges/android-rn.d.ts +0 -13
- package/dist/resolution/bridges/android-rn.d.ts.map +0 -1
- package/dist/resolution/bridges/expo-modules.d.ts +0 -10
- package/dist/resolution/bridges/expo-modules.d.ts.map +0 -1
- package/dist/resolution/bridges/flutter-channel.d.ts +0 -14
- package/dist/resolution/bridges/flutter-channel.d.ts.map +0 -1
- package/dist/resolution/bridges/index.d.ts +0 -40
- package/dist/resolution/bridges/index.d.ts.map +0 -1
- package/dist/resolution/bridges/native-events.d.ts +0 -10
- package/dist/resolution/bridges/native-events.d.ts.map +0 -1
- package/dist/resolution/bridges/native-views.d.ts +0 -13
- package/dist/resolution/bridges/native-views.d.ts.map +0 -1
- package/dist/resolution/bridges/react-native.d.ts +0 -9
- package/dist/resolution/bridges/react-native.d.ts.map +0 -1
- package/dist/resolution/bridges/swift-objc.d.ts +0 -14
- package/dist/resolution/bridges/swift-objc.d.ts.map +0 -1
- package/dist/resolution/bridges/turbomodules.d.ts +0 -10
- package/dist/resolution/bridges/turbomodules.d.ts.map +0 -1
- package/dist/resolution/index.d.ts +0 -81
- package/dist/resolution/index.d.ts.map +0 -1
- package/dist/resolution/name-matcher.d.ts +0 -25
- package/dist/resolution/name-matcher.d.ts.map +0 -1
- package/dist/scripts/postinstall.js +0 -64
- package/dist/search/query-utils.d.ts +0 -21
- package/dist/search/query-utils.d.ts.map +0 -1
- package/dist/search/searcher.d.ts +0 -15
- package/dist/search/searcher.d.ts.map +0 -1
- package/dist/security/attack-surface.d.ts +0 -46
- package/dist/security/attack-surface.d.ts.map +0 -1
- package/dist/security/context-warnings.d.ts +0 -40
- package/dist/security/context-warnings.d.ts.map +0 -1
- package/dist/security/data-flows.d.ts +0 -33
- package/dist/security/data-flows.d.ts.map +0 -1
- package/dist/security/dep-confusion.d.ts +0 -23
- package/dist/security/dep-confusion.d.ts.map +0 -1
- package/dist/security/errors.d.ts +0 -16
- package/dist/security/errors.d.ts.map +0 -1
- package/dist/security/export/fix-suggestions.d.ts +0 -21
- package/dist/security/export/fix-suggestions.d.ts.map +0 -1
- package/dist/security/export/sbom.d.ts +0 -33
- package/dist/security/export/sbom.d.ts.map +0 -1
- package/dist/security/export/serialization.d.ts +0 -62
- package/dist/security/export/serialization.d.ts.map +0 -1
- package/dist/security/export/vex.d.ts +0 -58
- package/dist/security/export/vex.d.ts.map +0 -1
- package/dist/security/index.d.ts +0 -21
- package/dist/security/index.d.ts.map +0 -1
- package/dist/security/integrator.d.ts +0 -63
- package/dist/security/integrator.d.ts.map +0 -1
- package/dist/security/license.d.ts +0 -33
- package/dist/security/license.d.ts.map +0 -1
- package/dist/security/manifest/adapter.d.ts +0 -92
- package/dist/security/manifest/adapter.d.ts.map +0 -1
- package/dist/security/manifest/parser.d.ts +0 -73
- package/dist/security/manifest/parser.d.ts.map +0 -1
- package/dist/security/manifest/plugins/cargo.d.ts +0 -11
- package/dist/security/manifest/plugins/cargo.d.ts.map +0 -1
- package/dist/security/manifest/plugins/composer.d.ts +0 -11
- package/dist/security/manifest/plugins/composer.d.ts.map +0 -1
- package/dist/security/manifest/plugins/go.d.ts +0 -12
- package/dist/security/manifest/plugins/go.d.ts.map +0 -1
- package/dist/security/manifest/plugins/gradle.d.ts +0 -12
- package/dist/security/manifest/plugins/gradle.d.ts.map +0 -1
- package/dist/security/manifest/plugins/hex.d.ts +0 -11
- package/dist/security/manifest/plugins/hex.d.ts.map +0 -1
- package/dist/security/manifest/plugins/maven.d.ts +0 -11
- package/dist/security/manifest/plugins/maven.d.ts.map +0 -1
- package/dist/security/manifest/plugins/npm.d.ts +0 -11
- package/dist/security/manifest/plugins/npm.d.ts.map +0 -1
- package/dist/security/manifest/plugins/nuget.d.ts +0 -12
- package/dist/security/manifest/plugins/nuget.d.ts.map +0 -1
- package/dist/security/manifest/plugins/pip.d.ts +0 -11
- package/dist/security/manifest/plugins/pip.d.ts.map +0 -1
- package/dist/security/manifest/plugins/pubspec.d.ts +0 -11
- package/dist/security/manifest/plugins/pubspec.d.ts.map +0 -1
- package/dist/security/manifest/plugins/pyproject.d.ts +0 -3
- package/dist/security/manifest/plugins/pyproject.d.ts.map +0 -1
- package/dist/security/manifest/plugins/rubygems.d.ts +0 -11
- package/dist/security/manifest/plugins/rubygems.d.ts.map +0 -1
- package/dist/security/manifest/plugins/swift.d.ts +0 -11
- package/dist/security/manifest/plugins/swift.d.ts.map +0 -1
- package/dist/security/owasp.d.ts +0 -16
- package/dist/security/owasp.d.ts.map +0 -1
- package/dist/security/pipeline.d.ts +0 -37
- package/dist/security/pipeline.d.ts.map +0 -1
- package/dist/security/reachability.d.ts +0 -67
- package/dist/security/reachability.d.ts.map +0 -1
- package/dist/security/remediation.d.ts +0 -51
- package/dist/security/remediation.d.ts.map +0 -1
- package/dist/security/secrets.d.ts +0 -38
- package/dist/security/secrets.d.ts.map +0 -1
- package/dist/security/staleness.d.ts +0 -43
- package/dist/security/staleness.d.ts.map +0 -1
- package/dist/security/supply-chain.d.ts +0 -34
- package/dist/security/supply-chain.d.ts.map +0 -1
- package/dist/security/suppressions.d.ts +0 -18
- package/dist/security/suppressions.d.ts.map +0 -1
- package/dist/security/types.d.ts +0 -144
- package/dist/security/types.d.ts.map +0 -1
- package/dist/security/vuln/client.d.ts +0 -90
- package/dist/security/vuln/client.d.ts.map +0 -1
- package/dist/security/vuln/epss-client.d.ts +0 -26
- package/dist/security/vuln/epss-client.d.ts.map +0 -1
- package/dist/security/vuln/index.d.ts +0 -6
- package/dist/security/vuln/index.d.ts.map +0 -1
- package/dist/security/vuln/osv-adapter.d.ts +0 -58
- package/dist/security/vuln/osv-adapter.d.ts.map +0 -1
- package/dist/security/vuln/types.d.ts +0 -29
- package/dist/security/vuln/types.d.ts.map +0 -1
- package/dist/sync/index.d.ts +0 -35
- package/dist/sync/index.d.ts.map +0 -1
- package/dist/types.d.ts +0 -137
- package/dist/types.d.ts.map +0 -1
- package/dist/utils.d.ts +0 -52
- package/dist/utils.d.ts.map +0 -1
- package/dist/vectors/index.d.ts +0 -79
- package/dist/vectors/index.d.ts.map +0 -1
- package/dist/vectors/lancedb-index.d.ts +0 -50
- package/dist/vectors/lancedb-index.d.ts.map +0 -1
- package/dist/vectors/orama-index.d.ts +0 -54
- package/dist/vectors/orama-index.d.ts.map +0 -1
- package/dist/vectors/pglite-index.d.ts +0 -53
- package/dist/vectors/pglite-index.d.ts.map +0 -1
- package/dist/vectors/qdrant-index.d.ts +0 -77
- package/dist/vectors/qdrant-index.d.ts.map +0 -1
- package/dist/vectors/typesense-index.d.ts +0 -75
- package/dist/vectors/typesense-index.d.ts.map +0 -1
- package/dist/vectors/vec-index.d.ts +0 -52
- package/dist/vectors/vec-index.d.ts.map +0 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/core/branch-manager.ts"],
|
|
4
|
+
"sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\n\nexport function sanitizeBranchName(name: string): string {\n return name.replace(/[^a-zA-Z0-9_-]/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');\n}\n\nexport function branchDbPath(projectRoot: string, branchName: string): string {\n return path.join(projectRoot, '.kirograph', `branch-${sanitizeBranchName(branchName)}.db`);\n}\n\nexport interface BranchInfo {\n name: string; // sanitized name\n rawName: string; // from git (if resolvable)\n dbPath: string;\n sizeBytes: number;\n mtimeMs: number;\n}\n\nexport function listTrackedBranches(projectRoot: string): BranchInfo[] {\n const dir = path.join(projectRoot, '.kirograph');\n if (!fs.existsSync(dir)) return [];\n return fs.readdirSync(dir)\n .filter(f => f.startsWith('branch-') && f.endsWith('.db'))\n .map(f => {\n const sanitized = f.slice('branch-'.length, -'.db'.length);\n const dbPath = path.join(dir, f);\n const stat = fs.statSync(dbPath);\n return { name: sanitized, rawName: sanitized, dbPath, sizeBytes: stat.size, mtimeMs: stat.mtimeMs };\n });\n}\n\nexport function getCurrentGitBranch(projectRoot: string): string {\n try {\n return execSync('git rev-parse --abbrev-ref HEAD', { cwd: projectRoot, stdio: 'pipe' }).toString().trim();\n } catch {\n return 'unknown';\n }\n}\n\nexport function getGitBranches(projectRoot: string): string[] {\n try {\n return execSync('git branch', { cwd: projectRoot, stdio: 'pipe' })\n .toString().split('\\n')\n .map(l => l.replace(/^\\*?\\s+/, '').trim())\n .filter(Boolean);\n } catch {\n return [];\n }\n}\n\nexport function addBranch(projectRoot: string, branchName: string): { created: boolean; dbPath: string } {\n const mainDb = path.join(projectRoot, '.kirograph', 'kirograph.db');\n const targetDb = branchDbPath(projectRoot, branchName);\n if (fs.existsSync(targetDb)) return { created: false, dbPath: targetDb };\n if (!fs.existsSync(mainDb)) throw new Error('No main KiroGraph database found. Run kirograph index first.');\n fs.copyFileSync(mainDb, targetDb);\n return { created: true, dbPath: targetDb };\n}\n\nexport function removeBranch(projectRoot: string, branchName: string): boolean {\n const dbPath = branchDbPath(projectRoot, branchName);\n if (!fs.existsSync(dbPath)) return false;\n fs.unlinkSync(dbPath);\n return true;\n}\n\nexport function gcBranches(projectRoot: string): string[] {\n const gitBranches = new Set(getGitBranches(projectRoot).map(sanitizeBranchName));\n const tracked = listTrackedBranches(projectRoot);\n const removed: string[] = [];\n for (const b of tracked) {\n if (!gitBranches.has(b.name)) {\n fs.unlinkSync(b.dbPath);\n removed.push(b.name);\n }\n }\n return removed;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AACtB,2BAAyB;AAElB,SAAS,mBAAmB,MAAsB;AACvD,SAAO,KAAK,QAAQ,mBAAmB,GAAG,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,UAAU,EAAE;AACtF;AAEO,SAAS,aAAa,aAAqB,YAA4B;AAC5E,SAAO,KAAK,KAAK,aAAa,cAAc,UAAU,mBAAmB,UAAU,CAAC,KAAK;AAC3F;AAUO,SAAS,oBAAoB,aAAmC;AACrE,QAAM,MAAM,KAAK,KAAK,aAAa,YAAY;AAC/C,MAAI,CAAC,GAAG,WAAW,GAAG,EAAG,QAAO,CAAC;AACjC,SAAO,GAAG,YAAY,GAAG,EACtB,OAAO,OAAK,EAAE,WAAW,SAAS,KAAK,EAAE,SAAS,KAAK,CAAC,EACxD,IAAI,OAAK;AACR,UAAM,YAAY,EAAE,MAAM,UAAU,QAAQ,CAAC,MAAM,MAAM;AACzD,UAAM,SAAS,KAAK,KAAK,KAAK,CAAC;AAC/B,UAAM,OAAO,GAAG,SAAS,MAAM;AAC/B,WAAO,EAAE,MAAM,WAAW,SAAS,WAAW,QAAQ,WAAW,KAAK,MAAM,SAAS,KAAK,QAAQ;AAAA,EACpG,CAAC;AACL;AAEO,SAAS,oBAAoB,aAA6B;AAC/D,MAAI;AACF,eAAO,+BAAS,mCAAmC,EAAE,KAAK,aAAa,OAAO,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK;AAAA,EAC1G,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,eAAe,aAA+B;AAC5D,MAAI;AACF,eAAO,+BAAS,cAAc,EAAE,KAAK,aAAa,OAAO,OAAO,CAAC,EAC9D,SAAS,EAAE,MAAM,IAAI,EACrB,IAAI,OAAK,EAAE,QAAQ,WAAW,EAAE,EAAE,KAAK,CAAC,EACxC,OAAO,OAAO;AAAA,EACnB,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEO,SAAS,UAAU,aAAqB,YAA0D;AACvG,QAAM,SAAS,KAAK,KAAK,aAAa,cAAc,cAAc;AAClE,QAAM,WAAW,aAAa,aAAa,UAAU;AACrD,MAAI,GAAG,WAAW,QAAQ,EAAG,QAAO,EAAE,SAAS,OAAO,QAAQ,SAAS;AACvE,MAAI,CAAC,GAAG,WAAW,MAAM,EAAG,OAAM,IAAI,MAAM,8DAA8D;AAC1G,KAAG,aAAa,QAAQ,QAAQ;AAChC,SAAO,EAAE,SAAS,MAAM,QAAQ,SAAS;AAC3C;AAEO,SAAS,aAAa,aAAqB,YAA6B;AAC7E,QAAM,SAAS,aAAa,aAAa,UAAU;AACnD,MAAI,CAAC,GAAG,WAAW,MAAM,EAAG,QAAO;AACnC,KAAG,WAAW,MAAM;AACpB,SAAO;AACT;AAEO,SAAS,WAAW,aAA+B;AACxD,QAAM,cAAc,IAAI,IAAI,eAAe,WAAW,EAAE,IAAI,kBAAkB,CAAC;AAC/E,QAAM,UAAU,oBAAoB,WAAW;AAC/C,QAAM,UAAoB,CAAC;AAC3B,aAAW,KAAK,SAAS;AACvB,QAAI,CAAC,YAAY,IAAI,EAAE,IAAI,GAAG;AAC5B,SAAG,WAAW,EAAE,MAAM;AACtB,cAAQ,KAAK,EAAE,IAAI;AAAA,IACrB;AAAA,EACF;AACA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/core/pipeline.js
CHANGED
|
@@ -85,7 +85,7 @@ class IndexPipeline {
|
|
|
85
85
|
const { detectLanguage } = await Promise.resolve().then(() => require("../extraction/languages.js"));
|
|
86
86
|
const lang = detectLanguage(file);
|
|
87
87
|
if (poisonedLanguages.has(lang)) continue;
|
|
88
|
-
const extracted = await (0, import_extractor.extractFile)(file, this.projectRoot, content);
|
|
88
|
+
const extracted = await (0, import_extractor.extractFile)(file, this.projectRoot, content, { enableComplexity: !!this.config.enableComplexity });
|
|
89
89
|
if (!extracted) continue;
|
|
90
90
|
const oldNodes = this.db.getNodesByFile(extracted.filePath);
|
|
91
91
|
if (oldNodes.length > 0) await this.vectors.deleteEmbeddings(oldNodes.map((n) => n.id));
|
|
@@ -142,7 +142,7 @@ class IndexPipeline {
|
|
|
142
142
|
const absPath = path.join(this.projectRoot, ef.path);
|
|
143
143
|
opts?.onProgress?.({ phase: "retrying", current: i + 1, total: emptyFiles.length, currentFile: absPath });
|
|
144
144
|
try {
|
|
145
|
-
const extracted = await (0, import_extractor.extractFile)(absPath, this.projectRoot);
|
|
145
|
+
const extracted = await (0, import_extractor.extractFile)(absPath, this.projectRoot, void 0, { enableComplexity: !!this.config.enableComplexity });
|
|
146
146
|
if (!extracted || extracted.nodes.length === 0) continue;
|
|
147
147
|
const oldNodes = this.db.getNodesByFile(extracted.filePath);
|
|
148
148
|
if (oldNodes.length > 0) await this.vectors.deleteEmbeddings(oldNodes.map((n) => n.id));
|
|
@@ -356,7 +356,7 @@ class IndexPipeline {
|
|
|
356
356
|
const { detectLanguage } = await Promise.resolve().then(() => require("../extraction/languages.js"));
|
|
357
357
|
const lang = detectLanguage(file);
|
|
358
358
|
if (poisonedLanguages.has(lang)) continue;
|
|
359
|
-
const extracted = await (0, import_extractor.extractFile)(file, this.projectRoot);
|
|
359
|
+
const extracted = await (0, import_extractor.extractFile)(file, this.projectRoot, void 0, { enableComplexity: !!this.config.enableComplexity });
|
|
360
360
|
if (!extracted) continue;
|
|
361
361
|
const existing = this.db.getFile(extracted.filePath);
|
|
362
362
|
const isNew = !existing;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/core/pipeline.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * IndexPipeline \u2014 full-index and incremental-sync pipelines.\n *\n * Owns the two heavy workflows:\n * - indexAll(): scan all files, extract, store, resolve, detect frameworks,\n * generate embeddings, analyze architecture.\n * - sync(): detect changed files via git (or full scan fallback),\n * re-extract only what changed, then run the same tail pipeline.\n *\n * Everything that touches the filesystem or sub-systems is injected via the\n * constructor, keeping this class testable and free of global state.\n */\n\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { GraphDatabase } from '../db/database';\nimport { scanDirectory, hashContent, getChangedFiles, shouldIncludeFile } from '../sync/index';\nimport { extractFile } from '../extraction/extractor';\nimport { clearParserCache, initGrammars, hasWasmGrammar } from '../extraction/grammars';\nimport { detectFrameworks } from '../frameworks/index';\nimport { ReferenceResolver } from '../resolution/index';\nimport { VectorManager } from '../vectors/index';\nimport { ArchitectureAnalyzer } from '../architecture/index';\nimport type { KiroGraphConfig } from '../config';\nimport type { IndexResult, IndexProgress, SyncResult } from '../types';\nimport { LockManager } from './lock-manager';\nimport { Mutex } from '../utils';\n\nconst FILE_IO_BATCH_SIZE = 10;\n\nexport class IndexPipeline {\n private readonly mutex = new Mutex();\n\n constructor(\n private readonly db: GraphDatabase,\n private readonly vectors: VectorManager,\n private readonly resolver: ReferenceResolver,\n private readonly arch: ArchitectureAnalyzer,\n private readonly lock: LockManager,\n private readonly config: KiroGraphConfig,\n private readonly projectRoot: string,\n ) {}\n\n async indexAll(opts?: {\n onProgress?: (p: IndexProgress) => void;\n force?: boolean;\n signal?: AbortSignal;\n }): Promise<IndexResult> {\n const release = await this.mutex.acquire();\n this.lock.acquire();\n const start = Date.now();\n const errors: string[] = [];\n let filesIndexed = 0;\n let nodesCreated = 0;\n let edgesCreated = 0;\n\n // Track languages whose WASM parser is currently poisoned (ABORT=true on the module).\n // Once a language's parser aborts, every subsequent parse call for that language\n // fails instantly. We skip those files until clearParserCache + initGrammars succeeds.\n const poisonedLanguages = new Set<string>();\n\n try {\n const files = await scanDirectory(this.projectRoot, this.config, opts?.signal);\n opts?.onProgress?.({ phase: 'scanning', current: files.length, total: files.length });\n\n // Batch-read files in parallel\n const contentMap = new Map<string, Buffer>();\n for (let b = 0; b < files.length; b += FILE_IO_BATCH_SIZE) {\n const batch = files.slice(b, b + FILE_IO_BATCH_SIZE);\n const results = await Promise.all(batch.map(f => fs.promises.readFile(f).catch(() => null)));\n for (let i = 0; i < batch.length; i++) {\n if (results[i]) contentMap.set(batch[i], results[i]!);\n }\n }\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n opts?.onProgress?.({ phase: 'parsing', current: i + 1, total: files.length, currentFile: file });\n\n try {\n const content = contentMap.get(file);\n if (!content) continue;\n if (content.length > this.config.maxFileSize) continue;\n\n const relPath = path.relative(this.projectRoot, file).replace(/\\\\/g, '/');\n\n if (!opts?.force) {\n const existing = this.db.getFile(relPath);\n if (existing && hashContent(content) === existing.contentHash) continue;\n }\n\n // Skip files whose language parser is currently poisoned\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n if (poisonedLanguages.has(lang)) continue;\n\n const extracted = await extractFile(file, this.projectRoot, content);\n if (!extracted) continue;\n\n const oldNodes = this.db.getNodesByFile(extracted.filePath);\n if (oldNodes.length > 0) await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n\n this.db.transaction(() => {\n this.db.deleteNodesByFile(extracted.filePath);\n this.db.deleteUnresolvedRefsByFile(extracted.filePath);\n this.db.upsertFile({\n path: extracted.filePath,\n contentHash: extracted.contentHash,\n language: extracted.language,\n fileSize: extracted.fileSize,\n symbolCount: extracted.nodes.length,\n indexedAt: Date.now(),\n });\n for (const node of extracted.nodes) { this.db.upsertNode(node); nodesCreated++; }\n for (const edge of extracted.edges) { this.db.insertEdge(edge); edgesCreated++; }\n for (const ref of extracted.unresolvedRefs) {\n this.db.insertUnresolvedRef(ref.sourceId, ref.refName, ref.refKind, extracted.filePath, ref.line, ref.column);\n }\n });\n\n filesIndexed++;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n errors.push(`${file}: ${msg}`);\n\n // Detect WASM runtime abort and attempt recovery\n const isWasmCrash = (err as any)?.constructor?.name === 'RuntimeError'\n || msg.includes('Aborted(') \n || msg.includes('RuntimeError')\n || msg.includes('WASM grammar exists but failed to load');\n if (isWasmCrash) {\n // Mark the language as poisoned so we skip remaining files of this language\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n poisonedLanguages.add(lang);\n\n clearParserCache();\n try {\n await initGrammars();\n // Recovery succeeded \u2014 un-poison all languages\n poisonedLanguages.clear();\n } catch {\n errors.push('WASM runtime unrecoverable after crash \u2014 aborting batch');\n break;\n }\n }\n }\n }\n\n // Re-process files that have symbolCount=0 but should have symbols (WASM recovery)\n const emptyFiles = this.db.getAllFiles().filter(\n (f: any) => f.symbolCount === 0 && hasWasmGrammar(f.language)\n );\n if (emptyFiles.length > 0) {\n opts?.onProgress?.({ phase: 'retrying', current: 0, total: emptyFiles.length });\n for (let i = 0; i < emptyFiles.length; i++) {\n const ef = emptyFiles[i];\n const absPath = path.join(this.projectRoot, ef.path);\n opts?.onProgress?.({ phase: 'retrying', current: i + 1, total: emptyFiles.length, currentFile: absPath });\n try {\n const extracted = await extractFile(absPath, this.projectRoot);\n if (!extracted || extracted.nodes.length === 0) continue;\n\n const oldNodes = this.db.getNodesByFile(extracted.filePath);\n if (oldNodes.length > 0) await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n\n this.db.transaction(() => {\n this.db.deleteNodesByFile(extracted.filePath);\n this.db.deleteUnresolvedRefsByFile(extracted.filePath);\n this.db.upsertFile({\n path: extracted.filePath,\n contentHash: extracted.contentHash,\n language: extracted.language,\n fileSize: extracted.fileSize,\n symbolCount: extracted.nodes.length,\n indexedAt: Date.now(),\n });\n for (const node of extracted.nodes) { this.db.upsertNode(node); nodesCreated++; }\n for (const edge of extracted.edges) { this.db.insertEdge(edge); edgesCreated++; }\n for (const ref of extracted.unresolvedRefs) {\n this.db.insertUnresolvedRef(ref.sourceId, ref.refName, ref.refKind, extracted.filePath, ref.line, ref.column);\n }\n });\n filesIndexed++;\n } catch {\n // Already logged in first pass or genuinely broken \u2014 skip\n }\n }\n }\n\n // Resolve cross-file references\n opts?.onProgress?.({ phase: 'resolving', current: 0, total: 1 });\n await this.resolver.resolveAll((current, total) => {\n opts?.onProgress?.({ phase: 'resolving', current, total });\n });\n\n // Detect frameworks\n opts?.onProgress?.({ phase: 'detecting frameworks', current: 0, total: 1 });\n const detectedFrameworks = await detectFrameworks(this.projectRoot, this.db);\n const languages = [...new Set(this.db.getAllFiles().map(f => (f as any).language).filter(Boolean))];\n opts?.onProgress?.({\n phase: 'detecting frameworks', current: 1, total: 1,\n meta: { frameworks: detectedFrameworks.map(f => f.name), languages },\n });\n\n // Generate embeddings (if enabled)\n if (this.vectors.isInitialized()) {\n opts?.onProgress?.({ phase: 'embeddings', current: 0, total: 1 });\n await this.vectors.embedAll((current, total) =>\n opts?.onProgress?.({ phase: 'embeddings', current, total })\n );\n }\n\n // Analyze architecture (if enabled, or auto-enabled for security)\n if (this.config.enableArchitecture || this.config.enableSecurity) {\n if (this.config.enableSecurity && !this.config.enableArchitecture) {\n const { logWarn } = await Promise.resolve().then(() => require('../errors.js'));\n logWarn('enableSecurity requires enableArchitecture \u2014 auto-enabling architecture analysis for this run');\n }\n opts?.onProgress?.({ phase: 'architecture', current: 0, total: 1 });\n await this.arch.analyze(msg =>\n opts?.onProgress?.({ phase: 'architecture', current: 0, total: 1, meta: { msg } })\n );\n opts?.onProgress?.({ phase: 'architecture', current: 1, total: 1 });\n }\n\n // Run security analysis (if enabled)\n if (this.config.enableSecurity) {\n try {\n const { SecurityPipeline } = await Promise.resolve().then(() => require('../security/pipeline.js'));\n this.db.applySecuritySchema();\n const secPipeline = new SecurityPipeline(this.db, this.config, this.projectRoot);\n opts?.onProgress?.({ phase: 'security', current: 0, total: 1 });\n await secPipeline.run((phase, current, total) =>\n opts?.onProgress?.({ phase: 'security', current, total, meta: { secPhase: phase } })\n );\n opts?.onProgress?.({ phase: 'security', current: 1, total: 1 });\n } catch { /* security analysis is non-critical */ }\n }\n\n // Index documentation (if enabled)\n if (this.config.enableDocs) {\n try {\n const { DocsIndexer } = await Promise.resolve().then(() => require('../docs/indexer.js'));\n this.db.applyDocsSchema();\n const docsIndexer = new DocsIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await docsIndexer.indexAll({\n force: opts?.force,\n onProgress: msg => opts?.onProgress?.({ phase: 'docs', current: 0, total: 1, meta: { msg } }),\n });\n } catch { /* docs indexing is non-critical */ }\n }\n\n // Index data files (if enabled)\n if ((this.config as any).enableData) {\n try {\n const { DataIndexer } = await Promise.resolve().then(() => require('../data/indexer.js'));\n this.db.applyDataSchema();\n const dataIndexer = new DataIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await dataIndexer.indexAll({\n onProgress: msg => opts?.onProgress?.({ phase: 'data', current: 0, total: 1, meta: { msg } }),\n });\n\n // Assign data files to 'data' architecture layer if architecture is enabled\n if (this.config.enableArchitecture) {\n try {\n const rawDb = this.db.getRawDb();\n // Check if arch_file_layers table exists\n const tableExists = rawDb.get(\"SELECT name FROM sqlite_master WHERE type='table' AND name='arch_file_layers'\");\n if (tableExists) {\n const datasets = rawDb.all('SELECT file_path FROM data_datasets') as Array<{ file_path: string }>;\n for (const ds of datasets) {\n rawDb.run(\n `INSERT OR REPLACE INTO arch_file_layers (file_path, layer_id, confidence) VALUES (?, ?, ?)`,\n [ds.file_path, 'layer:data', 1.0],\n );\n }\n }\n } catch { /* non-critical */ }\n }\n } catch { /* data indexing is non-critical */ }\n }\n\n // Index pattern matches (if enabled)\n if ((this.config as any).enablePatterns) {\n try {\n this.db.applyPatternsSchema();\n const { PatternIndexer } = await Promise.resolve().then(() => require('../patterns/indexer.js'));\n const indexer = new PatternIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await indexer.indexAll((phase, current, total) => {\n opts?.onProgress?.({ phase: 'patterns' as any, current, total });\n });\n } catch (err) {\n // Patterns are non-critical \u2014 log and continue\n const { logWarn } = await Promise.resolve().then(() => require('../errors.js'));\n const msg = err instanceof Error ? err.message : String(err);\n logWarn(`[patterns] Pattern indexing failed (non-critical): ${msg}`);\n }\n }\n\n this.lock.clearDirty();\n return { success: errors.length === 0, filesIndexed, nodesCreated, edgesCreated, errors, duration: Date.now() - start };\n } finally {\n this.lock.release();\n release();\n }\n }\n\n async sync(opts?: {\n changedFiles?: string[];\n onProgress?: (p: IndexProgress) => void;\n }): Promise<SyncResult> {\n const release = await this.mutex.acquire();\n this.lock.acquire();\n const start = Date.now();\n const changedFiles = opts?.changedFiles;\n const onProgress = opts?.onProgress;\n const result: SyncResult = {\n added: [], modified: [], removed: [],\n nodesCreated: 0, nodesUpdated: 0, nodesRemoved: 0,\n edgesCreated: 0, edgesRemoved: 0,\n filesScanned: 0, errors: [], duration: 0,\n };\n\n try {\n const removeFile = async (rel: string) => {\n const oldNodes = this.db.getNodesByFile(rel);\n const oldEdgeCount = this.db.getEdgesForNodes(oldNodes.map(n => n.id)).length;\n result.nodesRemoved += oldNodes.length;\n result.edgesRemoved += oldEdgeCount;\n await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n this.db.deleteFile(rel);\n this.db.deleteUnresolvedRefsByFile(rel);\n // Clean up pattern matches for removed files (only if patterns are enabled)\n if ((this.config as any).enablePatterns) {\n this.db.getRawDb().run('DELETE FROM pattern_matches WHERE file_path = ?', [rel]);\n }\n result.removed.push(rel);\n };\n\n // \u2500\u2500 Exclude-rule cleanup \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 // Remove any indexed files that now match the current exclude patterns.\n // This handles the case where a user adds a new exclude pattern (e.g.\n // \"**/.vite/**\") and expects those files to disappear from the index on\n // the next sync without needing a full --force re-index.\n const allIndexed = this.db.getAllFiles();\n for (const f of allIndexed) {\n if (!shouldIncludeFile(f.path, this.config)) {\n onProgress?.({ phase: 'scanning', current: 0, total: 0, meta: { excludeCleanup: true, file: f.path } });\n await removeFile(f.path);\n }\n }\n\n let filesToProcess: string[];\n\n onProgress?.({ phase: 'scanning', current: 0, total: 0 });\n\n if (changedFiles) {\n filesToProcess = changedFiles.map(f => path.resolve(this.projectRoot, f));\n } else {\n const gitChanged = await getChangedFiles(this.projectRoot, this.config);\n const hasChanges = gitChanged.added.length > 0 || gitChanged.modified.length > 0 || gitChanged.removed.length > 0;\n\n if (hasChanges) {\n for (const p of gitChanged.removed) {\n await removeFile(path.relative(this.projectRoot, p).replace(/\\\\/g, '/'));\n }\n filesToProcess = [...gitChanged.added, ...gitChanged.modified];\n } else {\n // Fallback: full scan + detect removed files\n const indexed = new Set(this.db.getAllFiles().map(f => f.path));\n const current = new Set(\n (await scanDirectory(this.projectRoot, this.config))\n .map(f => path.relative(this.projectRoot, f).replace(/\\\\/g, '/'))\n );\n result.filesScanned = current.size;\n for (const p of indexed) {\n if (!current.has(p)) await removeFile(p);\n }\n filesToProcess = await scanDirectory(this.projectRoot, this.config);\n }\n }\n\n result.filesScanned = result.filesScanned || filesToProcess.length;\n onProgress?.({ phase: 'scanning', current: result.filesScanned, total: result.filesScanned });\n\n const poisonedLanguages = new Set<string>();\n\n for (let i = 0; i < filesToProcess.length; i++) {\n const file = filesToProcess[i];\n onProgress?.({ phase: 'parsing', current: i + 1, total: filesToProcess.length, currentFile: file });\n\n if (!fs.existsSync(file)) {\n const rel = path.relative(this.projectRoot, file).replace(/\\\\/g, '/');\n await removeFile(rel);\n continue;\n }\n\n try {\n // Skip files whose language parser is currently poisoned\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n if (poisonedLanguages.has(lang)) continue;\n\n const extracted = await extractFile(file, this.projectRoot);\n if (!extracted) continue;\n\n const existing = this.db.getFile(extracted.filePath);\n const isNew = !existing;\n if (!isNew && existing!.contentHash === extracted.contentHash) continue;\n\n const oldNodes = this.db.getNodesByFile(extracted.filePath);\n const oldEdgeCount = this.db.getEdgesForNodes(oldNodes.map(n => n.id)).length;\n await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n\n this.db.transaction(() => {\n result.nodesRemoved += oldNodes.length;\n result.edgesRemoved += oldEdgeCount;\n this.db.deleteNodesByFile(extracted.filePath);\n this.db.deleteUnresolvedRefsByFile(extracted.filePath);\n this.db.upsertFile({\n path: extracted.filePath,\n contentHash: extracted.contentHash,\n language: extracted.language,\n fileSize: extracted.fileSize,\n symbolCount: extracted.nodes.length,\n indexedAt: Date.now(),\n });\n for (const node of extracted.nodes) { this.db.upsertNode(node); result.nodesCreated++; }\n for (const edge of extracted.edges) { this.db.insertEdge(edge); result.edgesCreated++; }\n for (const ref of extracted.unresolvedRefs) {\n this.db.insertUnresolvedRef(ref.sourceId, ref.refName, ref.refKind, extracted.filePath, ref.line, ref.column);\n }\n });\n\n this.resolver.invalidateFile(extracted.filePath);\n if (isNew) result.added.push(extracted.filePath);\n else { result.modified.push(extracted.filePath); result.nodesUpdated += extracted.nodes.length; }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n result.errors.push(`${file}: ${msg}`);\n\n // Detect WASM runtime abort and attempt recovery\n const isWasmCrash = (err as any)?.constructor?.name === 'RuntimeError'\n || msg.includes('Aborted(') \n || msg.includes('RuntimeError')\n || msg.includes('WASM grammar exists but failed to load');\n if (isWasmCrash) {\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n poisonedLanguages.add(lang);\n\n clearParserCache();\n try {\n await initGrammars();\n poisonedLanguages.clear();\n } catch {\n result.errors.push('WASM runtime unrecoverable after crash \u2014 aborting sync');\n break;\n }\n }\n }\n }\n\n // Resolve cross-file references\n onProgress?.({ phase: 'resolving', current: 0, total: 1 });\n await this.resolver.resolveAll((current, total) => {\n onProgress?.({ phase: 'resolving', current, total });\n });\n\n await detectFrameworks(this.projectRoot);\n\n // Generate embeddings (if enabled)\n if (this.vectors.isInitialized()) {\n onProgress?.({ phase: 'embeddings', current: 0, total: 1 });\n await this.vectors.embedAll((current, total) =>\n onProgress?.({ phase: 'embeddings', current, total })\n );\n }\n\n // Analyze architecture (if enabled, or auto-enabled for security)\n if (this.config.enableArchitecture || this.config.enableSecurity) {\n if (this.config.enableSecurity && !this.config.enableArchitecture) {\n const { logWarn } = await Promise.resolve().then(() => require('../errors.js'));\n logWarn('enableSecurity requires enableArchitecture \u2014 auto-enabling architecture analysis for this run');\n }\n onProgress?.({ phase: 'architecture', current: 0, total: 1 });\n await this.arch.analyze(msg =>\n onProgress?.({ phase: 'architecture', current: 0, total: 1, meta: { msg } })\n );\n onProgress?.({ phase: 'architecture', current: 1, total: 1 });\n }\n\n // Run security analysis (if enabled)\n if (this.config.enableSecurity) {\n try {\n const { SecurityPipeline } = await Promise.resolve().then(() => require('../security/pipeline.js'));\n this.db.applySecuritySchema();\n const secPipeline = new SecurityPipeline(this.db, this.config, this.projectRoot);\n onProgress?.({ phase: 'security', current: 0, total: 1 });\n await secPipeline.run((phase, current, total) =>\n onProgress?.({ phase: 'security', current, total, meta: { secPhase: phase } })\n );\n onProgress?.({ phase: 'security', current: 1, total: 1 });\n } catch { /* security analysis is non-critical */ }\n }\n\n // Re-index documentation (if enabled)\n if (this.config.enableDocs) {\n try {\n const { DocsIndexer } = await Promise.resolve().then(() => require('../docs/indexer.js'));\n this.db.applyDocsSchema();\n const docsIndexer = new DocsIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await docsIndexer.indexAll({\n onProgress: msg => onProgress?.({ phase: 'docs', current: 0, total: 1, meta: { msg } }),\n });\n } catch { /* docs indexing is non-critical */ }\n }\n\n // Re-index data files (if enabled)\n if ((this.config as any).enableData) {\n try {\n const { DataIndexer } = await Promise.resolve().then(() => require('../data/indexer.js'));\n this.db.applyDataSchema();\n const dataIndexer = new DataIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await dataIndexer.indexAll({\n onProgress: msg => onProgress?.({ phase: 'data', current: 0, total: 1, meta: { msg } }),\n });\n\n // Assign data files to 'data' architecture layer if architecture is enabled\n if (this.config.enableArchitecture) {\n try {\n const rawDb = this.db.getRawDb();\n const tableExists = rawDb.get(\"SELECT name FROM sqlite_master WHERE type='table' AND name='arch_file_layers'\");\n if (tableExists) {\n const datasets = rawDb.all('SELECT file_path FROM data_datasets') as Array<{ file_path: string }>;\n for (const ds of datasets) {\n rawDb.run(\n `INSERT OR REPLACE INTO arch_file_layers (file_path, layer_id, confidence) VALUES (?, ?, ?)`,\n [ds.file_path, 'layer:data', 1.0],\n );\n }\n }\n } catch { /* non-critical */ }\n }\n } catch { /* data indexing is non-critical */ }\n }\n\n // Re-index pattern matches for changed files (if enabled)\n if ((this.config as any).enablePatterns) {\n try {\n const tableExists = this.db.getRawDb().get(\n \"SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'\"\n );\n if (tableExists) {\n const { PatternIndexer } = await Promise.resolve().then(() => require('../patterns/indexer.js'));\n const { PatternLibraryLoader } = await Promise.resolve().then(() => require('../patterns/loader.js'));\n const { PatternRunner } = await Promise.resolve().then(() => require('../patterns/runner.js'));\n const runner = new PatternRunner();\n if (runner.isAvailable()) {\n const loader = new PatternLibraryLoader();\n const builtinPath = require('path').join(__dirname, '../patterns/library');\n const rules = loader.load(builtinPath, (this.config as any).patternLibraryPath);\n const threshold = (this.config as any).patternSeverityThreshold ?? 'low';\n const indexer = new PatternIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n const changedPaths = [...result.added, ...result.modified];\n for (const filePath of changedPaths) {\n const fileRecord = this.db.getFile(filePath);\n const language = fileRecord?.language ?? 'unknown';\n await indexer.indexFile(filePath, language, rules, runner, threshold, Date.now());\n }\n }\n }\n } catch { /* non-critical */ }\n }\n\n this.lock.clearDirty();\n result.duration = Date.now() - start;\n return result;\n } finally {\n this.lock.release();\n release();\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * IndexPipeline \u2014 full-index and incremental-sync pipelines.\n *\n * Owns the two heavy workflows:\n * - indexAll(): scan all files, extract, store, resolve, detect frameworks,\n * generate embeddings, analyze architecture.\n * - sync(): detect changed files via git (or full scan fallback),\n * re-extract only what changed, then run the same tail pipeline.\n *\n * Everything that touches the filesystem or sub-systems is injected via the\n * constructor, keeping this class testable and free of global state.\n */\n\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { GraphDatabase } from '../db/database';\nimport { scanDirectory, hashContent, getChangedFiles, shouldIncludeFile } from '../sync/index';\nimport { extractFile } from '../extraction/extractor';\nimport { clearParserCache, initGrammars, hasWasmGrammar } from '../extraction/grammars';\nimport { detectFrameworks } from '../frameworks/index';\nimport { ReferenceResolver } from '../resolution/index';\nimport { VectorManager } from '../vectors/index';\nimport { ArchitectureAnalyzer } from '../architecture/index';\nimport type { KiroGraphConfig } from '../config';\nimport type { IndexResult, IndexProgress, SyncResult } from '../types';\nimport { LockManager } from './lock-manager';\nimport { Mutex } from '../utils';\n\nconst FILE_IO_BATCH_SIZE = 10;\n\nexport class IndexPipeline {\n private readonly mutex = new Mutex();\n\n constructor(\n private readonly db: GraphDatabase,\n private readonly vectors: VectorManager,\n private readonly resolver: ReferenceResolver,\n private readonly arch: ArchitectureAnalyzer,\n private readonly lock: LockManager,\n private readonly config: KiroGraphConfig,\n private readonly projectRoot: string,\n ) {}\n\n async indexAll(opts?: {\n onProgress?: (p: IndexProgress) => void;\n force?: boolean;\n signal?: AbortSignal;\n }): Promise<IndexResult> {\n const release = await this.mutex.acquire();\n this.lock.acquire();\n const start = Date.now();\n const errors: string[] = [];\n let filesIndexed = 0;\n let nodesCreated = 0;\n let edgesCreated = 0;\n\n // Track languages whose WASM parser is currently poisoned (ABORT=true on the module).\n // Once a language's parser aborts, every subsequent parse call for that language\n // fails instantly. We skip those files until clearParserCache + initGrammars succeeds.\n const poisonedLanguages = new Set<string>();\n\n try {\n const files = await scanDirectory(this.projectRoot, this.config, opts?.signal);\n opts?.onProgress?.({ phase: 'scanning', current: files.length, total: files.length });\n\n // Batch-read files in parallel\n const contentMap = new Map<string, Buffer>();\n for (let b = 0; b < files.length; b += FILE_IO_BATCH_SIZE) {\n const batch = files.slice(b, b + FILE_IO_BATCH_SIZE);\n const results = await Promise.all(batch.map(f => fs.promises.readFile(f).catch(() => null)));\n for (let i = 0; i < batch.length; i++) {\n if (results[i]) contentMap.set(batch[i], results[i]!);\n }\n }\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n opts?.onProgress?.({ phase: 'parsing', current: i + 1, total: files.length, currentFile: file });\n\n try {\n const content = contentMap.get(file);\n if (!content) continue;\n if (content.length > this.config.maxFileSize) continue;\n\n const relPath = path.relative(this.projectRoot, file).replace(/\\\\/g, '/');\n\n if (!opts?.force) {\n const existing = this.db.getFile(relPath);\n if (existing && hashContent(content) === existing.contentHash) continue;\n }\n\n // Skip files whose language parser is currently poisoned\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n if (poisonedLanguages.has(lang)) continue;\n\n const extracted = await extractFile(file, this.projectRoot, content, { enableComplexity: !!(this.config as any).enableComplexity });\n if (!extracted) continue;\n\n const oldNodes = this.db.getNodesByFile(extracted.filePath);\n if (oldNodes.length > 0) await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n\n this.db.transaction(() => {\n this.db.deleteNodesByFile(extracted.filePath);\n this.db.deleteUnresolvedRefsByFile(extracted.filePath);\n this.db.upsertFile({\n path: extracted.filePath,\n contentHash: extracted.contentHash,\n language: extracted.language,\n fileSize: extracted.fileSize,\n symbolCount: extracted.nodes.length,\n indexedAt: Date.now(),\n });\n for (const node of extracted.nodes) { this.db.upsertNode(node); nodesCreated++; }\n for (const edge of extracted.edges) { this.db.insertEdge(edge); edgesCreated++; }\n for (const ref of extracted.unresolvedRefs) {\n this.db.insertUnresolvedRef(ref.sourceId, ref.refName, ref.refKind, extracted.filePath, ref.line, ref.column);\n }\n });\n\n filesIndexed++;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n errors.push(`${file}: ${msg}`);\n\n // Detect WASM runtime abort and attempt recovery\n const isWasmCrash = (err as any)?.constructor?.name === 'RuntimeError'\n || msg.includes('Aborted(') \n || msg.includes('RuntimeError')\n || msg.includes('WASM grammar exists but failed to load');\n if (isWasmCrash) {\n // Mark the language as poisoned so we skip remaining files of this language\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n poisonedLanguages.add(lang);\n\n clearParserCache();\n try {\n await initGrammars();\n // Recovery succeeded \u2014 un-poison all languages\n poisonedLanguages.clear();\n } catch {\n errors.push('WASM runtime unrecoverable after crash \u2014 aborting batch');\n break;\n }\n }\n }\n }\n\n // Re-process files that have symbolCount=0 but should have symbols (WASM recovery)\n const emptyFiles = this.db.getAllFiles().filter(\n (f: any) => f.symbolCount === 0 && hasWasmGrammar(f.language)\n );\n if (emptyFiles.length > 0) {\n opts?.onProgress?.({ phase: 'retrying', current: 0, total: emptyFiles.length });\n for (let i = 0; i < emptyFiles.length; i++) {\n const ef = emptyFiles[i];\n const absPath = path.join(this.projectRoot, ef.path);\n opts?.onProgress?.({ phase: 'retrying', current: i + 1, total: emptyFiles.length, currentFile: absPath });\n try {\n const extracted = await extractFile(absPath, this.projectRoot, undefined, { enableComplexity: !!(this.config as any).enableComplexity });\n if (!extracted || extracted.nodes.length === 0) continue;\n\n const oldNodes = this.db.getNodesByFile(extracted.filePath);\n if (oldNodes.length > 0) await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n\n this.db.transaction(() => {\n this.db.deleteNodesByFile(extracted.filePath);\n this.db.deleteUnresolvedRefsByFile(extracted.filePath);\n this.db.upsertFile({\n path: extracted.filePath,\n contentHash: extracted.contentHash,\n language: extracted.language,\n fileSize: extracted.fileSize,\n symbolCount: extracted.nodes.length,\n indexedAt: Date.now(),\n });\n for (const node of extracted.nodes) { this.db.upsertNode(node); nodesCreated++; }\n for (const edge of extracted.edges) { this.db.insertEdge(edge); edgesCreated++; }\n for (const ref of extracted.unresolvedRefs) {\n this.db.insertUnresolvedRef(ref.sourceId, ref.refName, ref.refKind, extracted.filePath, ref.line, ref.column);\n }\n });\n filesIndexed++;\n } catch {\n // Already logged in first pass or genuinely broken \u2014 skip\n }\n }\n }\n\n // Resolve cross-file references\n opts?.onProgress?.({ phase: 'resolving', current: 0, total: 1 });\n await this.resolver.resolveAll((current, total) => {\n opts?.onProgress?.({ phase: 'resolving', current, total });\n });\n\n // Detect frameworks\n opts?.onProgress?.({ phase: 'detecting frameworks', current: 0, total: 1 });\n const detectedFrameworks = await detectFrameworks(this.projectRoot, this.db);\n const languages = [...new Set(this.db.getAllFiles().map(f => (f as any).language).filter(Boolean))];\n opts?.onProgress?.({\n phase: 'detecting frameworks', current: 1, total: 1,\n meta: { frameworks: detectedFrameworks.map(f => f.name), languages },\n });\n\n // Generate embeddings (if enabled)\n if (this.vectors.isInitialized()) {\n opts?.onProgress?.({ phase: 'embeddings', current: 0, total: 1 });\n await this.vectors.embedAll((current, total) =>\n opts?.onProgress?.({ phase: 'embeddings', current, total })\n );\n }\n\n // Analyze architecture (if enabled, or auto-enabled for security)\n if (this.config.enableArchitecture || this.config.enableSecurity) {\n if (this.config.enableSecurity && !this.config.enableArchitecture) {\n const { logWarn } = await Promise.resolve().then(() => require('../errors.js'));\n logWarn('enableSecurity requires enableArchitecture \u2014 auto-enabling architecture analysis for this run');\n }\n opts?.onProgress?.({ phase: 'architecture', current: 0, total: 1 });\n await this.arch.analyze(msg =>\n opts?.onProgress?.({ phase: 'architecture', current: 0, total: 1, meta: { msg } })\n );\n opts?.onProgress?.({ phase: 'architecture', current: 1, total: 1 });\n }\n\n // Run security analysis (if enabled)\n if (this.config.enableSecurity) {\n try {\n const { SecurityPipeline } = await Promise.resolve().then(() => require('../security/pipeline.js'));\n this.db.applySecuritySchema();\n const secPipeline = new SecurityPipeline(this.db, this.config, this.projectRoot);\n opts?.onProgress?.({ phase: 'security', current: 0, total: 1 });\n await secPipeline.run((phase, current, total) =>\n opts?.onProgress?.({ phase: 'security', current, total, meta: { secPhase: phase } })\n );\n opts?.onProgress?.({ phase: 'security', current: 1, total: 1 });\n } catch { /* security analysis is non-critical */ }\n }\n\n // Index documentation (if enabled)\n if (this.config.enableDocs) {\n try {\n const { DocsIndexer } = await Promise.resolve().then(() => require('../docs/indexer.js'));\n this.db.applyDocsSchema();\n const docsIndexer = new DocsIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await docsIndexer.indexAll({\n force: opts?.force,\n onProgress: msg => opts?.onProgress?.({ phase: 'docs', current: 0, total: 1, meta: { msg } }),\n });\n } catch { /* docs indexing is non-critical */ }\n }\n\n // Index data files (if enabled)\n if ((this.config as any).enableData) {\n try {\n const { DataIndexer } = await Promise.resolve().then(() => require('../data/indexer.js'));\n this.db.applyDataSchema();\n const dataIndexer = new DataIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await dataIndexer.indexAll({\n onProgress: msg => opts?.onProgress?.({ phase: 'data', current: 0, total: 1, meta: { msg } }),\n });\n\n // Assign data files to 'data' architecture layer if architecture is enabled\n if (this.config.enableArchitecture) {\n try {\n const rawDb = this.db.getRawDb();\n // Check if arch_file_layers table exists\n const tableExists = rawDb.get(\"SELECT name FROM sqlite_master WHERE type='table' AND name='arch_file_layers'\");\n if (tableExists) {\n const datasets = rawDb.all('SELECT file_path FROM data_datasets') as Array<{ file_path: string }>;\n for (const ds of datasets) {\n rawDb.run(\n `INSERT OR REPLACE INTO arch_file_layers (file_path, layer_id, confidence) VALUES (?, ?, ?)`,\n [ds.file_path, 'layer:data', 1.0],\n );\n }\n }\n } catch { /* non-critical */ }\n }\n } catch { /* data indexing is non-critical */ }\n }\n\n // Index pattern matches (if enabled)\n if ((this.config as any).enablePatterns) {\n try {\n this.db.applyPatternsSchema();\n const { PatternIndexer } = await Promise.resolve().then(() => require('../patterns/indexer.js'));\n const indexer = new PatternIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await indexer.indexAll((phase, current, total) => {\n opts?.onProgress?.({ phase: 'patterns' as any, current, total });\n });\n } catch (err) {\n // Patterns are non-critical \u2014 log and continue\n const { logWarn } = await Promise.resolve().then(() => require('../errors.js'));\n const msg = err instanceof Error ? err.message : String(err);\n logWarn(`[patterns] Pattern indexing failed (non-critical): ${msg}`);\n }\n }\n\n this.lock.clearDirty();\n return { success: errors.length === 0, filesIndexed, nodesCreated, edgesCreated, errors, duration: Date.now() - start };\n } finally {\n this.lock.release();\n release();\n }\n }\n\n async sync(opts?: {\n changedFiles?: string[];\n onProgress?: (p: IndexProgress) => void;\n }): Promise<SyncResult> {\n const release = await this.mutex.acquire();\n this.lock.acquire();\n const start = Date.now();\n const changedFiles = opts?.changedFiles;\n const onProgress = opts?.onProgress;\n const result: SyncResult = {\n added: [], modified: [], removed: [],\n nodesCreated: 0, nodesUpdated: 0, nodesRemoved: 0,\n edgesCreated: 0, edgesRemoved: 0,\n filesScanned: 0, errors: [], duration: 0,\n };\n\n try {\n const removeFile = async (rel: string) => {\n const oldNodes = this.db.getNodesByFile(rel);\n const oldEdgeCount = this.db.getEdgesForNodes(oldNodes.map(n => n.id)).length;\n result.nodesRemoved += oldNodes.length;\n result.edgesRemoved += oldEdgeCount;\n await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n this.db.deleteFile(rel);\n this.db.deleteUnresolvedRefsByFile(rel);\n // Clean up pattern matches for removed files (only if patterns are enabled)\n if ((this.config as any).enablePatterns) {\n this.db.getRawDb().run('DELETE FROM pattern_matches WHERE file_path = ?', [rel]);\n }\n result.removed.push(rel);\n };\n\n // \u2500\u2500 Exclude-rule cleanup \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 // Remove any indexed files that now match the current exclude patterns.\n // This handles the case where a user adds a new exclude pattern (e.g.\n // \"**/.vite/**\") and expects those files to disappear from the index on\n // the next sync without needing a full --force re-index.\n const allIndexed = this.db.getAllFiles();\n for (const f of allIndexed) {\n if (!shouldIncludeFile(f.path, this.config)) {\n onProgress?.({ phase: 'scanning', current: 0, total: 0, meta: { excludeCleanup: true, file: f.path } });\n await removeFile(f.path);\n }\n }\n\n let filesToProcess: string[];\n\n onProgress?.({ phase: 'scanning', current: 0, total: 0 });\n\n if (changedFiles) {\n filesToProcess = changedFiles.map(f => path.resolve(this.projectRoot, f));\n } else {\n const gitChanged = await getChangedFiles(this.projectRoot, this.config);\n const hasChanges = gitChanged.added.length > 0 || gitChanged.modified.length > 0 || gitChanged.removed.length > 0;\n\n if (hasChanges) {\n for (const p of gitChanged.removed) {\n await removeFile(path.relative(this.projectRoot, p).replace(/\\\\/g, '/'));\n }\n filesToProcess = [...gitChanged.added, ...gitChanged.modified];\n } else {\n // Fallback: full scan + detect removed files\n const indexed = new Set(this.db.getAllFiles().map(f => f.path));\n const current = new Set(\n (await scanDirectory(this.projectRoot, this.config))\n .map(f => path.relative(this.projectRoot, f).replace(/\\\\/g, '/'))\n );\n result.filesScanned = current.size;\n for (const p of indexed) {\n if (!current.has(p)) await removeFile(p);\n }\n filesToProcess = await scanDirectory(this.projectRoot, this.config);\n }\n }\n\n result.filesScanned = result.filesScanned || filesToProcess.length;\n onProgress?.({ phase: 'scanning', current: result.filesScanned, total: result.filesScanned });\n\n const poisonedLanguages = new Set<string>();\n\n for (let i = 0; i < filesToProcess.length; i++) {\n const file = filesToProcess[i];\n onProgress?.({ phase: 'parsing', current: i + 1, total: filesToProcess.length, currentFile: file });\n\n if (!fs.existsSync(file)) {\n const rel = path.relative(this.projectRoot, file).replace(/\\\\/g, '/');\n await removeFile(rel);\n continue;\n }\n\n try {\n // Skip files whose language parser is currently poisoned\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n if (poisonedLanguages.has(lang)) continue;\n\n const extracted = await extractFile(file, this.projectRoot, undefined, { enableComplexity: !!(this.config as any).enableComplexity });\n if (!extracted) continue;\n\n const existing = this.db.getFile(extracted.filePath);\n const isNew = !existing;\n if (!isNew && existing!.contentHash === extracted.contentHash) continue;\n\n const oldNodes = this.db.getNodesByFile(extracted.filePath);\n const oldEdgeCount = this.db.getEdgesForNodes(oldNodes.map(n => n.id)).length;\n await this.vectors.deleteEmbeddings(oldNodes.map(n => n.id));\n\n this.db.transaction(() => {\n result.nodesRemoved += oldNodes.length;\n result.edgesRemoved += oldEdgeCount;\n this.db.deleteNodesByFile(extracted.filePath);\n this.db.deleteUnresolvedRefsByFile(extracted.filePath);\n this.db.upsertFile({\n path: extracted.filePath,\n contentHash: extracted.contentHash,\n language: extracted.language,\n fileSize: extracted.fileSize,\n symbolCount: extracted.nodes.length,\n indexedAt: Date.now(),\n });\n for (const node of extracted.nodes) { this.db.upsertNode(node); result.nodesCreated++; }\n for (const edge of extracted.edges) { this.db.insertEdge(edge); result.edgesCreated++; }\n for (const ref of extracted.unresolvedRefs) {\n this.db.insertUnresolvedRef(ref.sourceId, ref.refName, ref.refKind, extracted.filePath, ref.line, ref.column);\n }\n });\n\n this.resolver.invalidateFile(extracted.filePath);\n if (isNew) result.added.push(extracted.filePath);\n else { result.modified.push(extracted.filePath); result.nodesUpdated += extracted.nodes.length; }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n result.errors.push(`${file}: ${msg}`);\n\n // Detect WASM runtime abort and attempt recovery\n const isWasmCrash = (err as any)?.constructor?.name === 'RuntimeError'\n || msg.includes('Aborted(') \n || msg.includes('RuntimeError')\n || msg.includes('WASM grammar exists but failed to load');\n if (isWasmCrash) {\n const { detectLanguage } = await Promise.resolve().then(() => require('../extraction/languages.js'));\n const lang = detectLanguage(file);\n poisonedLanguages.add(lang);\n\n clearParserCache();\n try {\n await initGrammars();\n poisonedLanguages.clear();\n } catch {\n result.errors.push('WASM runtime unrecoverable after crash \u2014 aborting sync');\n break;\n }\n }\n }\n }\n\n // Resolve cross-file references\n onProgress?.({ phase: 'resolving', current: 0, total: 1 });\n await this.resolver.resolveAll((current, total) => {\n onProgress?.({ phase: 'resolving', current, total });\n });\n\n await detectFrameworks(this.projectRoot);\n\n // Generate embeddings (if enabled)\n if (this.vectors.isInitialized()) {\n onProgress?.({ phase: 'embeddings', current: 0, total: 1 });\n await this.vectors.embedAll((current, total) =>\n onProgress?.({ phase: 'embeddings', current, total })\n );\n }\n\n // Analyze architecture (if enabled, or auto-enabled for security)\n if (this.config.enableArchitecture || this.config.enableSecurity) {\n if (this.config.enableSecurity && !this.config.enableArchitecture) {\n const { logWarn } = await Promise.resolve().then(() => require('../errors.js'));\n logWarn('enableSecurity requires enableArchitecture \u2014 auto-enabling architecture analysis for this run');\n }\n onProgress?.({ phase: 'architecture', current: 0, total: 1 });\n await this.arch.analyze(msg =>\n onProgress?.({ phase: 'architecture', current: 0, total: 1, meta: { msg } })\n );\n onProgress?.({ phase: 'architecture', current: 1, total: 1 });\n }\n\n // Run security analysis (if enabled)\n if (this.config.enableSecurity) {\n try {\n const { SecurityPipeline } = await Promise.resolve().then(() => require('../security/pipeline.js'));\n this.db.applySecuritySchema();\n const secPipeline = new SecurityPipeline(this.db, this.config, this.projectRoot);\n onProgress?.({ phase: 'security', current: 0, total: 1 });\n await secPipeline.run((phase, current, total) =>\n onProgress?.({ phase: 'security', current, total, meta: { secPhase: phase } })\n );\n onProgress?.({ phase: 'security', current: 1, total: 1 });\n } catch { /* security analysis is non-critical */ }\n }\n\n // Re-index documentation (if enabled)\n if (this.config.enableDocs) {\n try {\n const { DocsIndexer } = await Promise.resolve().then(() => require('../docs/indexer.js'));\n this.db.applyDocsSchema();\n const docsIndexer = new DocsIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await docsIndexer.indexAll({\n onProgress: msg => onProgress?.({ phase: 'docs', current: 0, total: 1, meta: { msg } }),\n });\n } catch { /* docs indexing is non-critical */ }\n }\n\n // Re-index data files (if enabled)\n if ((this.config as any).enableData) {\n try {\n const { DataIndexer } = await Promise.resolve().then(() => require('../data/indexer.js'));\n this.db.applyDataSchema();\n const dataIndexer = new DataIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n await dataIndexer.indexAll({\n onProgress: msg => onProgress?.({ phase: 'data', current: 0, total: 1, meta: { msg } }),\n });\n\n // Assign data files to 'data' architecture layer if architecture is enabled\n if (this.config.enableArchitecture) {\n try {\n const rawDb = this.db.getRawDb();\n const tableExists = rawDb.get(\"SELECT name FROM sqlite_master WHERE type='table' AND name='arch_file_layers'\");\n if (tableExists) {\n const datasets = rawDb.all('SELECT file_path FROM data_datasets') as Array<{ file_path: string }>;\n for (const ds of datasets) {\n rawDb.run(\n `INSERT OR REPLACE INTO arch_file_layers (file_path, layer_id, confidence) VALUES (?, ?, ?)`,\n [ds.file_path, 'layer:data', 1.0],\n );\n }\n }\n } catch { /* non-critical */ }\n }\n } catch { /* data indexing is non-critical */ }\n }\n\n // Re-index pattern matches for changed files (if enabled)\n if ((this.config as any).enablePatterns) {\n try {\n const tableExists = this.db.getRawDb().get(\n \"SELECT name FROM sqlite_master WHERE type='table' AND name='pattern_matches'\"\n );\n if (tableExists) {\n const { PatternIndexer } = await Promise.resolve().then(() => require('../patterns/indexer.js'));\n const { PatternLibraryLoader } = await Promise.resolve().then(() => require('../patterns/loader.js'));\n const { PatternRunner } = await Promise.resolve().then(() => require('../patterns/runner.js'));\n const runner = new PatternRunner();\n if (runner.isAvailable()) {\n const loader = new PatternLibraryLoader();\n const builtinPath = require('path').join(__dirname, '../patterns/library');\n const rules = loader.load(builtinPath, (this.config as any).patternLibraryPath);\n const threshold = (this.config as any).patternSeverityThreshold ?? 'low';\n const indexer = new PatternIndexer(this.db.getRawDb(), this.config, this.projectRoot);\n const changedPaths = [...result.added, ...result.modified];\n for (const filePath of changedPaths) {\n const fileRecord = this.db.getFile(filePath);\n const language = fileRecord?.language ?? 'unknown';\n await indexer.indexFile(filePath, language, rules, runner, threshold, Date.now());\n }\n }\n }\n } catch { /* non-critical */ }\n }\n\n this.lock.clearDirty();\n result.duration = Date.now() - start;\n return result;\n } finally {\n this.lock.release();\n release();\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/db/database.js
CHANGED
|
@@ -34,7 +34,7 @@ module.exports = __toCommonJS(database_exports);
|
|
|
34
34
|
var path = __toESM(require("path"));
|
|
35
35
|
var fs = __toESM(require("fs"));
|
|
36
36
|
const { Database } = require("node-sqlite3-wasm");
|
|
37
|
-
const CURRENT_SCHEMA_VERSION =
|
|
37
|
+
const CURRENT_SCHEMA_VERSION = 2;
|
|
38
38
|
class GraphDatabase {
|
|
39
39
|
constructor(projectRoot) {
|
|
40
40
|
this.projectRoot = projectRoot;
|
|
@@ -179,10 +179,25 @@ Or delete the lock manually: ${lockPath}`
|
|
|
179
179
|
runMigrations() {
|
|
180
180
|
const versionRow = this.db.get("SELECT version FROM schema_versions ORDER BY version DESC LIMIT 1");
|
|
181
181
|
const currentVersion = versionRow ? versionRow.version : 0;
|
|
182
|
-
if (currentVersion <
|
|
182
|
+
if (currentVersion < 2) {
|
|
183
|
+
for (const col of [
|
|
184
|
+
"complexity_cyclomatic INTEGER",
|
|
185
|
+
"complexity_cognitive INTEGER",
|
|
186
|
+
"complexity_halstead TEXT",
|
|
187
|
+
"maintainability_index REAL",
|
|
188
|
+
"nesting_depth INTEGER"
|
|
189
|
+
]) {
|
|
190
|
+
try {
|
|
191
|
+
this.db.run(`ALTER TABLE nodes ADD COLUMN ${col}`);
|
|
192
|
+
} catch {
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
this.db.run("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)", [2, Date.now()]);
|
|
196
|
+
}
|
|
197
|
+
if (currentVersion < 1) {
|
|
183
198
|
this.db.run(
|
|
184
199
|
"INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)",
|
|
185
|
-
[
|
|
200
|
+
[1, Date.now()]
|
|
186
201
|
);
|
|
187
202
|
}
|
|
188
203
|
try {
|
|
@@ -235,8 +250,10 @@ Or delete the lock manually: ${lockPath}`
|
|
|
235
250
|
start_line, end_line, start_column, end_column,
|
|
236
251
|
docstring, signature, visibility,
|
|
237
252
|
is_exported, is_async, is_static, is_abstract,
|
|
238
|
-
decorators, type_parameters, updated_at
|
|
239
|
-
|
|
253
|
+
decorators, type_parameters, updated_at,
|
|
254
|
+
complexity_cyclomatic, complexity_cognitive, complexity_halstead,
|
|
255
|
+
maintainability_index, nesting_depth)
|
|
256
|
+
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`,
|
|
240
257
|
[
|
|
241
258
|
node.id,
|
|
242
259
|
node.kind,
|
|
@@ -257,7 +274,12 @@ Or delete the lock manually: ${lockPath}`
|
|
|
257
274
|
node.isAbstract ? 1 : 0,
|
|
258
275
|
node.decorators ? JSON.stringify(node.decorators) : null,
|
|
259
276
|
node.typeParameters ? JSON.stringify(node.typeParameters) : null,
|
|
260
|
-
node.updatedAt
|
|
277
|
+
node.updatedAt,
|
|
278
|
+
node.complexityCyclomatic ?? null,
|
|
279
|
+
node.complexityCognitive ?? null,
|
|
280
|
+
node.complexityHalstead ?? null,
|
|
281
|
+
node.maintainabilityIndex ?? null,
|
|
282
|
+
node.nestingDepth ?? null
|
|
261
283
|
]
|
|
262
284
|
);
|
|
263
285
|
this.db.run(
|
|
@@ -362,7 +384,12 @@ Or delete the lock manually: ${lockPath}`
|
|
|
362
384
|
isAbstract: row.is_abstract === 1,
|
|
363
385
|
decorators: row.decorators ? JSON.parse(row.decorators) : void 0,
|
|
364
386
|
typeParameters: row.type_parameters ? JSON.parse(row.type_parameters) : void 0,
|
|
365
|
-
updatedAt: row.updated_at
|
|
387
|
+
updatedAt: row.updated_at,
|
|
388
|
+
complexityCyclomatic: row.complexity_cyclomatic ?? void 0,
|
|
389
|
+
complexityCognitive: row.complexity_cognitive ?? void 0,
|
|
390
|
+
complexityHalstead: row.complexity_halstead ?? void 0,
|
|
391
|
+
maintainabilityIndex: row.maintainability_index ?? void 0,
|
|
392
|
+
nestingDepth: row.nesting_depth ?? void 0
|
|
366
393
|
};
|
|
367
394
|
}
|
|
368
395
|
// ── Edges ──────────────────────────────────────────────────────────────────
|