kirograph 0.16.1 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +103 -1605
- package/dist/architecture/layers/dart.js +112 -0
- package/dist/architecture/layers/dart.js.map +7 -0
- package/dist/architecture/layers/index.js +3 -1
- package/dist/architecture/layers/index.js.map +2 -2
- package/dist/bin/banner.js +74 -6
- package/dist/bin/banner.js.map +2 -2
- package/dist/bin/commands/affected.js +40 -5
- package/dist/bin/commands/affected.js.map +2 -2
- package/dist/bin/commands/attack-surface.js +157 -0
- package/dist/bin/commands/attack-surface.js.map +7 -0
- package/dist/bin/commands/benchmark.js +206 -0
- package/dist/bin/commands/benchmark.js.map +7 -0
- package/dist/bin/commands/budget.js +70 -0
- package/dist/bin/commands/budget.js.map +7 -0
- package/dist/bin/commands/communities.js +77 -0
- package/dist/bin/commands/communities.js.map +7 -0
- package/dist/bin/commands/data.js +665 -0
- package/dist/bin/commands/data.js.map +7 -0
- package/dist/bin/commands/dep-confusion.js +119 -0
- package/dist/bin/commands/dep-confusion.js.map +7 -0
- package/dist/bin/commands/export.js +304 -10
- package/dist/bin/commands/export.js.map +2 -2
- package/dist/bin/commands/flows.js +97 -0
- package/dist/bin/commands/flows.js.map +7 -0
- package/dist/bin/commands/help.js +386 -100
- package/dist/bin/commands/help.js.map +2 -2
- package/dist/bin/commands/install.js +90 -8
- package/dist/bin/commands/install.js.map +2 -2
- package/dist/bin/commands/licenses.js +201 -0
- package/dist/bin/commands/licenses.js.map +7 -0
- package/dist/bin/commands/reachability.js +160 -0
- package/dist/bin/commands/reachability.js.map +7 -0
- package/dist/bin/commands/read.js +100 -0
- package/dist/bin/commands/read.js.map +7 -0
- package/dist/bin/commands/refactor.js +116 -0
- package/dist/bin/commands/refactor.js.map +7 -0
- package/dist/bin/commands/remediation.js +133 -0
- package/dist/bin/commands/remediation.js.map +7 -0
- package/dist/bin/commands/sbom.js +76 -0
- package/dist/bin/commands/sbom.js.map +7 -0
- package/dist/bin/commands/security-ci-report.js +267 -0
- package/dist/bin/commands/security-ci-report.js.map +7 -0
- package/dist/bin/commands/security-export.js +1349 -0
- package/dist/bin/commands/security-export.js.map +7 -0
- package/dist/bin/commands/security-flows.js +126 -0
- package/dist/bin/commands/security-flows.js.map +7 -0
- package/dist/bin/commands/security-secrets.js +170 -0
- package/dist/bin/commands/security-secrets.js.map +7 -0
- package/dist/bin/commands/security.js +193 -0
- package/dist/bin/commands/security.js.map +7 -0
- package/dist/bin/commands/staleness.js +144 -0
- package/dist/bin/commands/staleness.js.map +7 -0
- package/dist/bin/commands/status.js +102 -2
- package/dist/bin/commands/status.js.map +2 -2
- package/dist/bin/commands/supply-chain.js +138 -0
- package/dist/bin/commands/supply-chain.js.map +7 -0
- package/dist/bin/commands/uninit.js +109 -60
- package/dist/bin/commands/uninit.js.map +2 -2
- package/dist/bin/commands/vex.js +76 -0
- package/dist/bin/commands/vex.js.map +7 -0
- package/dist/bin/commands/vuln-suppress.js +95 -0
- package/dist/bin/commands/vuln-suppress.js.map +7 -0
- package/dist/bin/commands/vulns.js +382 -0
- package/dist/bin/commands/vulns.js.map +7 -0
- package/dist/bin/installer/auto-detect.js +125 -0
- package/dist/bin/installer/auto-detect.js.map +7 -0
- package/dist/bin/installer/cli-agent.js +28 -5
- package/dist/bin/installer/cli-agent.js.map +2 -2
- package/dist/bin/installer/common.js +47 -0
- package/dist/bin/installer/common.js.map +2 -2
- package/dist/bin/installer/config-prompt.js +39 -1
- package/dist/bin/installer/config-prompt.js.map +2 -2
- package/dist/bin/installer/detect.js +309 -0
- package/dist/bin/installer/detect.js.map +7 -0
- package/dist/bin/installer/index.js +36 -1
- package/dist/bin/installer/index.js.map +2 -2
- package/dist/bin/installer/instructions.js +195 -3
- package/dist/bin/installer/instructions.js.map +2 -2
- package/dist/bin/installer/steering.js +440 -0
- package/dist/bin/installer/steering.js.map +2 -2
- package/dist/bin/installer/targets/aider.js +3 -3
- package/dist/bin/installer/targets/aider.js.map +2 -2
- package/dist/bin/installer/targets/amp.js +3 -3
- package/dist/bin/installer/targets/amp.js.map +2 -2
- package/dist/bin/installer/targets/antigravity.js +35 -6
- package/dist/bin/installer/targets/antigravity.js.map +2 -2
- package/dist/bin/installer/targets/augment.js +3 -3
- package/dist/bin/installer/targets/augment.js.map +2 -2
- package/dist/bin/installer/targets/claude.js +49 -5
- package/dist/bin/installer/targets/claude.js.map +2 -2
- package/dist/bin/installer/targets/cline.js +32 -6
- package/dist/bin/installer/targets/cline.js.map +2 -2
- package/dist/bin/installer/targets/codex.js +64 -12
- package/dist/bin/installer/targets/codex.js.map +2 -2
- package/dist/bin/installer/targets/continue.js +2 -2
- package/dist/bin/installer/targets/continue.js.map +2 -2
- package/dist/bin/installer/targets/copilot-cli.js +101 -0
- package/dist/bin/installer/targets/copilot-cli.js.map +7 -0
- package/dist/bin/installer/targets/copilot.js +31 -5
- package/dist/bin/installer/targets/copilot.js.map +2 -2
- package/dist/bin/installer/targets/cursor.js +4 -4
- package/dist/bin/installer/targets/cursor.js.map +2 -2
- package/dist/bin/installer/targets/devin.js +2 -2
- package/dist/bin/installer/targets/devin.js.map +2 -2
- package/dist/bin/installer/targets/gemini-cli.js +2 -2
- package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
- package/dist/bin/installer/targets/generic.js +2 -14
- package/dist/bin/installer/targets/generic.js.map +2 -2
- package/dist/bin/installer/targets/goose.js +3 -3
- package/dist/bin/installer/targets/goose.js.map +2 -2
- package/dist/bin/installer/targets/index.js +250 -0
- package/dist/bin/installer/targets/index.js.map +2 -2
- package/dist/bin/installer/targets/junie.js +2 -2
- package/dist/bin/installer/targets/junie.js.map +2 -2
- package/dist/bin/installer/targets/kilo.js +2 -2
- package/dist/bin/installer/targets/kilo.js.map +2 -2
- package/dist/bin/installer/targets/kiro.js +3 -3
- package/dist/bin/installer/targets/kiro.js.map +2 -2
- package/dist/bin/installer/targets/opencode.js +2 -2
- package/dist/bin/installer/targets/opencode.js.map +2 -2
- package/dist/bin/installer/targets/openhands.js +3 -3
- package/dist/bin/installer/targets/openhands.js.map +2 -2
- package/dist/bin/installer/targets/qoder.js +91 -0
- package/dist/bin/installer/targets/qoder.js.map +7 -0
- package/dist/bin/installer/targets/qwen.js +96 -0
- package/dist/bin/installer/targets/qwen.js.map +7 -0
- package/dist/bin/installer/targets/replit.js +3 -3
- package/dist/bin/installer/targets/replit.js.map +2 -2
- package/dist/bin/installer/targets/roo.js +2 -2
- package/dist/bin/installer/targets/roo.js.map +2 -2
- package/dist/bin/installer/targets/tabnine.js +3 -3
- package/dist/bin/installer/targets/tabnine.js.map +2 -2
- package/dist/bin/installer/targets/trae.js +5 -5
- package/dist/bin/installer/targets/trae.js.map +2 -2
- package/dist/bin/installer/targets/warp.js +2 -2
- package/dist/bin/installer/targets/warp.js.map +2 -2
- package/dist/bin/installer/targets/windsurf.js +35 -6
- package/dist/bin/installer/targets/windsurf.js.map +2 -2
- package/dist/bin/kirograph.js +74 -6
- package/dist/bin/kirograph.js.map +3 -3
- package/dist/bin/progress.js +30 -0
- package/dist/bin/progress.js.map +2 -2
- package/dist/compression/naive-cost.js +25 -0
- package/dist/compression/naive-cost.js.map +2 -2
- package/dist/compression/tracker.js +91 -2
- package/dist/compression/tracker.js.map +2 -2
- package/dist/compression/types.js.map +1 -1
- package/dist/config.js +126 -3
- package/dist/config.js.map +2 -2
- package/dist/core/pipeline.js +92 -4
- package/dist/core/pipeline.js.map +2 -2
- package/dist/data/filters.js +105 -0
- package/dist/data/filters.js.map +7 -0
- package/dist/data/indexer.js +225 -0
- package/dist/data/indexer.js.map +7 -0
- package/dist/data/linker.js +150 -0
- package/dist/data/linker.js.map +7 -0
- package/dist/data/lint.js +109 -0
- package/dist/data/lint.js.map +7 -0
- package/dist/data/parsers/csv.js +132 -0
- package/dist/data/parsers/csv.js.map +7 -0
- package/dist/data/parsers/excel.js +88 -0
- package/dist/data/parsers/excel.js.map +7 -0
- package/dist/data/parsers/index.js +79 -0
- package/dist/data/parsers/index.js.map +7 -0
- package/dist/data/parsers/json-array.js +89 -0
- package/dist/data/parsers/json-array.js.map +7 -0
- package/dist/data/parsers/jsonl.js +84 -0
- package/dist/data/parsers/jsonl.js.map +7 -0
- package/dist/data/parsers/parquet.js +95 -0
- package/dist/data/parsers/parquet.js.map +7 -0
- package/dist/data/profiler.js +182 -0
- package/dist/data/profiler.js.map +7 -0
- package/dist/data/queries.js +512 -0
- package/dist/data/queries.js.map +7 -0
- package/dist/data/types.js +17 -0
- package/dist/data/types.js.map +7 -0
- package/dist/db/data-schema.sql +61 -0
- package/dist/db/database.js +67 -5
- package/dist/db/database.js.map +2 -2
- package/dist/db/memory-schema.sql +5 -1
- package/dist/db/schema.sql +3 -1
- package/dist/db/security-schema.sql +72 -0
- package/dist/extraction/extractor.js +81 -0
- package/dist/extraction/extractor.js.map +2 -2
- package/dist/extraction/grammars.js +32 -8
- package/dist/extraction/grammars.js.map +2 -2
- package/dist/extraction/languages.js +43 -1
- package/dist/extraction/languages.js.map +2 -2
- package/dist/extraction/notebook.js +300 -0
- package/dist/extraction/notebook.js.map +7 -0
- package/dist/extraction/wasm/tree-sitter-astro.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-gdscript.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-julia.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-perl.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-powershell.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-sql.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-verilog.wasm +0 -0
- package/dist/frameworks/flutter.js +130 -0
- package/dist/frameworks/flutter.js.map +7 -0
- package/dist/frameworks/index.js +7 -1
- package/dist/frameworks/index.js.map +3 -3
- package/dist/graph/communities.js +317 -0
- package/dist/graph/communities.js.map +7 -0
- package/dist/graph/flows.js +138 -0
- package/dist/graph/flows.js.map +7 -0
- package/dist/graph/refactor.js +155 -0
- package/dist/graph/refactor.js.map +7 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +2 -2
- package/dist/mcp/cache.js +172 -0
- package/dist/mcp/cache.js.map +7 -0
- package/dist/mcp/read-modes.js +295 -0
- package/dist/mcp/read-modes.js.map +7 -0
- package/dist/mcp/server.js +2 -1
- package/dist/mcp/server.js.map +2 -2
- package/dist/mcp/tool-names.js +29 -1
- package/dist/mcp/tool-names.js.map +2 -2
- package/dist/mcp/tools.js +1588 -6
- package/dist/mcp/tools.js.map +3 -3
- package/dist/memory/database.js +32 -2
- package/dist/memory/database.js.map +2 -2
- package/dist/memory/types.js.map +1 -1
- package/dist/resolution/bridges/android-rn.js +298 -0
- package/dist/resolution/bridges/android-rn.js.map +7 -0
- package/dist/resolution/bridges/expo-modules.js +155 -0
- package/dist/resolution/bridges/expo-modules.js.map +7 -0
- package/dist/resolution/bridges/flutter-channel.js +385 -0
- package/dist/resolution/bridges/flutter-channel.js.map +7 -0
- package/dist/resolution/bridges/index.js +80 -0
- package/dist/resolution/bridges/index.js.map +7 -0
- package/dist/resolution/bridges/native-events.js +188 -0
- package/dist/resolution/bridges/native-events.js.map +7 -0
- package/dist/resolution/bridges/native-views.js +244 -0
- package/dist/resolution/bridges/native-views.js.map +7 -0
- package/dist/resolution/bridges/react-native.js +161 -0
- package/dist/resolution/bridges/react-native.js.map +7 -0
- package/dist/resolution/bridges/swift-objc.js +227 -0
- package/dist/resolution/bridges/swift-objc.js.map +7 -0
- package/dist/resolution/bridges/turbomodules.js +216 -0
- package/dist/resolution/bridges/turbomodules.js.map +7 -0
- package/dist/resolution/index.js +61 -2
- package/dist/resolution/index.js.map +2 -2
- package/dist/security/attack-surface.js +164 -0
- package/dist/security/attack-surface.js.map +7 -0
- package/dist/security/context-warnings.js +123 -0
- package/dist/security/context-warnings.js.map +7 -0
- package/dist/security/context-warnings.test.js +300 -0
- package/dist/security/context-warnings.test.js.map +7 -0
- package/dist/security/data-flows.js +228 -0
- package/dist/security/data-flows.js.map +7 -0
- package/dist/security/dep-confusion.js +255 -0
- package/dist/security/dep-confusion.js.map +7 -0
- package/dist/security/errors.js +51 -0
- package/dist/security/errors.js.map +7 -0
- package/dist/security/export/fix-suggestions.js +58 -0
- package/dist/security/export/fix-suggestions.js.map +7 -0
- package/dist/security/export/fix-suggestions.test.js +74 -0
- package/dist/security/export/fix-suggestions.test.js.map +7 -0
- package/dist/security/export/sbom.js +230 -0
- package/dist/security/export/sbom.js.map +7 -0
- package/dist/security/export/sbom.test.js +288 -0
- package/dist/security/export/sbom.test.js.map +7 -0
- package/dist/security/export/serialization.js +142 -0
- package/dist/security/export/serialization.js.map +7 -0
- package/dist/security/export/serialization.test.js +310 -0
- package/dist/security/export/serialization.test.js.map +7 -0
- package/dist/security/export/vex.js +220 -0
- package/dist/security/export/vex.js.map +7 -0
- package/dist/security/export/vex.test.js +278 -0
- package/dist/security/export/vex.test.js.map +7 -0
- package/dist/security/index.js +67 -0
- package/dist/security/index.js.map +7 -0
- package/dist/security/integrator-transitives.test.js +359 -0
- package/dist/security/integrator-transitives.test.js.map +7 -0
- package/dist/security/integrator.js +491 -0
- package/dist/security/integrator.js.map +7 -0
- package/dist/security/integrator.test.js +237 -0
- package/dist/security/integrator.test.js.map +7 -0
- package/dist/security/license.js +70 -0
- package/dist/security/license.js.map +7 -0
- package/dist/security/manifest/adapter.js +243 -0
- package/dist/security/manifest/adapter.js.map +7 -0
- package/dist/security/manifest/adapter.test.js +272 -0
- package/dist/security/manifest/adapter.test.js.map +7 -0
- package/dist/security/manifest/parser.js +376 -0
- package/dist/security/manifest/parser.js.map +7 -0
- package/dist/security/manifest/parser.test.js +110 -0
- package/dist/security/manifest/parser.test.js.map +7 -0
- package/dist/security/manifest/plugins/cargo.js +233 -0
- package/dist/security/manifest/plugins/cargo.js.map +7 -0
- package/dist/security/manifest/plugins/cargo.test.js +304 -0
- package/dist/security/manifest/plugins/cargo.test.js.map +7 -0
- package/dist/security/manifest/plugins/composer.js +152 -0
- package/dist/security/manifest/plugins/composer.js.map +7 -0
- package/dist/security/manifest/plugins/go.js +146 -0
- package/dist/security/manifest/plugins/go.js.map +7 -0
- package/dist/security/manifest/plugins/go.test.js +341 -0
- package/dist/security/manifest/plugins/go.test.js.map +7 -0
- package/dist/security/manifest/plugins/gradle.js +159 -0
- package/dist/security/manifest/plugins/gradle.js.map +7 -0
- package/dist/security/manifest/plugins/hex.js +159 -0
- package/dist/security/manifest/plugins/hex.js.map +7 -0
- package/dist/security/manifest/plugins/maven.js +128 -0
- package/dist/security/manifest/plugins/maven.js.map +7 -0
- package/dist/security/manifest/plugins/maven.test.js +389 -0
- package/dist/security/manifest/plugins/maven.test.js.map +7 -0
- package/dist/security/manifest/plugins/npm.js +284 -0
- package/dist/security/manifest/plugins/npm.js.map +7 -0
- package/dist/security/manifest/plugins/npm.test.js +298 -0
- package/dist/security/manifest/plugins/npm.test.js.map +7 -0
- package/dist/security/manifest/plugins/nuget.js +186 -0
- package/dist/security/manifest/plugins/nuget.js.map +7 -0
- package/dist/security/manifest/plugins/pip.js +123 -0
- package/dist/security/manifest/plugins/pip.js.map +7 -0
- package/dist/security/manifest/plugins/pip.test.js +208 -0
- package/dist/security/manifest/plugins/pip.test.js.map +7 -0
- package/dist/security/manifest/plugins/pubspec.js +212 -0
- package/dist/security/manifest/plugins/pubspec.js.map +7 -0
- package/dist/security/manifest/plugins/pyproject.js +261 -0
- package/dist/security/manifest/plugins/pyproject.js.map +7 -0
- package/dist/security/manifest/plugins/rubygems.js +185 -0
- package/dist/security/manifest/plugins/rubygems.js.map +7 -0
- package/dist/security/manifest/plugins/swift.js +200 -0
- package/dist/security/manifest/plugins/swift.js.map +7 -0
- package/dist/security/owasp.js +104 -0
- package/dist/security/owasp.js.map +7 -0
- package/dist/security/pipeline.js +125 -0
- package/dist/security/pipeline.js.map +7 -0
- package/dist/security/reachability.js +276 -0
- package/dist/security/reachability.js.map +7 -0
- package/dist/security/reachability.test.js +394 -0
- package/dist/security/reachability.test.js.map +7 -0
- package/dist/security/remediation.js +126 -0
- package/dist/security/remediation.js.map +7 -0
- package/dist/security/secrets.js +176 -0
- package/dist/security/secrets.js.map +7 -0
- package/dist/security/staleness.js +231 -0
- package/dist/security/staleness.js.map +7 -0
- package/dist/security/supply-chain.js +301 -0
- package/dist/security/supply-chain.js.map +7 -0
- package/dist/security/suppressions.js +106 -0
- package/dist/security/suppressions.js.map +7 -0
- package/dist/security/types.js +17 -0
- package/dist/security/types.js.map +7 -0
- package/dist/security/vuln/client.js +355 -0
- package/dist/security/vuln/client.js.map +7 -0
- package/dist/security/vuln/client.test.js +288 -0
- package/dist/security/vuln/client.test.js.map +7 -0
- package/dist/security/vuln/epss-client.js +95 -0
- package/dist/security/vuln/epss-client.js.map +7 -0
- package/dist/security/vuln/index.js +29 -0
- package/dist/security/vuln/index.js.map +7 -0
- package/dist/security/vuln/osv-adapter.js +321 -0
- package/dist/security/vuln/osv-adapter.js.map +7 -0
- package/dist/security/vuln/osv-adapter.test.js +391 -0
- package/dist/security/vuln/osv-adapter.test.js.map +7 -0
- package/dist/security/vuln/types.js +17 -0
- package/dist/security/vuln/types.js.map +7 -0
- package/dist/types.js.map +2 -2
- package/package.json +5 -2
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var detect_exports = {};
|
|
30
|
+
__export(detect_exports, {
|
|
31
|
+
detectPlatforms: () => detectPlatforms,
|
|
32
|
+
detectTargets: () => detectTargets
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(detect_exports);
|
|
35
|
+
var fs = __toESM(require("fs"));
|
|
36
|
+
var path = __toESM(require("path"));
|
|
37
|
+
var import_child_process = require("child_process");
|
|
38
|
+
function whichExists(binary) {
|
|
39
|
+
try {
|
|
40
|
+
(0, import_child_process.execSync)(`which ${binary}`, { stdio: "ignore" });
|
|
41
|
+
return true;
|
|
42
|
+
} catch {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function dirExists(p) {
|
|
47
|
+
return fs.existsSync(p) && fs.statSync(p).isDirectory();
|
|
48
|
+
}
|
|
49
|
+
function fileExists(p) {
|
|
50
|
+
return fs.existsSync(p) && fs.statSync(p).isFile();
|
|
51
|
+
}
|
|
52
|
+
const home = process.env.HOME || process.env.USERPROFILE || "";
|
|
53
|
+
const DETECTORS = [
|
|
54
|
+
{
|
|
55
|
+
target: "kiro",
|
|
56
|
+
label: "Kiro",
|
|
57
|
+
reason: "",
|
|
58
|
+
detect: (root) => {
|
|
59
|
+
if (dirExists(path.join(root, ".kiro"))) return { target: "kiro", label: "Kiro", reason: ".kiro/ found in project" };
|
|
60
|
+
if (dirExists(path.join(home, ".kiro"))) return { target: "kiro", label: "Kiro", reason: "~/.kiro/ found" };
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
target: "claude",
|
|
66
|
+
label: "Claude Code",
|
|
67
|
+
reason: "",
|
|
68
|
+
detect: (root) => {
|
|
69
|
+
if (fileExists(path.join(root, ".mcp.json"))) return { target: "claude", label: "Claude Code", reason: ".mcp.json found in project" };
|
|
70
|
+
if (whichExists("claude")) return { target: "claude", label: "Claude Code", reason: "claude binary on PATH" };
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
target: "cursor",
|
|
76
|
+
label: "Cursor",
|
|
77
|
+
reason: "",
|
|
78
|
+
detect: (root) => {
|
|
79
|
+
if (dirExists(path.join(root, ".cursor"))) return { target: "cursor", label: "Cursor", reason: ".cursor/ found in project" };
|
|
80
|
+
if (dirExists(path.join(home, ".cursor"))) return { target: "cursor", label: "Cursor", reason: "~/.cursor/ found" };
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
target: "windsurf",
|
|
86
|
+
label: "Windsurf",
|
|
87
|
+
reason: "",
|
|
88
|
+
detect: () => {
|
|
89
|
+
if (dirExists(path.join(home, ".codeium", "windsurf"))) return { target: "windsurf", label: "Windsurf", reason: "~/.codeium/windsurf/ found" };
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
target: "codex",
|
|
95
|
+
label: "Codex",
|
|
96
|
+
reason: "",
|
|
97
|
+
detect: (root) => {
|
|
98
|
+
if (dirExists(path.join(root, ".codex"))) return { target: "codex", label: "Codex", reason: ".codex/ found in project" };
|
|
99
|
+
if (dirExists(path.join(home, ".codex"))) return { target: "codex", label: "Codex", reason: "~/.codex/ found" };
|
|
100
|
+
if (whichExists("codex")) return { target: "codex", label: "Codex", reason: "codex binary on PATH" };
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
target: "copilot",
|
|
106
|
+
label: "GitHub Copilot",
|
|
107
|
+
reason: "",
|
|
108
|
+
detect: (root) => {
|
|
109
|
+
if (dirExists(path.join(root, ".vscode"))) return { target: "copilot", label: "GitHub Copilot", reason: ".vscode/ found in project" };
|
|
110
|
+
if (dirExists(path.join(home, ".vscode"))) return { target: "copilot", label: "GitHub Copilot", reason: "~/.vscode/ found" };
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
target: "gemini-cli",
|
|
116
|
+
label: "Gemini CLI",
|
|
117
|
+
reason: "",
|
|
118
|
+
detect: (root) => {
|
|
119
|
+
if (dirExists(path.join(root, ".gemini"))) return { target: "gemini-cli", label: "Gemini CLI", reason: ".gemini/ found in project" };
|
|
120
|
+
if (whichExists("gemini")) return { target: "gemini-cli", label: "Gemini CLI", reason: "gemini binary on PATH" };
|
|
121
|
+
if (dirExists(path.join(home, ".gemini"))) return { target: "gemini-cli", label: "Gemini CLI", reason: "~/.gemini/ found" };
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
target: "cline",
|
|
127
|
+
label: "Cline",
|
|
128
|
+
reason: "",
|
|
129
|
+
detect: (root) => {
|
|
130
|
+
if (dirExists(path.join(root, ".cline"))) return { target: "cline", label: "Cline", reason: ".cline/ found in project" };
|
|
131
|
+
if (dirExists(path.join(root, ".clinerules"))) return { target: "cline", label: "Cline", reason: ".clinerules/ found in project" };
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
target: "roo",
|
|
137
|
+
label: "Roo Code",
|
|
138
|
+
reason: "",
|
|
139
|
+
detect: (root) => {
|
|
140
|
+
if (dirExists(path.join(root, ".roo"))) return { target: "roo", label: "Roo Code", reason: ".roo/ found in project" };
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
target: "warp",
|
|
146
|
+
label: "Warp",
|
|
147
|
+
reason: "",
|
|
148
|
+
detect: (root) => {
|
|
149
|
+
if (dirExists(path.join(root, ".warp"))) return { target: "warp", label: "Warp", reason: ".warp/ found in project" };
|
|
150
|
+
if (whichExists("warp")) return { target: "warp", label: "Warp", reason: "warp binary on PATH" };
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
target: "continue",
|
|
156
|
+
label: "Continue",
|
|
157
|
+
reason: "",
|
|
158
|
+
detect: (root) => {
|
|
159
|
+
if (dirExists(path.join(root, ".continue"))) return { target: "continue", label: "Continue", reason: ".continue/ found in project" };
|
|
160
|
+
if (dirExists(path.join(home, ".continue"))) return { target: "continue", label: "Continue", reason: "~/.continue/ found" };
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
target: "opencode",
|
|
166
|
+
label: "OpenCode",
|
|
167
|
+
reason: "",
|
|
168
|
+
detect: (root) => {
|
|
169
|
+
if (fileExists(path.join(root, ".opencode.json"))) return { target: "opencode", label: "OpenCode", reason: ".opencode.json found in project" };
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
target: "antigravity",
|
|
175
|
+
label: "Antigravity",
|
|
176
|
+
reason: "",
|
|
177
|
+
detect: () => {
|
|
178
|
+
if (dirExists(path.join(home, ".gemini", "antigravity"))) return { target: "antigravity", label: "Antigravity", reason: "~/.gemini/antigravity/ found" };
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
target: "trae",
|
|
184
|
+
label: "Trae",
|
|
185
|
+
reason: "",
|
|
186
|
+
detect: (root) => {
|
|
187
|
+
if (dirExists(path.join(root, ".trae"))) return { target: "trae", label: "Trae", reason: ".trae/ found in project" };
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
target: "amp",
|
|
193
|
+
label: "Sourcegraph Amp",
|
|
194
|
+
reason: "",
|
|
195
|
+
detect: (root) => {
|
|
196
|
+
if (dirExists(path.join(root, ".amp"))) return { target: "amp", label: "Sourcegraph Amp", reason: ".amp/ found in project" };
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
target: "aider",
|
|
202
|
+
label: "Aider",
|
|
203
|
+
reason: "",
|
|
204
|
+
detect: () => {
|
|
205
|
+
if (whichExists("aider")) return { target: "aider", label: "Aider", reason: "aider binary on PATH" };
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
target: "goose",
|
|
211
|
+
label: "Block Goose",
|
|
212
|
+
reason: "",
|
|
213
|
+
detect: () => {
|
|
214
|
+
if (whichExists("goose")) return { target: "goose", label: "Block Goose", reason: "goose binary on PATH" };
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
target: "junie",
|
|
220
|
+
label: "JetBrains Junie",
|
|
221
|
+
reason: "",
|
|
222
|
+
detect: (root) => {
|
|
223
|
+
if (dirExists(path.join(root, ".junie"))) return { target: "junie", label: "JetBrains Junie", reason: ".junie/ found in project" };
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
target: "augment",
|
|
229
|
+
label: "Augment Code",
|
|
230
|
+
reason: "",
|
|
231
|
+
detect: (root) => {
|
|
232
|
+
if (dirExists(path.join(root, ".augment"))) return { target: "augment", label: "Augment Code", reason: ".augment/ found in project" };
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
target: "kilo",
|
|
238
|
+
label: "Kilo Code",
|
|
239
|
+
reason: "",
|
|
240
|
+
detect: (root) => {
|
|
241
|
+
if (fileExists(path.join(root, "kilo.json"))) return { target: "kilo", label: "Kilo Code", reason: "kilo.json found in project" };
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
target: "devin",
|
|
247
|
+
label: "Devin",
|
|
248
|
+
reason: "",
|
|
249
|
+
detect: (root) => {
|
|
250
|
+
if (dirExists(path.join(root, ".devin"))) return { target: "devin", label: "Devin", reason: ".devin/ found in project" };
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
target: "openhands",
|
|
256
|
+
label: "OpenHands",
|
|
257
|
+
reason: "",
|
|
258
|
+
detect: (root) => {
|
|
259
|
+
if (dirExists(path.join(root, ".openhands"))) return { target: "openhands", label: "OpenHands", reason: ".openhands/ found in project" };
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
target: "tabnine",
|
|
265
|
+
label: "Tabnine",
|
|
266
|
+
reason: "",
|
|
267
|
+
detect: (root) => {
|
|
268
|
+
if (dirExists(path.join(root, ".tabnine"))) return { target: "tabnine", label: "Tabnine", reason: ".tabnine/ found in project" };
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
target: "replit",
|
|
274
|
+
label: "Replit Agent",
|
|
275
|
+
reason: "",
|
|
276
|
+
detect: (root) => {
|
|
277
|
+
if (fileExists(path.join(root, ".replit"))) return { target: "replit", label: "Replit Agent", reason: ".replit found in project" };
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
target: "qoder",
|
|
283
|
+
label: "Qoder",
|
|
284
|
+
reason: "",
|
|
285
|
+
detect: (root) => {
|
|
286
|
+
if (dirExists(path.join(root, ".qoder"))) return { target: "qoder", label: "Qoder", reason: ".qoder/ found in project" };
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
];
|
|
291
|
+
function detectPlatforms(projectRoot) {
|
|
292
|
+
const results = [];
|
|
293
|
+
for (const detector of DETECTORS) {
|
|
294
|
+
const result = detector.detect(projectRoot);
|
|
295
|
+
if (result) {
|
|
296
|
+
results.push(result);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return results;
|
|
300
|
+
}
|
|
301
|
+
function detectTargets(projectRoot) {
|
|
302
|
+
return detectPlatforms(projectRoot).map((r) => r.target);
|
|
303
|
+
}
|
|
304
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
305
|
+
0 && (module.exports = {
|
|
306
|
+
detectPlatforms,
|
|
307
|
+
detectTargets
|
|
308
|
+
});
|
|
309
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/bin/installer/detect.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Platform auto-detection for KiroGraph installer.\n *\n * Detects which AI coding tools are installed on the system by checking\n * for known config directories and CLI binaries. Used by `kirograph install`\n * (with no --target flag) to auto-configure all detected platforms.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\nimport type { InstallTarget } from './common';\n\nexport interface PlatformDetector {\n target: InstallTarget;\n label: string;\n /** How the platform was detected (shown to user) */\n reason: string;\n detect: (projectRoot: string) => DetectionResult | false;\n}\n\nexport interface DetectionResult {\n target: InstallTarget;\n label: string;\n reason: string;\n}\n\nfunction whichExists(binary: string): boolean {\n try {\n execSync(`which ${binary}`, { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction dirExists(p: string): boolean {\n return fs.existsSync(p) && fs.statSync(p).isDirectory();\n}\n\nfunction fileExists(p: string): boolean {\n return fs.existsSync(p) && fs.statSync(p).isFile();\n}\n\nconst home = process.env.HOME || process.env.USERPROFILE || '';\n\nconst DETECTORS: PlatformDetector[] = [\n {\n target: 'kiro',\n label: 'Kiro',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.kiro'))) return { target: 'kiro', label: 'Kiro', reason: '.kiro/ found in project' };\n if (dirExists(path.join(home, '.kiro'))) return { target: 'kiro', label: 'Kiro', reason: '~/.kiro/ found' };\n return false;\n },\n },\n {\n target: 'claude',\n label: 'Claude Code',\n reason: '',\n detect: (root) => {\n if (fileExists(path.join(root, '.mcp.json'))) return { target: 'claude', label: 'Claude Code', reason: '.mcp.json found in project' };\n if (whichExists('claude')) return { target: 'claude', label: 'Claude Code', reason: 'claude binary on PATH' };\n return false;\n },\n },\n {\n target: 'cursor',\n label: 'Cursor',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.cursor'))) return { target: 'cursor', label: 'Cursor', reason: '.cursor/ found in project' };\n if (dirExists(path.join(home, '.cursor'))) return { target: 'cursor', label: 'Cursor', reason: '~/.cursor/ found' };\n return false;\n },\n },\n {\n target: 'windsurf',\n label: 'Windsurf',\n reason: '',\n detect: () => {\n if (dirExists(path.join(home, '.codeium', 'windsurf'))) return { target: 'windsurf', label: 'Windsurf', reason: '~/.codeium/windsurf/ found' };\n return false;\n },\n },\n {\n target: 'codex',\n label: 'Codex',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.codex'))) return { target: 'codex', label: 'Codex', reason: '.codex/ found in project' };\n if (dirExists(path.join(home, '.codex'))) return { target: 'codex', label: 'Codex', reason: '~/.codex/ found' };\n if (whichExists('codex')) return { target: 'codex', label: 'Codex', reason: 'codex binary on PATH' };\n return false;\n },\n },\n {\n target: 'copilot',\n label: 'GitHub Copilot',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.vscode'))) return { target: 'copilot', label: 'GitHub Copilot', reason: '.vscode/ found in project' };\n if (dirExists(path.join(home, '.vscode'))) return { target: 'copilot', label: 'GitHub Copilot', reason: '~/.vscode/ found' };\n return false;\n },\n },\n {\n target: 'gemini-cli',\n label: 'Gemini CLI',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.gemini'))) return { target: 'gemini-cli', label: 'Gemini CLI', reason: '.gemini/ found in project' };\n if (whichExists('gemini')) return { target: 'gemini-cli', label: 'Gemini CLI', reason: 'gemini binary on PATH' };\n if (dirExists(path.join(home, '.gemini'))) return { target: 'gemini-cli', label: 'Gemini CLI', reason: '~/.gemini/ found' };\n return false;\n },\n },\n {\n target: 'cline',\n label: 'Cline',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.cline'))) return { target: 'cline', label: 'Cline', reason: '.cline/ found in project' };\n if (dirExists(path.join(root, '.clinerules'))) return { target: 'cline', label: 'Cline', reason: '.clinerules/ found in project' };\n return false;\n },\n },\n {\n target: 'roo',\n label: 'Roo Code',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.roo'))) return { target: 'roo', label: 'Roo Code', reason: '.roo/ found in project' };\n return false;\n },\n },\n {\n target: 'warp',\n label: 'Warp',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.warp'))) return { target: 'warp', label: 'Warp', reason: '.warp/ found in project' };\n if (whichExists('warp')) return { target: 'warp', label: 'Warp', reason: 'warp binary on PATH' };\n return false;\n },\n },\n {\n target: 'continue',\n label: 'Continue',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.continue'))) return { target: 'continue', label: 'Continue', reason: '.continue/ found in project' };\n if (dirExists(path.join(home, '.continue'))) return { target: 'continue', label: 'Continue', reason: '~/.continue/ found' };\n return false;\n },\n },\n {\n target: 'opencode',\n label: 'OpenCode',\n reason: '',\n detect: (root) => {\n if (fileExists(path.join(root, '.opencode.json'))) return { target: 'opencode', label: 'OpenCode', reason: '.opencode.json found in project' };\n return false;\n },\n },\n {\n target: 'antigravity',\n label: 'Antigravity',\n reason: '',\n detect: () => {\n if (dirExists(path.join(home, '.gemini', 'antigravity'))) return { target: 'antigravity', label: 'Antigravity', reason: '~/.gemini/antigravity/ found' };\n return false;\n },\n },\n {\n target: 'trae',\n label: 'Trae',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.trae'))) return { target: 'trae', label: 'Trae', reason: '.trae/ found in project' };\n return false;\n },\n },\n {\n target: 'amp',\n label: 'Sourcegraph Amp',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.amp'))) return { target: 'amp', label: 'Sourcegraph Amp', reason: '.amp/ found in project' };\n return false;\n },\n },\n {\n target: 'aider',\n label: 'Aider',\n reason: '',\n detect: () => {\n if (whichExists('aider')) return { target: 'aider', label: 'Aider', reason: 'aider binary on PATH' };\n return false;\n },\n },\n {\n target: 'goose',\n label: 'Block Goose',\n reason: '',\n detect: () => {\n if (whichExists('goose')) return { target: 'goose', label: 'Block Goose', reason: 'goose binary on PATH' };\n return false;\n },\n },\n {\n target: 'junie',\n label: 'JetBrains Junie',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.junie'))) return { target: 'junie', label: 'JetBrains Junie', reason: '.junie/ found in project' };\n return false;\n },\n },\n {\n target: 'augment',\n label: 'Augment Code',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.augment'))) return { target: 'augment', label: 'Augment Code', reason: '.augment/ found in project' };\n return false;\n },\n },\n {\n target: 'kilo',\n label: 'Kilo Code',\n reason: '',\n detect: (root) => {\n if (fileExists(path.join(root, 'kilo.json'))) return { target: 'kilo', label: 'Kilo Code', reason: 'kilo.json found in project' };\n return false;\n },\n },\n {\n target: 'devin',\n label: 'Devin',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.devin'))) return { target: 'devin', label: 'Devin', reason: '.devin/ found in project' };\n return false;\n },\n },\n {\n target: 'openhands',\n label: 'OpenHands',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.openhands'))) return { target: 'openhands', label: 'OpenHands', reason: '.openhands/ found in project' };\n return false;\n },\n },\n {\n target: 'tabnine',\n label: 'Tabnine',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.tabnine'))) return { target: 'tabnine', label: 'Tabnine', reason: '.tabnine/ found in project' };\n return false;\n },\n },\n {\n target: 'replit',\n label: 'Replit Agent',\n reason: '',\n detect: (root) => {\n if (fileExists(path.join(root, '.replit'))) return { target: 'replit', label: 'Replit Agent', reason: '.replit found in project' };\n return false;\n },\n },\n {\n target: 'qoder',\n label: 'Qoder',\n reason: '',\n detect: (root) => {\n if (dirExists(path.join(root, '.qoder'))) return { target: 'qoder', label: 'Qoder', reason: '.qoder/ found in project' };\n return false;\n },\n },\n];\n\n/**\n * Detect all AI coding platforms installed on this system / in this project.\n * Returns detection results for all platforms that were found.\n */\nexport function detectPlatforms(projectRoot: string): DetectionResult[] {\n const results: DetectionResult[] = [];\n for (const detector of DETECTORS) {\n const result = detector.detect(projectRoot);\n if (result) {\n results.push(result);\n }\n }\n return results;\n}\n\n/**\n * Get just the target names of detected platforms.\n */\nexport function detectTargets(projectRoot: string): InstallTarget[] {\n return detectPlatforms(projectRoot).map(r => r.target);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -65,6 +65,9 @@ async function runInstaller(target = "kiro") {
|
|
|
65
65
|
let shellCompressionLevel = "normal";
|
|
66
66
|
let enableMemory = false;
|
|
67
67
|
let enableDocs = false;
|
|
68
|
+
let enableData = false;
|
|
69
|
+
let enableSecurity = false;
|
|
70
|
+
let enableArchitecture = false;
|
|
68
71
|
let shouldOfferIndex = false;
|
|
69
72
|
let typesenseDashboard = false;
|
|
70
73
|
let qdrantDashboard = false;
|
|
@@ -75,6 +78,9 @@ async function runInstaller(target = "kiro") {
|
|
|
75
78
|
shellCompressionLevel = config.shellCompressionLevel ?? "normal";
|
|
76
79
|
enableMemory = config.enableMemory ?? false;
|
|
77
80
|
enableDocs = config.enableDocs ?? false;
|
|
81
|
+
enableData = config.enableData ?? false;
|
|
82
|
+
enableSecurity = config.enableSecurity ?? false;
|
|
83
|
+
enableArchitecture = config.enableArchitecture ?? false;
|
|
78
84
|
console.log(` \u2713 Reusing existing KiroGraph data in ${cwd}/.kirograph/`);
|
|
79
85
|
console.log(` \u2022 semanticEngine: ${config.semanticEngine}`);
|
|
80
86
|
console.log(` \u2022 enableEmbeddings: ${config.enableEmbeddings}`);
|
|
@@ -83,6 +89,8 @@ async function runInstaller(target = "kiro") {
|
|
|
83
89
|
console.log(` \u2022 shellCompressionLevel: ${shellCompressionLevel}`);
|
|
84
90
|
console.log(` \u2022 enableMemory: ${enableMemory}`);
|
|
85
91
|
console.log(` \u2022 enableDocs: ${enableDocs}`);
|
|
92
|
+
console.log(` \u2022 enableData: ${enableData}`);
|
|
93
|
+
console.log(` \u2022 enableSecurity: ${enableSecurity}`);
|
|
86
94
|
} else {
|
|
87
95
|
shouldOfferIndex = true;
|
|
88
96
|
const patch = await (0, import_config_prompt.promptConfigOptions)(rl);
|
|
@@ -91,6 +99,9 @@ async function runInstaller(target = "kiro") {
|
|
|
91
99
|
shellCompressionLevel = patch.shellCompressionLevel ?? "normal";
|
|
92
100
|
enableMemory = patch.enableMemory ?? false;
|
|
93
101
|
enableDocs = patch.enableDocs ?? false;
|
|
102
|
+
enableData = patch.enableData ?? false;
|
|
103
|
+
enableSecurity = patch.enableSecurity ?? false;
|
|
104
|
+
enableArchitecture = patch.enableArchitecture ?? false;
|
|
94
105
|
typesenseDashboard = patch.typesenseDashboard;
|
|
95
106
|
qdrantDashboard = patch.qdrantDashboard;
|
|
96
107
|
console.log(`
|
|
@@ -171,8 +182,32 @@ async function runInstaller(target = "kiro") {
|
|
|
171
182
|
console.log(` \u2022 shellCompressionLevel: ${shellCompressionLevel}`);
|
|
172
183
|
console.log(` \u2022 enableMemory: ${enableMemory}`);
|
|
173
184
|
console.log(` \u2022 enableDocs: ${enableDocs}`);
|
|
185
|
+
console.log(` \u2022 enableData: ${enableData}`);
|
|
186
|
+
console.log(` \u2022 enableSecurity: ${enableSecurity}`);
|
|
187
|
+
if (enableData) {
|
|
188
|
+
if (patch.dataInstallExcel) {
|
|
189
|
+
console.log(`
|
|
190
|
+
Installing xlsx...`);
|
|
191
|
+
const xlsxResult = (0, import_child_process.spawnSync)("npm", ["install", "xlsx"], { stdio: "inherit", shell: true });
|
|
192
|
+
if (xlsxResult.status === 0) {
|
|
193
|
+
console.log(` \u2713 xlsx installed`);
|
|
194
|
+
} else {
|
|
195
|
+
console.warn(` \u2717 npm install failed. Run manually: npm install xlsx`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (patch.dataInstallParquet) {
|
|
199
|
+
console.log(`
|
|
200
|
+
Installing parquetjs-lite...`);
|
|
201
|
+
const pqResult = (0, import_child_process.spawnSync)("npm", ["install", "parquetjs-lite"], { stdio: "inherit", shell: true });
|
|
202
|
+
if (pqResult.status === 0) {
|
|
203
|
+
console.log(` \u2713 parquetjs-lite installed`);
|
|
204
|
+
} else {
|
|
205
|
+
console.warn(` \u2717 npm install failed. Run manually: npm install parquetjs-lite`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
174
209
|
}
|
|
175
|
-
installer.installLate(cwd, cavemanMode, shellCompressionLevel, enableMemory, enableDocs);
|
|
210
|
+
installer.installLate(cwd, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture);
|
|
176
211
|
} catch (err) {
|
|
177
212
|
const reason = err instanceof Error ? err.message : String(err);
|
|
178
213
|
console.error(`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/bin/installer/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * KiroGraph Installer\n *\n * The default target wires up Kiro:\n * 1. .kiro/settings/mcp.json \u2014 registers the MCP server (IDE + CLI)\n * 2. .kiro/hooks/*.kiro.hook \u2014 auto-sync hooks for Kiro IDE\n * 3. .kiro/steering/kirograph.md \u2014 teaches Kiro to use the graph tools (IDE + CLI)\n * 4. .kiro/agents/kirograph.json \u2014 custom agent config for Kiro CLI\n */\n\nimport * as readline from 'readline';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { spawnSync } from 'child_process';\nimport { loadConfig, updateConfig } from '../../config';\nimport { printBanner } from '../banner';\nimport { renderIndexProgress } from '../progress';\nimport { dim, reset } from '../ui';\nimport { ask, askToggle } from './prompts';\nimport { promptConfigOptions } from './config-prompt';\nimport { openTypesenseDashboard } from './dashboard';\nimport { ensureQdrantUI, openQdrantDashboard } from './qdrant-dashboard';\nimport type { InstallTarget } from './common';\nimport { getTargetInstaller } from './targets';\nimport type { CavemanMode } from './caveman';\n\nexport async function runInstaller(target: InstallTarget = 'kiro'): Promise<void> {\n printBanner();\n\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n\n try {\n const cwd = process.cwd();\n const installer = getTargetInstaller(target);\n\n console.log(` Workspace: ${cwd}\\n`);\n\n const proceed = await askToggle(rl, `Install KiroGraph for ${installer.label}?`, 'Registers the MCP server and writes integration files for this workspace.');\n if (!proceed) { console.log(' Cancelled.'); rl.close(); return; }\n console.log();\n\n installer.installEarly(cwd);\n\n const alreadyInitialized = fs.existsSync(path.join(cwd, '.kirograph'));\n let cavemanMode: CavemanMode | 'off' = 'off';\n let shellCompressionLevel: 'off' | 'normal' | 'aggressive' | 'ultra' = 'normal';\n let enableMemory = false;\n let enableDocs = false;\n let shouldOfferIndex = false;\n let typesenseDashboard = false;\n let qdrantDashboard = false;\n\n try {\n if (alreadyInitialized) {\n const config = await loadConfig(cwd);\n cavemanMode = config.cavemanMode ?? 'off';\n shellCompressionLevel = config.shellCompressionLevel ?? 'normal';\n enableMemory = config.enableMemory ?? false;\n enableDocs = config.enableDocs ?? false;\n console.log(` \u2713 Reusing existing KiroGraph data in ${cwd}/.kirograph/`);\n console.log(` \u2022 semanticEngine: ${config.semanticEngine}`);\n console.log(` \u2022 enableEmbeddings: ${config.enableEmbeddings}`);\n console.log(` \u2022 enableArchitecture: ${config.enableArchitecture}`);\n console.log(` \u2022 cavemanMode: ${cavemanMode}`);\n console.log(` \u2022 shellCompressionLevel: ${shellCompressionLevel}`);\n console.log(` \u2022 enableMemory: ${enableMemory}`);\n console.log(` \u2022 enableDocs: ${enableDocs}`);\n } else {\n shouldOfferIndex = true;\n const patch = await promptConfigOptions(rl);\n await updateConfig(cwd, patch);\n cavemanMode = patch.cavemanMode ?? 'off';\n shellCompressionLevel = patch.shellCompressionLevel ?? 'normal';\n enableMemory = patch.enableMemory ?? false;\n enableDocs = patch.enableDocs ?? false;\n typesenseDashboard = patch.typesenseDashboard;\n qdrantDashboard = patch.qdrantDashboard;\n\n console.log(`\\n Configuration saved to ${cwd}/.kirograph/config.json`);\n console.log(` \u2022 enableEmbeddings: ${patch.enableEmbeddings}`);\n if ('embeddingModel' in patch) {\n console.log(` \u2022 embeddingModel: ${patch.embeddingModel} ${dim}(${patch.embeddingDim}-dim)${reset}`);\n }\n if (patch.enableEmbeddings) {\n console.log(` \u2022 semanticEngine: ${patch.semanticEngine}`);\n if (patch.semanticEngine === 'sqlite-vec') {\n console.log(`\\n Installing sqlite-vec dependencies...`);\n const result = spawnSync('npm', ['install', 'better-sqlite3', 'sqlite-vec'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 better-sqlite3 and sqlite-vec installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install better-sqlite3 sqlite-vec`);\n }\n } else if (patch.semanticEngine === 'orama') {\n console.log(`\\n Installing Orama dependencies...`);\n const result = spawnSync('npm', ['install', '@orama/orama', '@orama/plugin-data-persistence'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 @orama/orama and @orama/plugin-data-persistence installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install @orama/orama @orama/plugin-data-persistence`);\n }\n } else if (patch.semanticEngine === 'pglite') {\n console.log(`\\n Installing PGlite dependencies...`);\n const result = spawnSync('npm', ['install', '@electric-sql/pglite'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 @electric-sql/pglite installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install @electric-sql/pglite`);\n }\n } else if (patch.semanticEngine === 'lancedb') {\n console.log(`\\n Installing LanceDB dependencies...`);\n const result = spawnSync('npm', ['install', '@lancedb/lancedb'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 @lancedb/lancedb installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install @lancedb/lancedb`);\n }\n } else if (patch.semanticEngine === 'qdrant') {\n console.log(`\\n Installing Qdrant dependencies...`);\n const result = spawnSync('npm', ['install', 'qdrant-local'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 qdrant-local installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install qdrant-local`);\n }\n } else if (patch.semanticEngine === 'typesense') {\n console.log(`\\n Installing Typesense dependencies...`);\n const result = spawnSync('npm', ['install', 'typesense'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 typesense installed`);\n console.log(` \u2139 The Typesense binary (~37MB) will be auto-downloaded on first index run.`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install typesense`);\n }\n }\n }\n console.log(` \u2022 extractDocstrings: ${patch.extractDocstrings}`);\n console.log(` \u2022 trackCallSites: ${patch.trackCallSites}`);\n console.log(` \u2022 enableArchitecture: ${patch.enableArchitecture}`);\n console.log(` \u2022 cavemanMode: ${cavemanMode}`);\n console.log(` \u2022 shellCompressionLevel: ${shellCompressionLevel}`);\n console.log(` \u2022 enableMemory: ${enableMemory}`);\n console.log(` \u2022 enableDocs: ${enableDocs}`);\n }\n\n installer.installLate(cwd, cavemanMode, shellCompressionLevel, enableMemory, enableDocs);\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n console.error(`\\n \u2717 Failed to write configuration: ${reason}`);\n process.exit(1);\n }\n\n // 5. Pre-download Qdrant UI before indexing so Qdrant starts with static content dir\n if (qdrantDashboard) {\n await ensureQdrantUI(cwd);\n }\n\n // 6. Optionally init + index\n if (shouldOfferIndex && await askToggle(rl, 'Initialize and index this project now?', 'Creates .kirograph/ and indexes all source files. Takes a few seconds for small projects, longer for large ones.')) {\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n\n const fileBytes = new Map<string, { loaded: number; total: number }>();\n const modelProgress = (file: string, loaded: number, total: number, done: boolean): void => {\n const entry = fileBytes.get(file) ?? { loaded: 0, total: 0 };\n if (total > 0) entry.total = total;\n entry.loaded = done ? entry.total : loaded;\n fileBytes.set(file, entry);\n\n // Only count files where we know the size (content-length was present)\n const knownFiles = Array.from(fileBytes.values()).filter(f => f.total > 0);\n const totalLoaded = knownFiles.reduce((s, f) => s + f.loaded, 0);\n const totalBytes = knownFiles.reduce((s, f) => s + f.total, 0);\n const pct = totalBytes > 0 ? Math.min((totalLoaded / totalBytes) * 100, 100) : 0;\n\n const filled = Math.round(pct / 5);\n const bar = '\u2588'.repeat(filled) + '\u2591'.repeat(20 - filled);\n const mb = (totalLoaded / 1024 / 1024).toFixed(1);\n const totalMb = (totalBytes / 1024 / 1024).toFixed(1);\n process.stdout.write(`\\r [${bar}] ${pct.toFixed(0).padStart(3)}% ${mb} / ${totalMb} MB `);\n };\n\n // Suppress noisy internal warnings from @huggingface/transformers during download\n const originalStderrWrite = process.stderr.write.bind(process.stderr);\n const stderrFilter = (chunk: unknown, ...args: unknown[]): boolean => {\n const str = typeof chunk === 'string' ? chunk : String(chunk);\n if (str.includes('content-length') || str.includes('dtype not specified')) return true;\n return (originalStderrWrite as (...a: unknown[]) => boolean)(chunk, ...args);\n };\n process.stderr.write = stderrFilter as typeof process.stderr.write;\n\n let cg;\n try {\n if (!KiroGraph.isInitialized(cwd)) {\n process.stdout.write(' Downloading embedding model\u2026\\n');\n cg = await KiroGraph.init(cwd, undefined, modelProgress);\n process.stdout.write('\\n');\n console.log(' \u2713 Created .kirograph/');\n } else {\n cg = await KiroGraph.open(cwd, modelProgress);\n if (fileBytes.size > 0) process.stdout.write('\\n');\n }\n } finally {\n process.stderr.write = originalStderrWrite;\n }\n console.log(' Indexing...');\n const result = await cg.indexAll({ onProgress: renderIndexProgress });\n process.stdout.write('\\n');\n console.log(` \u2713 Indexed ${result.filesIndexed} files, ${result.nodesCreated} symbols, ${result.edgesCreated} edges`);\n cg.close();\n\n if (typesenseDashboard) {\n const dashboardServer = await openTypesenseDashboard(cwd);\n console.log(` ${dim}Press Ctrl+C to stop the dashboard server when done.${reset}`);\n await new Promise<void>(resolve => {\n process.on('SIGINT', () => {\n if (dashboardServer) {\n dashboardServer.close(() => resolve());\n } else {\n resolve();\n }\n });\n });\n return; // rl.close() handled in finally\n }\n\n if (qdrantDashboard) {\n await openQdrantDashboard(cwd);\n }\n }\n\n installer.printNextSteps(cwd);\n } finally {\n rl.close();\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,eAA0B;AAC1B,SAAoB;AACpB,WAAsB;AACtB,2BAA0B;AAC1B,oBAAyC;AACzC,oBAA4B;AAC5B,sBAAoC;AACpC,gBAA2B;AAC3B,qBAA+B;AAC/B,2BAAoC;AACpC,uBAAuC;AACvC,8BAAoD;AAEpD,qBAAmC;AAGnC,eAAsB,aAAa,SAAwB,QAAuB;AAChF,iCAAY;AAEZ,QAAM,KAAK,SAAS,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAEpF,MAAI;AACF,UAAM,MAAM,QAAQ,IAAI;AACxB,UAAM,gBAAY,mCAAmB,MAAM;AAE3C,YAAQ,IAAI,gBAAgB,GAAG;AAAA,CAAI;AAEnC,UAAM,UAAU,UAAM,0BAAU,IAAI,yBAAyB,UAAU,KAAK,KAAK,2EAA2E;AAC5J,QAAI,CAAC,SAAS;AAAE,cAAQ,IAAI,cAAc;AAAG,SAAG,MAAM;AAAG;AAAA,IAAQ;AACjE,YAAQ,IAAI;AAEZ,cAAU,aAAa,GAAG;AAE1B,UAAM,qBAAqB,GAAG,WAAW,KAAK,KAAK,KAAK,YAAY,CAAC;AACrE,QAAI,cAAmC;AACvC,QAAI,wBAAmE;AACvE,QAAI,eAAe;AACnB,QAAI,aAAa;AACjB,QAAI,mBAAmB;AACvB,QAAI,qBAAqB;AACzB,QAAI,kBAAkB;AAEtB,QAAI;AACF,UAAI,oBAAoB;AACtB,cAAM,SAAS,UAAM,0BAAW,GAAG;AACnC,sBAAc,OAAO,eAAe;AACpC,gCAAwB,OAAO,yBAAyB;AACxD,uBAAe,OAAO,gBAAgB;AACtC,qBAAa,OAAO,cAAc;AAClC,gBAAQ,IAAI,+CAA0C,GAAG,cAAc;AACvE,gBAAQ,IAAI,4BAAuB,OAAO,cAAc,EAAE;AAC1D,gBAAQ,IAAI,8BAAyB,OAAO,gBAAgB,EAAE;AAC9D,gBAAQ,IAAI,gCAA2B,OAAO,kBAAkB,EAAE;AAClE,gBAAQ,IAAI,yBAAoB,WAAW,EAAE;AAC7C,gBAAQ,IAAI,mCAA8B,qBAAqB,EAAE;AACjE,gBAAQ,IAAI,0BAAqB,YAAY,EAAE;AAC/C,gBAAQ,IAAI,wBAAmB,UAAU,EAAE;AAAA,
|
|
4
|
+
"sourcesContent": ["/**\n * KiroGraph Installer\n *\n * The default target wires up Kiro:\n * 1. .kiro/settings/mcp.json \u2014 registers the MCP server (IDE + CLI)\n * 2. .kiro/hooks/*.kiro.hook \u2014 auto-sync hooks for Kiro IDE\n * 3. .kiro/steering/kirograph.md \u2014 teaches Kiro to use the graph tools (IDE + CLI)\n * 4. .kiro/agents/kirograph.json \u2014 custom agent config for Kiro CLI\n */\n\nimport * as readline from 'readline';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { spawnSync } from 'child_process';\nimport { loadConfig, updateConfig } from '../../config';\nimport { printBanner } from '../banner';\nimport { renderIndexProgress } from '../progress';\nimport { dim, reset } from '../ui';\nimport { ask, askToggle } from './prompts';\nimport { promptConfigOptions } from './config-prompt';\nimport { openTypesenseDashboard } from './dashboard';\nimport { ensureQdrantUI, openQdrantDashboard } from './qdrant-dashboard';\nimport type { InstallTarget } from './common';\nimport { getTargetInstaller } from './targets';\nimport type { CavemanMode } from './caveman';\n\nexport async function runInstaller(target: InstallTarget = 'kiro'): Promise<void> {\n printBanner();\n\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n\n try {\n const cwd = process.cwd();\n const installer = getTargetInstaller(target);\n\n console.log(` Workspace: ${cwd}\\n`);\n\n const proceed = await askToggle(rl, `Install KiroGraph for ${installer.label}?`, 'Registers the MCP server and writes integration files for this workspace.');\n if (!proceed) { console.log(' Cancelled.'); rl.close(); return; }\n console.log();\n\n installer.installEarly(cwd);\n\n const alreadyInitialized = fs.existsSync(path.join(cwd, '.kirograph'));\n let cavemanMode: CavemanMode | 'off' = 'off';\n let shellCompressionLevel: 'off' | 'normal' | 'aggressive' | 'ultra' = 'normal';\n let enableMemory = false;\n let enableDocs = false;\n let enableData = false;\n let enableSecurity = false;\n let enableArchitecture = false;\n let shouldOfferIndex = false;\n let typesenseDashboard = false;\n let qdrantDashboard = false;\n\n try {\n if (alreadyInitialized) {\n const config = await loadConfig(cwd);\n cavemanMode = config.cavemanMode ?? 'off';\n shellCompressionLevel = config.shellCompressionLevel ?? 'normal';\n enableMemory = config.enableMemory ?? false;\n enableDocs = config.enableDocs ?? false;\n enableData = (config as any).enableData ?? false;\n enableSecurity = (config as any).enableSecurity ?? false;\n enableArchitecture = config.enableArchitecture ?? false;\n console.log(` \u2713 Reusing existing KiroGraph data in ${cwd}/.kirograph/`);\n console.log(` \u2022 semanticEngine: ${config.semanticEngine}`);\n console.log(` \u2022 enableEmbeddings: ${config.enableEmbeddings}`);\n console.log(` \u2022 enableArchitecture: ${config.enableArchitecture}`);\n console.log(` \u2022 cavemanMode: ${cavemanMode}`);\n console.log(` \u2022 shellCompressionLevel: ${shellCompressionLevel}`);\n console.log(` \u2022 enableMemory: ${enableMemory}`);\n console.log(` \u2022 enableDocs: ${enableDocs}`);\n console.log(` \u2022 enableData: ${enableData}`);\n console.log(` \u2022 enableSecurity: ${enableSecurity}`);\n } else {\n shouldOfferIndex = true;\n const patch = await promptConfigOptions(rl);\n await updateConfig(cwd, patch);\n cavemanMode = patch.cavemanMode ?? 'off';\n shellCompressionLevel = patch.shellCompressionLevel ?? 'normal';\n enableMemory = patch.enableMemory ?? false;\n enableDocs = patch.enableDocs ?? false;\n enableData = patch.enableData ?? false;\n enableSecurity = patch.enableSecurity ?? false;\n enableArchitecture = patch.enableArchitecture ?? false;\n typesenseDashboard = patch.typesenseDashboard;\n qdrantDashboard = patch.qdrantDashboard;\n\n console.log(`\\n Configuration saved to ${cwd}/.kirograph/config.json`);\n console.log(` \u2022 enableEmbeddings: ${patch.enableEmbeddings}`);\n if ('embeddingModel' in patch) {\n console.log(` \u2022 embeddingModel: ${patch.embeddingModel} ${dim}(${patch.embeddingDim}-dim)${reset}`);\n }\n if (patch.enableEmbeddings) {\n console.log(` \u2022 semanticEngine: ${patch.semanticEngine}`);\n if (patch.semanticEngine === 'sqlite-vec') {\n console.log(`\\n Installing sqlite-vec dependencies...`);\n const result = spawnSync('npm', ['install', 'better-sqlite3', 'sqlite-vec'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 better-sqlite3 and sqlite-vec installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install better-sqlite3 sqlite-vec`);\n }\n } else if (patch.semanticEngine === 'orama') {\n console.log(`\\n Installing Orama dependencies...`);\n const result = spawnSync('npm', ['install', '@orama/orama', '@orama/plugin-data-persistence'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 @orama/orama and @orama/plugin-data-persistence installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install @orama/orama @orama/plugin-data-persistence`);\n }\n } else if (patch.semanticEngine === 'pglite') {\n console.log(`\\n Installing PGlite dependencies...`);\n const result = spawnSync('npm', ['install', '@electric-sql/pglite'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 @electric-sql/pglite installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install @electric-sql/pglite`);\n }\n } else if (patch.semanticEngine === 'lancedb') {\n console.log(`\\n Installing LanceDB dependencies...`);\n const result = spawnSync('npm', ['install', '@lancedb/lancedb'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 @lancedb/lancedb installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install @lancedb/lancedb`);\n }\n } else if (patch.semanticEngine === 'qdrant') {\n console.log(`\\n Installing Qdrant dependencies...`);\n const result = spawnSync('npm', ['install', 'qdrant-local'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 qdrant-local installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install qdrant-local`);\n }\n } else if (patch.semanticEngine === 'typesense') {\n console.log(`\\n Installing Typesense dependencies...`);\n const result = spawnSync('npm', ['install', 'typesense'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 typesense installed`);\n console.log(` \u2139 The Typesense binary (~37MB) will be auto-downloaded on first index run.`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install typesense`);\n }\n }\n }\n console.log(` \u2022 extractDocstrings: ${patch.extractDocstrings}`);\n console.log(` \u2022 trackCallSites: ${patch.trackCallSites}`);\n console.log(` \u2022 enableArchitecture: ${patch.enableArchitecture}`);\n console.log(` \u2022 cavemanMode: ${cavemanMode}`);\n console.log(` \u2022 shellCompressionLevel: ${shellCompressionLevel}`);\n console.log(` \u2022 enableMemory: ${enableMemory}`);\n console.log(` \u2022 enableDocs: ${enableDocs}`);\n console.log(` \u2022 enableData: ${enableData}`);\n console.log(` \u2022 enableSecurity: ${enableSecurity}`);\n\n // Install optional data format deps if enableData is on\n if (enableData) {\n if ((patch as any).dataInstallExcel) {\n console.log(`\\n Installing xlsx...`);\n const xlsxResult = spawnSync('npm', ['install', 'xlsx'], { stdio: 'inherit', shell: true });\n if (xlsxResult.status === 0) {\n console.log(` \u2713 xlsx installed`);\n } else {\n console.warn(` \u2717 npm install failed. Run manually: npm install xlsx`);\n }\n }\n if ((patch as any).dataInstallParquet) {\n console.log(`\\n Installing parquetjs-lite...`);\n const pqResult = spawnSync('npm', ['install', 'parquetjs-lite'], { stdio: 'inherit', shell: true });\n if (pqResult.status === 0) {\n console.log(` \u2713 parquetjs-lite installed`);\n } else {\n console.warn(` \u2717 npm install failed. Run manually: npm install parquetjs-lite`);\n }\n }\n }\n }\n\n installer.installLate(cwd, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture);\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n console.error(`\\n \u2717 Failed to write configuration: ${reason}`);\n process.exit(1);\n }\n\n // 5. Pre-download Qdrant UI before indexing so Qdrant starts with static content dir\n if (qdrantDashboard) {\n await ensureQdrantUI(cwd);\n }\n\n // 6. Optionally init + index\n if (shouldOfferIndex && await askToggle(rl, 'Initialize and index this project now?', 'Creates .kirograph/ and indexes all source files. Takes a few seconds for small projects, longer for large ones.')) {\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n\n const fileBytes = new Map<string, { loaded: number; total: number }>();\n const modelProgress = (file: string, loaded: number, total: number, done: boolean): void => {\n const entry = fileBytes.get(file) ?? { loaded: 0, total: 0 };\n if (total > 0) entry.total = total;\n entry.loaded = done ? entry.total : loaded;\n fileBytes.set(file, entry);\n\n // Only count files where we know the size (content-length was present)\n const knownFiles = Array.from(fileBytes.values()).filter(f => f.total > 0);\n const totalLoaded = knownFiles.reduce((s, f) => s + f.loaded, 0);\n const totalBytes = knownFiles.reduce((s, f) => s + f.total, 0);\n const pct = totalBytes > 0 ? Math.min((totalLoaded / totalBytes) * 100, 100) : 0;\n\n const filled = Math.round(pct / 5);\n const bar = '\u2588'.repeat(filled) + '\u2591'.repeat(20 - filled);\n const mb = (totalLoaded / 1024 / 1024).toFixed(1);\n const totalMb = (totalBytes / 1024 / 1024).toFixed(1);\n process.stdout.write(`\\r [${bar}] ${pct.toFixed(0).padStart(3)}% ${mb} / ${totalMb} MB `);\n };\n\n // Suppress noisy internal warnings from @huggingface/transformers during download\n const originalStderrWrite = process.stderr.write.bind(process.stderr);\n const stderrFilter = (chunk: unknown, ...args: unknown[]): boolean => {\n const str = typeof chunk === 'string' ? chunk : String(chunk);\n if (str.includes('content-length') || str.includes('dtype not specified')) return true;\n return (originalStderrWrite as (...a: unknown[]) => boolean)(chunk, ...args);\n };\n process.stderr.write = stderrFilter as typeof process.stderr.write;\n\n let cg;\n try {\n if (!KiroGraph.isInitialized(cwd)) {\n process.stdout.write(' Downloading embedding model\u2026\\n');\n cg = await KiroGraph.init(cwd, undefined, modelProgress);\n process.stdout.write('\\n');\n console.log(' \u2713 Created .kirograph/');\n } else {\n cg = await KiroGraph.open(cwd, modelProgress);\n if (fileBytes.size > 0) process.stdout.write('\\n');\n }\n } finally {\n process.stderr.write = originalStderrWrite;\n }\n console.log(' Indexing...');\n const result = await cg.indexAll({ onProgress: renderIndexProgress });\n process.stdout.write('\\n');\n console.log(` \u2713 Indexed ${result.filesIndexed} files, ${result.nodesCreated} symbols, ${result.edgesCreated} edges`);\n cg.close();\n\n if (typesenseDashboard) {\n const dashboardServer = await openTypesenseDashboard(cwd);\n console.log(` ${dim}Press Ctrl+C to stop the dashboard server when done.${reset}`);\n await new Promise<void>(resolve => {\n process.on('SIGINT', () => {\n if (dashboardServer) {\n dashboardServer.close(() => resolve());\n } else {\n resolve();\n }\n });\n });\n return; // rl.close() handled in finally\n }\n\n if (qdrantDashboard) {\n await openQdrantDashboard(cwd);\n }\n }\n\n installer.printNextSteps(cwd);\n } finally {\n rl.close();\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|