kirograph 0.27.1 → 0.28.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/README.md +35 -2
- package/dist/bin/commands/annotations.js +56 -0
- package/dist/bin/commands/annotations.js.map +7 -0
- package/dist/bin/commands/ast-rewrite.js +55 -0
- package/dist/bin/commands/ast-rewrite.js.map +7 -0
- package/dist/bin/commands/bench.js +103 -0
- package/dist/bin/commands/bench.js.map +7 -0
- package/dist/bin/commands/branch.js +133 -0
- package/dist/bin/commands/branch.js.map +7 -0
- package/dist/bin/commands/callees.js +76 -0
- package/dist/bin/commands/callees.js.map +7 -0
- package/dist/bin/commands/callers.js +76 -0
- package/dist/bin/commands/callers.js.map +7 -0
- package/dist/bin/commands/changelog.js +55 -0
- package/dist/bin/commands/changelog.js.map +7 -0
- package/dist/bin/commands/circular-deps.js +68 -0
- package/dist/bin/commands/circular-deps.js.map +7 -0
- package/dist/bin/commands/commit-context.js +55 -0
- package/dist/bin/commands/commit-context.js.map +7 -0
- package/dist/bin/commands/complexity.js +60 -0
- package/dist/bin/commands/complexity.js.map +7 -0
- package/dist/bin/commands/cost.js +146 -0
- package/dist/bin/commands/cost.js.map +7 -0
- package/dist/bin/commands/dependency-depth.js +55 -0
- package/dist/bin/commands/dependency-depth.js.map +7 -0
- package/dist/bin/commands/diff-context.js +55 -0
- package/dist/bin/commands/diff-context.js.map +7 -0
- package/dist/bin/commands/distribution.js +56 -0
- package/dist/bin/commands/distribution.js.map +7 -0
- package/dist/bin/commands/doc-coverage.js +56 -0
- package/dist/bin/commands/doc-coverage.js.map +7 -0
- package/dist/bin/commands/doctor.js +202 -0
- package/dist/bin/commands/doctor.js.map +7 -0
- package/dist/bin/commands/dsm.js +56 -0
- package/dist/bin/commands/dsm.js.map +7 -0
- package/dist/bin/commands/gini.js +55 -0
- package/dist/bin/commands/gini.js.map +7 -0
- package/dist/bin/commands/god-class.js +56 -0
- package/dist/bin/commands/god-class.js.map +7 -0
- package/dist/bin/commands/health.js +55 -0
- package/dist/bin/commands/health.js.map +7 -0
- package/dist/bin/commands/help.js +224 -45
- package/dist/bin/commands/help.js.map +2 -2
- package/dist/bin/commands/impact.js +76 -0
- package/dist/bin/commands/impact.js.map +7 -0
- package/dist/bin/commands/inheritance-depth.js +56 -0
- package/dist/bin/commands/inheritance-depth.js.map +7 -0
- package/dist/bin/commands/insert-at.js +55 -0
- package/dist/bin/commands/insert-at.js.map +7 -0
- package/dist/bin/commands/largest.js +56 -0
- package/dist/bin/commands/largest.js.map +7 -0
- package/dist/bin/commands/manifest.js +158 -0
- package/dist/bin/commands/manifest.js.map +7 -0
- package/dist/bin/commands/module-api.js +57 -0
- package/dist/bin/commands/module-api.js.map +7 -0
- package/dist/bin/commands/monitor.js +91 -0
- package/dist/bin/commands/monitor.js.map +7 -0
- package/dist/bin/commands/multi-replace.js +66 -0
- package/dist/bin/commands/multi-replace.js.map +7 -0
- package/dist/bin/commands/pr-context.js +55 -0
- package/dist/bin/commands/pr-context.js.map +7 -0
- package/dist/bin/commands/query.js +19 -1
- package/dist/bin/commands/query.js.map +3 -3
- package/dist/bin/commands/rank.js +56 -0
- package/dist/bin/commands/rank.js.map +7 -0
- package/dist/bin/commands/read.js +1 -1
- package/dist/bin/commands/read.js.map +2 -2
- package/dist/bin/commands/recursion.js +56 -0
- package/dist/bin/commands/recursion.js.map +7 -0
- package/dist/bin/commands/rename-preview.js +56 -0
- package/dist/bin/commands/rename-preview.js.map +7 -0
- package/dist/bin/commands/session.js +60 -0
- package/dist/bin/commands/session.js.map +7 -0
- package/dist/bin/commands/simplify-scan.js +56 -0
- package/dist/bin/commands/simplify-scan.js.map +7 -0
- package/dist/bin/commands/str-replace.js +55 -0
- package/dist/bin/commands/str-replace.js.map +7 -0
- package/dist/bin/commands/test-coverage.js +59 -0
- package/dist/bin/commands/test-coverage.js.map +7 -0
- package/dist/bin/commands/test-map.js +56 -0
- package/dist/bin/commands/test-map.js.map +7 -0
- package/dist/bin/commands/test-risk.js +59 -0
- package/dist/bin/commands/test-risk.js.map +7 -0
- package/dist/bin/commands/type-hierarchy.js +76 -0
- package/dist/bin/commands/type-hierarchy.js.map +7 -0
- package/dist/bin/commands/unused-imports.js +55 -0
- package/dist/bin/commands/unused-imports.js.map +7 -0
- package/dist/bin/commands/upgrade.js +78 -0
- package/dist/bin/commands/upgrade.js.map +7 -0
- package/dist/bin/installer/common.js +19 -9
- package/dist/bin/installer/common.js.map +2 -2
- package/dist/bin/installer/config-prompt.js +147 -12
- package/dist/bin/installer/config-prompt.js.map +3 -3
- package/dist/bin/installer/index.js +62 -6
- package/dist/bin/installer/index.js.map +2 -2
- package/dist/bin/installer/instructions.js +14 -25
- package/dist/bin/installer/instructions.js.map +2 -2
- package/dist/bin/installer/mcp.js.map +2 -2
- package/dist/bin/installer/steering.js +569 -100
- 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 +4 -4
- 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 +3 -3
- package/dist/bin/installer/targets/claude.js.map +2 -2
- package/dist/bin/installer/targets/cline.js +4 -4
- package/dist/bin/installer/targets/cline.js.map +2 -2
- package/dist/bin/installer/targets/codex.js +4 -4
- package/dist/bin/installer/targets/codex.js.map +2 -2
- package/dist/bin/installer/targets/continue.js +4 -4
- package/dist/bin/installer/targets/continue.js.map +2 -2
- package/dist/bin/installer/targets/copilot-cli.js +4 -4
- package/dist/bin/installer/targets/copilot-cli.js.map +2 -2
- package/dist/bin/installer/targets/copilot.js +4 -4
- package/dist/bin/installer/targets/copilot.js.map +2 -2
- package/dist/bin/installer/targets/cursor.js +5 -5
- package/dist/bin/installer/targets/cursor.js.map +2 -2
- package/dist/bin/installer/targets/devin.js +4 -4
- package/dist/bin/installer/targets/devin.js.map +2 -2
- package/dist/bin/installer/targets/gemini-cli.js +4 -4
- package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
- package/dist/bin/installer/targets/generic.js +2 -2
- package/dist/bin/installer/targets/generic.js.map +2 -2
- package/dist/bin/installer/targets/goose.js +3 -4
- package/dist/bin/installer/targets/goose.js.map +3 -3
- package/dist/bin/installer/targets/index.js.map +1 -1
- package/dist/bin/installer/targets/junie.js +4 -4
- package/dist/bin/installer/targets/junie.js.map +2 -2
- package/dist/bin/installer/targets/kilo.js +4 -4
- package/dist/bin/installer/targets/kilo.js.map +2 -2
- package/dist/bin/installer/targets/kiro.js +27 -3
- package/dist/bin/installer/targets/kiro.js.map +2 -2
- package/dist/bin/installer/targets/opencode.js +3 -3
- 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 +2 -2
- package/dist/bin/installer/targets/qoder.js.map +2 -2
- package/dist/bin/installer/targets/qwen.js +2 -2
- package/dist/bin/installer/targets/qwen.js.map +2 -2
- 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 +4 -4
- 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 +3 -3
- package/dist/bin/installer/targets/trae.js.map +2 -2
- package/dist/bin/installer/targets/warp.js +4 -4
- package/dist/bin/installer/targets/warp.js.map +2 -2
- package/dist/bin/installer/targets/windsurf.js +4 -4
- package/dist/bin/installer/targets/windsurf.js.map +2 -2
- package/dist/bin/kirograph.js +83 -1
- package/dist/bin/kirograph.js.map +3 -3
- package/dist/config.js +30 -8
- package/dist/config.js.map +2 -2
- package/dist/core/branch-manager.js +111 -0
- package/dist/core/branch-manager.js.map +7 -0
- package/dist/core/pipeline.js +3 -3
- package/dist/core/pipeline.js.map +2 -2
- package/dist/data/pixelrag-bridge.js +93 -0
- package/dist/data/pixelrag-bridge.js.map +7 -0
- package/dist/data/pixelrag-manager.js +416 -0
- package/dist/data/pixelrag-manager.js.map +7 -0
- package/dist/db/database.js +34 -7
- package/dist/db/database.js.map +2 -2
- package/dist/db/schema.sql +7 -1
- package/dist/extraction/complexity.js +116 -0
- package/dist/extraction/complexity.js.map +7 -0
- package/dist/extraction/extractor.js +52 -1
- package/dist/extraction/extractor.js.map +2 -2
- package/dist/graph/git-context.js +229 -0
- package/dist/graph/git-context.js.map +7 -0
- package/dist/index.js +4 -2
- package/dist/index.js.map +2 -2
- package/dist/mcp/cache.js +1 -1
- package/dist/mcp/cache.js.map +2 -2
- package/dist/mcp/handler.js +446 -0
- package/dist/mcp/handler.js.map +7 -0
- package/dist/mcp/handlers/architecture.js +297 -0
- package/dist/mcp/handlers/architecture.js.map +7 -0
- package/dist/mcp/handlers/branch.js +175 -0
- package/dist/mcp/handlers/branch.js.map +7 -0
- package/dist/mcp/handlers/code-health.js +563 -0
- package/dist/mcp/handlers/code-health.js.map +7 -0
- package/dist/mcp/handlers/complexity.js +267 -0
- package/dist/mcp/handlers/complexity.js.map +7 -0
- package/dist/mcp/handlers/core.js +611 -0
- package/dist/mcp/handlers/core.js.map +7 -0
- package/dist/mcp/handlers/data.js +337 -0
- package/dist/mcp/handlers/data.js.map +7 -0
- package/dist/mcp/handlers/docs.js +159 -0
- package/dist/mcp/handlers/docs.js.map +7 -0
- package/dist/mcp/handlers/edit-primitives.js +200 -0
- package/dist/mcp/handlers/edit-primitives.js.map +7 -0
- package/dist/mcp/handlers/git-context.js +286 -0
- package/dist/mcp/handlers/git-context.js.map +7 -0
- package/dist/mcp/handlers/memory.js +363 -0
- package/dist/mcp/handlers/memory.js.map +7 -0
- package/dist/mcp/handlers/patterns.js +310 -0
- package/dist/mcp/handlers/patterns.js.map +7 -0
- package/dist/mcp/handlers/security.js +699 -0
- package/dist/mcp/handlers/security.js.map +7 -0
- package/dist/mcp/handlers/utils.js +97 -0
- package/dist/mcp/handlers/utils.js.map +7 -0
- package/dist/mcp/handlers/watchmen.js +104 -0
- package/dist/mcp/handlers/watchmen.js.map +7 -0
- package/dist/mcp/handlers/wiki.js +242 -0
- package/dist/mcp/handlers/wiki.js.map +7 -0
- package/dist/mcp/server.js +72 -3
- package/dist/mcp/server.js.map +2 -2
- package/dist/mcp/tool-names.js +136 -10
- package/dist/mcp/tool-names.js.map +2 -2
- package/dist/mcp/tools.js +846 -3019
- package/dist/mcp/tools.js.map +3 -3
- package/dist/types.js.map +2 -2
- package/package.json +36 -10
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/bin/installer/config-prompt.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * KiroGraph Installer \u2014 configuration prompting\n */\n\nimport * as readline from 'readline';\nimport { KiroGraphConfig } from '../../config';\ntype CavemanMode = 'lite' | 'full' | 'ultra';\nimport { ask, askToggle, arrowSelect, printSection, printSeparator, dim, reset, violet } from './prompts';\nimport { promptImportGlobalHookSelection } from '../../hooks/import-prompt';\n\nexport interface PromptConfigOptions {\n projectRoot?: string;\n offerHookImport?: boolean;\n}\nexport type ConfigPatch = Pick<KiroGraphConfig, 'enableEmbeddings' | 'useVecIndex' | 'semanticEngine' | 'turboquantMemDocs' | 'turboquantBits' | 'turbovecMemDocs' | 'turbovecBits' | 'typesenseDashboard' | 'qdrantDashboard' | 'extractDocstrings' | 'trackCallSites' | 'enableArchitecture' | 'cavemanMode' | 'shellCompressionLevel' | 'enableMemory' | 'enableWatchmen' | 'watchmenThreshold' | 'watchmenSynthesisMode' | 'watchmenLocalModel' | 'enableDocs' | 'docsContextLimit' | 'enableData' | 'dataContextLimit' | 'enableSecurity' | 'enablePatterns' | 'enableWiki' | 'wikiSynthesisMode' | 'wikiLocalModel' | 'enableCodeHealth' | 'enableAdvancedAnalysis' | 'enableAgentUtils'> & { embeddingModel?: string; embeddingDim?: number };\nexport type SemanticEngine = KiroGraphConfig['semanticEngine'];\n\nexport const DEFAULT_EMBEDDING_MODEL = 'nomic-ai/nomic-embed-text-v1.5';\n\n/** Well-known embedding models with their output dimensions. */\nconst PRESET_MODELS = [\n {\n value: 'nomic-ai/nomic-embed-text-v1.5',\n label: 'nomic-embed-text-v1.5',\n dim: 768,\n description: '768-dim \u00B7 ~130MB \u00B7 Best quality for code search (recommended)',\n },\n {\n value: 'onnx-community/embeddinggemma-300m-ONNX',\n label: 'embeddinggemma-300m',\n dim: 768,\n description: '768-dim \u00B7 ~300MB \u00B7 Google Gemma-based, multilingual, 2048-token context',\n },\n {\n value: 'Xenova/all-MiniLM-L6-v2',\n label: 'all-MiniLM-L6-v2',\n dim: 384,\n description: '384-dim \u00B7 ~23MB \u00B7 Fast and lightweight, lower accuracy',\n },\n {\n value: 'BAAI/bge-base-en-v1.5',\n label: 'bge-base-en-v1.5',\n dim: 768,\n description: '768-dim \u00B7 ~110MB \u00B7 Strong general-purpose alternative to nomic',\n },\n {\n value: '__other__',\n label: 'Other',\n dim: 768,\n description: 'Enter a custom HuggingFace model ID and embedding dimension',\n },\n] as const;\n\nexport async function promptConfigOptions(\n rl: readline.Interface,\n opts: PromptConfigOptions = {},\n): Promise<{ patch: ConfigPatch; hooksToImport: string[] | null }> {\n // \u2500\u2500 Semantic Search \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDD0D', 'Semantic Search');\n\n const enableEmbeddings = await askToggle(\n rl,\n 'Semantic embeddings (similarity search):',\n 'Enables natural-language code search via vector embeddings. A local model (~130MB) is downloaded on first use.',\n );\n\n const patch: ConfigPatch = { enableEmbeddings, useVecIndex: false, semanticEngine: 'cosine', turboquantMemDocs: false, turboquantBits: 3, turbovecMemDocs: false, turbovecBits: 4, typesenseDashboard: false, qdrantDashboard: false, extractDocstrings: false, trackCallSites: false, enableArchitecture: false, cavemanMode: 'off', shellCompressionLevel: 'normal', enableMemory: false, enableWatchmen: false, watchmenThreshold: 5, watchmenSynthesisMode: 'local', watchmenLocalModel: 'onnx-community/gemma-4-E4B-it-ONNX', enableDocs: false, docsContextLimit: 0, enableData: false, dataContextLimit: 0, enableSecurity: false, enablePatterns: false, enableWiki: false, wikiSynthesisMode: 'agent', wikiLocalModel: 'onnx-community/gemma-4-E4B-it-ONNX', enableCodeHealth: false, enableAdvancedAnalysis: false, enableAgentUtils: false };\n\n if (enableEmbeddings) {\n // \u2500\u2500 Model selection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const modelChoice = await arrowSelect<string>(\n rl,\n 'Embedding model:',\n PRESET_MODELS.map(m => ({ value: m.value, label: m.label, description: m.description })),\n );\n\n let embeddingModel: string;\n let embeddingDim: number;\n\n if (modelChoice === '__other__') {\n console.log(`\\n ${dim}Enter a HuggingFace model ID in the format org/model-name.${reset}`);\n while (true) {\n const raw = (await ask(rl, ` ${violet}Model identifier:${reset} `)).trim();\n if (raw.includes('/')) { embeddingModel = raw; break; }\n console.log(` Expected a HuggingFace model ID in the format org/model-name (e.g. nomic-ai/nomic-embed-text-v1.5).`);\n }\n console.log(`\\n ${dim}Enter the embedding output dimension for this model (check the model card on HuggingFace).${reset}`);\n while (true) {\n const raw = (await ask(rl, ` ${violet}Embedding dimension (e.g. 768, 384):${reset} `)).trim();\n const n = parseInt(raw, 10);\n if (!isNaN(n) && n > 0) { embeddingDim = n; break; }\n console.log(` Expected a positive integer (e.g. 768, 384, 1536).`);\n }\n } else {\n const preset = PRESET_MODELS.find(m => m.value === modelChoice)!;\n embeddingModel = preset.value;\n embeddingDim = preset.dim;\n }\n\n patch.embeddingModel = embeddingModel;\n patch.embeddingDim = embeddingDim;\n\n // \u2500\u2500 Engine selection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const semanticEngine = await arrowSelect<SemanticEngine>(rl, 'Vector search engine:', [\n { value: 'cosine', label: 'cosine', description: 'In-process cosine similarity. No extra deps. Best for small/medium projects.' },\n { value: 'turboquant', label: 'turboquant', description: 'ANN index, zero native deps. Compresses embeddings 20\u201330\u00D7 (Google TurboQuant). ANN without native binaries \u2014 ideal for CI, ARM, restricted envs. Optional: npm install turboquant-js.' },\n { value: 'turbovec', label: 'turbovec', description: 'ANN search via Rust/SIMD (napi-rs). Same TurboQuant algorithm but NEON on ARM and AVX-512BW on x86 \u2014 faster than turboquant-js at the cost of a one-time Rust build. Requires Rust toolchain. Build: cd native/turbovec-node && npm install && npm run build.' },\n { value: 'sqlite-vec', label: 'sqlite-vec', description: 'ANN index. Sub-linear search. Best for large codebases. Needs: better-sqlite3, sqlite-vec (native).' },\n { value: 'orama', label: 'orama', description: 'Hybrid search (full-text + vector). Pure JS. Needs: @orama/orama, @orama/plugin-data-persistence.' },\n { value: 'pglite', label: 'pglite', description: 'Hybrid search via PostgreSQL + pgvector. Exact results. Pure WASM. Needs: @electric-sql/pglite.' },\n { value: 'lancedb', label: 'lancedb', description: 'ANN search via LanceDB (Apache Lance columnar format). Pure JS. Needs: @lancedb/lancedb.' },\n { value: 'qdrant', label: 'qdrant', description: 'ANN search via Qdrant embedded binary (HNSW index, Cosine). Needs: qdrant-local.' },\n { value: 'typesense', label: 'typesense', description: 'ANN search via Typesense (auto-downloaded binary, HNSW, Cosine). Needs: typesense.' },\n ]);\n patch.semanticEngine = semanticEngine;\n patch.useVecIndex = semanticEngine === 'sqlite-vec';\n\n // TurboQuant for memory & docs: offer when cosine or turboquant is the code-node engine\n if (semanticEngine === 'cosine' || semanticEngine === 'turboquant') {\n patch.turboquantMemDocs = await askToggle(rl,\n 'TurboQuant for memory & docs search (optional):',\n 'Replaces the default linear cosine scan in memory observations and doc sections with a compressed ANN index \u2014 no native deps required. Most useful when you accumulate many observations or large doc sets (1 000+ entries).',\n false,\n );\n }\n\n // TurboVec bit width\n if (semanticEngine === 'turbovec') {\n patch.turbovecBits = await arrowSelect<number>(rl, 'TurboVec bits per coordinate:', [\n { value: 4, label: '4 bits (recommended)', description: 'Best quality, ~19\u00D7 compression vs raw Float32. Default.' },\n { value: 3, label: '3 bits', description: 'Balanced \u2014 ~25\u00D7 compression, slight quality drop.' },\n { value: 2, label: '2 bits', description: 'Highest compression (~38\u00D7), lowest accuracy.' },\n ]);\n patch.turbovecMemDocs = await askToggle(rl,\n 'TurboVec for memory & docs search (optional):',\n 'Replaces the default linear cosine scan in memory observations and doc sections with the TurboVec ANN index. Requires the addon to be built.',\n false,\n );\n }\n\n if (semanticEngine === 'typesense') {\n patch.typesenseDashboard = await askToggle(rl,\n 'Typesense dashboard:',\n 'Serves the Typesense Dashboard locally and opens it in your browser after indexing completes.',\n false,\n );\n }\n\n if (semanticEngine === 'qdrant') {\n patch.qdrantDashboard = await askToggle(rl,\n 'Qdrant dashboard:',\n 'Downloads the Qdrant Web UI (first time only) and opens it in your browser after indexing completes.',\n false,\n );\n }\n }\n\n // \u2500\u2500 Graph Features \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDCCA', 'Graph Features');\n\n patch.extractDocstrings = await askToggle(rl,\n 'Docstring extraction:',\n 'Enriches symbol metadata and improves context quality. Slightly increases indexing time.',\n false,\n );\n\n patch.trackCallSites = await askToggle(rl,\n 'Call site tracking (caller/callee graph):',\n 'Enables kirograph_callers and kirograph_callees MCP tools. Increases index size.',\n false,\n );\n\n patch.enableArchitecture = await askToggle(rl,\n 'Architecture analysis (packages + layers):',\n 'Detects packages from manifests and architectural layers. Enables kirograph_architecture, kirograph_coupling, kirograph_package.',\n false,\n );\n\n if (patch.enableArchitecture) {\n patch.enableAdvancedAnalysis = await askToggle(rl,\n 'Advanced graph analysis (type hierarchies, flows, communities, refactor):',\n 'Enables kirograph_type_hierarchy, kirograph_flows, kirograph_communities, kirograph_refactor. Most useful alongside architecture analysis.',\n false,\n );\n }\n\n // \u2500\u2500 Graph Tools \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDCCA', 'Graph Tools');\n\n patch.enableCodeHealth = await askToggle(rl,\n 'Code health tools (hotspots, dead code, change tracking):',\n 'Enables kirograph_hotspots, kirograph_surprising, kirograph_diff, kirograph_dead_code, kirograph_circular_deps.',\n false,\n );\n\n patch.enableAgentUtils = await askToggle(rl,\n 'Agent utilities (file caching, budget tracking):',\n 'Enables kirograph_read, kirograph_gain, kirograph_budget.',\n false,\n );\n\n // \u2500\u2500 Security \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDD12', 'Security');\n\n patch.enableSecurity = await askToggle(rl,\n 'Security analysis (vulnerability scanning + reachability):',\n 'Scans dependency manifests for known vulnerabilities and performs reachability analysis. Requires Architecture analysis (will be auto-enabled). Enables kirograph_security, kirograph_vulns, kirograph_sbom, kirograph_vex, kirograph_reachability MCP tools.',\n false,\n );\n\n if (patch.enableSecurity && !patch.enableArchitecture) {\n patch.enableArchitecture = true;\n console.log(' \u2139 Architecture analysis auto-enabled (required by Security module)');\n }\n\n // \u2500\u2500 Pattern Matching \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDD0D', 'Pattern Matching');\n\n patch.enablePatterns = await askToggle(rl,\n 'Precise SAST with ast-grep?',\n 'Runs AST structural pattern matching during indexing using @ast-grep/napi (~15MB native binding). Unlike heuristic symbol-name analysis, matches real code structure \u2014 precise SQL injection, path traversal, eval detection. Requires @ast-grep/napi (will be installed automatically if you answer yes).',\n false,\n );\n\n // \u2500\u2500 Documentation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDCD6', 'Documentation');\n\n (patch as any).enableDocs = await askToggle(rl,\n 'Documentation indexing (section-level retrieval):',\n 'Indexes docs by heading structure. Enables kirograph_docs_toc, kirograph_docs_search, kirograph_docs_section, kirograph_docs_outline, kirograph_docs_refs.',\n false,\n );\n\n if ((patch as any).enableDocs) {\n const contextChoice = await arrowSelect<number>(rl, 'Include doc sections in kirograph_context results?', [\n { value: 0, label: '0 (disabled)', description: 'Docs stay separate \u2014 use kirograph_docs_* tools explicitly (recommended)' },\n { value: 3, label: '3 sections', description: 'Include up to 3 relevant doc sections in context results' },\n { value: 5, label: '5 sections', description: 'Include up to 5 relevant doc sections in context results' },\n { value: 10, label: '10 sections', description: 'Include up to 10 relevant doc sections in context results' },\n ]);\n (patch as any).docsContextLimit = contextChoice;\n }\n\n // \u2500\u2500 Data \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDCCA', 'Data');\n\n (patch as any).enableData = await askToggle(rl,\n 'Tabular data indexing (CSV/TSV/JSONL/JSON/Excel/Parquet):',\n 'Indexes data files for structured querying. Enables kirograph_data_list, kirograph_data_describe, kirograph_data_query, kirograph_data_aggregate, kirograph_data_search.',\n false,\n );\n\n if ((patch as any).enableData) {\n (patch as any).dataInstallExcel = await askToggle(rl,\n 'Install Excel support (xlsx package)?',\n 'Required for .xlsx/.xls files. CSV/TSV/JSONL/JSON are always supported without extra deps.',\n false,\n );\n\n (patch as any).dataInstallParquet = await askToggle(rl,\n 'Install Parquet support (parquetjs-lite package)?',\n 'Required for .parquet files. CSV/TSV/JSONL/JSON are always supported without extra deps.',\n false,\n );\n\n (patch as any).dataInstallPdf = await askToggle(rl,\n 'Install PDF support (@firecrawl/pdf-inspector package)?',\n 'Required for .pdf files. Rust/NAPI binary \u2014 prebuilts for linux-x64 and macOS ARM64.',\n false,\n );\n\n const contextChoice = await arrowSelect<number>(rl, 'Include dataset schemas in kirograph_context results?', [\n { value: 0, label: '0 (disabled)', description: 'Data stays separate \u2014 use kirograph_data_* tools explicitly (recommended)' },\n { value: 2, label: '2 datasets', description: 'Include up to 2 relevant dataset schemas in context results' },\n { value: 5, label: '5 datasets', description: 'Include up to 5 relevant dataset schemas in context results' },\n ]);\n (patch as any).dataContextLimit = contextChoice;\n }\n\n // \u2500\u2500 Agent Behavior \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83E\uDD16', 'Agent Behavior');\n\n const cavemanChoice = await arrowSelect(rl, 'Communication style (caveman mode):', [\n { value: 'off', label: 'off', description: 'Normal responses \u2014 no compression' },\n { value: 'lite', label: 'lite', description: 'Compact, no filler, full sentences' },\n { value: 'full', label: 'full', description: 'Fragments, no articles, short synonyms' },\n { value: 'ultra', label: 'ultra', description: 'Max compression, abbreviations, \u2192 for causality' },\n ]);\n patch.cavemanMode = cavemanChoice as CavemanMode | 'off';\n\n const compressionChoice = await arrowSelect(rl, 'Shell compression (kirograph_exec):', [\n { value: 'off', label: 'off', description: 'Disables kirograph_exec entirely' },\n { value: 'normal', label: 'normal', description: 'Balanced: removes noise, keeps structure (recommended)' },\n { value: 'aggressive', label: 'aggressive', description: 'More compact: groups by category, limits output' },\n { value: 'ultra', label: 'ultra', description: 'Maximum compression: counts and summaries only' },\n ]);\n patch.shellCompressionLevel = compressionChoice as KiroGraphConfig['shellCompressionLevel'];\n if (compressionChoice === 'off') {\n console.log(' \u2139 kirograph_exec disabled (shell compression is off)');\n }\n\n let hooksToImport: string[] | null = null;\n if (opts.offerHookImport && opts.projectRoot) {\n printSection('\uD83E\uDE9D', 'Hooks');\n hooksToImport = await promptImportGlobalHookSelection();\n }\n\n // \u2500\u2500 Memory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83E\uDDE0', 'Memory');\n\n patch.enableMemory = await askToggle(rl,\n 'Persistent memory (cross-session observations):',\n 'Stores decisions, errors, and patterns across sessions. Compressed (if caveman is on), linked to code symbols, searchable via kirograph_mem_* tools. Zero LLM tokens on write.',\n false,\n );\n\n if (patch.enableMemory) {\n patch.enableWatchmen = await askToggle(rl,\n 'Watchmen (auto-synthesize workspace briefs from memory):',\n 'When enough observations accumulate (default: 5), synthesizes them into .kiro/steering/kirograph-watchmen.md, CLAUDE.md, AGENTS.md, or the equivalent for your tool.',\n false,\n );\n\n if (patch.enableWatchmen) {\n // \u2500\u2500 Synthesis mode \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const synthesisMode = await arrowSelect<KiroGraphConfig['watchmenSynthesisMode']>(\n rl,\n 'Watchmen synthesis mode:',\n [\n {\n value: 'local',\n label: 'Local model',\n description: 'Runs a local HuggingFace model via @huggingface/transformers. Zero API cost, no data leaves your machine. Model downloaded once to ~/.kirograph/models/. Works for all tools via runCommand hook.',\n },\n {\n value: 'agent',\n label: 'Active agent',\n description: '\u26A0 Kiro only. Uses the active Kiro agent to synthesize. Consumes API tokens/credits on every synthesis. Not supported for other tools.',\n },\n ],\n );\n patch.watchmenSynthesisMode = synthesisMode;\n\n if (synthesisMode === 'local') {\n // \u2500\u2500 Local model selection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const LOCAL_MODELS = [\n {\n value: 'onnx-community/gemma-4-E4B-it-ONNX',\n label: 'Gemma 4 E4B (recommended)',\n description: '~3\u20134 GB \u00B7 Google DeepMind Gemma 4 \u00B7 4.5B params \u00B7 128K context \u00B7 Best quality \u00B7 Apache 2.0',\n },\n {\n value: 'onnx-community/Qwen2.5-1.5B-Instruct',\n label: 'Qwen2.5-1.5B',\n description: '~1.5 GB \u00B7 Lighter option if RAM is limited \u00B7 Acceptable quality',\n },\n {\n value: 'HuggingFaceTB/SmolLM2-1.7B-Instruct',\n label: 'SmolLM2-1.7B',\n description: '~1.7 GB \u00B7 HuggingFace compact model \u00B7 Good at following structured formats',\n },\n {\n value: '__other__',\n label: 'Other',\n description: 'Enter a custom HuggingFace model ID (must have ONNX weights on onnx-community)',\n },\n ] as const;\n\n const modelChoice = await arrowSelect<string>(rl, 'Local synthesis model:', LOCAL_MODELS.map(m => ({ value: m.value, label: m.label, description: m.description })));\n\n if (modelChoice === '__other__') {\n console.log(`\\n ${dim}Enter a HuggingFace model ID (e.g. onnx-community/gemma-4-E4B-it-ONNX).${reset}`);\n while (true) {\n const raw = (await ask(rl, ` ${violet}Model identifier:${reset} `)).trim();\n if (raw.includes('/')) { patch.watchmenLocalModel = raw; break; }\n console.log(` Expected a HuggingFace model ID in the format org/model-name.`);\n }\n } else {\n patch.watchmenLocalModel = modelChoice;\n }\n }\n }\n }\n\n // \u2500\u2500 Wiki \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDCD6', 'Wiki');\n\n patch.enableWiki = await askToggle(rl,\n 'LLM Wiki (Karpathy-style structured knowledge base):',\n 'Maintains a set of markdown pages that compound knowledge across sessions. Supports search, ingest (two-tool flow), conflict resolution, and health checks via kirograph_wiki_* tools.',\n false,\n );\n\n if (patch.enableWiki) {\n const wikiMode = await arrowSelect<KiroGraphConfig['wikiSynthesisMode']>(\n rl,\n 'Wiki synthesis mode:',\n [\n {\n value: 'agent',\n label: 'Active agent (recommended)',\n description: 'Uses the active LLM agent to generate WIKI_DIFF blocks. Works with any AI tool. Consumes API tokens on ingest.',\n },\n {\n value: 'local',\n label: 'Local model',\n description: 'Runs a local HuggingFace model to generate diffs. Zero API cost, no data leaves your machine. Same infra as Watchmen.',\n },\n ],\n );\n patch.wikiSynthesisMode = wikiMode;\n\n if (wikiMode === 'local') {\n // \u2500\u2500 Local model selection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const WIKI_LOCAL_MODELS = [\n {\n value: 'onnx-community/gemma-4-E4B-it-ONNX',\n label: 'Gemma 4 E4B (recommended)',\n description: '~3\u20134 GB \u00B7 Google DeepMind Gemma 4 \u00B7 4.5B params \u00B7 128K context \u00B7 Best quality \u00B7 Apache 2.0',\n },\n {\n value: 'onnx-community/Qwen2.5-1.5B-Instruct',\n label: 'Qwen2.5-1.5B',\n description: '~1.5 GB \u00B7 Lighter option if RAM is limited \u00B7 Acceptable quality',\n },\n {\n value: 'HuggingFaceTB/SmolLM2-1.7B-Instruct',\n label: 'SmolLM2-1.7B',\n description: '~1.7 GB \u00B7 HuggingFace compact model \u00B7 Good at following structured formats',\n },\n {\n value: '__other__',\n label: 'Other',\n description: 'Enter a custom HuggingFace model ID (must have ONNX weights on onnx-community)',\n },\n ] as const;\n\n const wikiModelChoice = await arrowSelect<string>(rl, 'Local wiki synthesis model:', WIKI_LOCAL_MODELS.map(m => ({ value: m.value, label: m.label, description: m.description })));\n\n if (wikiModelChoice === '__other__') {\n console.log(`\\n ${dim}Enter a HuggingFace model ID (e.g. onnx-community/gemma-4-E4B-it-ONNX).${reset}`);\n while (true) {\n const raw = (await ask(rl, ` ${violet}Model identifier:${reset} `)).trim();\n if (raw.includes('/')) { patch.wikiLocalModel = raw; break; }\n console.log(` Expected a HuggingFace model ID in the format org/model-name.`);\n }\n } else {\n patch.wikiLocalModel = wikiModelChoice;\n }\n }\n }\n\n return { patch, hooksToImport };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["/**\n * KiroGraph Installer \u2014 configuration prompting\n */\n\nimport * as readline from 'readline';\nimport { KiroGraphConfig } from '../../config';\ntype CavemanMode = 'lite' | 'full' | 'ultra';\nimport { ask, askToggle, arrowSelect, printSection, printSeparator, dim, reset, violet } from './prompts';\nimport { promptImportGlobalHookSelection } from '../../hooks/import-prompt';\n\nexport interface PromptConfigOptions {\n projectRoot?: string;\n offerHookImport?: boolean;\n}\nexport type ConfigPatch = Pick<KiroGraphConfig,\n 'enableEmbeddings' | 'useVecIndex' | 'semanticEngine' |\n 'turboquantMemDocs' | 'turboquantBits' | 'turbovecMemDocs' | 'turbovecBits' |\n 'typesenseDashboard' | 'qdrantDashboard' |\n 'extractDocstrings' | 'trackCallSites' | 'enableArchitecture' |\n 'cavemanMode' | 'shellCompressionLevel' |\n 'enableMemory' | 'enableWatchmen' | 'watchmenThreshold' | 'watchmenSynthesisMode' | 'watchmenLocalModel' |\n 'enableDocs' | 'docsContextLimit' |\n 'enableData' | 'dataContextLimit' |\n 'enableSecurity' | 'enablePatterns' |\n 'enableWiki' | 'wikiSynthesisMode' | 'wikiLocalModel' |\n 'enableCodeHealth' | 'enableNavigation' | 'enableComplexity' |\n 'enableGitContext' | 'enableEditPrimitives' | 'enableBranch' |\n 'enableAgentUtils' | 'enableGeneralCompression'\n> & { embeddingModel?: string; embeddingDim?: number };\nexport type SemanticEngine = KiroGraphConfig['semanticEngine'];\n\ntype InstallMode = 'core' | 'full' | 'custom' | 'profiles';\n\nconst PROFILES: Record<string, { label: string; description: string; patch: Partial<ConfigPatch> }> = {\n developer: {\n label: 'Developer',\n description: 'Code health, navigation, complexity, call-site tracking',\n patch: { enableCodeHealth: true, enableNavigation: true, enableComplexity: true, trackCallSites: true },\n },\n team: {\n label: 'Team',\n description: 'Developer + architecture, git context, wiki',\n patch: { enableCodeHealth: true, enableNavigation: true, enableComplexity: true, trackCallSites: true, enableArchitecture: true, enableGitContext: true, enableWiki: true, wikiSynthesisMode: 'agent' },\n },\n security: {\n label: 'Security',\n description: 'Security analysis, patterns, architecture, code health',\n patch: { enableSecurity: true, enableArchitecture: true, enablePatterns: true, enableCodeHealth: true },\n },\n data: {\n label: 'Data & Docs',\n description: 'Tabular data indexing and documentation navigation',\n patch: { enableData: true, enableDocs: true },\n },\n ai: {\n label: 'AI / LLM Agent',\n description: 'Memory, watchmen, agent utils, wiki, general compression',\n patch: { enableMemory: true, enableWatchmen: true, enableAgentUtils: true, enableWiki: true, wikiSynthesisMode: 'agent', enableGeneralCompression: true },\n },\n};\n\nexport const DEFAULT_EMBEDDING_MODEL = 'nomic-ai/nomic-embed-text-v1.5';\n\n/** Well-known embedding models with their output dimensions. */\nconst PRESET_MODELS = [\n {\n value: 'nomic-ai/nomic-embed-text-v1.5',\n label: 'nomic-embed-text-v1.5',\n dim: 768,\n description: '768-dim \u00B7 ~130MB \u00B7 Best quality for code search (recommended)',\n },\n {\n value: 'onnx-community/embeddinggemma-300m-ONNX',\n label: 'embeddinggemma-300m',\n dim: 768,\n description: '768-dim \u00B7 ~300MB \u00B7 Google Gemma-based, multilingual, 2048-token context',\n },\n {\n value: 'Xenova/all-MiniLM-L6-v2',\n label: 'all-MiniLM-L6-v2',\n dim: 384,\n description: '384-dim \u00B7 ~23MB \u00B7 Fast and lightweight, lower accuracy',\n },\n {\n value: 'BAAI/bge-base-en-v1.5',\n label: 'bge-base-en-v1.5',\n dim: 768,\n description: '768-dim \u00B7 ~110MB \u00B7 Strong general-purpose alternative to nomic',\n },\n {\n value: '__other__',\n label: 'Other',\n dim: 768,\n description: 'Enter a custom HuggingFace model ID and embedding dimension',\n },\n] as const;\n\nexport async function promptConfigOptions(\n rl: readline.Interface,\n opts: PromptConfigOptions = {},\n): Promise<{ patch: ConfigPatch; hooksToImport: string[] | null }> {\n // \u2500\u2500 Install mode \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const installMode = await arrowSelect<InstallMode>(rl, 'Installation mode:', [\n { value: 'core', label: 'Core only', description: '3 always-on tools (search, context, node) \u2014 ~170 tok. Zero config.' },\n { value: 'full', label: 'Full', description: 'Enable every feature with sensible defaults. Best for a fresh project.' },\n { value: 'profiles', label: 'Profiles', description: 'Choose a preset bundle (Developer, Team, Security, Data & Docs, AI/LLM).' },\n { value: 'custom', label: 'Custom', description: 'Answer each question individually. Maximum control.' },\n ]);\n\n const basePatch: ConfigPatch = {\n enableEmbeddings: false, useVecIndex: false, semanticEngine: 'cosine',\n turboquantMemDocs: false, turboquantBits: 3, turbovecMemDocs: false, turbovecBits: 4,\n typesenseDashboard: false, qdrantDashboard: false,\n extractDocstrings: false, trackCallSites: false,\n enableArchitecture: false, cavemanMode: 'off', shellCompressionLevel: 'off',\n enableMemory: false, enableWatchmen: false, watchmenThreshold: 5,\n watchmenSynthesisMode: 'local', watchmenLocalModel: 'onnx-community/gemma-4-E4B-it-ONNX',\n enableDocs: false, docsContextLimit: 0,\n enableData: false, dataContextLimit: 0,\n enableSecurity: false, enablePatterns: false,\n enableWiki: false, wikiSynthesisMode: 'agent', wikiLocalModel: 'onnx-community/gemma-4-E4B-it-ONNX',\n enableCodeHealth: false, enableNavigation: false, enableComplexity: false,\n enableGitContext: false, enableEditPrimitives: false, enableBranch: false,\n enableAgentUtils: false, enableGeneralCompression: false,\n };\n\n if (installMode === 'core') {\n return { patch: basePatch, hooksToImport: null };\n }\n\n if (installMode === 'full') {\n const fullPatch: ConfigPatch = {\n ...basePatch,\n enableEmbeddings: true, embeddingModel: DEFAULT_EMBEDDING_MODEL, embeddingDim: 768,\n extractDocstrings: true, trackCallSites: true,\n enableArchitecture: true, shellCompressionLevel: 'normal',\n enableCodeHealth: true, enableNavigation: true, enableComplexity: true,\n enableGitContext: true, enableEditPrimitives: true, enableBranch: true,\n enableAgentUtils: true, enableGeneralCompression: true,\n enableSecurity: true, enablePatterns: true,\n enableDocs: true, enableData: true,\n enableMemory: true, enableWatchmen: true,\n enableWiki: true, wikiSynthesisMode: 'agent',\n };\n return { patch: fullPatch, hooksToImport: null };\n }\n\n if (installMode === 'profiles') {\n const profileKey = await arrowSelect<string>(rl, 'Select a profile:', Object.entries(PROFILES).map(([key, p]) => ({\n value: key,\n label: p.label,\n description: p.description,\n })));\n const profile = PROFILES[profileKey];\n const patch: ConfigPatch = { ...basePatch, ...profile.patch };\n return { patch, hooksToImport: null };\n }\n\n // \u2500\u2500 Custom: ask all questions individually \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // \u2500\u2500 Semantic Search \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDD0D', 'Semantic Search');\n\n const enableEmbeddings = await askToggle(\n rl,\n 'Semantic embeddings (similarity search):',\n 'Enables natural-language code search via vector embeddings. A local model (~130MB) is downloaded on first use.',\n );\n\n const patch: ConfigPatch = { ...basePatch, enableEmbeddings };\n\n if (enableEmbeddings) {\n // \u2500\u2500 Model selection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const modelChoice = await arrowSelect<string>(\n rl,\n 'Embedding model:',\n PRESET_MODELS.map(m => ({ value: m.value, label: m.label, description: m.description })),\n );\n\n let embeddingModel: string;\n let embeddingDim: number;\n\n if (modelChoice === '__other__') {\n console.log(`\\n ${dim}Enter a HuggingFace model ID in the format org/model-name.${reset}`);\n while (true) {\n const raw = (await ask(rl, ` ${violet}Model identifier:${reset} `)).trim();\n if (raw.includes('/')) { embeddingModel = raw; break; }\n console.log(` Expected a HuggingFace model ID in the format org/model-name (e.g. nomic-ai/nomic-embed-text-v1.5).`);\n }\n console.log(`\\n ${dim}Enter the embedding output dimension for this model (check the model card on HuggingFace).${reset}`);\n while (true) {\n const raw = (await ask(rl, ` ${violet}Embedding dimension (e.g. 768, 384):${reset} `)).trim();\n const n = parseInt(raw, 10);\n if (!isNaN(n) && n > 0) { embeddingDim = n; break; }\n console.log(` Expected a positive integer (e.g. 768, 384, 1536).`);\n }\n } else {\n const preset = PRESET_MODELS.find(m => m.value === modelChoice)!;\n embeddingModel = preset.value;\n embeddingDim = preset.dim;\n }\n\n patch.embeddingModel = embeddingModel;\n patch.embeddingDim = embeddingDim;\n\n // \u2500\u2500 Engine selection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const semanticEngine = await arrowSelect<SemanticEngine>(rl, 'Vector search engine:', [\n { value: 'cosine', label: 'cosine', description: 'In-process cosine similarity. No extra deps. Best for small/medium projects.' },\n { value: 'turboquant', label: 'turboquant', description: 'ANN index, zero native deps. Compresses embeddings 20\u201330\u00D7 (Google TurboQuant). ANN without native binaries \u2014 ideal for CI, ARM, restricted envs. Optional: npm install turboquant-js.' },\n { value: 'turbovec', label: 'turbovec', description: 'ANN search via Rust/SIMD (napi-rs). Same TurboQuant algorithm but NEON on ARM and AVX-512BW on x86 \u2014 faster than turboquant-js at the cost of a one-time Rust build. Requires Rust toolchain. Build: cd native/turbovec-node && npm install && npm run build.' },\n { value: 'sqlite-vec', label: 'sqlite-vec', description: 'ANN index. Sub-linear search. Best for large codebases. Needs: better-sqlite3, sqlite-vec (native).' },\n { value: 'orama', label: 'orama', description: 'Hybrid search (full-text + vector). Pure JS. Needs: @orama/orama, @orama/plugin-data-persistence.' },\n { value: 'pglite', label: 'pglite', description: 'Hybrid search via PostgreSQL + pgvector. Exact results. Pure WASM. Needs: @electric-sql/pglite.' },\n { value: 'lancedb', label: 'lancedb', description: 'ANN search via LanceDB (Apache Lance columnar format). Pure JS. Needs: @lancedb/lancedb.' },\n { value: 'qdrant', label: 'qdrant', description: 'ANN search via Qdrant embedded binary (HNSW index, Cosine). Needs: qdrant-local.' },\n { value: 'typesense', label: 'typesense', description: 'ANN search via Typesense (auto-downloaded binary, HNSW, Cosine). Needs: typesense.' },\n ]);\n patch.semanticEngine = semanticEngine;\n patch.useVecIndex = semanticEngine === 'sqlite-vec';\n\n // TurboQuant for memory & docs: offer only when turboquant is the code-node engine\n if (semanticEngine === 'turboquant') {\n patch.turboquantMemDocs = await askToggle(rl,\n 'TurboQuant for memory & docs search (optional):',\n 'Replaces the default linear cosine scan in memory observations and doc sections with a compressed ANN index \u2014 no native deps required. Most useful when you accumulate many observations or large doc sets (1 000+ entries).',\n false,\n );\n }\n\n // TurboVec bit width\n if (semanticEngine === 'turbovec') {\n patch.turbovecBits = await arrowSelect<number>(rl, 'TurboVec bits per coordinate:', [\n { value: 4, label: '4 bits (recommended)', description: 'Best quality, ~19\u00D7 compression vs raw Float32. Default.' },\n { value: 3, label: '3 bits', description: 'Balanced \u2014 ~25\u00D7 compression, slight quality drop.' },\n { value: 2, label: '2 bits', description: 'Highest compression (~38\u00D7), lowest accuracy.' },\n ]);\n patch.turbovecMemDocs = await askToggle(rl,\n 'TurboVec for memory & docs search (optional):',\n 'Replaces the default linear cosine scan in memory observations and doc sections with the TurboVec ANN index. Requires the addon to be built.',\n false,\n );\n }\n\n if (semanticEngine === 'typesense') {\n patch.typesenseDashboard = await askToggle(rl,\n 'Typesense dashboard:',\n 'Serves the Typesense Dashboard locally and opens it in your browser after indexing completes.',\n false,\n );\n }\n\n if (semanticEngine === 'qdrant') {\n patch.qdrantDashboard = await askToggle(rl,\n 'Qdrant dashboard:',\n 'Downloads the Qdrant Web UI (first time only) and opens it in your browser after indexing completes.',\n false,\n );\n }\n }\n\n // \u2500\u2500 Graph Features \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDCCA', 'Graph Features');\n\n patch.extractDocstrings = await askToggle(rl,\n 'Docstring extraction:',\n 'Enriches symbol metadata and improves context quality. Slightly increases indexing time.',\n false,\n );\n\n patch.trackCallSites = await askToggle(rl,\n 'Call site tracking (caller/callee graph):',\n 'Enables kirograph_callers and kirograph_callees MCP tools. Increases index size.',\n false,\n );\n\n patch.enableArchitecture = await askToggle(rl,\n 'Architecture analysis (packages + layers):',\n 'Detects packages from manifests and architectural layers. Enables kirograph_architecture, kirograph_coupling, kirograph_package.',\n false,\n );\n\n // \u2500\u2500 Graph Tools \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDCCA', 'Graph Tools');\n\n patch.enableNavigation = await askToggle(rl,\n 'Navigation tools (status, files, impact):',\n 'Enables kirograph_status, kirograph_files, kirograph_impact.',\n false,\n );\n\n patch.enableCodeHealth = await askToggle(rl,\n 'Code health tools (hotspots, dead code, path analysis, type hierarchy):',\n 'Enables kirograph_hotspots, kirograph_surprising, kirograph_diff, kirograph_dead_code, kirograph_circular_deps, kirograph_path, kirograph_affected, kirograph_type_hierarchy.',\n false,\n );\n\n patch.enableComplexity = await askToggle(rl,\n 'Complexity metrics tools:',\n 'Enables complexity analysis, simplify scan, health score, DSM, test risk.',\n false,\n );\n\n patch.enableGitContext = await askToggle(rl,\n 'Git context tools (diff context, commit context, flows):',\n 'Enables kirograph_flows, kirograph_diff_context, kirograph_commit_context, kirograph_pr_context, kirograph_changelog, kirograph_test_map, kirograph_test_coverage.',\n false,\n );\n\n patch.enableEditPrimitives = await askToggle(rl,\n 'Edit primitive tools (str_replace, insert_at, refactor):',\n 'Enables kirograph_refactor, kirograph_str_replace, kirograph_multi_str_replace, kirograph_insert_at, kirograph_ast_grep_rewrite.',\n false,\n );\n\n patch.enableAgentUtils = await askToggle(rl,\n 'Agent utilities (file caching, budget tracking):',\n 'Enables kirograph_read, kirograph_gain, kirograph_budget.',\n false,\n );\n\n // \u2500\u2500 Security \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDD12', 'Security');\n\n patch.enableSecurity = await askToggle(rl,\n 'Security analysis (vulnerability scanning + reachability):',\n 'Scans dependency manifests for known vulnerabilities and performs reachability analysis. Requires Architecture analysis (will be auto-enabled). Enables kirograph_security, kirograph_vulns, kirograph_sbom, kirograph_vex, kirograph_reachability MCP tools.',\n false,\n );\n\n if (patch.enableSecurity && !patch.enableArchitecture) {\n patch.enableArchitecture = true;\n console.log(' \u2139 Architecture analysis auto-enabled (required by Security module)');\n }\n\n // \u2500\u2500 Pattern Matching \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDD0D', 'Pattern Matching');\n\n patch.enablePatterns = await askToggle(rl,\n 'Precise SAST with ast-grep?',\n 'Runs AST structural pattern matching during indexing using @ast-grep/napi (~15MB native binding). Unlike heuristic symbol-name analysis, matches real code structure \u2014 precise SQL injection, path traversal, eval detection. Requires @ast-grep/napi (will be installed automatically if you answer yes).',\n false,\n );\n\n // \u2500\u2500 Documentation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDCD6', 'Documentation');\n\n (patch as any).enableDocs = await askToggle(rl,\n 'Documentation indexing (section-level retrieval):',\n 'Indexes docs by heading structure. Enables kirograph_docs_toc, kirograph_docs_search, kirograph_docs_section, kirograph_docs_outline, kirograph_docs_refs.',\n false,\n );\n\n if ((patch as any).enableDocs) {\n const contextChoice = await arrowSelect<number>(rl, 'Include doc sections in kirograph_context results?', [\n { value: 0, label: '0 (disabled)', description: 'Docs stay separate \u2014 use kirograph_docs_* tools explicitly (recommended)' },\n { value: 3, label: '3 sections', description: 'Include up to 3 relevant doc sections in context results' },\n { value: 5, label: '5 sections', description: 'Include up to 5 relevant doc sections in context results' },\n { value: 10, label: '10 sections', description: 'Include up to 10 relevant doc sections in context results' },\n ]);\n (patch as any).docsContextLimit = contextChoice;\n }\n\n // \u2500\u2500 Data \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDCCA', 'Data');\n\n (patch as any).enableData = await askToggle(rl,\n 'Tabular data indexing (CSV/TSV/JSONL/JSON/Excel/Parquet):',\n 'Indexes data files for structured querying. Enables kirograph_data_list, kirograph_data_describe, kirograph_data_query, kirograph_data_aggregate, kirograph_data_search.',\n false,\n );\n\n if ((patch as any).enableData) {\n (patch as any).dataInstallExcel = await askToggle(rl,\n 'Install Excel support (xlsx package)?',\n 'Required for .xlsx/.xls files. CSV/TSV/JSONL/JSON are always supported without extra deps.',\n false,\n );\n\n (patch as any).dataInstallParquet = await askToggle(rl,\n 'Install Parquet support (parquetjs-lite package)?',\n 'Required for .parquet files. CSV/TSV/JSONL/JSON are always supported without extra deps.',\n false,\n );\n\n (patch as any).dataInstallPdf = await askToggle(rl,\n 'Install PDF support (@firecrawl/pdf-inspector package)?',\n 'Required for .pdf files. Rust/NAPI binary \u2014 prebuilts for linux-x64 and macOS ARM64.',\n false,\n );\n\n const contextChoice = await arrowSelect<number>(rl, 'Include dataset schemas in kirograph_context results?', [\n { value: 0, label: '0 (disabled)', description: 'Data stays separate \u2014 use kirograph_data_* tools explicitly (recommended)' },\n { value: 2, label: '2 datasets', description: 'Include up to 2 relevant dataset schemas in context results' },\n { value: 5, label: '5 datasets', description: 'Include up to 5 relevant dataset schemas in context results' },\n ]);\n (patch as any).dataContextLimit = contextChoice;\n }\n\n // \u2500\u2500 Agent Behavior \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83E\uDD16', 'Agent Behavior');\n\n const cavemanChoice = await arrowSelect(rl, 'Communication style (caveman mode):', [\n { value: 'off', label: 'off', description: 'Normal responses \u2014 no compression' },\n { value: 'lite', label: 'lite', description: 'Compact, no filler, full sentences' },\n { value: 'full', label: 'full', description: 'Fragments, no articles, short synonyms' },\n { value: 'ultra', label: 'ultra', description: 'Max compression, abbreviations, \u2192 for causality' },\n ]);\n patch.cavemanMode = cavemanChoice as CavemanMode | 'off';\n\n const compressionChoice = await arrowSelect(rl, 'Shell compression (kirograph_exec):', [\n { value: 'off', label: 'off', description: 'Disables kirograph_exec entirely' },\n { value: 'normal', label: 'normal', description: 'Balanced: removes noise, keeps structure (recommended)' },\n { value: 'aggressive', label: 'aggressive', description: 'More compact: groups by category, limits output' },\n { value: 'ultra', label: 'ultra', description: 'Maximum compression: counts and summaries only' },\n ]);\n patch.shellCompressionLevel = compressionChoice as KiroGraphConfig['shellCompressionLevel'];\n if (compressionChoice === 'off') {\n console.log(' \u2139 kirograph_exec disabled (shell compression is off)');\n }\n\n patch.enableGeneralCompression = await askToggle(rl,\n 'General-purpose compression tool (kirograph_compress):',\n 'Enables kirograph_compress \u2014 an on-demand MCP tool that compresses arbitrary text before it reaches the model. ' +\n 'Two engines: rtk-style structural filters for shell output (git, npm, test logs) when a command hint is provided, ' +\n 'or caveman grammar rules for prose and observations otherwise. ' +\n 'Useful when the agent pastes large content, receives a fat RAG chunk, or wants to explicitly compress before storing. ' +\n 'Independent from automatic shell compression (kirograph_exec) and caveman mode \u2014 those apply in the background; ' +\n 'this gives the model an explicit, on-demand compression action.',\n false,\n );\n\n let hooksToImport: string[] | null = null;\n if (opts.offerHookImport && opts.projectRoot) {\n printSection('\uD83E\uDE9D', 'Hooks');\n hooksToImport = await promptImportGlobalHookSelection();\n }\n\n // \u2500\u2500 Memory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83E\uDDE0', 'Memory');\n\n patch.enableMemory = await askToggle(rl,\n 'Persistent memory (cross-session observations):',\n 'Stores decisions, errors, and patterns across sessions. Compressed (if caveman is on), linked to code symbols, searchable via kirograph_mem_* tools. Zero LLM tokens on write.',\n false,\n );\n\n if (patch.enableMemory) {\n patch.enableWatchmen = await askToggle(rl,\n 'Watchmen (auto-synthesize workspace briefs from memory):',\n 'When enough observations accumulate (default: 5), synthesizes them into .kiro/steering/kirograph-watchmen.md, CLAUDE.md, AGENTS.md, or the equivalent for your tool.',\n false,\n );\n\n if (patch.enableWatchmen) {\n // \u2500\u2500 Synthesis mode \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const synthesisMode = await arrowSelect<KiroGraphConfig['watchmenSynthesisMode']>(\n rl,\n 'Watchmen synthesis mode:',\n [\n {\n value: 'local',\n label: 'Local model',\n description: 'Runs a local HuggingFace model via @huggingface/transformers. Zero API cost, no data leaves your machine. Model downloaded once to ~/.kirograph/models/. Works for all tools via runCommand hook.',\n },\n {\n value: 'agent',\n label: 'Active agent',\n description: '\u26A0 Kiro only. Uses the active Kiro agent to synthesize. Consumes API tokens/credits on every synthesis. Not supported for other tools.',\n },\n ],\n );\n patch.watchmenSynthesisMode = synthesisMode;\n\n if (synthesisMode === 'local') {\n // \u2500\u2500 Local model selection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const LOCAL_MODELS = [\n {\n value: 'onnx-community/gemma-4-E4B-it-ONNX',\n label: 'Gemma 4 E4B (recommended)',\n description: '~3\u20134 GB \u00B7 Google DeepMind Gemma 4 \u00B7 4.5B params \u00B7 128K context \u00B7 Best quality \u00B7 Apache 2.0',\n },\n {\n value: 'onnx-community/Qwen2.5-1.5B-Instruct',\n label: 'Qwen2.5-1.5B',\n description: '~1.5 GB \u00B7 Lighter option if RAM is limited \u00B7 Acceptable quality',\n },\n {\n value: 'HuggingFaceTB/SmolLM2-1.7B-Instruct',\n label: 'SmolLM2-1.7B',\n description: '~1.7 GB \u00B7 HuggingFace compact model \u00B7 Good at following structured formats',\n },\n {\n value: '__other__',\n label: 'Other',\n description: 'Enter a custom HuggingFace model ID (must have ONNX weights on onnx-community)',\n },\n ] as const;\n\n const modelChoice = await arrowSelect<string>(rl, 'Local synthesis model:', LOCAL_MODELS.map(m => ({ value: m.value, label: m.label, description: m.description })));\n\n if (modelChoice === '__other__') {\n console.log(`\\n ${dim}Enter a HuggingFace model ID (e.g. onnx-community/gemma-4-E4B-it-ONNX).${reset}`);\n while (true) {\n const raw = (await ask(rl, ` ${violet}Model identifier:${reset} `)).trim();\n if (raw.includes('/')) { patch.watchmenLocalModel = raw; break; }\n console.log(` Expected a HuggingFace model ID in the format org/model-name.`);\n }\n } else {\n patch.watchmenLocalModel = modelChoice;\n }\n }\n }\n }\n\n // \u2500\u2500 Wiki \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n printSection('\uD83D\uDCD6', 'Wiki');\n\n patch.enableWiki = await askToggle(rl,\n 'LLM Wiki (Karpathy-style structured knowledge base):',\n 'Maintains a set of markdown pages that compound knowledge across sessions. Supports search, ingest (two-tool flow), conflict resolution, and health checks via kirograph_wiki_* tools.',\n false,\n );\n\n if (patch.enableWiki) {\n const wikiMode = await arrowSelect<KiroGraphConfig['wikiSynthesisMode']>(\n rl,\n 'Wiki synthesis mode:',\n [\n {\n value: 'agent',\n label: 'Active agent (recommended)',\n description: 'Uses the active LLM agent to generate WIKI_DIFF blocks. Works with any AI tool. Consumes API tokens on ingest.',\n },\n {\n value: 'local',\n label: 'Local model',\n description: 'Runs a local HuggingFace model to generate diffs. Zero API cost, no data leaves your machine. Same infra as Watchmen.',\n },\n ],\n );\n patch.wikiSynthesisMode = wikiMode;\n\n if (wikiMode === 'local') {\n // \u2500\u2500 Local model selection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const WIKI_LOCAL_MODELS = [\n {\n value: 'onnx-community/gemma-4-E4B-it-ONNX',\n label: 'Gemma 4 E4B (recommended)',\n description: '~3\u20134 GB \u00B7 Google DeepMind Gemma 4 \u00B7 4.5B params \u00B7 128K context \u00B7 Best quality \u00B7 Apache 2.0',\n },\n {\n value: 'onnx-community/Qwen2.5-1.5B-Instruct',\n label: 'Qwen2.5-1.5B',\n description: '~1.5 GB \u00B7 Lighter option if RAM is limited \u00B7 Acceptable quality',\n },\n {\n value: 'HuggingFaceTB/SmolLM2-1.7B-Instruct',\n label: 'SmolLM2-1.7B',\n description: '~1.7 GB \u00B7 HuggingFace compact model \u00B7 Good at following structured formats',\n },\n {\n value: '__other__',\n label: 'Other',\n description: 'Enter a custom HuggingFace model ID (must have ONNX weights on onnx-community)',\n },\n ] as const;\n\n const wikiModelChoice = await arrowSelect<string>(rl, 'Local wiki synthesis model:', WIKI_LOCAL_MODELS.map(m => ({ value: m.value, label: m.label, description: m.description })));\n\n if (wikiModelChoice === '__other__') {\n console.log(`\\n ${dim}Enter a HuggingFace model ID (e.g. onnx-community/gemma-4-E4B-it-ONNX).${reset}`);\n while (true) {\n const raw = (await ask(rl, ` ${violet}Model identifier:${reset} `)).trim();\n if (raw.includes('/')) { patch.wikiLocalModel = raw; break; }\n console.log(` Expected a HuggingFace model ID in the format org/model-name.`);\n }\n } else {\n patch.wikiLocalModel = wikiModelChoice;\n }\n }\n }\n\n return { patch, hooksToImport };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["patch"]
|
|
7
7
|
}
|
|
@@ -45,6 +45,14 @@ var import_dashboard = require("./dashboard");
|
|
|
45
45
|
var import_qdrant_dashboard = require("./qdrant-dashboard");
|
|
46
46
|
var import_targets = require("./targets");
|
|
47
47
|
var import_import_prompt = require("../../hooks/import-prompt");
|
|
48
|
+
function normalizeFolderExcludes(raw) {
|
|
49
|
+
return raw.split(",").map((s) => s.trim().replace(/\\/g, "/")).filter(Boolean).map((s) => {
|
|
50
|
+
const stripped = s.startsWith("/") ? s.slice(1) : s;
|
|
51
|
+
if (!stripped) return "";
|
|
52
|
+
if (!stripped.includes("/")) return `**/${stripped}/**`;
|
|
53
|
+
return stripped.endsWith("/**") ? stripped : `${stripped}/**`;
|
|
54
|
+
}).filter(Boolean);
|
|
55
|
+
}
|
|
48
56
|
function _findRustc() {
|
|
49
57
|
const inPath = (0, import_child_process.spawnSync)("rustc", ["--version"], { encoding: "utf8", shell: true });
|
|
50
58
|
if (inPath.status === 0) return "rustc";
|
|
@@ -119,7 +127,7 @@ async function runInstaller(target = "kiro", opts = {}) {
|
|
|
119
127
|
`);
|
|
120
128
|
console.log();
|
|
121
129
|
let kiroHookFormat = "v2";
|
|
122
|
-
if (target === "kiro") {
|
|
130
|
+
if (target === "kiro" && !opts.yes) {
|
|
123
131
|
kiroHookFormat = await (0, import_prompts.arrowSelect)(rl, "Which version of Kiro IDE are you using?", [
|
|
124
132
|
{ value: "v1-legacy", label: "Beta Version 0.x.x", description: "Kiro IDE beta releases (uses .kiro.hook format)" },
|
|
125
133
|
{ value: "v2", label: "Version 1.x.x", description: "Kiro IDE stable releases (uses .json hook format)" }
|
|
@@ -141,8 +149,13 @@ async function runInstaller(target = "kiro", opts = {}) {
|
|
|
141
149
|
let wikiSynthesisMode = "agent";
|
|
142
150
|
let wikiLocalModel = "onnx-community/gemma-4-E4B-it-ONNX";
|
|
143
151
|
let enableCodeHealth = false;
|
|
144
|
-
let
|
|
152
|
+
let enableNavigation = false;
|
|
153
|
+
let enableComplexity = false;
|
|
154
|
+
let enableGitContext = false;
|
|
155
|
+
let enableEditPrimitives = false;
|
|
156
|
+
let enableBranch = false;
|
|
145
157
|
let enableAgentUtils = false;
|
|
158
|
+
let enableGeneralCompression = false;
|
|
146
159
|
let trackCallSites = false;
|
|
147
160
|
let shouldOfferIndex = false;
|
|
148
161
|
let typesenseDashboard = false;
|
|
@@ -164,9 +177,14 @@ async function runInstaller(target = "kiro", opts = {}) {
|
|
|
164
177
|
enableWiki = config.enableWiki ?? false;
|
|
165
178
|
wikiSynthesisMode = config.wikiSynthesisMode ?? "agent";
|
|
166
179
|
wikiLocalModel = config.wikiLocalModel ?? "onnx-community/gemma-4-E4B-it-ONNX";
|
|
167
|
-
enableCodeHealth = config.enableCodeHealth ??
|
|
168
|
-
|
|
180
|
+
enableCodeHealth = config.enableCodeHealth ?? false;
|
|
181
|
+
enableNavigation = config.enableNavigation ?? false;
|
|
182
|
+
enableComplexity = config.enableComplexity ?? false;
|
|
183
|
+
enableGitContext = config.enableGitContext ?? false;
|
|
184
|
+
enableEditPrimitives = config.enableEditPrimitives ?? false;
|
|
185
|
+
enableBranch = config.enableBranch ?? false;
|
|
169
186
|
enableAgentUtils = config.enableAgentUtils ?? true;
|
|
187
|
+
enableGeneralCompression = config.enableGeneralCompression ?? false;
|
|
170
188
|
trackCallSites = config.trackCallSites ?? false;
|
|
171
189
|
console.log(` \u2713 Reusing existing KiroGraph data in ${cwd}/.kirograph/`);
|
|
172
190
|
console.log(` \u2022 semanticEngine: ${config.semanticEngine}`);
|
|
@@ -224,8 +242,13 @@ async function runInstaller(target = "kiro", opts = {}) {
|
|
|
224
242
|
wikiSynthesisMode = patch.wikiSynthesisMode ?? "agent";
|
|
225
243
|
wikiLocalModel = patch.wikiLocalModel ?? "onnx-community/gemma-4-E4B-it-ONNX";
|
|
226
244
|
enableCodeHealth = patch.enableCodeHealth ?? false;
|
|
227
|
-
|
|
245
|
+
enableNavigation = patch.enableNavigation ?? false;
|
|
246
|
+
enableComplexity = patch.enableComplexity ?? false;
|
|
247
|
+
enableGitContext = patch.enableGitContext ?? false;
|
|
248
|
+
enableEditPrimitives = patch.enableEditPrimitives ?? false;
|
|
249
|
+
enableBranch = patch.enableBranch ?? false;
|
|
228
250
|
enableAgentUtils = patch.enableAgentUtils ?? false;
|
|
251
|
+
enableGeneralCompression = patch.enableGeneralCompression ?? false;
|
|
229
252
|
trackCallSites = patch.trackCallSites ?? false;
|
|
230
253
|
typesenseDashboard = patch.typesenseDashboard;
|
|
231
254
|
qdrantDashboard = patch.qdrantDashboard;
|
|
@@ -398,7 +421,32 @@ async function runInstaller(target = "kiro", opts = {}) {
|
|
|
398
421
|
}
|
|
399
422
|
}
|
|
400
423
|
}
|
|
401
|
-
|
|
424
|
+
const lateOpts = {
|
|
425
|
+
cavemanMode,
|
|
426
|
+
shellCompressionLevel,
|
|
427
|
+
enableMemory,
|
|
428
|
+
enableDocs,
|
|
429
|
+
enableData,
|
|
430
|
+
enableSecurity,
|
|
431
|
+
enableArchitecture,
|
|
432
|
+
enablePatterns,
|
|
433
|
+
enableWatchmen,
|
|
434
|
+
watchmenSynthesisMode,
|
|
435
|
+
enableWiki,
|
|
436
|
+
wikiSynthesisMode,
|
|
437
|
+
wikiLocalModel,
|
|
438
|
+
enableCodeHealth,
|
|
439
|
+
enableNavigation,
|
|
440
|
+
enableComplexity,
|
|
441
|
+
enableGitContext,
|
|
442
|
+
enableEditPrimitives,
|
|
443
|
+
enableBranch,
|
|
444
|
+
enableAgentUtils,
|
|
445
|
+
enableGeneralCompression,
|
|
446
|
+
trackCallSites,
|
|
447
|
+
kiroHookFormat
|
|
448
|
+
};
|
|
449
|
+
installer.installLate(cwd, lateOpts);
|
|
402
450
|
if (target === "kiro" && hooksToImport && hooksToImport.length > 0) {
|
|
403
451
|
(0, import_import_prompt.applyImportedGlobalHooks)(cwd, hooksToImport);
|
|
404
452
|
}
|
|
@@ -411,6 +459,14 @@ async function runInstaller(target = "kiro", opts = {}) {
|
|
|
411
459
|
if (qdrantDashboard) {
|
|
412
460
|
await (0, import_qdrant_dashboard.ensureQdrantUI)(cwd);
|
|
413
461
|
}
|
|
462
|
+
if (shouldOfferIndex && !opts.yes) {
|
|
463
|
+
const rawExclude = await (0, import_prompts.ask)(rl, ` \x1B[38;5;99mAny folders to exclude from indexing?\x1B[0m \x1B[2m(optional, comma-separated, e.g. src/generated, vendor, /tools/scripts)\x1B[0m `);
|
|
464
|
+
const extraExcludes = normalizeFolderExcludes(rawExclude);
|
|
465
|
+
if (extraExcludes.length > 0) {
|
|
466
|
+
await (0, import_config.addExcludePatterns)(cwd, extraExcludes);
|
|
467
|
+
console.log(` \u2713 Excluding: ${extraExcludes.join(", ")}`);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
414
470
|
const doIndex = shouldOfferIndex && (opts.yes || await (0, import_prompts.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."));
|
|
415
471
|
if (doIndex) {
|
|
416
472
|
const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
|
|
@@ -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, arrowSelect } 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';\nimport { applyImportedGlobalHooks } from '../../hooks/import-prompt';\n\nfunction _findRustc(): string | null {\n // Check PATH first, then the default rustup install location\n const inPath = spawnSync('rustc', ['--version'], { encoding: 'utf8', shell: true });\n if (inPath.status === 0) return 'rustc';\n const home = process.env.HOME ?? process.env.USERPROFILE ?? '';\n const cargoRustc = path.join(home, '.cargo', 'bin', 'rustc');\n if (fs.existsSync(cargoRustc)) return cargoRustc;\n return null;\n}\n\nfunction _installTurbovecAddon(): void {\n const nativeDir = path.join(__dirname, '..', '..', '..', 'native', 'turbovec-node');\n const hasAddon = fs.existsSync(nativeDir) &&\n fs.readdirSync(nativeDir).some(f => f.startsWith('turbovec_node.') && f.endsWith('.node'));\n\n if (hasAddon) {\n console.log(` \u2713 turbovec-node addon already built`);\n return;\n }\n\n // Ensure Rust toolchain \u2014 install via rustup if missing\n let rustc = _findRustc();\n if (!rustc) {\n console.log(`\\n Rust toolchain not found. Installing via rustup...`);\n const isWindows = process.platform === 'win32';\n if (isWindows) {\n console.warn(` \u2717 Automated rustup install is not supported on Windows.`);\n console.warn(` Download rustup-init.exe from https://rustup.rs and re-run kirograph install.`);\n return;\n }\n const rustup = spawnSync(\n 'sh',\n ['-c', 'curl --proto \"=https\" --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path'],\n { stdio: 'inherit', shell: false },\n );\n if (rustup.status !== 0) {\n console.warn(` \u2717 rustup install failed. Install Rust manually: https://rustup.rs`);\n console.warn(` Then: cd native/turbovec-node && npm install && npm run build`);\n return;\n }\n rustc = _findRustc();\n if (!rustc) {\n console.warn(` \u2717 rustc still not found after rustup install. Re-run kirograph install in a new shell.`);\n return;\n }\n console.log(` \u2713 Rust installed: ${spawnSync(rustc, ['--version'], { encoding: 'utf8' }).stdout?.trim()}`);\n } else {\n console.log(` \u2713 Rust: ${spawnSync(rustc, ['--version'], { encoding: 'utf8' }).stdout?.trim()}`);\n }\n\n // Ensure ~/.cargo/bin is on PATH for child processes so cargo/napi-rs cli can find it\n if (!process.env.PATH?.includes('.cargo')) {\n const home = process.env.HOME ?? process.env.USERPROFILE ?? '';\n process.env.PATH = `${path.join(home, '.cargo', 'bin')}:${process.env.PATH ?? ''}`;\n }\n\n console.log(`\\n Building turbovec-node native addon (Rust/napi-rs)...`);\n console.log(` This may take a few minutes on first build.`);\n\n const npmInstall = spawnSync('npm', ['install'], { cwd: nativeDir, stdio: 'inherit', shell: true });\n if (npmInstall.status !== 0) {\n console.warn(` \u2717 npm install failed in native/turbovec-node`);\n return;\n }\n\n const build = spawnSync('npm', ['run', 'build'], { cwd: nativeDir, stdio: 'inherit', shell: true });\n if (build.status === 0) {\n console.log(` \u2713 turbovec-node addon built`);\n } else {\n console.warn(` \u2717 Build failed (exit ${build.status}). Run manually:`);\n console.warn(` cd native/turbovec-node && npm install && npm run build`);\n }\n}\n\nexport async function runInstaller(target: InstallTarget = 'kiro', opts: { yes?: boolean } = {}): 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 console.log();\n\n // Ask Kiro IDE version as the first question for the kiro target\n let kiroHookFormat: 'v1-legacy' | 'v2' = 'v2';\n if (target === 'kiro') {\n kiroHookFormat = await arrowSelect<'v1-legacy' | 'v2'>(rl, 'Which version of Kiro IDE are you using?', [\n { value: 'v1-legacy', label: 'Beta Version 0.x.x', description: 'Kiro IDE beta releases (uses .kiro.hook format)' },\n { value: 'v2', label: 'Version 1.x.x', description: 'Kiro IDE stable releases (uses .json hook format)' },\n ], 1);\n }\n\n installer.installEarly(cwd, kiroHookFormat);\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 enablePatterns = false;\n let enableArchitecture = false;\n let enableWatchmen = false;\n let watchmenSynthesisMode: 'local' | 'agent' = 'local';\n let enableWiki = false;\n let wikiSynthesisMode: 'local' | 'agent' = 'agent';\n let wikiLocalModel = 'onnx-community/gemma-4-E4B-it-ONNX';\n let enableCodeHealth = false;\n let enableAdvancedAnalysis = false;\n let enableAgentUtils = false;\n let trackCallSites = false;\n let shouldOfferIndex = false;\n let typesenseDashboard = false;\n let qdrantDashboard = false;\n let hooksToImport: string[] | null = null;\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 enableWatchmen = config.enableWatchmen ?? false;\n watchmenSynthesisMode = config.watchmenSynthesisMode ?? 'local';\n enablePatterns = (config as any).enablePatterns ?? false;\n enableArchitecture = config.enableArchitecture ?? false;\n enableWiki = config.enableWiki ?? false;\n wikiSynthesisMode = config.wikiSynthesisMode ?? 'agent';\n wikiLocalModel = config.wikiLocalModel ?? 'onnx-community/gemma-4-E4B-it-ONNX';\n enableCodeHealth = config.enableCodeHealth ?? true;\n enableAdvancedAnalysis = config.enableAdvancedAnalysis ?? false;\n enableAgentUtils = config.enableAgentUtils ?? true;\n trackCallSites = config.trackCallSites ?? 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 if (config.enableEmbeddings && config.semanticEngine === 'turboquant') {\n let tqAvailable = false;\n try { require('turboquant-js'); tqAvailable = true; } catch { /* not installed */ }\n if (!tqAvailable) {\n console.log(`\\n Installing TurboQuant dependencies...`);\n const result = spawnSync('npm', ['install', 'turboquant-js'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 turboquant-js installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install turboquant-js`);\n }\n }\n }\n if (config.enableEmbeddings && config.semanticEngine === 'turbovec') {\n _installTurbovecAddon();\n }\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 console.log(` \u2022 enablePatterns: ${enablePatterns}`);\n } else {\n shouldOfferIndex = true;\n const promptResult = await promptConfigOptions(rl, {\n projectRoot: cwd,\n offerHookImport: target === 'kiro' && !opts.yes,\n });\n const patch = promptResult.patch;\n hooksToImport = promptResult.hooksToImport;\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 enablePatterns = patch.enablePatterns ?? false;\n enableArchitecture = patch.enableArchitecture ?? false;\n enableWatchmen = patch.enableWatchmen ?? false;\n watchmenSynthesisMode = patch.watchmenSynthesisMode ?? 'local';\n enableWiki = patch.enableWiki ?? false;\n wikiSynthesisMode = (patch as any).wikiSynthesisMode ?? 'agent';\n wikiLocalModel = (patch as any).wikiLocalModel ?? 'onnx-community/gemma-4-E4B-it-ONNX';\n enableCodeHealth = patch.enableCodeHealth ?? false;\n enableAdvancedAnalysis = patch.enableAdvancedAnalysis ?? false;\n enableAgentUtils = patch.enableAgentUtils ?? false;\n trackCallSites = patch.trackCallSites ?? 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 } else if (patch.semanticEngine === 'turboquant') {\n console.log(`\\n Installing TurboQuant dependencies...`);\n const result = spawnSync('npm', ['install', 'turboquant-js'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 turboquant-js installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install turboquant-js`);\n }\n } else if (patch.semanticEngine === 'turbovec') {\n _installTurbovecAddon();\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 console.log(` \u2022 enablePatterns: ${enablePatterns}`);\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 if ((patch as any).dataInstallPdf) {\n console.log(`\\n Installing @firecrawl/pdf-inspector...`);\n const pdfResult = spawnSync('npm', ['install', '--save-optional', '@firecrawl/pdf-inspector'], { stdio: 'inherit', shell: true });\n if (pdfResult.status === 0) {\n console.log(` \u2713 @firecrawl/pdf-inspector installed`);\n } else {\n console.warn(` \u2717 npm install failed. Run manually: npm install --save-optional @firecrawl/pdf-inspector`);\n }\n }\n }\n\n if (enablePatterns) {\n console.log(`\\n Installing @ast-grep/napi...`);\n const astGrepResult = spawnSync('npm', ['install', '@ast-grep/napi', '--save-optional'], {\n stdio: 'inherit',\n shell: true,\n });\n if (astGrepResult.status === 0) {\n console.log(` \u2713 @ast-grep/napi installed`);\n\n // Install tree-sitter grammar packages for languages beyond the built-in\n // JS/TS/HTML/CSS set. These are optional \u2014 missing packages are silently\n // skipped at runtime, so a failed install here isn't fatal.\n const langPackages = [\n '@ast-grep/lang-go',\n '@ast-grep/lang-python',\n '@ast-grep/lang-java',\n '@ast-grep/lang-rust',\n '@ast-grep/lang-c',\n '@ast-grep/lang-cpp',\n '@ast-grep/lang-csharp',\n '@ast-grep/lang-kotlin',\n '@ast-grep/lang-swift',\n '@ast-grep/lang-ruby',\n '@ast-grep/lang-php',\n '@ast-grep/lang-bash',\n '@ast-grep/lang-scala',\n '@ast-grep/lang-dart',\n '@ast-grep/lang-lua',\n '@ast-grep/lang-elixir',\n '@ast-grep/lang-haskell',\n ];\n const langResult = spawnSync('npm', ['install', ...langPackages, '--save-optional'], {\n stdio: 'inherit',\n shell: true,\n });\n if (langResult.status === 0) {\n console.log(` \u2713 @ast-grep language grammars installed`);\n } else {\n console.warn(` \u2717 Language grammar install failed. Pattern matching will be limited to JS/TS/HTML/CSS.`);\n console.warn(` Run manually: npm install ${langPackages.join(' ')}`);\n }\n } else {\n console.warn(` \u2717 @ast-grep/napi install failed. Run manually: npm install @ast-grep/napi`);\n console.warn(` KiroGraph will continue but kirograph pattern and kirograph_live_search will be unavailable.`);\n }\n }\n }\n\n installer.installLate(cwd, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture, enablePatterns, enableWatchmen, watchmenSynthesisMode, enableWiki, wikiSynthesisMode, wikiLocalModel, enableCodeHealth, enableAdvancedAnalysis, enableAgentUtils, trackCallSites, kiroHookFormat);\n if (target === 'kiro' && hooksToImport && hooksToImport.length > 0) {\n applyImportedGlobalHooks(cwd, hooksToImport);\n }\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 const doIndex = shouldOfferIndex && (opts.yes || 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 if (doIndex) {\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 } else 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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",
|
|
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, addExcludePatterns } from '../../config';\nimport { printBanner } from '../banner';\nimport { renderIndexProgress } from '../progress';\nimport { dim, reset } from '../ui';\nimport { ask, askToggle, arrowSelect } from './prompts';\nimport { promptConfigOptions } from './config-prompt';\nimport { openTypesenseDashboard } from './dashboard';\nimport { ensureQdrantUI, openQdrantDashboard } from './qdrant-dashboard';\nimport type { InstallTarget, LateInstallOptions } from './common';\nimport { getTargetInstaller } from './targets';\nimport type { CavemanMode } from './caveman';\nimport { applyImportedGlobalHooks } from '../../hooks/import-prompt';\n\n// Converts user-typed folder names/paths into glob exclude patterns:\n// \"src/gen\" -> \"src/gen/**\" (relative path, anchored at root)\n// \"vendor\" -> \"**/vendor/**\" (bare name, matches at any depth)\n// \"/tools/build\" -> \"tools/build/**\" (leading slash stripped)\nfunction normalizeFolderExcludes(raw: string): string[] {\n return raw\n .split(',')\n .map(s => s.trim().replace(/\\\\/g, '/'))\n .filter(Boolean)\n .map(s => {\n const stripped = s.startsWith('/') ? s.slice(1) : s;\n if (!stripped) return '';\n // Bare folder name (no path separator) \u2192 match at any depth\n if (!stripped.includes('/')) return `**/${stripped}/**`;\n // Path \u2192 anchor at project root\n return stripped.endsWith('/**') ? stripped : `${stripped}/**`;\n })\n .filter(Boolean);\n}\n\nfunction _findRustc(): string | null {\n // Check PATH first, then the default rustup install location\n const inPath = spawnSync('rustc', ['--version'], { encoding: 'utf8', shell: true });\n if (inPath.status === 0) return 'rustc';\n const home = process.env.HOME ?? process.env.USERPROFILE ?? '';\n const cargoRustc = path.join(home, '.cargo', 'bin', 'rustc');\n if (fs.existsSync(cargoRustc)) return cargoRustc;\n return null;\n}\n\nfunction _installTurbovecAddon(): void {\n const nativeDir = path.join(__dirname, '..', '..', '..', 'native', 'turbovec-node');\n const hasAddon = fs.existsSync(nativeDir) &&\n fs.readdirSync(nativeDir).some(f => f.startsWith('turbovec_node.') && f.endsWith('.node'));\n\n if (hasAddon) {\n console.log(` \u2713 turbovec-node addon already built`);\n return;\n }\n\n // Ensure Rust toolchain \u2014 install via rustup if missing\n let rustc = _findRustc();\n if (!rustc) {\n console.log(`\\n Rust toolchain not found. Installing via rustup...`);\n const isWindows = process.platform === 'win32';\n if (isWindows) {\n console.warn(` \u2717 Automated rustup install is not supported on Windows.`);\n console.warn(` Download rustup-init.exe from https://rustup.rs and re-run kirograph install.`);\n return;\n }\n const rustup = spawnSync(\n 'sh',\n ['-c', 'curl --proto \"=https\" --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path'],\n { stdio: 'inherit', shell: false },\n );\n if (rustup.status !== 0) {\n console.warn(` \u2717 rustup install failed. Install Rust manually: https://rustup.rs`);\n console.warn(` Then: cd native/turbovec-node && npm install && npm run build`);\n return;\n }\n rustc = _findRustc();\n if (!rustc) {\n console.warn(` \u2717 rustc still not found after rustup install. Re-run kirograph install in a new shell.`);\n return;\n }\n console.log(` \u2713 Rust installed: ${spawnSync(rustc, ['--version'], { encoding: 'utf8' }).stdout?.trim()}`);\n } else {\n console.log(` \u2713 Rust: ${spawnSync(rustc, ['--version'], { encoding: 'utf8' }).stdout?.trim()}`);\n }\n\n // Ensure ~/.cargo/bin is on PATH for child processes so cargo/napi-rs cli can find it\n if (!process.env.PATH?.includes('.cargo')) {\n const home = process.env.HOME ?? process.env.USERPROFILE ?? '';\n process.env.PATH = `${path.join(home, '.cargo', 'bin')}:${process.env.PATH ?? ''}`;\n }\n\n console.log(`\\n Building turbovec-node native addon (Rust/napi-rs)...`);\n console.log(` This may take a few minutes on first build.`);\n\n const npmInstall = spawnSync('npm', ['install'], { cwd: nativeDir, stdio: 'inherit', shell: true });\n if (npmInstall.status !== 0) {\n console.warn(` \u2717 npm install failed in native/turbovec-node`);\n return;\n }\n\n const build = spawnSync('npm', ['run', 'build'], { cwd: nativeDir, stdio: 'inherit', shell: true });\n if (build.status === 0) {\n console.log(` \u2713 turbovec-node addon built`);\n } else {\n console.warn(` \u2717 Build failed (exit ${build.status}). Run manually:`);\n console.warn(` cd native/turbovec-node && npm install && npm run build`);\n }\n}\n\nexport async function runInstaller(target: InstallTarget = 'kiro', opts: { yes?: boolean } = {}): 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 console.log();\n\n // Ask Kiro IDE version as the first question for the kiro target\n let kiroHookFormat: 'v1-legacy' | 'v2' = 'v2';\n if (target === 'kiro' && !opts.yes) {\n kiroHookFormat = await arrowSelect<'v1-legacy' | 'v2'>(rl, 'Which version of Kiro IDE are you using?', [\n { value: 'v1-legacy', label: 'Beta Version 0.x.x', description: 'Kiro IDE beta releases (uses .kiro.hook format)' },\n { value: 'v2', label: 'Version 1.x.x', description: 'Kiro IDE stable releases (uses .json hook format)' },\n ], 1);\n }\n\n installer.installEarly(cwd, kiroHookFormat);\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 enablePatterns = false;\n let enableArchitecture = false;\n let enableWatchmen = false;\n let watchmenSynthesisMode: 'local' | 'agent' = 'local';\n let enableWiki = false;\n let wikiSynthesisMode: 'local' | 'agent' = 'agent';\n let wikiLocalModel = 'onnx-community/gemma-4-E4B-it-ONNX';\n let enableCodeHealth = false;\n let enableNavigation = false;\n let enableComplexity = false;\n let enableGitContext = false;\n let enableEditPrimitives = false;\n let enableBranch = false;\n let enableAgentUtils = false;\n let enableGeneralCompression = false;\n let trackCallSites = false;\n let shouldOfferIndex = false;\n let typesenseDashboard = false;\n let qdrantDashboard = false;\n let hooksToImport: string[] | null = null;\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 enableWatchmen = config.enableWatchmen ?? false;\n watchmenSynthesisMode = config.watchmenSynthesisMode ?? 'local';\n enablePatterns = (config as any).enablePatterns ?? false;\n enableArchitecture = config.enableArchitecture ?? false;\n enableWiki = config.enableWiki ?? false;\n wikiSynthesisMode = config.wikiSynthesisMode ?? 'agent';\n wikiLocalModel = config.wikiLocalModel ?? 'onnx-community/gemma-4-E4B-it-ONNX';\n enableCodeHealth = config.enableCodeHealth ?? false;\n enableNavigation = config.enableNavigation ?? false;\n enableComplexity = config.enableComplexity ?? false;\n enableGitContext = config.enableGitContext ?? false;\n enableEditPrimitives = config.enableEditPrimitives ?? false;\n enableBranch = config.enableBranch ?? false;\n enableAgentUtils = config.enableAgentUtils ?? true;\n enableGeneralCompression = config.enableGeneralCompression ?? false;\n trackCallSites = config.trackCallSites ?? 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 if (config.enableEmbeddings && config.semanticEngine === 'turboquant') {\n let tqAvailable = false;\n try { require('turboquant-js'); tqAvailable = true; } catch { /* not installed */ }\n if (!tqAvailable) {\n console.log(`\\n Installing TurboQuant dependencies...`);\n const result = spawnSync('npm', ['install', 'turboquant-js'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 turboquant-js installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install turboquant-js`);\n }\n }\n }\n if (config.enableEmbeddings && config.semanticEngine === 'turbovec') {\n _installTurbovecAddon();\n }\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 console.log(` \u2022 enablePatterns: ${enablePatterns}`);\n } else {\n shouldOfferIndex = true;\n const promptResult = await promptConfigOptions(rl, {\n projectRoot: cwd,\n offerHookImport: target === 'kiro' && !opts.yes,\n });\n const patch = promptResult.patch;\n hooksToImport = promptResult.hooksToImport;\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 enablePatterns = patch.enablePatterns ?? false;\n enableArchitecture = patch.enableArchitecture ?? false;\n enableWatchmen = patch.enableWatchmen ?? false;\n watchmenSynthesisMode = patch.watchmenSynthesisMode ?? 'local';\n enableWiki = patch.enableWiki ?? false;\n wikiSynthesisMode = (patch as any).wikiSynthesisMode ?? 'agent';\n wikiLocalModel = (patch as any).wikiLocalModel ?? 'onnx-community/gemma-4-E4B-it-ONNX';\n enableCodeHealth = patch.enableCodeHealth ?? false;\n enableNavigation = patch.enableNavigation ?? false;\n enableComplexity = patch.enableComplexity ?? false;\n enableGitContext = patch.enableGitContext ?? false;\n enableEditPrimitives = patch.enableEditPrimitives ?? false;\n enableBranch = patch.enableBranch ?? false;\n enableAgentUtils = patch.enableAgentUtils ?? false;\n enableGeneralCompression = patch.enableGeneralCompression ?? false;\n trackCallSites = patch.trackCallSites ?? 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 } else if (patch.semanticEngine === 'turboquant') {\n console.log(`\\n Installing TurboQuant dependencies...`);\n const result = spawnSync('npm', ['install', 'turboquant-js'], { stdio: 'inherit', shell: true });\n if (result.status === 0) {\n console.log(` \u2713 turboquant-js installed`);\n } else {\n console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);\n console.warn(` npm install turboquant-js`);\n }\n } else if (patch.semanticEngine === 'turbovec') {\n _installTurbovecAddon();\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 console.log(` \u2022 enablePatterns: ${enablePatterns}`);\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 if ((patch as any).dataInstallPdf) {\n console.log(`\\n Installing @firecrawl/pdf-inspector...`);\n const pdfResult = spawnSync('npm', ['install', '--save-optional', '@firecrawl/pdf-inspector'], { stdio: 'inherit', shell: true });\n if (pdfResult.status === 0) {\n console.log(` \u2713 @firecrawl/pdf-inspector installed`);\n } else {\n console.warn(` \u2717 npm install failed. Run manually: npm install --save-optional @firecrawl/pdf-inspector`);\n }\n }\n }\n\n if (enablePatterns) {\n console.log(`\\n Installing @ast-grep/napi...`);\n const astGrepResult = spawnSync('npm', ['install', '@ast-grep/napi', '--save-optional'], {\n stdio: 'inherit',\n shell: true,\n });\n if (astGrepResult.status === 0) {\n console.log(` \u2713 @ast-grep/napi installed`);\n\n // Install tree-sitter grammar packages for languages beyond the built-in\n // JS/TS/HTML/CSS set. These are optional \u2014 missing packages are silently\n // skipped at runtime, so a failed install here isn't fatal.\n const langPackages = [\n '@ast-grep/lang-go',\n '@ast-grep/lang-python',\n '@ast-grep/lang-java',\n '@ast-grep/lang-rust',\n '@ast-grep/lang-c',\n '@ast-grep/lang-cpp',\n '@ast-grep/lang-csharp',\n '@ast-grep/lang-kotlin',\n '@ast-grep/lang-swift',\n '@ast-grep/lang-ruby',\n '@ast-grep/lang-php',\n '@ast-grep/lang-bash',\n '@ast-grep/lang-scala',\n '@ast-grep/lang-dart',\n '@ast-grep/lang-lua',\n '@ast-grep/lang-elixir',\n '@ast-grep/lang-haskell',\n ];\n const langResult = spawnSync('npm', ['install', ...langPackages, '--save-optional'], {\n stdio: 'inherit',\n shell: true,\n });\n if (langResult.status === 0) {\n console.log(` \u2713 @ast-grep language grammars installed`);\n } else {\n console.warn(` \u2717 Language grammar install failed. Pattern matching will be limited to JS/TS/HTML/CSS.`);\n console.warn(` Run manually: npm install ${langPackages.join(' ')}`);\n }\n } else {\n console.warn(` \u2717 @ast-grep/napi install failed. Run manually: npm install @ast-grep/napi`);\n console.warn(` KiroGraph will continue but kirograph pattern and kirograph_live_search will be unavailable.`);\n }\n }\n }\n\n const lateOpts: LateInstallOptions = {\n cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity,\n enableArchitecture, enablePatterns, enableWatchmen, watchmenSynthesisMode, enableWiki,\n wikiSynthesisMode, wikiLocalModel,\n enableCodeHealth, enableNavigation, enableComplexity, enableGitContext, enableEditPrimitives, enableBranch,\n enableAgentUtils, enableGeneralCompression, trackCallSites, kiroHookFormat,\n };\n installer.installLate(cwd, lateOpts);\n if (target === 'kiro' && hooksToImport && hooksToImport.length > 0) {\n applyImportedGlobalHooks(cwd, hooksToImport);\n }\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 exclude folders before indexing\n if (shouldOfferIndex && !opts.yes) {\n const rawExclude = await ask(rl, ` \\x1b[38;5;99mAny folders to exclude from indexing?\\x1b[0m \\x1b[2m(optional, comma-separated, e.g. src/generated, vendor, /tools/scripts)\\x1b[0m `);\n const extraExcludes = normalizeFolderExcludes(rawExclude);\n if (extraExcludes.length > 0) {\n await addExcludePatterns(cwd, extraExcludes);\n console.log(` \u2713 Excluding: ${extraExcludes.join(', ')}`);\n }\n }\n\n // 7. Optionally init + index\n const doIndex = shouldOfferIndex && (opts.yes || 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 if (doIndex) {\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 } else 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
|
}
|
|
@@ -59,6 +59,14 @@ function buildAgentInstructions(cavemanModeOrOpts) {
|
|
|
59
59
|
const enableSecurity = opts.enableSecurity ?? false;
|
|
60
60
|
const enablePatterns = opts.enablePatterns ?? false;
|
|
61
61
|
const enableWiki = opts.enableWiki ?? false;
|
|
62
|
+
const enableCodeHealth = opts.enableCodeHealth ?? false;
|
|
63
|
+
const enableNavigation = opts.enableNavigation ?? false;
|
|
64
|
+
const enableComplexity = opts.enableComplexity ?? false;
|
|
65
|
+
const enableGitContext = opts.enableGitContext ?? false;
|
|
66
|
+
const enableEditPrimitives = opts.enableEditPrimitives ?? false;
|
|
67
|
+
const enableAgentUtils = opts.enableAgentUtils ?? false;
|
|
68
|
+
const enableGeneralCompression = opts.enableGeneralCompression ?? false;
|
|
69
|
+
const trackCallSites = opts.trackCallSites ?? false;
|
|
62
70
|
let content = `# KiroGraph
|
|
63
71
|
|
|
64
72
|
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.
|
|
@@ -68,35 +76,16 @@ KiroGraph builds a local semantic knowledge graph of this codebase. When the \`k
|
|
|
68
76
|
| Question | Tool |
|
|
69
77
|
|----------|------|
|
|
70
78
|
| Where do I start on this task? | \`kirograph_context\` |
|
|
71
|
-
| What is this symbol / show me its code | \`kirograph_node\` with \`
|
|
79
|
+
| What is this symbol / show me its code | \`kirograph_node\` with \`detail: "signatures"\` |
|
|
72
80
|
| Find a symbol by name | \`kirograph_search\` |
|
|
73
|
-
| Who calls function X? |
|
|
74
|
-
| What does
|
|
75
|
-
| What breaks if I change X? | \`kirograph_impact\` |
|
|
76
|
-
| How are X and Y connected? | \`kirograph_path\` |
|
|
77
|
-
| What extends / implements this type? | \`kirograph_type_hierarchy\` |
|
|
78
|
-
| Which code is never called? | \`kirograph_dead_code\` |
|
|
79
|
-
| Are there import cycles? | \`kirograph_circular_deps\` |
|
|
80
|
-
| What files are indexed? | \`kirograph_files\` |
|
|
81
|
-
| Is the index healthy? | \`kirograph_status\` |
|
|
82
|
-
| What are the most critical symbols? | \`kirograph_hotspots\` |
|
|
83
|
-
| Any unexpected cross-module coupling? | \`kirograph_surprising\` |
|
|
84
|
-
| What changed since the last snapshot? | \`kirograph_diff\` |
|
|
85
|
-
${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" : ""}
|
|
86
|
-
${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" : ""}${enablePatterns ? "| Find structural code patterns? | `kirograph_live_search` |\n| Browse SAST rules | `kirograph pattern --list` |\n" : ""}${enableWiki ? "| Look up project knowledge | `kirograph_wiki_search` |\n| Update wiki with new knowledge | `kirograph_wiki_ingest` + `kirograph_wiki_apply_diff` |\n" : ""}
|
|
81
|
+
${trackCallSites ? "| Who calls function X? | `kirograph_callers` |\n| What does function X call? | `kirograph_callees` |\n" : ""}${enableNavigation ? "| What breaks if I change X? | `kirograph_impact` |\n| What files are indexed? | `kirograph_files` |\n| Is the index healthy? | `kirograph_status` |\n" : ""}${enableCodeHealth ? "| How are X and Y connected? | `kirograph_path` |\n| Which code is never called? | `kirograph_dead_code` |\n| Are there import cycles? | `kirograph_circular_deps` |\n| What extends / implements this type? | `kirograph_type_hierarchy` |\n" : ""}
|
|
82
|
+
${enableCodeHealth ? "| 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" : ""}${enableGitContext ? "| Semantic context for my current changes? | `kirograph_flows` |\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" : ""}${enableCompression ? "| Run a command with token savings | `kirograph_exec` |\n" : ""}${enableAgentUtils ? "| Check token savings stats | `kirograph_gain` |\n| Read a file (cached) | `kirograph_read` |\n" : ""}${enableGeneralCompression ? "| Compress text or shell output before sending | `kirograph_compress` |\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" : ""}${enablePatterns ? "| Find structural code patterns? | `kirograph_live_search` |\n| Browse SAST rules | `kirograph pattern --list` |\n" : ""}${enableWiki ? "| Look up project knowledge | `kirograph_wiki_search` |\n| Update wiki with new knowledge | `kirograph_wiki_ingest` + `kirograph_wiki_apply_diff` |\n" : ""}
|
|
87
83
|
## Tool selection
|
|
88
84
|
|
|
89
|
-
- Start code tasks with \`kirograph_context
|
|
85
|
+
- Start code tasks with \`kirograph_context\`; use \`detail: "signatures"\` to reduce tokens when full source isn't needed yet.
|
|
90
86
|
- Find symbols by name with \`kirograph_search\`.
|
|
91
|
-
- Inspect a symbol with \`kirograph_node\`;
|
|
92
|
-
- Trace call flow with
|
|
93
|
-
- Check blast radius before edits with \`kirograph_impact\`.
|
|
94
|
-
- Use \`kirograph_path\` to explain how two symbols connect.
|
|
95
|
-
- Use \`kirograph_type_hierarchy\` for inheritance/interface questions.
|
|
96
|
-
- Use \`kirograph_files\` to inspect indexed file structure.
|
|
97
|
-
- Use \`kirograph_status\` if results seem stale or incomplete.
|
|
98
|
-
- Use \`kirograph_architecture\`, \`kirograph_coupling\`, and \`kirograph_package\` for package/layer questions when architecture analysis is enabled.
|
|
99
|
-
- Use \`kirograph_hotspots\`, \`kirograph_surprising\`, and \`kirograph_diff\` for refactor planning and review.
|
|
87
|
+
- Inspect a symbol with \`kirograph_node\`; use \`detail: "full"\` only when source is needed.
|
|
88
|
+
${trackCallSites ? "- Trace call flow with `kirograph_callers` and `kirograph_callees`.\n" : ""}${enableNavigation ? "- Check blast radius before edits with `kirograph_impact`.\n- Use `kirograph_files` to inspect indexed file structure.\n- Use `kirograph_status` if results seem stale or incomplete.\n" : ""}${enableCodeHealth ? "- Use `kirograph_path` to explain how two symbols connect.\n- Use `kirograph_type_hierarchy` for inheritance/interface questions.\n- Use `kirograph_hotspots`, `kirograph_surprising`, and `kirograph_diff` for refactor planning and review.\n" : ""}${enableArchitecture ? "- Use `kirograph_architecture`, `kirograph_coupling`, and `kirograph_package` for package/layer questions.\n" : ""}
|
|
100
89
|
|
|
101
90
|
## Workflow
|
|
102
91
|
|