kirograph 0.17.0 → 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 -1822
- 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/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/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 +382 -101
- 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 +12 -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 +9 -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 +407 -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 +72 -6
- package/dist/bin/kirograph.js.map +3 -3
- package/dist/compression/tracker.js +80 -0
- package/dist/compression/tracker.js.map +2 -2
- package/dist/config.js +90 -3
- package/dist/config.js.map +2 -2
- package/dist/core/pipeline.js +36 -2
- package/dist/core/pipeline.js.map +2 -2
- package/dist/db/database.js +56 -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 +21 -1
- package/dist/mcp/tool-names.js.map +2 -2
- package/dist/mcp/tools.js +1160 -1
- 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 +2 -1
|
@@ -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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAoB;AACpB,WAAsB;AACtB,2BAAyB;AAiBzB,SAAS,YAAY,QAAyB;AAC5C,MAAI;AACF,uCAAS,SAAS,MAAM,IAAI,EAAE,OAAO,SAAS,CAAC;AAC/C,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,UAAU,GAAoB;AACrC,SAAO,GAAG,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,YAAY;AACxD;AAEA,SAAS,WAAW,GAAoB;AACtC,SAAO,GAAG,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,OAAO;AACnD;AAEA,MAAM,OAAO,QAAQ,IAAI,QAAQ,QAAQ,IAAI,eAAe;AAE5D,MAAM,YAAgC;AAAA,EACpC;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,OAAO,CAAC,EAAG,QAAO,EAAE,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,0BAA0B;AACnH,UAAI,UAAU,KAAK,KAAK,MAAM,OAAO,CAAC,EAAG,QAAO,EAAE,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,iBAAiB;AAC1G,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,WAAW,KAAK,KAAK,MAAM,WAAW,CAAC,EAAG,QAAO,EAAE,QAAQ,UAAU,OAAO,eAAe,QAAQ,6BAA6B;AACpI,UAAI,YAAY,QAAQ,EAAG,QAAO,EAAE,QAAQ,UAAU,OAAO,eAAe,QAAQ,wBAAwB;AAC5G,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,SAAS,CAAC,EAAG,QAAO,EAAE,QAAQ,UAAU,OAAO,UAAU,QAAQ,4BAA4B;AAC3H,UAAI,UAAU,KAAK,KAAK,MAAM,SAAS,CAAC,EAAG,QAAO,EAAE,QAAQ,UAAU,OAAO,UAAU,QAAQ,mBAAmB;AAClH,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,MAAM;AACZ,UAAI,UAAU,KAAK,KAAK,MAAM,YAAY,UAAU,CAAC,EAAG,QAAO,EAAE,QAAQ,YAAY,OAAO,YAAY,QAAQ,6BAA6B;AAC7I,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,QAAQ,CAAC,EAAG,QAAO,EAAE,QAAQ,SAAS,OAAO,SAAS,QAAQ,2BAA2B;AACvH,UAAI,UAAU,KAAK,KAAK,MAAM,QAAQ,CAAC,EAAG,QAAO,EAAE,QAAQ,SAAS,OAAO,SAAS,QAAQ,kBAAkB;AAC9G,UAAI,YAAY,OAAO,EAAG,QAAO,EAAE,QAAQ,SAAS,OAAO,SAAS,QAAQ,uBAAuB;AACnG,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,SAAS,CAAC,EAAG,QAAO,EAAE,QAAQ,WAAW,OAAO,kBAAkB,QAAQ,4BAA4B;AACpI,UAAI,UAAU,KAAK,KAAK,MAAM,SAAS,CAAC,EAAG,QAAO,EAAE,QAAQ,WAAW,OAAO,kBAAkB,QAAQ,mBAAmB;AAC3H,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,SAAS,CAAC,EAAG,QAAO,EAAE,QAAQ,cAAc,OAAO,cAAc,QAAQ,4BAA4B;AACnI,UAAI,YAAY,QAAQ,EAAG,QAAO,EAAE,QAAQ,cAAc,OAAO,cAAc,QAAQ,wBAAwB;AAC/G,UAAI,UAAU,KAAK,KAAK,MAAM,SAAS,CAAC,EAAG,QAAO,EAAE,QAAQ,cAAc,OAAO,cAAc,QAAQ,mBAAmB;AAC1H,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,QAAQ,CAAC,EAAG,QAAO,EAAE,QAAQ,SAAS,OAAO,SAAS,QAAQ,2BAA2B;AACvH,UAAI,UAAU,KAAK,KAAK,MAAM,aAAa,CAAC,EAAG,QAAO,EAAE,QAAQ,SAAS,OAAO,SAAS,QAAQ,gCAAgC;AACjI,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,MAAM,CAAC,EAAG,QAAO,EAAE,QAAQ,OAAO,OAAO,YAAY,QAAQ,yBAAyB;AACpH,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,OAAO,CAAC,EAAG,QAAO,EAAE,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,0BAA0B;AACnH,UAAI,YAAY,MAAM,EAAG,QAAO,EAAE,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,sBAAsB;AAC/F,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,WAAW,CAAC,EAAG,QAAO,EAAE,QAAQ,YAAY,OAAO,YAAY,QAAQ,8BAA8B;AACnI,UAAI,UAAU,KAAK,KAAK,MAAM,WAAW,CAAC,EAAG,QAAO,EAAE,QAAQ,YAAY,OAAO,YAAY,QAAQ,qBAAqB;AAC1H,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,WAAW,KAAK,KAAK,MAAM,gBAAgB,CAAC,EAAG,QAAO,EAAE,QAAQ,YAAY,OAAO,YAAY,QAAQ,kCAAkC;AAC7I,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,MAAM;AACZ,UAAI,UAAU,KAAK,KAAK,MAAM,WAAW,aAAa,CAAC,EAAG,QAAO,EAAE,QAAQ,eAAe,OAAO,eAAe,QAAQ,+BAA+B;AACvJ,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,OAAO,CAAC,EAAG,QAAO,EAAE,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,0BAA0B;AACnH,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,MAAM,CAAC,EAAG,QAAO,EAAE,QAAQ,OAAO,OAAO,mBAAmB,QAAQ,yBAAyB;AAC3H,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,MAAM;AACZ,UAAI,YAAY,OAAO,EAAG,QAAO,EAAE,QAAQ,SAAS,OAAO,SAAS,QAAQ,uBAAuB;AACnG,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,MAAM;AACZ,UAAI,YAAY,OAAO,EAAG,QAAO,EAAE,QAAQ,SAAS,OAAO,eAAe,QAAQ,uBAAuB;AACzG,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,QAAQ,CAAC,EAAG,QAAO,EAAE,QAAQ,SAAS,OAAO,mBAAmB,QAAQ,2BAA2B;AACjI,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,UAAU,CAAC,EAAG,QAAO,EAAE,QAAQ,WAAW,OAAO,gBAAgB,QAAQ,6BAA6B;AACpI,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,WAAW,KAAK,KAAK,MAAM,WAAW,CAAC,EAAG,QAAO,EAAE,QAAQ,QAAQ,OAAO,aAAa,QAAQ,6BAA6B;AAChI,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,QAAQ,CAAC,EAAG,QAAO,EAAE,QAAQ,SAAS,OAAO,SAAS,QAAQ,2BAA2B;AACvH,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,YAAY,CAAC,EAAG,QAAO,EAAE,QAAQ,aAAa,OAAO,aAAa,QAAQ,+BAA+B;AACvI,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,UAAU,CAAC,EAAG,QAAO,EAAE,QAAQ,WAAW,OAAO,WAAW,QAAQ,6BAA6B;AAC/H,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,WAAW,KAAK,KAAK,MAAM,SAAS,CAAC,EAAG,QAAO,EAAE,QAAQ,UAAU,OAAO,gBAAgB,QAAQ,2BAA2B;AACjI,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS;AAChB,UAAI,UAAU,KAAK,KAAK,MAAM,QAAQ,CAAC,EAAG,QAAO,EAAE,QAAQ,SAAS,OAAO,SAAS,QAAQ,2BAA2B;AACvH,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAMO,SAAS,gBAAgB,aAAwC;AACtE,QAAM,UAA6B,CAAC;AACpC,aAAW,YAAY,WAAW;AAChC,UAAM,SAAS,SAAS,OAAO,WAAW;AAC1C,QAAI,QAAQ;AACV,cAAQ,KAAK,MAAM;AAAA,IACrB;AAAA,EACF;AACA,SAAO;AACT;AAKO,SAAS,cAAc,aAAsC;AAClE,SAAO,gBAAgB,WAAW,EAAE,IAAI,OAAK,EAAE,MAAM;AACvD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -66,6 +66,8 @@ async function runInstaller(target = "kiro") {
|
|
|
66
66
|
let enableMemory = false;
|
|
67
67
|
let enableDocs = false;
|
|
68
68
|
let enableData = false;
|
|
69
|
+
let enableSecurity = false;
|
|
70
|
+
let enableArchitecture = false;
|
|
69
71
|
let shouldOfferIndex = false;
|
|
70
72
|
let typesenseDashboard = false;
|
|
71
73
|
let qdrantDashboard = false;
|
|
@@ -77,6 +79,8 @@ async function runInstaller(target = "kiro") {
|
|
|
77
79
|
enableMemory = config.enableMemory ?? false;
|
|
78
80
|
enableDocs = config.enableDocs ?? false;
|
|
79
81
|
enableData = config.enableData ?? false;
|
|
82
|
+
enableSecurity = config.enableSecurity ?? false;
|
|
83
|
+
enableArchitecture = config.enableArchitecture ?? false;
|
|
80
84
|
console.log(` \u2713 Reusing existing KiroGraph data in ${cwd}/.kirograph/`);
|
|
81
85
|
console.log(` \u2022 semanticEngine: ${config.semanticEngine}`);
|
|
82
86
|
console.log(` \u2022 enableEmbeddings: ${config.enableEmbeddings}`);
|
|
@@ -86,6 +90,7 @@ async function runInstaller(target = "kiro") {
|
|
|
86
90
|
console.log(` \u2022 enableMemory: ${enableMemory}`);
|
|
87
91
|
console.log(` \u2022 enableDocs: ${enableDocs}`);
|
|
88
92
|
console.log(` \u2022 enableData: ${enableData}`);
|
|
93
|
+
console.log(` \u2022 enableSecurity: ${enableSecurity}`);
|
|
89
94
|
} else {
|
|
90
95
|
shouldOfferIndex = true;
|
|
91
96
|
const patch = await (0, import_config_prompt.promptConfigOptions)(rl);
|
|
@@ -95,6 +100,8 @@ async function runInstaller(target = "kiro") {
|
|
|
95
100
|
enableMemory = patch.enableMemory ?? false;
|
|
96
101
|
enableDocs = patch.enableDocs ?? false;
|
|
97
102
|
enableData = patch.enableData ?? false;
|
|
103
|
+
enableSecurity = patch.enableSecurity ?? false;
|
|
104
|
+
enableArchitecture = patch.enableArchitecture ?? false;
|
|
98
105
|
typesenseDashboard = patch.typesenseDashboard;
|
|
99
106
|
qdrantDashboard = patch.qdrantDashboard;
|
|
100
107
|
console.log(`
|
|
@@ -176,6 +183,7 @@ async function runInstaller(target = "kiro") {
|
|
|
176
183
|
console.log(` \u2022 enableMemory: ${enableMemory}`);
|
|
177
184
|
console.log(` \u2022 enableDocs: ${enableDocs}`);
|
|
178
185
|
console.log(` \u2022 enableData: ${enableData}`);
|
|
186
|
+
console.log(` \u2022 enableSecurity: ${enableSecurity}`);
|
|
179
187
|
if (enableData) {
|
|
180
188
|
if (patch.dataInstallExcel) {
|
|
181
189
|
console.log(`
|
|
@@ -199,7 +207,7 @@ async function runInstaller(target = "kiro") {
|
|
|
199
207
|
}
|
|
200
208
|
}
|
|
201
209
|
}
|
|
202
|
-
installer.installLate(cwd, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData);
|
|
210
|
+
installer.installLate(cwd, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture);
|
|
203
211
|
} catch (err) {
|
|
204
212
|
const reason = err instanceof Error ? err.message : String(err);
|
|
205
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 enableData = 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 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 } 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 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\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);\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,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,qBAAc,OAAe,cAAc;AAC3C,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;AAC3C,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
|
}
|
|
@@ -22,11 +22,66 @@ __export(instructions_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(instructions_exports);
|
|
24
24
|
var import_caveman = require("./caveman");
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
const LEVEL_DESCRIPTIONS = {
|
|
26
|
+
normal: "Balanced: removes noise, keeps structure.",
|
|
27
|
+
aggressive: "Compact: groups by category, limits output.",
|
|
28
|
+
ultra: "Maximum compression: counts and summaries only."
|
|
29
|
+
};
|
|
30
|
+
const LEVEL_EXAMPLES = {
|
|
31
|
+
normal: `\`\`\`
|
|
32
|
+
kirograph_exec(command: "git status")
|
|
33
|
+
kirograph_exec(command: "npm test")
|
|
34
|
+
kirograph_exec(command: "cargo build")
|
|
35
|
+
kirograph_exec(command: "ls -la src/")
|
|
36
|
+
\`\`\``,
|
|
37
|
+
aggressive: `\`\`\`
|
|
38
|
+
kirograph_exec(command: "git status", level: "aggressive")
|
|
39
|
+
kirograph_exec(command: "npm test", level: "aggressive")
|
|
40
|
+
kirograph_exec(command: "eslint .", level: "aggressive")
|
|
41
|
+
kirograph_exec(command: "find . -name '*.ts'", level: "aggressive")
|
|
42
|
+
\`\`\``,
|
|
43
|
+
ultra: `\`\`\`
|
|
44
|
+
kirograph_exec(command: "git status", level: "ultra")
|
|
45
|
+
kirograph_exec(command: "npm test", level: "ultra")
|
|
46
|
+
kirograph_exec(command: "docker ps", level: "ultra")
|
|
47
|
+
kirograph_exec(command: "ls -la src/", level: "ultra")
|
|
48
|
+
\`\`\``
|
|
49
|
+
};
|
|
50
|
+
function buildAgentInstructions(cavemanModeOrOpts) {
|
|
51
|
+
const opts = typeof cavemanModeOrOpts === "object" && cavemanModeOrOpts !== null ? cavemanModeOrOpts : { cavemanMode: cavemanModeOrOpts ?? void 0 };
|
|
52
|
+
const cavemanMode = opts.cavemanMode;
|
|
53
|
+
const enableCompression = opts.shellCompressionLevel && opts.shellCompressionLevel !== "off";
|
|
54
|
+
const shellCompressionLevel = opts.shellCompressionLevel ?? "normal";
|
|
55
|
+
const enableArchitecture = opts.enableArchitecture ?? false;
|
|
56
|
+
const enableMemory = opts.enableMemory ?? false;
|
|
57
|
+
const enableDocs = opts.enableDocs ?? false;
|
|
58
|
+
const enableData = opts.enableData ?? false;
|
|
59
|
+
const enableSecurity = opts.enableSecurity ?? false;
|
|
60
|
+
let content = `# KiroGraph
|
|
27
61
|
|
|
28
62
|
KiroGraph builds a local semantic knowledge graph of this codebase. When the \`kirograph\` MCP server is available, prefer its tools over broad grep/glob/file-read exploration.
|
|
29
63
|
|
|
64
|
+
## Quick decision guide
|
|
65
|
+
|
|
66
|
+
| Question | Tool |
|
|
67
|
+
|----------|------|
|
|
68
|
+
| Where do I start on this task? | \`kirograph_context\` |
|
|
69
|
+
| What is this symbol / show me its code | \`kirograph_node\` with \`includeCode: true\` |
|
|
70
|
+
| Find a symbol by name | \`kirograph_search\` |
|
|
71
|
+
| Who calls function X? | \`kirograph_callers\` |
|
|
72
|
+
| What does function X call? | \`kirograph_callees\` |
|
|
73
|
+
| What breaks if I change X? | \`kirograph_impact\` |
|
|
74
|
+
| How are X and Y connected? | \`kirograph_path\` |
|
|
75
|
+
| What extends / implements this type? | \`kirograph_type_hierarchy\` |
|
|
76
|
+
| Which code is never called? | \`kirograph_dead_code\` |
|
|
77
|
+
| Are there import cycles? | \`kirograph_circular_deps\` |
|
|
78
|
+
| What files are indexed? | \`kirograph_files\` |
|
|
79
|
+
| Is the index healthy? | \`kirograph_status\` |
|
|
80
|
+
| What are the most critical symbols? | \`kirograph_hotspots\` |
|
|
81
|
+
| Any unexpected cross-module coupling? | \`kirograph_surprising\` |
|
|
82
|
+
| What changed since the last snapshot? | \`kirograph_diff\` |
|
|
83
|
+
${enableArchitecture ? "| What packages/layers exist? | `kirograph_architecture` |\n| How coupled is package X? | `kirograph_coupling` |\n| What does package X depend on? | `kirograph_package` |\n" : ""}
|
|
84
|
+
${enableCompression ? "| Run a command with token savings | `kirograph_exec` |\n| Check token savings stats | `kirograph_gain` |\n" : ""}${enableMemory ? "| Search past decisions/patterns | `kirograph_mem_search` |\n| Store an observation | `kirograph_mem_store` |\n" : ""}${enableDocs ? "| Find a doc section | `kirograph_docs_search` |\n| Get doc table of contents | `kirograph_docs_toc` |\n" : ""}${enableData ? "| What datasets are indexed? | `kirograph_data_list` |\n| Query rows with filters | `kirograph_data_query` |\n| Aggregate data server-side | `kirograph_data_aggregate` |\n" : ""}${enableSecurity ? "| Are there vulnerable dependencies? | `kirograph_security` |\n| Which CVEs affect my project? | `kirograph_vulns` |\n| Is this vulnerability reachable? | `kirograph_reachability` |\n| What licenses do my deps use? | `kirograph_licenses` |\n| Are dependencies outdated? | `kirograph_staleness` |\n" : ""}
|
|
30
85
|
## Tool selection
|
|
31
86
|
|
|
32
87
|
- Start code tasks with \`kirograph_context\`.
|
|
@@ -50,8 +105,145 @@ KiroGraph builds a local semantic knowledge graph of this codebase. When the \`k
|
|
|
50
105
|
|
|
51
106
|
If \`.kirograph/\` does not exist, ask whether to run \`kirograph init --index\`.
|
|
52
107
|
`;
|
|
108
|
+
if (enableCompression) {
|
|
109
|
+
const level = shellCompressionLevel;
|
|
110
|
+
content += `
|
|
111
|
+
## Shell Compression (\`kirograph_exec\`)
|
|
112
|
+
|
|
113
|
+
When running shell commands, prefer \`kirograph_exec\` over raw shell execution for:
|
|
114
|
+
- **git** operations (status, log, diff, push, pull, commit, add, fetch, branch)
|
|
115
|
+
- **GitHub CLI** (gh pr list/view, gh issue list, gh run list)
|
|
116
|
+
- **test runners** (jest, vitest, pytest, cargo test, go test, rspec, minitest, playwright)
|
|
117
|
+
- **linters/build** (eslint, tsc, ruff, clippy, cargo build, prettier, biome, golangci-lint, rubocop, next build)
|
|
118
|
+
- **file listings** (ls, find, tree)
|
|
119
|
+
- **search** (grep, rg/ripgrep: grouped by file)
|
|
120
|
+
- **diff** (diff file1 file2: condensed context)
|
|
121
|
+
- **docker/k8s** (docker ps, images, logs, compose ps, kubectl pods, logs, services)
|
|
122
|
+
- **package managers** (npm/pnpm install/list, pip list/install, bundle install, prisma generate)
|
|
123
|
+
- **AWS CLI** (sts, ec2, lambda, logs, cloudformation, dynamodb, iam, s3, ecs, sqs, sns)
|
|
124
|
+
- **network** (curl, wget: strip progress bars and headers)
|
|
125
|
+
|
|
126
|
+
This saves 60-90% of tokens compared to raw output.
|
|
127
|
+
|
|
128
|
+
Compression level: **${level}**: ${LEVEL_DESCRIPTIONS[level]}
|
|
129
|
+
|
|
130
|
+
${LEVEL_EXAMPLES[level]}
|
|
131
|
+
|
|
132
|
+
**Important:** Error details are always preserved. Failed commands show full diagnostic output regardless of level.
|
|
133
|
+
|
|
134
|
+
**Do NOT re-run commands:** When \`kirograph_exec\` returns a result, treat it as the final answer. Never re-run the same command with raw shell execution to "get more details." The compressed output preserves all essential information. If you genuinely need something missing from the output, explain what's missing before making a second call.
|
|
135
|
+
|
|
136
|
+
Use \`kirograph_gain\` to check token savings statistics.
|
|
137
|
+
`;
|
|
138
|
+
}
|
|
139
|
+
if (enableMemory) {
|
|
140
|
+
content += `
|
|
141
|
+
## Memory
|
|
142
|
+
|
|
143
|
+
KiroGraph has persistent memory. Use \`kirograph_mem_search\` to recall past decisions,
|
|
144
|
+
errors, and patterns before making changes. Use \`kirograph_mem_store\` to save important
|
|
145
|
+
observations (architecture decisions, bug root causes, patterns discovered).
|
|
146
|
+
|
|
147
|
+
Memory is searchable via hybrid FTS + vector search. Observations are automatically
|
|
148
|
+
linked to code symbols in the graph and surface in \`kirograph_context\` and
|
|
149
|
+
\`kirograph_impact\` results when relevant.
|
|
150
|
+
|
|
151
|
+
**When to store:** After fixing a bug, making an architecture decision, discovering a pattern,
|
|
152
|
+
encountering a non-obvious error, or learning something about the codebase that future sessions
|
|
153
|
+
should know. Keep observations concise \u2014 one fact per store call.
|
|
154
|
+
`;
|
|
155
|
+
}
|
|
156
|
+
if (enableArchitecture) {
|
|
157
|
+
content += `
|
|
158
|
+
## Architecture
|
|
159
|
+
|
|
160
|
+
KiroGraph analyzes the package structure and layer dependencies of the codebase.
|
|
161
|
+
|
|
162
|
+
- \`kirograph_architecture\` \u2014 full package graph, detected layers (api/service/data/ui/shared), dependency edges
|
|
163
|
+
- \`kirograph_coupling\` \u2014 Ca (afferent), Ce (efferent), instability per package; high Ca = load-bearing, high Ce = volatile
|
|
164
|
+
- \`kirograph_package\` \u2014 drill into a single package: coupling metrics, deps, dependents, files
|
|
165
|
+
|
|
166
|
+
Use \`kirograph_architecture\` for architectural questions instead of reading directory trees.
|
|
167
|
+
High Ca + low instability = risky to change interface. High Ce + high instability = safe to refactor internals.
|
|
168
|
+
`;
|
|
169
|
+
}
|
|
170
|
+
if (enableDocs) {
|
|
171
|
+
content += `
|
|
172
|
+
## Documentation
|
|
173
|
+
|
|
174
|
+
KiroGraph indexes project documentation by heading structure. Use \`kirograph_docs_search\`
|
|
175
|
+
to find relevant sections instead of reading entire files.
|
|
176
|
+
|
|
177
|
+
- \`kirograph_docs_toc\` \u2014 table of contents for a file or the whole project
|
|
178
|
+
- \`kirograph_docs_search\` \u2014 search sections by query
|
|
179
|
+
- \`kirograph_docs_section\` \u2014 retrieve full section content by ID
|
|
180
|
+
- \`kirograph_docs_outline\` \u2014 heading hierarchy for a single file
|
|
181
|
+
- \`kirograph_docs_refs\` \u2014 code \u2194 doc cross-references
|
|
182
|
+
|
|
183
|
+
Before reading a doc file directly, try \`kirograph_docs_search\` or \`kirograph_docs_outline\` first.
|
|
184
|
+
`;
|
|
185
|
+
}
|
|
186
|
+
if (enableData) {
|
|
187
|
+
content += `
|
|
188
|
+
## Data
|
|
189
|
+
|
|
190
|
+
KiroGraph indexes tabular data files (CSV, TSV, JSONL, JSON, Excel, Parquet).
|
|
191
|
+
|
|
192
|
+
- \`kirograph_data_list\` \u2014 list all indexed datasets
|
|
193
|
+
- \`kirograph_data_describe\` \u2014 schema profile: column names, types, cardinality, samples
|
|
194
|
+
- \`kirograph_data_query\` \u2014 filtered row retrieval (eq, gt, contains, in, between)
|
|
195
|
+
- \`kirograph_data_aggregate\` \u2014 server-side GROUP BY: count, sum, avg, min, max
|
|
196
|
+
|
|
197
|
+
Use \`kirograph_data_describe\` before reading a data file. Use \`kirograph_data_query\` with
|
|
198
|
+
filters instead of loading all rows. Use \`kirograph_data_aggregate\` for statistics.
|
|
199
|
+
This saves 95-99% of tokens compared to reading raw data files.
|
|
200
|
+
`;
|
|
201
|
+
}
|
|
202
|
+
if (enableSecurity) {
|
|
203
|
+
content += `
|
|
204
|
+
## Security
|
|
205
|
+
|
|
206
|
+
KiroGraph scans dependency manifests across 14 ecosystems for known vulnerabilities, performs
|
|
207
|
+
call-graph reachability analysis, tracks EPSS exploitation probability, checks license
|
|
208
|
+
compliance, and monitors dependency staleness.
|
|
209
|
+
|
|
210
|
+
**Available tools:**
|
|
211
|
+
- \`kirograph_security\` \u2014 overview: dep count, CVE count, verdict breakdown, stale warnings
|
|
212
|
+
- \`kirograph_vulns\` \u2014 list CVEs with severity, EPSS score, reachability verdict, fix suggestion
|
|
213
|
+
- \`kirograph_reachability\` \u2014 call paths, entry points, affected layers for one CVE or package
|
|
214
|
+
- \`kirograph_licenses\` \u2014 list dependency licenses; flag policy violations
|
|
215
|
+
- \`kirograph_staleness\` \u2014 identify outdated dependencies (staleness score 0.0\u20131.0)
|
|
216
|
+
- \`kirograph_sbom\` / \`kirograph_vex\` \u2014 export CycloneDX 1.5 SBOM and VEX documents
|
|
217
|
+
- \`kirograph_vuln_add\` \u2014 manually register a private/internal CVE
|
|
218
|
+
|
|
219
|
+
**Proactive triggers:** Run \`kirograph_security\` when a dependency is added/updated, before a
|
|
220
|
+
production deploy, or when the user asks about security/compliance.
|
|
221
|
+
|
|
222
|
+
**Interpreting verdicts:**
|
|
223
|
+
- \`affected\` \u2014 a call path exists from an entry point to the vulnerable code. Act on this.
|
|
224
|
+
- \`not_affected\` \u2014 no reachable path found. Strong signal: likely safe.
|
|
225
|
+
- \`under_investigation\` \u2014 unresolved symbols in traversal. Treat with caution.
|
|
226
|
+
|
|
227
|
+
**EPSS scores:** >= 0.5 = patch immediately; 0.1\u20130.5 = elevated risk; < 0.1 = low probability.
|
|
228
|
+
|
|
229
|
+
**Workflow:** \`kirograph_security\` \u2192 \`kirograph_vulns --verdict affected\` \u2192 \`kirograph_reachability <cve>\` \u2192 fix \u2192 \`kirograph_vulns --refresh\`
|
|
230
|
+
`;
|
|
231
|
+
}
|
|
232
|
+
if (!opts.hasHooks) {
|
|
233
|
+
content += `
|
|
234
|
+
## Session Hygiene
|
|
235
|
+
|
|
236
|
+
This tool does not have automatic sync hooks. To keep the index fresh:
|
|
237
|
+
- Run \`kirograph sync\` at the **start** of each session if files changed outside the agent.
|
|
238
|
+
- Run \`kirograph sync\` at the **end** of each session after making changes.
|
|
239
|
+
- If results from graph tools seem stale, run \`kirograph sync\` before retrying.
|
|
240
|
+
${enableMemory ? "- Store important observations with `kirograph_mem_store` before ending your session.\n" : ""}`;
|
|
241
|
+
}
|
|
53
242
|
const caveman = cavemanMode && cavemanMode !== "off" ? import_caveman.CAVEMAN_RULES[cavemanMode] : null;
|
|
54
|
-
|
|
243
|
+
if (caveman) {
|
|
244
|
+
content = content.trimEnd() + "\n\n" + caveman + "\n";
|
|
245
|
+
}
|
|
246
|
+
return content;
|
|
55
247
|
}
|
|
56
248
|
// Annotate the CommonJS export names for ESM import in node:
|
|
57
249
|
0 && (module.exports = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/bin/installer/instructions.ts"],
|
|
4
|
-
"sourcesContent": ["import { CAVEMAN_RULES, CavemanMode } from './caveman';\n\nexport function buildAgentInstructions(cavemanMode?: CavemanMode | 'off'): string {\n const content = `# KiroGraph\n\nKiroGraph builds a local semantic knowledge graph of this codebase. When the \\`kirograph\\` MCP server is available, prefer its tools over broad grep/glob/file-read exploration.\n\n## Tool selection\n\n- Start code tasks with \\`kirograph_context\\`.\n- Find symbols by name with \\`kirograph_search\\`.\n- Inspect a symbol with \\`kirograph_node\\`; set \\`includeCode: true\\` only when source is needed.\n- Trace call flow with \\`kirograph_callers\\` and \\`kirograph_callees\\`.\n- Check blast radius before edits with \\`kirograph_impact\\`.\n- Use \\`kirograph_path\\` to explain how two symbols connect.\n- Use \\`kirograph_type_hierarchy\\` for inheritance/interface questions.\n- Use \\`kirograph_files\\` to inspect indexed file structure.\n- Use \\`kirograph_status\\` if results seem stale or incomplete.\n- Use \\`kirograph_architecture\\`, \\`kirograph_coupling\\`, and \\`kirograph_package\\` for package/layer questions when architecture analysis is enabled.\n- Use \\`kirograph_hotspots\\`, \\`kirograph_surprising\\`, and \\`kirograph_diff\\` for refactor planning and review.\n\n## Workflow\n\n1. Call \\`kirograph_context\\` for orientation.\n2. Drill into specific symbols with \\`kirograph_node\\`.\n3. Use graph traversal tools before reading unrelated files.\n4. Fall back to normal filesystem tools only when the graph is missing, stale, or lacks the needed detail.\n\nIf \\`.kirograph/\\` does not exist, ask whether to run \\`kirograph init --index\\`.\n`;\n\n const caveman = cavemanMode && cavemanMode !== 'off' ? CAVEMAN_RULES[cavemanMode] : null;\n return caveman ? content.trimEnd() + '\\n\\n' + caveman + '\\n' : content;\n}\n\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA2C;
|
|
4
|
+
"sourcesContent": ["import { CAVEMAN_RULES, CavemanMode } from './caveman';\n\nexport interface InstructionOptions {\n cavemanMode?: CavemanMode | 'off';\n shellCompressionLevel?: 'off' | 'normal' | 'aggressive' | 'ultra';\n enableArchitecture?: boolean;\n enableMemory?: boolean;\n enableDocs?: boolean;\n enableData?: boolean;\n enableSecurity?: boolean;\n hasHooks?: boolean;\n}\n\nconst LEVEL_DESCRIPTIONS: Record<string, string> = {\n normal: 'Balanced: removes noise, keeps structure.',\n aggressive: 'Compact: groups by category, limits output.',\n ultra: 'Maximum compression: counts and summaries only.',\n};\n\nconst LEVEL_EXAMPLES: Record<string, string> = {\n normal: `\\`\\`\\`\nkirograph_exec(command: \"git status\")\nkirograph_exec(command: \"npm test\")\nkirograph_exec(command: \"cargo build\")\nkirograph_exec(command: \"ls -la src/\")\n\\`\\`\\``,\n aggressive: `\\`\\`\\`\nkirograph_exec(command: \"git status\", level: \"aggressive\")\nkirograph_exec(command: \"npm test\", level: \"aggressive\")\nkirograph_exec(command: \"eslint .\", level: \"aggressive\")\nkirograph_exec(command: \"find . -name '*.ts'\", level: \"aggressive\")\n\\`\\`\\``,\n ultra: `\\`\\`\\`\nkirograph_exec(command: \"git status\", level: \"ultra\")\nkirograph_exec(command: \"npm test\", level: \"ultra\")\nkirograph_exec(command: \"docker ps\", level: \"ultra\")\nkirograph_exec(command: \"ls -la src/\", level: \"ultra\")\n\\`\\`\\``,\n};\n\nexport function buildAgentInstructions(cavemanModeOrOpts?: CavemanMode | 'off' | InstructionOptions): string {\n // Support both old signature (cavemanMode string) and new signature (options object)\n const opts: InstructionOptions = typeof cavemanModeOrOpts === 'object' && cavemanModeOrOpts !== null\n ? cavemanModeOrOpts\n : { cavemanMode: cavemanModeOrOpts ?? undefined };\n\n const cavemanMode = opts.cavemanMode;\n const enableCompression = opts.shellCompressionLevel && opts.shellCompressionLevel !== 'off';\n const shellCompressionLevel = opts.shellCompressionLevel ?? 'normal';\n const enableArchitecture = opts.enableArchitecture ?? false;\n const enableMemory = opts.enableMemory ?? false;\n const enableDocs = opts.enableDocs ?? false;\n const enableData = opts.enableData ?? false;\n const enableSecurity = opts.enableSecurity ?? false;\n\n let content = `# KiroGraph\n\nKiroGraph builds a local semantic knowledge graph of this codebase. When the \\`kirograph\\` MCP server is available, prefer its tools over broad grep/glob/file-read exploration.\n\n## Quick decision guide\n\n| Question | Tool |\n|----------|------|\n| Where do I start on this task? | \\`kirograph_context\\` |\n| What is this symbol / show me its code | \\`kirograph_node\\` with \\`includeCode: true\\` |\n| Find a symbol by name | \\`kirograph_search\\` |\n| Who calls function X? | \\`kirograph_callers\\` |\n| What does function X call? | \\`kirograph_callees\\` |\n| What breaks if I change X? | \\`kirograph_impact\\` |\n| How are X and Y connected? | \\`kirograph_path\\` |\n| What extends / implements this type? | \\`kirograph_type_hierarchy\\` |\n| Which code is never called? | \\`kirograph_dead_code\\` |\n| Are there import cycles? | \\`kirograph_circular_deps\\` |\n| What files are indexed? | \\`kirograph_files\\` |\n| Is the index healthy? | \\`kirograph_status\\` |\n| What are the most critical symbols? | \\`kirograph_hotspots\\` |\n| Any unexpected cross-module coupling? | \\`kirograph_surprising\\` |\n| What changed since the last snapshot? | \\`kirograph_diff\\` |\n${enableArchitecture ? '| What packages/layers exist? | `kirograph_architecture` |\\n| How coupled is package X? | `kirograph_coupling` |\\n| What does package X depend on? | `kirograph_package` |\\n' : ''}\n${enableCompression ? '| Run a command with token savings | `kirograph_exec` |\\n| Check token savings stats | `kirograph_gain` |\\n' : ''}${enableMemory ? '| Search past decisions/patterns | `kirograph_mem_search` |\\n| Store an observation | `kirograph_mem_store` |\\n' : ''}${enableDocs ? '| Find a doc section | `kirograph_docs_search` |\\n| Get doc table of contents | `kirograph_docs_toc` |\\n' : ''}${enableData ? '| What datasets are indexed? | `kirograph_data_list` |\\n| Query rows with filters | `kirograph_data_query` |\\n| Aggregate data server-side | `kirograph_data_aggregate` |\\n' : ''}${enableSecurity ? '| Are there vulnerable dependencies? | `kirograph_security` |\\n| Which CVEs affect my project? | `kirograph_vulns` |\\n| Is this vulnerability reachable? | `kirograph_reachability` |\\n| What licenses do my deps use? | `kirograph_licenses` |\\n| Are dependencies outdated? | `kirograph_staleness` |\\n' : ''}\n## Tool selection\n\n- Start code tasks with \\`kirograph_context\\`.\n- Find symbols by name with \\`kirograph_search\\`.\n- Inspect a symbol with \\`kirograph_node\\`; set \\`includeCode: true\\` only when source is needed.\n- Trace call flow with \\`kirograph_callers\\` and \\`kirograph_callees\\`.\n- Check blast radius before edits with \\`kirograph_impact\\`.\n- Use \\`kirograph_path\\` to explain how two symbols connect.\n- Use \\`kirograph_type_hierarchy\\` for inheritance/interface questions.\n- Use \\`kirograph_files\\` to inspect indexed file structure.\n- Use \\`kirograph_status\\` if results seem stale or incomplete.\n- Use \\`kirograph_architecture\\`, \\`kirograph_coupling\\`, and \\`kirograph_package\\` for package/layer questions when architecture analysis is enabled.\n- Use \\`kirograph_hotspots\\`, \\`kirograph_surprising\\`, and \\`kirograph_diff\\` for refactor planning and review.\n\n## Workflow\n\n1. Call \\`kirograph_context\\` for orientation.\n2. Drill into specific symbols with \\`kirograph_node\\`.\n3. Use graph traversal tools before reading unrelated files.\n4. Fall back to normal filesystem tools only when the graph is missing, stale, or lacks the needed detail.\n\nIf \\`.kirograph/\\` does not exist, ask whether to run \\`kirograph init --index\\`.\n`;\n\n // Shell compression section\n if (enableCompression) {\n const level = shellCompressionLevel as 'normal' | 'aggressive' | 'ultra';\n content += `\n## Shell Compression (\\`kirograph_exec\\`)\n\nWhen running shell commands, prefer \\`kirograph_exec\\` over raw shell execution for:\n- **git** operations (status, log, diff, push, pull, commit, add, fetch, branch)\n- **GitHub CLI** (gh pr list/view, gh issue list, gh run list)\n- **test runners** (jest, vitest, pytest, cargo test, go test, rspec, minitest, playwright)\n- **linters/build** (eslint, tsc, ruff, clippy, cargo build, prettier, biome, golangci-lint, rubocop, next build)\n- **file listings** (ls, find, tree)\n- **search** (grep, rg/ripgrep: grouped by file)\n- **diff** (diff file1 file2: condensed context)\n- **docker/k8s** (docker ps, images, logs, compose ps, kubectl pods, logs, services)\n- **package managers** (npm/pnpm install/list, pip list/install, bundle install, prisma generate)\n- **AWS CLI** (sts, ec2, lambda, logs, cloudformation, dynamodb, iam, s3, ecs, sqs, sns)\n- **network** (curl, wget: strip progress bars and headers)\n\nThis saves 60-90% of tokens compared to raw output.\n\nCompression level: **${level}**: ${LEVEL_DESCRIPTIONS[level]}\n\n${LEVEL_EXAMPLES[level]}\n\n**Important:** Error details are always preserved. Failed commands show full diagnostic output regardless of level.\n\n**Do NOT re-run commands:** When \\`kirograph_exec\\` returns a result, treat it as the final answer. Never re-run the same command with raw shell execution to \"get more details.\" The compressed output preserves all essential information. If you genuinely need something missing from the output, explain what's missing before making a second call.\n\nUse \\`kirograph_gain\\` to check token savings statistics.\n`;\n }\n\n // Memory section\n if (enableMemory) {\n content += `\n## Memory\n\nKiroGraph has persistent memory. Use \\`kirograph_mem_search\\` to recall past decisions,\nerrors, and patterns before making changes. Use \\`kirograph_mem_store\\` to save important\nobservations (architecture decisions, bug root causes, patterns discovered).\n\nMemory is searchable via hybrid FTS + vector search. Observations are automatically\nlinked to code symbols in the graph and surface in \\`kirograph_context\\` and\n\\`kirograph_impact\\` results when relevant.\n\n**When to store:** After fixing a bug, making an architecture decision, discovering a pattern,\nencountering a non-obvious error, or learning something about the codebase that future sessions\nshould know. Keep observations concise \u2014 one fact per store call.\n`;\n }\n\n // Architecture section\n if (enableArchitecture) {\n content += `\n## Architecture\n\nKiroGraph analyzes the package structure and layer dependencies of the codebase.\n\n- \\`kirograph_architecture\\` \u2014 full package graph, detected layers (api/service/data/ui/shared), dependency edges\n- \\`kirograph_coupling\\` \u2014 Ca (afferent), Ce (efferent), instability per package; high Ca = load-bearing, high Ce = volatile\n- \\`kirograph_package\\` \u2014 drill into a single package: coupling metrics, deps, dependents, files\n\nUse \\`kirograph_architecture\\` for architectural questions instead of reading directory trees.\nHigh Ca + low instability = risky to change interface. High Ce + high instability = safe to refactor internals.\n`;\n }\n\n // Documentation section\n if (enableDocs) {\n content += `\n## Documentation\n\nKiroGraph indexes project documentation by heading structure. Use \\`kirograph_docs_search\\`\nto find relevant sections instead of reading entire files.\n\n- \\`kirograph_docs_toc\\` \u2014 table of contents for a file or the whole project\n- \\`kirograph_docs_search\\` \u2014 search sections by query\n- \\`kirograph_docs_section\\` \u2014 retrieve full section content by ID\n- \\`kirograph_docs_outline\\` \u2014 heading hierarchy for a single file\n- \\`kirograph_docs_refs\\` \u2014 code \u2194 doc cross-references\n\nBefore reading a doc file directly, try \\`kirograph_docs_search\\` or \\`kirograph_docs_outline\\` first.\n`;\n }\n\n // Data section\n if (enableData) {\n content += `\n## Data\n\nKiroGraph indexes tabular data files (CSV, TSV, JSONL, JSON, Excel, Parquet).\n\n- \\`kirograph_data_list\\` \u2014 list all indexed datasets\n- \\`kirograph_data_describe\\` \u2014 schema profile: column names, types, cardinality, samples\n- \\`kirograph_data_query\\` \u2014 filtered row retrieval (eq, gt, contains, in, between)\n- \\`kirograph_data_aggregate\\` \u2014 server-side GROUP BY: count, sum, avg, min, max\n\nUse \\`kirograph_data_describe\\` before reading a data file. Use \\`kirograph_data_query\\` with\nfilters instead of loading all rows. Use \\`kirograph_data_aggregate\\` for statistics.\nThis saves 95-99% of tokens compared to reading raw data files.\n`;\n }\n\n // Security section\n if (enableSecurity) {\n content += `\n## Security\n\nKiroGraph scans dependency manifests across 14 ecosystems for known vulnerabilities, performs\ncall-graph reachability analysis, tracks EPSS exploitation probability, checks license\ncompliance, and monitors dependency staleness.\n\n**Available tools:**\n- \\`kirograph_security\\` \u2014 overview: dep count, CVE count, verdict breakdown, stale warnings\n- \\`kirograph_vulns\\` \u2014 list CVEs with severity, EPSS score, reachability verdict, fix suggestion\n- \\`kirograph_reachability\\` \u2014 call paths, entry points, affected layers for one CVE or package\n- \\`kirograph_licenses\\` \u2014 list dependency licenses; flag policy violations\n- \\`kirograph_staleness\\` \u2014 identify outdated dependencies (staleness score 0.0\u20131.0)\n- \\`kirograph_sbom\\` / \\`kirograph_vex\\` \u2014 export CycloneDX 1.5 SBOM and VEX documents\n- \\`kirograph_vuln_add\\` \u2014 manually register a private/internal CVE\n\n**Proactive triggers:** Run \\`kirograph_security\\` when a dependency is added/updated, before a\nproduction deploy, or when the user asks about security/compliance.\n\n**Interpreting verdicts:**\n- \\`affected\\` \u2014 a call path exists from an entry point to the vulnerable code. Act on this.\n- \\`not_affected\\` \u2014 no reachable path found. Strong signal: likely safe.\n- \\`under_investigation\\` \u2014 unresolved symbols in traversal. Treat with caution.\n\n**EPSS scores:** >= 0.5 = patch immediately; 0.1\u20130.5 = elevated risk; < 0.1 = low probability.\n\n**Workflow:** \\`kirograph_security\\` \u2192 \\`kirograph_vulns --verdict affected\\` \u2192 \\`kirograph_reachability <cve>\\` \u2192 fix \u2192 \\`kirograph_vulns --refresh\\`\n`;\n }\n\n // Session hygiene for tools without hooks\n if (!opts.hasHooks) {\n content += `\n## Session Hygiene\n\nThis tool does not have automatic sync hooks. To keep the index fresh:\n- Run \\`kirograph sync\\` at the **start** of each session if files changed outside the agent.\n- Run \\`kirograph sync\\` at the **end** of each session after making changes.\n- If results from graph tools seem stale, run \\`kirograph sync\\` before retrying.\n${enableMemory ? '- Store important observations with `kirograph_mem_store` before ending your session.\\n' : ''}`;\n }\n\n // Caveman mode\n const caveman = cavemanMode && cavemanMode !== 'off' ? CAVEMAN_RULES[cavemanMode] : null;\n if (caveman) {\n content = content.trimEnd() + '\\n\\n' + caveman + '\\n';\n }\n\n return content;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|